Skip to content

Commit 7c7783e

Browse files
committed
add more benchmarks
1 parent 96cefd9 commit 7c7783e

File tree

19 files changed

+463
-7
lines changed

19 files changed

+463
-7
lines changed

deepinv_bench/benchmarks/div2k_gaussian_deblurring/config.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ plot_configs:
55
plot_kind: deepinv_boxplot
66
metric: PSNR
77
scale: log
8-
NIQE:
8+
LPIPS:
99
plot_kind: deepinv_boxplot
10-
metric: NIQE
10+
metric: LPIPS
1111
scale: linear
1212
data_home: "../data"

deepinv_bench/benchmarks/div2k_gaussian_deblurring/datasets/div2k.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ class Dataset(BaseDataset):
1515
parameters = {
1616
"physics": ["Blur"],
1717
"noise": ["GaussianNoise"],
18-
"sigma": [0.1],
18+
"sigma": [0.05],
19+
"sigma_blur": [2],
1920
"img_size": [256],
2021
"debug": [False],
2122
}

deepinv_bench/benchmarks/div2k_gaussian_deblurring/objective.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class Objective(BaseObjective):
1313
"div2k_gaussian_deblurring"
1414
)
1515

16-
requirements = ["deepinv", "datasets", "pip::pyiqa"]
16+
requirements = ["deepinv", "datasets"]
1717

1818
# Minimal version of benchopt required to run this benchmark.
1919
# Bump it up if the benchmark depends on a new feature of benchopt.
@@ -30,8 +30,7 @@ def evaluate_result(self, model):
3030
device = getattr(model, "device", None)
3131
self.physics = self.physics.to(device)
3232

33-
metrics = [dinv.loss.PSNR(), dinv.loss.NIQE(device=device)]
34-
t_start = time.perf_counter()
33+
metrics = [dinv.loss.PSNR(center_crop=-16), dinv.loss.LPIPS(device=device, center_crop=-16)]
3534
results = dinv.test(
3635
model,
3736
DataLoader(self.dataset),
@@ -41,7 +40,6 @@ def evaluate_result(self, model):
4140
metrics=metrics,
4241
compare_no_learning=False,
4342
)
44-
results["runtime"] = time.perf_counter() - t_start
4543

