Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
abcf702
FIX conda install
tomMoral Mar 6, 2026
6900523
FIX avoid using CONDA_ENV name
tomMoral Mar 6, 2026
f0e9aae
FIX avoid border effect in clean up
tomMoral Mar 6, 2026
a4f50ff
FIX simplify|separate conda env management
tomMoral Mar 6, 2026
c678063
DBG add logs
tomMoral Mar 6, 2026
8ebe4d4
DBG more debug logs
tomMoral Mar 6, 2026
7c60ce9
DBG working logs
tomMoral Mar 6, 2026
9fed8fa
DBG more debug logs
tomMoral Mar 6, 2026
d6d1178
DBG more debug logs
tomMoral Mar 6, 2026
86b59b9
DBG more debug logs
tomMoral Mar 6, 2026
15f18d0
DBG more debug logs
tomMoral Mar 6, 2026
2df910c
DBG more debug logs
tomMoral Mar 6, 2026
3fb292a
DBG more debug logs
tomMoral Mar 6, 2026
91d94a9
DBG reactivate mamba
tomMoral Mar 6, 2026
d5fe393
DBG move to conda
tomMoral Mar 6, 2026
cd9da8d
DBG fix install command
tomMoral Mar 6, 2026
3746dba
FIX try to use separate HOME dirs
tomMoral Mar 6, 2026
68334e5
FIX try to use separate HOME dirs
tomMoral Mar 6, 2026
d7c80d3
FIX tentative to install benchmark
tomMoral Mar 6, 2026
f14388c
FIX runner isolation
tomMoral Mar 6, 2026
84898a3
DBG more logs
tomMoral Mar 6, 2026
262e7d4
FIX runner isolation
tomMoral Mar 6, 2026
9fb14db
FIX runner isolation
tomMoral Mar 6, 2026
59cb8d0
FIX use clear isolation
tomMoral Mar 6, 2026
911bd20
FIX use clear isolation
tomMoral Mar 6, 2026
4365774
DBG restrict to only one run for now
tomMoral Mar 6, 2026
cc2274b
DBG restrict to only one run for now
tomMoral Mar 6, 2026
c86dd1d
FIX .profile sourcing in remote HOME
tomMoral Mar 6, 2026
77d126b
FIX running on GPU
tomMoral Mar 6, 2026
3340c0c
DBG understand iqia failure
tomMoral Mar 6, 2026
0a10946
ENH ensure install in proper env
tomMoral Mar 6, 2026
9eeec5e
TST caching mechanism
tomMoral Mar 6, 2026
b5d013b
add more denoisers
tachella Apr 6, 2026
11532b0
Merge branch 'main' of https://github.com/deepinv/benchmarks into add…
tachella Apr 6, 2026
ebf5921
RAM doesn't need an artifact removal
tachella Apr 6, 2026
367f983
black
tachella Apr 6, 2026
13fe686
flake8
tachella Apr 6, 2026
1b342c2
rename job + remove epll
tachella Apr 6, 2026
8a6c217
try with all dependencies via pip
tachella Apr 7, 2026
5083c38
lint with black
tachella Apr 7, 2026
0660242
black
tachella Apr 7, 2026
0cd24d9
remove admunet for the moment
tachella Apr 7, 2026
6847535
remove bm3d for the moment
tachella Apr 7, 2026
3177f4e
improve dncnn
tachella Apr 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions .github/scripts/find_benchmarks.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ def get_ref_range(repo: Repo) -> tuple[str, str] | None:
try:
repo.remotes.origin.fetch(
refspec=f"+refs/heads/{base_ref}:"
f"refs/remotes/origin/{base_ref}",
f"refs/remotes/origin/{base_ref}",
depth=1,
no_tags=True,
prune=True,
Expand Down Expand Up @@ -75,20 +75,20 @@ def get_changed_files(repo: Repo, base: str, head: str) -> set[str]:
def filter_changed_dirs(dirs: list[str], changed_files: set[str]) -> list[str]:
"""Filter directories to only include those with changes."""
return [
d for d in dirs
if any(
f.startswith(d + "/") or f.startswith(d + os.sep)
for f in changed_files
)
d
for d in dirs
if any(f.startswith(d + "/") or f.startswith(d + os.sep) for f in changed_files)
]


def main() -> None:

import argparse
parser = argparse.ArgumentParser(description='Find benchmarks in sub-repo')
parser.add_argument('--all', action="store_true",
help='Force to run all benchmarks')

parser = argparse.ArgumentParser(description="Find benchmarks in sub-repo")
parser.add_argument(
"--all", action="store_true", help="Force to run all benchmarks"
)
args = parser.parse_args()

root = Path.cwd()
Expand Down
14 changes: 12 additions & 2 deletions .github/workflows/benchopt_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ jobs:
GITHUB_EVENT_BEFORE: ${{ github.event.before }}
GITHUB_BASE_REF: ${{ github.event.pull_request.base.ref }}

benchopt_dev:
dry-run-benchmarks:
needs: find-benchmarks
strategy:
matrix:
Expand All @@ -47,4 +47,14 @@ jobs:
benchmark_dir: ${{ matrix.benchmark_dir }}

lint:
uses: benchopt/template_benchmark/.github/workflows/lint_benchmarks.yml@main
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install Black
run: pip install black
- name: Run Black check
run: black --check .
4 changes: 1 addition & 3 deletions deepinv_bench/base/runner_solver.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,7 @@ class Solver(BaseSolver):
parameters = {}

def set_objective(self, train_dataset=None, physics=None):
device = (
dinv.utils.get_freer_gpu() if torch.cuda.is_available() else "cpu"
)
device = dinv.utils.get_freer_gpu() if torch.cuda.is_available() else "cpu"
# Make sure the model is on the correct device and has a device
# attribute to we can properly move the test data later.
self.model.to(device)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,10 @@ def get_data(self):
)

