DeepInverse: A Python package for solving imaging inverse problems with deep learning
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