4644
return results
4745

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from benchopt import BaseSolver
2+
3+
import torch
4+
import deepinv as dinv
5+
6+
7+
class Solver(BaseSolver):
8+
name = "DPS"
9+
10+
parameters = {
11+
"denoiser": ["DRUNet", "DiffUNet"],
12+
"zeta": [.45]
13+
}
14+
15+
def set_objective(self, train_dataset=None, physics=None):
16+
device = dinv.utils.get_freer_gpu() if torch.cuda.is_available() else "cpu"
17+
18+
if self.denoiser == "DRUNet":
19+
denoiser = dinv.models.DRUNet(device=device)
20+
elif self.denoiser == "DiffUNet":
21+
denoiser = dinv.models.DiffUNet().to(device)
22+
else:
23+
raise NotImplementedError
24+
25+
self.model = dinv.sampling.DiffPIR(model=denoiser, zeta=self.zeta,
26+
data_fidelity=dinv.optim.L2(), device=device)
27+
self.model.device = device
28+
29+
def run(self, _):
30+
pass
31+
32+
def get_result(self):
33+
return dict(model=self.model)
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
from benchopt import BaseSolver
2+
3+
import torch
4+
import deepinv as dinv
5+
6+
7+
class Solver(BaseSolver):
8+
name = "DPS"
9+
10+
parameters = {
11+
"denoiser": ["DRUNet", "DiffUNet"],
12+
}
13+
14+
def set_objective(self, train_dataset=None, physics=None):
15+
device = dinv.utils.get_freer_gpu() if torch.cuda.is_available() else "cpu"
16+
17+
if self.denoiser == "DRUNet":
18+
denoiser = dinv.models.DRUNet(device=device)
19+
elif self.denoiser == "DiffUNet":
20+
denoiser = dinv.models.DiffUNet().to(device)
21+
else:
22+
raise NotImplementedError
23+
24+
self.model = dinv.sampling.DPS(model=denoiser, device=device)
25+
self.model.device = device
26+
27+
def run(self, _):
28+
pass
29+
30+
def get_result(self):
31+
return dict(model=self.model)
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
plots:
2+
- Deepinv Boxplot
3+
plot_configs:
4+
PSNR:
5+
plot_kind: deepinv_boxplot
6+
metric: PSNR
7+
scale: log
8+
LPIPS:
9+
plot_kind: deepinv_boxplot
10+
metric: LPIPS
11+
scale: linear
12+
data_home: "../data"
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
from benchopt import BaseDataset
2+
from benchopt.config import get_data_path
3+
4+
import deepinv as dinv
5+
from torchvision import transforms
6+
from deepinv.datasets import DIV2K
7+
from deepinv.physics import (
8+
Inpainting,
9+
)
10+
11+
12+
class Dataset(BaseDataset):
13+
name = "DIV2K"
14+
parameters = {
15+
"physics": ["Inpainting"],
16+
"noise": ["ZeroNoise"],
17+
"mask": [.3],
18+
"img_size": [256],
19+
"debug": [False],
20+
}
21+
22+
test_parameters = {"debug": [True]}
23+
24+
def get_data(self):
25+
root = get_data_path("DIV2K")
26+
transform = transforms.Compose(
27+
[
28+
transforms.Resize((self.img_size, self.img_size)),
29+
transforms.ToTensor(),
30+
]
31+
)
32+
dataset = DIV2K(root, mode="val", download=True, transform=transform)
33+
if self.debug:
34+
dataset = dinv.torch.utils.data.Subset(dataset, [0, 1, 2])
35+
36+
return dict(
37+
dataset=dataset,
38+
physics=Inpainting(
39+
mask=.3,
40+
img_size=(3, 256, 256)
41+
),
42+
)
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
from benchopt import BaseObjective
2+
3+
import time
4+
import deepinv as dinv
5+
from torch.utils.data import DataLoader
6+
7+
8+
class Objective(BaseObjective):
9+
name = "DIV2K Inpainting (30% random)"
10+
11+
url = (
12+
"https://github.com/deep-inverse/benchmarks/deepinv_bench/benchmarks/"
13+
"div2k_gaussian_deblurring"
14+
)
15+
16+
requirements = ["deepinv", "datasets"]
17+
18+
# Minimal version of benchopt required to run this benchmark.
19+
# Bump it up if the benchmark depends on a new feature of benchopt.
20+
min_benchopt_version = "1.8"
21+
22+
# Deactivate multiple runs for each solver
23+
sampling_strategy = "run_once"
24+
25+
def set_data(self, dataset, physics):
26+
self.dataset = dataset
27+
self.physics = physics
28+
29+
def evaluate_result(self, model):
30+
device = getattr(model, "device", None)
31+
self.physics = self.physics.to(device)
32+
33+
metrics = [dinv.loss.PSNR(), dinv.loss.LPIPS(device=device)]
34+
results = dinv.test(
35+
model,
36+
DataLoader(self.dataset),
37+
self.physics,
38+
online_measurements=True,
39+
device=device,
40+
metrics=metrics,
41+
compare_no_learning=False,
42+
)
43+
44+
return results
45+
46+
def get_one_result(self):
47+
class DummyModel:
48+
def eval(self):
49+
pass
50+
51+
def __call__(self, x, physics=None):
52+
return physics.A_adjoint(x)
53+
54+
return dict(model=DummyModel())
55+
56+
def get_objective(self):
57+
return dict(
58+
train_dataset=self.dataset,
59+
physics=self.physics,
60+
)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../plots/
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from benchopt import BaseSolver
2+
3+
import torch
4+
import deepinv as dinv
5+
6+
7+
class Solver(BaseSolver):
8+
name = "DPS"
9+
10+
parameters = {
11+
"denoiser": ["DRUNet", "DiffUNet"],
12+
"zeta": [.95]
13+
}
14+
15+
def set_objective(self, train_dataset=None, physics=None):
16+
device = dinv.utils.get_freer_gpu() if torch.cuda.is_available() else "cpu"
17+
18+
if self.denoiser == "DRUNet":
19+
denoiser = dinv.models.DRUNet(device=device)
20+
elif self.denoiser == "DiffUNet":
21+
denoiser = dinv.models.DiffUNet().to(device)
22+
else:
23+
raise NotImplementedError
24+
25+
self.model = dinv.sampling.DiffPIR(model=denoiser, zeta=self.zeta,
26+
data_fidelity=dinv.optim.L2(), device=device)
27+
self.model.device = device
28+
29+
def run(self, _):
30+
pass
31+
32+
def get_result(self):
33+
return dict(model=self.model)

0 commit comments

Comments
 (0)