# load the dataset
dataset = dinv.datasets.Set14HR(
root, download=True, transform=transform
)
dataset = dinv.datasets.Set14HR(root, download=True, transform=transform)

# define the physics according to the parameters
physics = dinv.physics.Denoising(
noise_model=dinv.physics.GaussianNoise()
)
physics = dinv.physics.Denoising(noise_model=dinv.physics.GaussianNoise())

return dict(
dataset=dataset,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,7 @@ class Solver(BaseSolver):
parameters = {}

def set_objective(self, train_dataset=None, physics=None):
device = (
dinv.utils.get_freer_gpu() if torch.cuda.is_available() else "cpu"
)
device = dinv.utils.get_freer_gpu() if torch.cuda.is_available() else "cpu"

# replace by your model, should take (y, physics) as input
self.model = dinv.models.DnCNN(device=device)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ class Objective(BaseObjective):
"cbsd500_gaussian_denoising"
)

requirements = ["deepinv", "datasets", "pip::pyiqa"]
requirements = ["pip::deepinv[dataset,denoisers,physics]", "datasets", "pip::pyiqa"]

# Minimal version of benchopt required to run this benchmark.
# Bump it up if the benchmark depends on a new feature of benchopt.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,14 @@


class Solver(BaseSolver):
name = "Restormer"
name = "BilateralFilter"

parameters = {}

def set_objective(self, train_dataset=None, physics=None):
device = (
dinv.utils.get_freer_gpu() if torch.cuda.is_available() else "cpu"
)
device = dinv.utils.get_freer_gpu() if torch.cuda.is_available() else "cpu"
self.model = dinv.models.ArtifactRemoval(
dinv.models.Restormer(), device=device
dinv.models.BilateralFilter(), device=device
)
self.model.device = device

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
from benchopt import BaseSolver

import torch
import deepinv as dinv


class Solver(BaseSolver):
name = "DiffUNet"

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.ArtifactRemoval(dinv.models.DiffUNet(), device=device)
self.model.device = device

