From 65afbd6521331f70c62ca496a0f56b770ff673b1 Mon Sep 17 00:00:00 2001 From: Melvin-klein Date: Mon, 14 Apr 2025 10:35:26 +0200 Subject: [PATCH 1/7] Add motion blur --- datasets/bsd500_cbsd68.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/datasets/bsd500_cbsd68.py b/datasets/bsd500_cbsd68.py index f320d3c..442dda0 100644 --- a/datasets/bsd500_cbsd68.py +++ b/datasets/bsd500_cbsd68.py @@ -10,14 +10,14 @@ HuggingFaceTorchDataset ) from deepinv.physics import Denoising, GaussianNoise - + from deepinv.physics.generator import MotionBlurGenerator class Dataset(BaseDataset): name = "BSD500_CBSD68" parameters = { - 'task': ['denoising', 'debluring'], + 'task': ['denoising', 'gaussian-debluring', 'motion-debluring'], 'img_size': [256], } @@ -31,7 +31,7 @@ def get_data(self): if self.task == "denoising": noise_level_img = 0.03 physics = Denoising(GaussianNoise(sigma=noise_level_img)) - elif self.task == "debluring": + elif self.task == "gaussian-debluring": filter_torch = dinv.physics.blur.gaussian_blur(sigma=(3, 3)) noise_level_img = 0.03 n_channels = 3 # 3 for color images, 1 for gray-scale images @@ -42,6 +42,18 @@ def get_data(self): noise_model=dinv.physics.GaussianNoise(sigma=noise_level_img), device=device ) + elif self.task == "motion-debluring": + psf_size = 31 + n_channels = 3 + motion_generator = MotionBlurGenerator((psf_size, psf_size), device=device) + + filters = motion_generator.step(batch_size=3) + + physics = dinv.physics.BlurFFT( + img_size=(n_channels, self.img_size, self.img_size), + filter=filters["filter"], + device=device + ) else: raise Exception("Unknown task") From 043a7afdb3cf3241a7a2c575581eed9ac9295903 Mon Sep 17 00:00:00 2001 From: Melvin-klein Date: Fri, 18 Apr 2025 11:18:55 +0200 Subject: [PATCH 2/7] add tasks and datasets from FiRe paper --- benchmark_utils/image_dataset.py | 8 ++- datasets/bsd500_bsd20.py | 110 +++++++++++++++++++++++++++++++ datasets/bsd500_cbsd68.py | 15 +++-- datasets/bsd500_imnet100.py | 110 +++++++++++++++++++++++++++++++ datasets/cbsd68_set3c.py | 27 ++++++-- objective.py | 8 ++- solvers/diffpir.py | 3 +- solvers/dip.py | 5 +- 8 files changed, 272 insertions(+), 14 deletions(-) create mode 100644 datasets/bsd500_bsd20.py create mode 100644 datasets/bsd500_imnet100.py diff --git a/benchmark_utils/image_dataset.py b/benchmark_utils/image_dataset.py index ca259a9..1e9416f 100644 --- a/benchmark_utils/image_dataset.py +++ b/benchmark_utils/image_dataset.py @@ -1,16 +1,22 @@ import os +import random + from torch.utils.data import Dataset from typing import Callable from PIL import Image class ImageDataset(Dataset): - def __init__(self, folder: str, transform: Callable = None) -> None: + def __init__(self, folder: str, transform: Callable = None, num_images=None): self.folder = folder self.transform = transform self.files = [f for f in os.listdir(folder) if f.endswith(( '.png', '.jpg', '.jpeg'))] + if num_images is not None: + self.files.sort() + self.files = random.sample(self.files, num_images) + def __len__(self): return len(self.files) diff --git a/datasets/bsd500_bsd20.py b/datasets/bsd500_bsd20.py new file mode 100644 index 0000000..19ce4bc --- /dev/null +++ b/datasets/bsd500_bsd20.py @@ -0,0 +1,110 @@ +from benchopt import BaseDataset, safe_import_context, config + +with safe_import_context() as import_ctx: + import deepinv as dinv + import torch + from torchvision import transforms + from benchmark_utils.image_dataset import ImageDataset + from deepinv.physics import Downsampling, Denoising, GaussianNoise + from deepinv.physics.generator import MotionBlurGenerator + + +class Dataset(BaseDataset): + + name = "BSD500_BSD20" + + parameters = { + 'task': ['denoising', 'gaussian-debluring', 'motion-debluring', 'SRx4'], + 'img_size': [256], + } + + requirements = ["datasets"] + + def get_data(self): + # TODO: Remove + device = ( + dinv.utils.get_freer_gpu()) if torch.cuda.is_available() else "cpu" + + n_channels = 3 + + if self.task == "denoising": + noise_level_img = 0.03 + physics = Denoising(GaussianNoise(sigma=noise_level_img)) + elif self.task == "gaussian-debluring": + filter_torch = dinv.physics.blur.gaussian_blur(sigma=(3, 3)) + noise_level_img = 0.03 + n_channels = 3 + + physics = dinv.physics.BlurFFT( + img_size=(n_channels, self.img_size, self.img_size), + filter=filter_torch, + noise_model=dinv.physics.GaussianNoise(sigma=noise_level_img), + device=device + ) + elif self.task == "motion-debluring": + psf_size = 31 + n_channels = 3 + motion_generator = MotionBlurGenerator((psf_size, psf_size), device=device) + + filters = motion_generator.step(batch_size=1) + + physics = dinv.physics.BlurFFT( + img_size=(n_channels, self.img_size, self.img_size), + filter=filters["filter"], + device=device + ) + elif self.task == "SRx4": + physics = Downsampling(img_size=(n_channels, self.img_size, self.img_size), + filter="bicubic", + factor=4, + device=device) + else: + raise Exception("Unknown task") + + transform = transforms.Compose([ + transforms.Resize((self.img_size, self.img_size)), + transforms.ToTensor() + ]) + + train_dataset = ImageDataset( + config.get_data_path("BSD500") / "train", + transform=transform + ) + + test_dataset = ImageDataset( + config.get_data_path("BSD500") / "val", + transform=transform, + num_images=20 + ) + + dinv_dataset_path = dinv.datasets.generate_dataset( + train_dataset=train_dataset, + test_dataset=test_dataset, + physics=physics, + save_dir=config.get_data_path( + key="generated_datasets" + ) / "bsd500_bsd20", + dataset_filename=self.task, + device=device + ) + + train_dataset = dinv.datasets.HDF5Dataset( + path=dinv_dataset_path, train=True + ) + test_dataset = dinv.datasets.HDF5Dataset( + path=dinv_dataset_path, train=False + ) + + x, y = train_dataset[0] + dinv.utils.plot([x.unsqueeze(0), y.unsqueeze(0)]) + + x, y = test_dataset[0] + dinv.utils.plot([x.unsqueeze(0), y.unsqueeze(0)]) + + return dict( + train_dataset=train_dataset, + test_dataset=test_dataset, + physics=physics, + dataset_name="BSD68", + task_name=self.task + ) diff --git a/datasets/bsd500_cbsd68.py b/datasets/bsd500_cbsd68.py index 442dda0..521b0f5 100644 --- a/datasets/bsd500_cbsd68.py +++ b/datasets/bsd500_cbsd68.py @@ -9,15 +9,16 @@ from benchmark_utils.hugging_face_torch_dataset import ( HuggingFaceTorchDataset ) - from deepinv.physics import Denoising, GaussianNoise + from deepinv.physics import Denoising, GaussianNoise, Downsampling from deepinv.physics.generator import MotionBlurGenerator + class Dataset(BaseDataset): name = "BSD500_CBSD68" parameters = { - 'task': ['denoising', 'gaussian-debluring', 'motion-debluring'], + 'task': ['denoising', 'gaussian-debluring', 'motion-debluring', 'SRx4'], 'img_size': [256], } @@ -34,7 +35,7 @@ def get_data(self): elif self.task == "gaussian-debluring": filter_torch = dinv.physics.blur.gaussian_blur(sigma=(3, 3)) noise_level_img = 0.03 - n_channels = 3 # 3 for color images, 1 for gray-scale images + n_channels = 3 physics = dinv.physics.BlurFFT( img_size=(n_channels, self.img_size, self.img_size), @@ -47,13 +48,19 @@ def get_data(self): n_channels = 3 motion_generator = MotionBlurGenerator((psf_size, psf_size), device=device) - filters = motion_generator.step(batch_size=3) + filters = motion_generator.step(batch_size=1) physics = dinv.physics.BlurFFT( img_size=(n_channels, self.img_size, self.img_size), filter=filters["filter"], device=device ) + elif self.task == "SRx4": + n_channels = 3 + physics = Downsampling(img_size=(n_channels, self.img_size, self.img_size), + filter="bicubic", + factor=4, + device=device) else: raise Exception("Unknown task") diff --git a/datasets/bsd500_imnet100.py b/datasets/bsd500_imnet100.py new file mode 100644 index 0000000..615c40d --- /dev/null +++ b/datasets/bsd500_imnet100.py @@ -0,0 +1,110 @@ +from benchopt import BaseDataset, safe_import_context, config + +with safe_import_context() as import_ctx: + import deepinv as dinv + import torch + from torchvision import transforms + from benchmark_utils.image_dataset import ImageDataset + from benchmark_utils.hugging_face_torch_dataset import HuggingFaceTorchDataset + from deepinv.physics import Downsampling, Denoising, GaussianNoise + from deepinv.physics.generator import MotionBlurGenerator + from datasets import load_dataset + + +class Dataset(BaseDataset): + + name = "BSD500_imnet100" + + parameters = { + 'task': ['denoising', 'gaussian-debluring', 'motion-debluring', 'SRx4'], + 'img_size': [256], + } + + requirements = ["datasets"] + + def get_data(self): + # TODO: Remove + device = ( + dinv.utils.get_freer_gpu()) if torch.cuda.is_available() else "cpu" + + if self.task == "denoising": + noise_level_img = 0.03 + physics = Denoising(GaussianNoise(sigma=noise_level_img)) + elif self.task == "gaussian-debluring": + filter_torch = dinv.physics.blur.gaussian_blur(sigma=(3, 3)) + noise_level_img = 0.03 + n_channels = 3 + + physics = dinv.physics.BlurFFT( + img_size=(n_channels, self.img_size, self.img_size), + filter=filter_torch, + noise_model=dinv.physics.GaussianNoise(sigma=noise_level_img), + device=device + ) + elif self.task == "motion-debluring": + psf_size = 31 + n_channels = 3 + motion_generator = MotionBlurGenerator((psf_size, psf_size), device=device) + + filters = motion_generator.step(batch_size=1) + + physics = dinv.physics.BlurFFT( + img_size=(n_channels, self.img_size, self.img_size), + filter=filters["filter"], + device=device + ) + elif self.task == "SRx4": + n_channels = 3 + physics = Downsampling(img_size=(n_channels, self.img_size, self.img_size), + filter="bicubic", + factor=4, + device=device) + else: + raise Exception("Unknown task") + + transform = transforms.Compose([ + transforms.Resize((self.img_size, self.img_size)), + transforms.ToTensor() + ]) + + train_dataset = ImageDataset( + config.get_data_path("BSD500") / "train", + transform=transform + ) + + dataset_miniImnet100 = load_dataset("mterris/miniImnet100") + test_dataset = HuggingFaceTorchDataset( + dataset_miniImnet100["validation"], key="image", transform=transform + ) + + dinv_dataset_path = dinv.datasets.generate_dataset( + train_dataset=train_dataset, + test_dataset=test_dataset, + physics=physics, + save_dir=config.get_data_path( + key="generated_datasets" + ) / "bsd500_imnet100", + dataset_filename=self.task, + device=device + ) + + train_dataset = dinv.datasets.HDF5Dataset( + path=dinv_dataset_path, train=True + ) + test_dataset = dinv.datasets.HDF5Dataset( + path=dinv_dataset_path, train=False + ) + + x, y = train_dataset[0] + dinv.utils.plot([x.unsqueeze(0), y.unsqueeze(0)]) + + x, y = test_dataset[0] + dinv.utils.plot([x.unsqueeze(0), y.unsqueeze(0)]) + + return dict( + train_dataset=train_dataset, + test_dataset=test_dataset, + physics=physics, + dataset_name="BSD68", + task_name=self.task + ) diff --git a/datasets/cbsd68_set3c.py b/datasets/cbsd68_set3c.py index 223f8a5..2540593 100644 --- a/datasets/cbsd68_set3c.py +++ b/datasets/cbsd68_set3c.py @@ -8,7 +8,8 @@ from benchmark_utils.hugging_face_torch_dataset import ( HuggingFaceTorchDataset ) - from deepinv.physics import Denoising, GaussianNoise + from deepinv.physics import Denoising, GaussianNoise, Downsampling + from deepinv.physics.generator import MotionBlurGenerator class Dataset(BaseDataset): @@ -16,7 +17,7 @@ class Dataset(BaseDataset): name = "CBSD68_Set3c" parameters = { - 'task': ['denoising', 'debluring'], + 'task': ['denoising', 'gaussian-debluring', 'motion-debluring', 'SRx4'], 'img_size': [256], } @@ -31,10 +32,10 @@ def get_data(self): if self.task == "denoising": noise_level_img = 0.03 physics = Denoising(GaussianNoise(sigma=noise_level_img)) - elif self.task == "debluring": + elif self.task == "gaussian-debluring": filter_torch = dinv.physics.blur.gaussian_blur(sigma=(3, 3)) noise_level_img = 0.03 - n_channels = 3 # 3 for color images, 1 for gray-scale images + n_channels = 3 physics = dinv.physics.BlurFFT( img_size=(n_channels, self.img_size, self.img_size), @@ -42,6 +43,24 @@ def get_data(self): noise_model=dinv.physics.GaussianNoise(sigma=noise_level_img), device=device ) + elif self.task == "motion-debluring": + psf_size = 31 + n_channels = 3 + motion_generator = MotionBlurGenerator((psf_size, psf_size), device=device) + + filters = motion_generator.step(batch_size=1) + + physics = dinv.physics.BlurFFT( + img_size=(n_channels, self.img_size, self.img_size), + filter=filters["filter"], + device=device + ) + elif self.task == "SRx4": + n_channels = 3 + physics = Downsampling(img_size=(n_channels, self.img_size, self.img_size), + filter="bicubic", + factor=4, + device=device) else: raise Exception("Unknown task") diff --git a/objective.py b/objective.py index 6160abc..96d7079 100644 --- a/objective.py +++ b/objective.py @@ -67,6 +67,7 @@ def evaluate_result(self, model, model_name, device): if isinstance(model, dinv.models.DeepImagePrior): psnr = [] ssim = [] + lpips = [] for x, y in test_dataloader: x, y = x.to(device), y.to(device) @@ -75,17 +76,19 @@ def evaluate_result(self, model, model_name, device): ]) psnr.append(dinv.metric.PSNR()(x_hat, x)) ssim.append(dinv.metric.SSIM()(x_hat, x)) + lpips.append(dinv.metric.LPIPS(device=device)(x_hat, x)) psnr = torch.mean(torch.cat(psnr)).item() ssim = torch.mean(torch.cat(ssim)).item() + lpips = torch.mean(torch.cat(lpips)).item() - results = dict(PSNR=psnr, SSIM=ssim) + results = dict(PSNR=psnr, SSIM=ssim, LPIPS=lpips) else: results = dinv.test( model, test_dataloader, self.physics, - metrics=[dinv.metric.PSNR(), dinv.metric.SSIM()], + metrics=[dinv.metric.PSNR(), dinv.metric.SSIM(), dinv.metric.LPIPS(device=device)], device=device ) @@ -94,6 +97,7 @@ def evaluate_result(self, model, model_name, device): return dict( value=results["PSNR"], ssim=results["SSIM"], + lpips=results["LPIPS"] ) def get_one_result(self): diff --git a/solvers/diffpir.py b/solvers/diffpir.py index 95ca08b..a3bcaf2 100644 --- a/solvers/diffpir.py +++ b/solvers/diffpir.py @@ -30,7 +30,8 @@ def run(self, n_iter): self.model = dinv.sampling.DiffPIR( model=denoiser, - data_fidelity=dinv.optim.data_fidelity.L2() + data_fidelity=dinv.optim.data_fidelity.L2(), + device=self.device ) self.model.eval() diff --git a/solvers/dip.py b/solvers/dip.py index c2cb49f..70e6356 100644 --- a/solvers/dip.py +++ b/solvers/dip.py @@ -33,7 +33,7 @@ def objective(trial): iterations = trial.suggest_int('iterations', 50, 500, log=True) # TODO: Remove - iterations = 5 + # iterations = 5 model = self.get_model(lr, iterations) @@ -57,7 +57,8 @@ def objective(trial): best_params = best_trial.params # TODO : replace 5 by best_params['iterations']) - self.model = self.get_model(best_params['lr'], 5) + # self.model = self.get_model(best_params['lr'], 5) + self.model = self.get_model(best_params['lr'], best_params['iterations']) def get_result(self): return dict(model=self.model, model_name="DIP", device=self.device) From 12d2430f224c00d256998688d42f62a7a54581e6 Mon Sep 17 00:00:00 2001 From: Melvin-klein Date: Fri, 18 Apr 2025 11:27:44 +0200 Subject: [PATCH 3/7] Add pyiqa to requirements --- objective.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/objective.py b/objective.py index 96d7079..89c7554 100644 --- a/objective.py +++ b/objective.py @@ -32,7 +32,7 @@ class Objective(BaseObjective): # solvers or datasets should be declared in Dataset or Solver (see # simulated.py and python-gd.py). # Example syntax: requirements = ['numpy', 'pip:jax', 'pytorch:pytorch'] - requirements = ["pytorch", "numpy", "deepinv"] + requirements = ["pytorch", "numpy", "deepinv", "pyiqa"] # Minimal version of benchopt required to run this benchmark. # Bump it up if the benchmark depends on a new feature of benchopt. From c4fc6bf8b76be1ec5947042b3cb5b15e38cb8f3a Mon Sep 17 00:00:00 2001 From: Melvin-klein Date: Tue, 29 Apr 2025 16:17:26 +0200 Subject: [PATCH 4/7] flake8 --- benchmark_utils/image_dataset.py | 5 ++++- datasets/bsd500_bsd20.py | 14 +++++++++++--- datasets/bsd500_cbsd68.py | 14 +++++++++++--- datasets/bsd500_imnet100.py | 22 +++++++++++++++++----- datasets/cbsd68_set3c.py | 14 +++++++++++--- objective.py | 4 +++- solvers/dip.py | 5 ++++- 7 files changed, 61 insertions(+), 17 deletions(-) diff --git a/benchmark_utils/image_dataset.py b/benchmark_utils/image_dataset.py index 1e9416f..524ac74 100644 --- a/benchmark_utils/image_dataset.py +++ b/benchmark_utils/image_dataset.py @@ -7,7 +7,10 @@ class ImageDataset(Dataset): - def __init__(self, folder: str, transform: Callable = None, num_images=None): + def __init__(self, + folder: str, + transform: Callable = None, + num_images=None): self.folder = folder self.transform = transform self.files = [f for f in os.listdir(folder) if f.endswith(( diff --git a/datasets/bsd500_bsd20.py b/datasets/bsd500_bsd20.py index 19ce4bc..26150bf 100644 --- a/datasets/bsd500_bsd20.py +++ b/datasets/bsd500_bsd20.py @@ -14,7 +14,10 @@ class Dataset(BaseDataset): name = "BSD500_BSD20" parameters = { - 'task': ['denoising', 'gaussian-debluring', 'motion-debluring', 'SRx4'], + 'task': ['denoising', + 'gaussian-debluring', + 'motion-debluring', + 'SRx4'], 'img_size': [256], } @@ -44,7 +47,10 @@ def get_data(self): elif self.task == "motion-debluring": psf_size = 31 n_channels = 3 - motion_generator = MotionBlurGenerator((psf_size, psf_size), device=device) + motion_generator = MotionBlurGenerator( + (psf_size, psf_size), + device=device + ) filters = motion_generator.step(batch_size=1) @@ -54,7 +60,9 @@ def get_data(self): device=device ) elif self.task == "SRx4": - physics = Downsampling(img_size=(n_channels, self.img_size, self.img_size), + physics = Downsampling(img_size=(n_channels, + self.img_size, + self.img_size), filter="bicubic", factor=4, device=device) diff --git a/datasets/bsd500_cbsd68.py b/datasets/bsd500_cbsd68.py index 521b0f5..ccfab17 100644 --- a/datasets/bsd500_cbsd68.py +++ b/datasets/bsd500_cbsd68.py @@ -18,7 +18,10 @@ class Dataset(BaseDataset): name = "BSD500_CBSD68" parameters = { - 'task': ['denoising', 'gaussian-debluring', 'motion-debluring', 'SRx4'], + 'task': ['denoising', + 'gaussian-debluring', + 'motion-debluring', + 'SRx4'], 'img_size': [256], } @@ -46,7 +49,10 @@ def get_data(self): elif self.task == "motion-debluring": psf_size = 31 n_channels = 3 - motion_generator = MotionBlurGenerator((psf_size, psf_size), device=device) + motion_generator = MotionBlurGenerator( + (psf_size, psf_size), + device=device + ) filters = motion_generator.step(batch_size=1) @@ -57,7 +63,9 @@ def get_data(self): ) elif self.task == "SRx4": n_channels = 3 - physics = Downsampling(img_size=(n_channels, self.img_size, self.img_size), + physics = Downsampling(img_size=(n_channels, + self.img_size, + self.img_size), filter="bicubic", factor=4, device=device) diff --git a/datasets/bsd500_imnet100.py b/datasets/bsd500_imnet100.py index 615c40d..3b277fc 100644 --- a/datasets/bsd500_imnet100.py +++ b/datasets/bsd500_imnet100.py @@ -5,7 +5,9 @@ import torch from torchvision import transforms from benchmark_utils.image_dataset import ImageDataset - from benchmark_utils.hugging_face_torch_dataset import HuggingFaceTorchDataset + from benchmark_utils.hugging_face_torch_dataset import ( + HuggingFaceTorchDataset + ) from deepinv.physics import Downsampling, Denoising, GaussianNoise from deepinv.physics.generator import MotionBlurGenerator from datasets import load_dataset @@ -16,7 +18,10 @@ class Dataset(BaseDataset): name = "BSD500_imnet100" parameters = { - 'task': ['denoising', 'gaussian-debluring', 'motion-debluring', 'SRx4'], + 'task': ['denoising', + 'gaussian-debluring', + 'motion-debluring', + 'SRx4'], 'img_size': [256], } @@ -44,7 +49,10 @@ def get_data(self): elif self.task == "motion-debluring": psf_size = 31 n_channels = 3 - motion_generator = MotionBlurGenerator((psf_size, psf_size), device=device) + motion_generator = MotionBlurGenerator( + (psf_size, psf_size), + device=device + ) filters = motion_generator.step(batch_size=1) @@ -55,7 +63,9 @@ def get_data(self): ) elif self.task == "SRx4": n_channels = 3 - physics = Downsampling(img_size=(n_channels, self.img_size, self.img_size), + physics = Downsampling(img_size=(n_channels, + self.img_size, + self.img_size), filter="bicubic", factor=4, device=device) @@ -74,7 +84,9 @@ def get_data(self): dataset_miniImnet100 = load_dataset("mterris/miniImnet100") test_dataset = HuggingFaceTorchDataset( - dataset_miniImnet100["validation"], key="image", transform=transform + dataset_miniImnet100["validation"], + key="image", + transform=transform ) dinv_dataset_path = dinv.datasets.generate_dataset( diff --git a/datasets/cbsd68_set3c.py b/datasets/cbsd68_set3c.py index 2540593..325c160 100644 --- a/datasets/cbsd68_set3c.py +++ b/datasets/cbsd68_set3c.py @@ -17,7 +17,10 @@ class Dataset(BaseDataset): name = "CBSD68_Set3c" parameters = { - 'task': ['denoising', 'gaussian-debluring', 'motion-debluring', 'SRx4'], + 'task': ['denoising', + 'gaussian-debluring', + 'motion-debluring', + 'SRx4'], 'img_size': [256], } @@ -46,7 +49,10 @@ def get_data(self): elif self.task == "motion-debluring": psf_size = 31 n_channels = 3 - motion_generator = MotionBlurGenerator((psf_size, psf_size), device=device) + motion_generator = MotionBlurGenerator( + (psf_size, psf_size), + device=device + ) filters = motion_generator.step(batch_size=1) @@ -57,7 +63,9 @@ def get_data(self): ) elif self.task == "SRx4": n_channels = 3 - physics = Downsampling(img_size=(n_channels, self.img_size, self.img_size), + physics = Downsampling(img_size=(n_channels, + self.img_size, + self.img_size), filter="bicubic", factor=4, device=device) diff --git a/objective.py b/objective.py index 89c7554..ff262d6 100644 --- a/objective.py +++ b/objective.py @@ -88,7 +88,9 @@ def evaluate_result(self, model, model_name, device): model, test_dataloader, self.physics, - metrics=[dinv.metric.PSNR(), dinv.metric.SSIM(), dinv.metric.LPIPS(device=device)], + metrics=[dinv.metric.PSNR(), + dinv.metric.SSIM(), + dinv.metric.LPIPS(device=device)], device=device ) diff --git a/solvers/dip.py b/solvers/dip.py index 70e6356..3a41c91 100644 --- a/solvers/dip.py +++ b/solvers/dip.py @@ -58,7 +58,10 @@ def objective(trial): # TODO : replace 5 by best_params['iterations']) # self.model = self.get_model(best_params['lr'], 5) - self.model = self.get_model(best_params['lr'], best_params['iterations']) + self.model = self.get_model( + best_params['lr'], + best_params['iterations'] + ) def get_result(self): return dict(model=self.model, model_name="DIP", device=self.device) From 71d51f49e6c85daf146dde809f661054299fefb5 Mon Sep 17 00:00:00 2001 From: Melvin-klein Date: Tue, 29 Apr 2025 16:53:32 +0200 Subject: [PATCH 5/7] Fix pytorch requirement --- objective.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/objective.py b/objective.py index ff262d6..d4cc5b1 100644 --- a/objective.py +++ b/objective.py @@ -32,7 +32,7 @@ class Objective(BaseObjective): # solvers or datasets should be declared in Dataset or Solver (see # simulated.py and python-gd.py). # Example syntax: requirements = ['numpy', 'pip:jax', 'pytorch:pytorch'] - requirements = ["pytorch", "numpy", "deepinv", "pyiqa"] + requirements = ["pytorch:pytorch", "numpy", "deepinv", "pyiqa"] # Minimal version of benchopt required to run this benchmark. # Bump it up if the benchmark depends on a new feature of benchopt. From 46f3c4fcaa186f2887be59c802f4a00ea5156726 Mon Sep 17 00:00:00 2001 From: Melvin-klein Date: Tue, 29 Apr 2025 17:02:29 +0200 Subject: [PATCH 6/7] Update requirements channel to pip --- objective.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/objective.py b/objective.py index d4cc5b1..1ad9a64 100644 --- a/objective.py +++ b/objective.py @@ -32,7 +32,7 @@ class Objective(BaseObjective): # solvers or datasets should be declared in Dataset or Solver (see # simulated.py and python-gd.py). # Example syntax: requirements = ['numpy', 'pip:jax', 'pytorch:pytorch'] - requirements = ["pytorch:pytorch", "numpy", "deepinv", "pyiqa"] + requirements = ["pytorch:pytorch", "pip:numpy", "pip:deepinv", "pip:pyiqa"] # Minimal version of benchopt required to run this benchmark. # Bump it up if the benchmark depends on a new feature of benchopt. From 7d4b2f7d2c93f035cf09b884611f4b51edfa18c5 Mon Sep 17 00:00:00 2001 From: Melvin-klein Date: Tue, 29 Apr 2025 17:03:12 +0200 Subject: [PATCH 7/7] Update to use pip --- objective.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/objective.py b/objective.py index 1ad9a64..5ed8c3b 100644 --- a/objective.py +++ b/objective.py @@ -32,7 +32,7 @@ class Objective(BaseObjective): # solvers or datasets should be declared in Dataset or Solver (see # simulated.py and python-gd.py). # Example syntax: requirements = ['numpy', 'pip:jax', 'pytorch:pytorch'] - requirements = ["pytorch:pytorch", "pip:numpy", "pip:deepinv", "pip:pyiqa"] + requirements = ["pip:torch", "pip:numpy", "pip:deepinv", "pip:pyiqa"] # Minimal version of benchopt required to run this benchmark. # Bump it up if the benchmark depends on a new feature of benchopt.