From ba57d665d3e53e9949930903dddbec727f78daed Mon Sep 17 00:00:00 2001 From: nucli-vicky Date: Sun, 23 Aug 2026 21:48:33 +0200 Subject: [PATCH 1/3] add swinir SR --- .../solvers/swinir.py | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 deepinv_bench/benchmarks/div2k_super_resolution_2x/solvers/swinir.py diff --git a/deepinv_bench/benchmarks/div2k_super_resolution_2x/solvers/swinir.py b/deepinv_bench/benchmarks/div2k_super_resolution_2x/solvers/swinir.py new file mode 100644 index 0000000..6c39d73 --- /dev/null +++ b/deepinv_bench/benchmarks/div2k_super_resolution_2x/solvers/swinir.py @@ -0,0 +1,39 @@ +from benchopt import BaseSolver + +import torch +import deepinv as dinv + + +class Solver(BaseSolver): + name = "SwinIR_LightweightSR" + + parameters = {} + + def set_objective(self, train_dataset=None, physics=None): + device = dinv.utils.get_freer_gpu() if torch.cuda.is_available() else "cpu" + + self.model = dinv.models.SwinIR( + img_size=64, + in_chans=3, + embed_dim=60, + depths=(6, 6, 6, 6), + num_heads=(6, 6, 6, 6), + window_size=8, + mlp_ratio=2, + upscale=2, + img_range=1.0, + upsampler="pixelshuffledirect", + resi_connection="1conv", + ) + weights_url = "https://github.com/JingyunLiang/SwinIR/releases/download/v0.0/002_lightweightSR_DIV2K_s64w8_SwinIR-S_x2.pth" + pretrained_weights = dinv.models.utils.load_state_dict_from_url( + weights_url, map_location=lambda storage, loc: storage + ) + self.model.load_state_dict(pretrained_weights["params"]) + self.model.device = device + + def run(self, _): + pass + + def get_result(self): + return dict(model=self.model) From 36f76d7c9947f3ba26f2013e95e5bfb9b673f939 Mon Sep 17 00:00:00 2001 From: nucli-vicky Date: Sun, 23 Aug 2026 22:33:18 +0200 Subject: [PATCH 2/3] also add medium size --- .../solvers/swinir.py | 42 +++++++++++++++---- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/deepinv_bench/benchmarks/div2k_super_resolution_2x/solvers/swinir.py b/deepinv_bench/benchmarks/div2k_super_resolution_2x/solvers/swinir.py index 6c39d73..42939e2 100644 --- a/deepinv_bench/benchmarks/div2k_super_resolution_2x/solvers/swinir.py +++ b/deepinv_bench/benchmarks/div2k_super_resolution_2x/solvers/swinir.py @@ -3,33 +3,59 @@ import torch import deepinv as dinv +WEIGHTS_BASE_URL = "https://github.com/JingyunLiang/SwinIR/releases/download/v0.0/" + +# Architecture and pretrained weights of official SwinIR x2 variants. +VARIANTS = { + "lightweight": dict( + kwargs=dict( + embed_dim=60, + depths=(6, 6, 6, 6), + num_heads=(6, 6, 6, 6), + upsampler="pixelshuffledirect", + ), + weights="002_lightweightSR_DIV2K_s64w8_SwinIR-S_x2.pth", + ), + "medium": dict( + kwargs=dict( + embed_dim=180, + depths=(6, 6, 6, 6, 6, 6), + num_heads=(6, 6, 6, 6, 6, 6), + upsampler="pixelshuffle", + ), + weights="001_classicalSR_DF2K_s64w8_SwinIR-M_x2.pth", + ), +} + class Solver(BaseSolver): - name = "SwinIR_LightweightSR" + name = "SwinIR" - parameters = {} + parameters = { + "variant": ["lightweight", "medium"], + } def set_objective(self, train_dataset=None, physics=None): device = dinv.utils.get_freer_gpu() if torch.cuda.is_available() else "cpu" + variant = VARIANTS[self.variant] self.model = dinv.models.SwinIR( img_size=64, in_chans=3, - embed_dim=60, - depths=(6, 6, 6, 6), - num_heads=(6, 6, 6, 6), window_size=8, mlp_ratio=2, upscale=2, img_range=1.0, - upsampler="pixelshuffledirect", resi_connection="1conv", + pretrained=None, + **variant["kwargs"], ) - weights_url = "https://github.com/JingyunLiang/SwinIR/releases/download/v0.0/002_lightweightSR_DIV2K_s64w8_SwinIR-S_x2.pth" pretrained_weights = dinv.models.utils.load_state_dict_from_url( - weights_url, map_location=lambda storage, loc: storage + WEIGHTS_BASE_URL + variant["weights"], + map_location=lambda storage, loc: storage, ) self.model.load_state_dict(pretrained_weights["params"]) + self.model = self.model.to(device) self.model.device = device def run(self, _): From cb340f5e1bf703f32dd43c8f1933a8a3c03f62bf Mon Sep 17 00:00:00 2001 From: nucli-vicky Date: Mon, 24 Aug 2026 00:04:04 +0200 Subject: [PATCH 3/3] add timm dependency (temp) --- deepinv_bench/benchmarks/div2k_super_resolution_2x/objective.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deepinv_bench/benchmarks/div2k_super_resolution_2x/objective.py b/deepinv_bench/benchmarks/div2k_super_resolution_2x/objective.py index d57e6db..b71ae53 100644 --- a/deepinv_bench/benchmarks/div2k_super_resolution_2x/objective.py +++ b/deepinv_bench/benchmarks/div2k_super_resolution_2x/objective.py @@ -13,7 +13,7 @@ class Objective(BaseObjective): "div2k_super_resolution_2x" ) - requirements = ["deepinv", "datasets"] + requirements = ["deepinv", "datasets", "timm"] # Minimal version of benchopt required to run this benchmark. # Bump it up if the benchmark depends on a new feature of benchopt.