DeepInverse: A Python package for solving imaging inverse problems with deep learning

Read full text
Authors: Tachella, Julián, Terris, Matthieu, Hurault, Samuel, Wang, Andrew, Chen, Dongdong, Nguyen, Minh-Hai, Song, Maxime, Davies, Thomas, Davy, Leo, Dong, Jonathan, Escande, Paul, Hertrich, Johannes
+15 more Hu, Zhiyuan, Liaudat, Tobías I., Laurent, Nils, Levac, Brett, Massias, Mathurin, Moreau, Thomas, Modrzyk, Thibaut, Monroy, Brayan, Neumayer, Sebastian, Scanvic, Jérémy, Sarron, Florian, Sechaud, Victor, Schramm, Georg, Vo, Romain, Weiss, Pierre
Cited by: 0

Abstract

New Features Add deepinv.loss.metric.RecoveryCoefficient Recovery Coefficient (RC) metric to evaluate reconstructed activity relative to ground truth within a mask, with dtype-aware numerical stability and a dedicated loss transformation for training (#1228 by Kushagra Shukla) Add 2D and 3D deepinv.physics.PET (#1099 by Julian Tachella) Add support for multi-channel (chromatic) diffraction PSFs in deepinv.physics.generator.DiffractionBlurGenerator with physically consistent wavelength scaling of the pupil cut-off frequency and Zernike coefficients. (#1242 by Pierre Weiss and Florian Sarron) Add caching to demo/archive downloads (#1234 by Julian Tachella) Add :func:deepinv.utils.load_tiff to load images/ volumes from TIFF files (#1249 by Andrew Wang) Add :func:deepinv.utils.plot_napari to interactively view 2D images/3D vols with napari (#1249 by Andrew Wang) Add support for :func:Liu-Jia padding (#934 by Jérémy Scanvic) Add support for TV-L1 priors deepinv.optim.TVL1Prior (#1236 by Sarra Amiri) Add support for mixed-precision (float16 and bfloat16) to the trainer (#1208 by Vicky De Ridder) Add deepinv.optim.OSEM algorithm for tomographic reconstruction and update PET demos to showcase OSEM (#1255 by Thibaut Modrzyk) Add utilities for subsetted tomography physics :func:deepinv.physics.split_physics and :func:deepinv.physics.split_measurements (#1255 by Thibaut Modrzyk) Add deepinv.loss.metric.NRMSE metric (#1255 by Thibaut Modrzyk) Add espirit_crop parameter to control ESPIRiT multicoil MRI map estimation (#1263 by Andrew Wang) Add deepinv.loss.metric.BRISQUE and deepinv.loss.metric.NIMA no-reference image quality metrics (#1310 by Julian Tachella) Add deepinv.datasets.BrainWebPET (#1286 by Thibaut Modrzyk) Add use_dict_output option to every dataset class, returning a dict {"x", "y", "params"} instead of a tuple; propagate support to all deepinv internals (#1244 by Romain Vo) Changed (Breaking) Drop support for deprecated parameters num_channels in deepinv.physics.generator.PSFGenerator, deepinv.physics.generator.GaussianBlurGenerator, deepinv.physics.generator.MotionBlurGenerator, deepinv.physics.generator.DiffractionBlurGenerator, deepinv.physics.generator.DiffractionBlurGenerator3D (#1242 by Pierre Weiss and Florian Sarron) Extend :func:DST-I to make it n-dimensional and add an option to have it compute the regular DST-I instead of the non-standard sign-flipped orthogonal variant (#934 by Jérémy Scanvic) Extend: deepinv.optim.MLEM now supports deepinv.physics.PET (#1255 by Thibaut Modrzyk) (Breaking) Make deepinv.optim.TVPrior() compute an explicit choice of subgradient instead of using autodiff. (#1271 by Thibaut Modrzyk) Extend: deepinv.models.DEAL now accepts two new arguments: inner_iter and outer_iter. (#1335 by Paul Bernard) Fixed Deprecate the theta attribute from deepinv.physics.Tomography (#1262 by Matthieu Terris) Remove redundant parameters unitary and compute_inverse from deepinv.physics.RandomPhaseRetrieval (#1220 by Zhiyuan Hu) Add deepinv.utils.DownloadError to avoid CI errors when downloading demos/datasets (#1234 by Julian Tachella) Remove unconditional dtype conversion to torch.cfloat in :func:deepinv.optim.phase_retrieval.spectral_methods (#1216 by Zhiyuan Hu) Let quickstart run as default on Apple MPS, and all BM3D and DPIR to be used on MPS (#1263 by Andrew Wang) Fix physics and rng devices incorrectly compared in noise and physics and add better device equal checking (#1263 by Andrew Wang) Deprecate deepinv.models.WaveletDenoiser.thresold_2D and deepinv.models.WaveletDenoiser.thresold_func in favor of :func:deepinv.models.WaveletDenoiser.threshold_2D and :func:deepinv.models.WaveletDenoiser.threshold_func (#1266 by Paul Bernard) Fix kwargs applications in parent constructor calls in the constructors of deepinv.sampling.EDMDiffusionSDE, deepinv.sampling.SongDiffusionSDE and deepinv.sampling.VariancePreservingDiffusion (#1278 by Jérémy Scanvic) Fix :func:deepinv.transform.rotate_via_shear for angles outside :math:[0, 2pi) (#1236 by Sarra Amiri) Fix inversion in deepinv.transform.Reflect (#1236 by Sarra Amiri) (Breaking) Have x_shift represent horizontal shifts and y_shift vertical shifts in deepinv.transform.Shift (#1236 by Sarra Amiri) Force trainer non_blocking_transfers=False on MPS and CPU (#1311 by Andrew Wang) Fix deepinv.physics.PET incorrect device attribution of attenuation and background on update and incorrect handling of batched attenuation (#1331 by Thibaut Modrzyk)

Publication details

Journal / source
Zenodo (CERN European Organization for Nuclear Research)
Publication date
30 August 2026