def run(self, _):
pass

def get_result(self):
return dict(model=self.model)
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
from benchopt import BaseSolver

import torch
import deepinv as dinv


class Solver(BaseSolver):
name = "DnCNN"

parameters = {}

def set_objective(self, train_dataset=None, physics=None):
device = dinv.utils.get_freer_gpu() if torch.cuda.is_available() else "cpu"

class RescaledDenoiser(dinv.models.Denoiser):
def __init__(self, model, *args, **kwargs):
super().__init__(*args, **kwargs)
self.base_model = model

def forward(self, x, sigma):
# DnCNN is trained for sigma=2.0/255, so we rescale the input and output
sigma_ref = 2.0 / 255
factor = sigma_ref / sigma
return self.base_model(x * factor) / factor

rescaled_denoiser = RescaledDenoiser(dinv.models.DnCNN())
self.model = dinv.models.ArtifactRemoval(rescaled_denoiser, device=device)
self.model.device = device

def run(self, _):
pass

def get_result(self):
return dict(model=self.model)
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,8 @@ class Solver(BaseSolver):
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.ArtifactRemoval(
dinv.models.DRUNet(), device=device
)
device = dinv.utils.get_freer_gpu() if torch.cuda.is_available() else "cpu"
self.model = dinv.models.ArtifactRemoval(dinv.models.DRUNet(), device=device)
self.model.device = device

def run(self, _):
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
from benchopt import BaseSolver

import torch
import deepinv as dinv


class Solver(BaseSolver):
name = "DScCP"

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.ArtifactRemoval(dinv.models.DScCP(), device=device)
self.model.device = device

def run(self, _):
pass

def get_result(self):
return dict(model=self.model)
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
from benchopt import BaseSolver

import torch
import deepinv as dinv


class Solver(BaseSolver):
name = "GSDRUNet"

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.ArtifactRemoval(dinv.models.GSDRUNet(), device=device)
self.model.device = device

def run(self, _):
pass

def get_result(self):
return dict(model=self.model)
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
from benchopt import BaseSolver

import torch
import deepinv as dinv


class Solver(BaseSolver):
name = "NCSNpp"

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.ArtifactRemoval(dinv.models.NCSNpp(), device=device)
self.model.device = device

def run(self, _):
pass

def get_result(self):
return dict(model=self.model)
21 changes: 21 additions & 0 deletions deepinv_bench/benchmarks/cbsd500_gaussian_denoising/solvers/ram.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
from benchopt import BaseSolver

import torch
import deepinv as dinv


class Solver(BaseSolver):
name = "RAM"

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.RAM()
self.model.device = device

def run(self, _):
pass

def get_result(self):
return dict(model=self.model)
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
from benchopt import BaseSolver

import torch
import deepinv as dinv


class Solver(BaseSolver):
name = "Restormer"

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.ArtifactRemoval(dinv.models.Restormer(), device=device)
self.model.device = device

def run(self, _):
pass

def get_result(self):
return dict(model=self.model)
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
from benchopt import BaseSolver

import torch
import deepinv as dinv


class Solver(BaseSolver):
name = "SCUNet"

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.ArtifactRemoval(dinv.models.SCUNet(), device=device)
self.model.device = device

def run(self, _):
pass

def get_result(self):
return dict(model=self.model)
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
from benchopt import BaseSolver

import torch
import deepinv as dinv


class Solver(BaseSolver):
name = "SwinIR"

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.ArtifactRemoval(dinv.models.SwinIR(), device=device)
self.model.device = device

def run(self, _):
pass

def get_result(self):
return dict(model=self.model)
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
from benchopt import BaseSolver

import torch
import deepinv as dinv


class Solver(BaseSolver):
name = "TGVDenoiser"

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.ArtifactRemoval(
dinv.models.TGVDenoiser(), device=device
)
self.model.device = device

def run(self, _):
pass

def get_result(self):
return dict(model=self.model)
Loading
Loading