deepinv

deepinvBSD-3-Clause活跃维护

基于 PyTorch 的成像逆问题求解库,把去噪、去模糊、MRI 重建等任务统一到深度学习框架下,内置扩散模型和即插即用先验。

DeepInverse: a PyTorch library for solving imaging inverse problems using deep learning

v0.5.0发布于 2026-10-26 14:18 UTC847star +1 / 7 天225fork同步于 2026-11-10 11:55 UTC

怎么上手

由 README 提炼,执行前请确认
pip install deepinv
硬件要求按 README 说明

README 未说明具体显存或 GPU 型号要求;库基于 PyTorch,CI 同时有 CPU 与 GPU 测试流程,说明 CPU 与 GPU 环境均可运行。

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

基于 PyTorch 的成像逆问题深度学习库,用统一模块化框架统一问题与算法

基于 PyTorch 的成像逆问题求解库,把去噪、去模糊、MRI 重建等任务统一到深度学习框架下,内置扩散模型和即插即用先验。

核心能力

  • 提供大量预定义成像算子,覆盖多种成像物理模型
  • 内置多种 SOTA 神经网络与开箱即用的预训练重建模型、去噪器
  • 支持即插即用恢复、优化与展开式架构的完整框架
  • 提供逆问题训练损失与扩散模型采样算法做不确定性量化
  • 提供逆问题数据集构建框架,提升研究可复现性

容易踩的坑

需要 Python 3.10 或更高版本;数据集与去噪器等可选依赖需额外安装 pip install deepinv[dataset,denoisers];使用预训练重建模型和去噪器时需另行下载模型权重。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v0.5.0
  1. v0.5.0Release v0.5.0最新正式版2026-10-26 · 2026-10-26 14:18 UTC

    New Features

    • Add :func:deepinv.utils.load_raw to load a camera raw file as a Pytorch tensor along with a metadata dictionary containing ISP hyper-parameters (#1361 by Raphael Achddou)
    • Add physics deepinv.physics.UltrasoundPlaneWave for ultrasound plane-wave imaging, which can simulate and reconstruct raw RF data. (#1338 by Adrien Besson)
    • Add pretrained SwinIR weights for 2x super-resolution (#1304 by Vicky De Ridder)
    • Add deepinv.sampling.PiGDMDataFidelity, deepinv.sampling.MomentMatchingDataFidelity, deepinv.sampling.ALDDataFidelity, deepinv.sampling.ScoreSDEDataFidelity and deepinv.sampling.ILVRDataFidelity noisy data-fidelity terms for diffusion posterior sampling, with a new example demo_noisy_data_fidelity.py (#1279 by Samuel Hurault)
    • Publish the docs in llms.txt format using the sphinx-llm https://github.com/NVIDIA/sphinx-llm extension (#1362 by Julian Tachella)
    • Add distributed backward propagation and training for samples too large to fit on a single device (#1088 by Benoît Malézieux)
    • Add :func:deepinv.physics.TomographyWithAstra.from_astra_geometry to build the operator directly from pre-created astra geometries (#1102 by Margaret Duff)
    • Add downloadable pretrained weights to deepinv.models.FFDNet (#1357 by Vicky De Ridder)
    • Add :func:deepinv.utils.plot to disable image rescaling with rescale_mode=None. (#1339 by Delphine Doutsas)
    • Add deepinv.datasets.CalgarySliceDataset for raw MRI data from Calgary-Campinas dataset(#1374 by Andrew Wang)
    • Add deepinv.models.DIRECTModel pretrained models for MRI (Joint IC-Net, Recurrent VarNet, vSHARP, XPDNet etc.) (#1374 by Andrew Wang)
    • Add :func:deepinv.utils.load_ismrmrd_raw to load data with ismrmrd library (#1374 by Andrew Wang)
    • Add deepinv.physics.NonCartesianMRI non-Cartesian MRI physics with mri-nufft (#1381 by Andrew Wang)
    • Add deepinv.datasets.DeteCTDataset dataset for real CT sinograms (#1378 by Andrew Wang)
    • Add deepinv.datasets.Set5HR, deepinv.datasets.BSD100HR, deepinv.datasets.McMaster and deepinv.datasets.Kodak24 datasets (#1382 by Vicky De Ridder)
    • Add ptychography acquisition geometries deepinv.physics.PtychographyGeometry, deepinv.physics.FarFieldPtychographyGeometry and deepinv.physics.NearFieldPtychographyGeometry, allowing to convert physical scan positions to pixel shifts (#1379 by Shantanu Kodgirwar)
    • Add deepinv.models.WienerDeconvolution for closed-form Wiener deconvolution (#1315 by Ashish Verma)
    • Add deepinv.optim.RDP prior (#1322 by Thibaut Modrzyk)
    • Add deepinv.optim.BSREM algorithm for emission tomography and new PET demos (#1322 by Thibaut Modrzyk)
    • Add blind Richardson-Lucy algorithm deepinv.optim.BlindRL for blind deconvolution along with a demo (#988 by Thibaut Modrzyk)
    • Add colorblind palette and marker cyclers to :func:deepinv.utils.plotting.config_matplotlib (#1420 by Thibaut Modrzyk)
    • Add deepinv.optim.SmoothedTVPrior prior ([#1326](https://gith
  2. v0.4.2Release v0.4.22026-08-30 · 2026-08-30 08:53 UTC
    查看更新说明

    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 <deepinv.physics.functional.liu_jia_pad> (#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 <deepinv.physics.functional.dst1> 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

    • Deprecat
  3. v0.4.1Release v0.4.12026-06-06 · 2026-06-06 13:51 UTC
    查看更新说明

    New Features

    • Add deepinv.models.DEAL model (#1107 by Hossein Alimohammadi)
    • Add install guidelines for different platforms (pixi, conda, pip, uv) in docs (#1108 by Julian Tachella)
    • Add deepinv.optim.SIRT algorithm for tomographic reconstruction (#985 by Thibaut Modrzyk)
    • Add deepinv.optim.MLEM algorithm for Poisson inverse problems (#1051 by Thibaut Modrzyk)
    • Add the equivariant splitting loss deepinv.loss.EquivariantSplittingLoss with equivariant reconstructors deepinv.models.EquivariantReconstructor and virtual physics deepinv.physics.VirtualLinearPhysics (#881 by Jérémy Scanvic)
    • Add DEEPINV_CACHE_DIR environment variable to set the cache directory for datasets and pretrained weights (#1105 by Minh Hai Nguyen)
    • Add deepinv.models.SRResNet (the generator of SRGAN) for single image super-resolution. (#1164 by Vicky De Ridder)
    • NIQE weight fitting on custom datasets, using deepinv.loss.metric.NIQE.create_weights (#911 by Vicky De Ridder)
    • Add deepinv.loss.metric.GMSD, the Gradient Magnitude Similarity Deviation metric (#1171 by Vicky De Ridder)
    • Add deepinv.models.FFDNet for non-blind Gaussian denoising (#1174 by Vicky De Ridder)
    • Extend :func:deepinv.physics.functional.gaussian_blur to 1D and 3D. Add deepinv.physics.generator.GaussianBlurGenerator (#1152 by Romain Vo)
    • Add a fast re-implementation of BM3D for deepinv.models.BM3D (#1195 by Kaibo Tang)

    Changed

    • Refactor CI to use pixi for compatibility with mixed conda/pip environments (#1108 by Julian Tachella)
    • Add support for arbitrary learning-free reconstructors in the trainer (#881 by Jérémy Scanvic)
    • Make available every mask used at evaluation for splitting models deepinv.loss.SplittingLoss.SplittingModel when eval_n_samples > 1 (#881 by Jérémy Scanvic)
    • Deprecate Loss.name in favor of the class name as done in the trainer (#881 by Jérémy Scanvic)
    • Update references for single pixel demo (#1151 by Laura C. Diaz-Delgado)
    • Add changelog section to the contributing guidelines (#1153 by Thibaut Modrzyk)
    • Unify patching / tiling and unpatching / un-tiling logic in physics and utils, with support for padding and non-overlapping patches. Add :func:deepinv.utils.image_to_patches and :func:deepinv.utils.patches_to_image utility functions, and refactor physics to use them instead of unfold (#1104 by Minh Hai Nguyen)
    • New deepinv.loss.metric.NIQE implementation, this drops PyIQA requirement, values given by NIQE vary between implementations (#911 by Vicky De Ridder)

    Fixed

    • Add warning when options reduce="mean" and reduce="none" are used in deepinv.physics.StackedLinearPhysics. Remove reduction argument from deepinv.distributed.DistributedStackedLinearPhysics (#1071 by Romain Vo)
    • Correct the value of Transform.n_trans in composed transformations (#881 by Jérémy Scanvic)
    • Add support for computing the evaluation loss for splitting losses like `deep
  4. v0.4.0Release v0.4.02026-03-11 · 2026-03-11 10:42 UTC
    查看更新说明

    New Features

    • deepinv.models.WaveletNoiseEstimator and deepinv.models.PatchCovarianceNoiseEstimator for noise level estimation (#1015 by Matthieu Terris)
    • deepinv.physics.Scattering physics for non-linear inverse scattering problems (#1020 by Julian Tachella)
    • deepinv.physics.Physics.compute_norm local operator norm computation for non-linear physics (#1020 by Julian Tachella)
    • deepinv.models.BilateralFilter model (#997 by Thomas Boulanger)
    • distributed computing framework with deepinv.distributed.DistributedContext, deepinv.distributed.DistributedStackedPhysics, deepinv.distributed.DistributedProcessing, deepinv.distributed.DistributedDataFidelity and deepinv.distributed.distribute factory function. Supports multi-GPU/multi-process execution with physics-based and spatial tiling distribution strategies (#790` by Benoît Malézieux)
    • deepinv.loss.metric.CosineSimilarity to the metrics (#944 by Avithal Lautman)
    • New option to initialize 3D networks (DRUNet, DnCNN, DScCP) from pretrained 2D weights (#958 by Romain Vo)
    • Add deepinv.physics.TiledSpaceVaryingBlur physics and deepinv.physics.generator.TiledBlurGenerator (#1033 by Minh Hai Nguyen and Paul Escande)

    Changed

    • (Breaking) Make deepinv.physics.BlurFFT compute a true convolution (now) instead of cross-correlation (before). It is now equivalent to deepinv.physics.Blur with padding="circular" (#825 by Minh Hai Nguyen). For even kernel sizes, the output is now shifted by one pixel to the top-left compared to before.
    • Refactor folder structure of least-squares solvers (#1011 by Julian Tachella)
    • Removed eps parameter from deepinv.optim.linear.conjugate_gradient (#1011 by Julian Tachella)
    • deepinv.loss.metric.LPIPS uses torchmetrics instead of pyiqa. (#1041 by Andrew Wang)
    • Remove pyiqa optional dep (#1041 by Andrew Wang)
    • Deprecated verbose_individual_losses parameter in deepinv.Trainer. Individual losses are now always added to logs when multiple losses are present (#928 by Tiberiu Sabau)
    • Deprecate historical attributes in HDF5Dataset (#764 by Jérémy Scanvic)

    Fixed

    • Implement/extend functional for 2D/3D convolution with spatial and FFT (:func:deepinv.physics.functional.conv3d and deepinv.physics.functional.conv_transpose3d), support all padding modes with equivalent outputs (#825 by Minh Hai Nguyen)
    • Fix ZeroPrior deepinv.optim.ZeroPrior (#1001 by Victor Sechaud)
    • Fix single-disperser CASSI adjointness (#1029 by Andrew Wang)
    • Add deepinv.physics.ComposedPhysics, deepinv.physics.ComposedLinearPhysics to online documentation (#1000 by Romain Vo)
    • Have test ground truths returned in HDF5Dataset when present (#764 by Jérémy Scanvic)
    • Dispose of invalid physics parameters in HDF5Dataset loading (#764 by Jérémy Scanvic)
    • deepinv.utils.plot_ortho3D doesn't perform sqrt on images (#1068 by Andrew Wang)
    • Deprecate self.device in `deepin
  5. v0.3.7Release v0.3.72025-12-15 · 2025-12-15 12:09 UTC
    查看更新说明

    New Features

    • Add deepinv.physics.LaplaceNoise model (#921 by Brayan Monroy)
    • New way to create optimization models. Standard optimization algorithms (and their unfolded versions) can be created using their class name directly instead of using the optim_builder (or unfolded_builder) function. (#592 by Samuel Hurault)
    • New vmin and vmax arguments in :func:deepinv.utils.plot to set custom clipping bounds when using rescale_mode='clip' (#967 by Thibaut Modrzyk)
    • Added :func:deepinv.utils.dirac_comb and :func:deepinv.utils.dirac_comb_like (#946 by Julian Tachella)
    • Added testmon https://www.testmon.org/ and conditional run of sphinx-gallery examples to CI to speed up tests (#966 by Julian Tachella)
    • Add kernel estimation network <deepinv.models.KernelIdentificationNetwork> for blind deconvolution (#971 by Julian Tachella)
    • Add blind inverse problems section to reconstruction user guide (#971 by Julian Tachella)
    • Add deepinv.loss.metric.BlurStrength and deepinv.loss.metric.SharpnessIndex no-reference metrics for blind deblurring (#971 by Julian Tachella)

    Changed

    • Faster deepinv.models.RAM implementation by avoiding certain redundant computations (#946 by Julian Tachella)
    • (Breaking) Change deepinv.physics.TomographyWithAstra physics interface to better match the interface of the PyTorch-based Tomography physics (#747 by Alexander Skorikov)
    • Add support for Poisson2Sparse (#677 by Jérémy Scanvic)
    • (Breaking) Tomography physics uses the true adjoint by default. Tomography and TomographyWithAstra implement the pseudo-inverse as the solution of a least-squares problem, with the option to use fbp. (#930 by Romain Vo)
    • Add a check in deepinv.datasets.FMD to avoid unnecessary downloads (#962 by Jérémy Scanvic)
    • Trainer checkpoint loading verbose (#982 by Andrew Wang)

    Fixed

    • Fixed deepinv.sampling.DPS initialization when measurements have different size than image (#946 by Julian Tachella)
    • Fixed deepinv.physics.Ptychography A_dagger initialization bug (#946 by Julian Tachella)
    • Reduce CI cache size by using uv caching (#943 by Minh Hai Nguyen)
    • generate_dataset received a general refactor, now supports PIL image datasets and doesn't break when validation dataset returns TensorList (#948 by Vicky De Ridder)
    • test_physics.test_tomography correctly implements the pseudo-inverse test (:gh: 930 by Romain Vo)

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    .. image:: https://github.com/deepinv/deepinv/raw/main/docs/source/figures/deepinv_logolarge.png :width: 500px :alt: deepinv logo :align: center

    |pip install| |stars| |discord| |colab| |youtube| |paper|

    |Test Status| |GPU Test Status| |Docs Status| |GPU Docs Status| |Python Version| |Black| |codecov|

    Introduction

    DeepInverse <https://deepinv.org>_ is an open-source PyTorch-based library for solving imaging inverse problems with deep learning. The library is part of the official PyTorch Ecosystem <https://pytorch.landscape2.io/?item=modeling--computer-vision--deepinverse>_. deepinv accelerates deep learning research across imaging domains, enhances research reproducibility via a common modular framework of problems and algorithms, and lowers the entrance bar to new practitioners.

    .. image:: https://github.com/deepinv/deepinv/raw/main/docs/source/figures/deepinv_schematic.png :width: 1000px :alt: deepinv schematic :align: center

    Get started

    Read our documentation at deepinv.org <https://deepinv.org>. Check out our 5 minute quickstart tutorial <https://deepinv.org/auto_examples/basics/demo_quickstart.html>, our comprehensive examples <https://deepinv.org/auto_examples/index.html>, or our User Guide <https://deepinv.org/user_guide.html>.

    deepinv features

    • A large framework of predefined imaging operators <https://deepinv.org/user_guide/physics/physics.html>_
    • Many state-of-the-art deep neural networks <https://deepinv.org/user_guide/reconstruction/introduction.html>, including pretrained out-of-the-box reconstruction models <https://deepinv.org/user_guide/reconstruction/pretrained-models.html> and denoisers <https://deepinv.org/user_guide/reconstruction/denoisers.html>_
    • Comprehensive frameworks for plug-and-play restoration <https://deepinv.org/user_guide/reconstruction/iterative.html>, optimization <https://deepinv.org/user_guide/reconstruction/optimization.html> and unfolded architectures <https://deepinv.org/user_guide/reconstruction/unfolded.html>_
    • Training losses <https://deepinv.org/user_guide/training/loss.html>_ for inverse problems
    • Sampling algorithms and diffusion models <https://deepinv.org/user_guide/reconstruction/sampling.html>_ for uncertainty quantification
    • A framework for building datasets <https://deepinv.org/user_guide/training/datasets.html>_ for inverse problems

    Mailing list

    
    `Join our mailing list <https://forms.gle/TFyT7M2HAWkJYfvQ7>`_ for occasional updates on releases and new features.
    
    Install
    -------
    
    Install the latest stable release of ``deepinv`` with python 3.10 or higher
    (see `docs <https://deepinv.org/#install>`_ installing with `uv`, `pixi` and `conda`):
    
    .. code-block:: bash
    
       pip install deepinv
    
    Or, to also install optional dependencies:
    
    .. code-block:: bash
    
       pip install deepinv[dataset,denoisers]
    
    Since ``deepinv`` is under active development, you can install the latest nightly version using:
    
    .. code-block:: bash
    
       pip install git+https://github.com/deepinv/deepinv.git#egg=deepinv
    
    Or, for updating an existing installation:
    
    .. code-block:: bash
    
       pip install --upgrade --force-reinstall --no-deps git+https://github.com/deepinv/deepinv.git#egg=deepinv
    
    
    Finding help
    ------------
    
    If you have any questions or suggestions, please join the conversation in our
    `Discord server <https://discord.gg/qBqY5jKw3p>`_. The recommended way to get in touch with the developers about any bugs or issues is to
    `open an issue <https://github.com/deepinv/deepinv/issues>`_.
    
    Maintainers
    ~~~~~~~~~~~
    
    Get in touch with our `MAINTAINERS <https://github.com/deepinv/deepinv/blob/main/MAINTAINERS.md>`_.
    
    
    Contributing
    ------------
    
    DeepInverse is a `community-driven project <https://deepinv.org/community.html>`_ and we encourage contributions of all forms.
    We are building a comprehensive library of inverse problems and deep learning,
    and we need your help to get there! 
    
    Interested? `Check out how you can contribute <https://deepinv.org/contributing.html>`_!
    
    Citation
    --------
    If you use DeepInverse in your research, please cite `our paper on JOSS <https://joss.theoj.org/papers/10.21105/joss.08923>`_:
    
    
    .. code-block:: bash
    
        @article{tachella2025deepinverse,
            title = {DeepInverse: A Python package for solving imaging inverse problems with deep learning},
            journal = {Journal of Open Source Software},
            doi = {10.21105/joss.08923},
            url = {https://doi.org/10.21105/joss.08923},
            year = {2025},
            publisher = {The Open Journal},
            volume = {10},
            number = {115},
            pages = {8923},
            author = {Tachella, Julián and Terris, Matthieu and Hurault, Samuel and Wang, Andrew and Davy, Leo and Scanvic, Jérémy and Sechaud, Victor and Vo, Romain and Moreau, Thomas and Davies, Thomas and Chen, Dongdong and Laurent, Nils and Monroy, Brayan and Dong, Jonathan and Hu, Zhiyuan and Nguyen, Minh-Hai and Sarron, Florian and Weiss, Pierre and Escande, Paul and Massias, Mathurin and Modrzyk, Thibaut and Levac, Brett and Liaudat, Tobías I. and Song, Maxime and Hertrich, Johannes and Neumayer, Sebastian and Schramm, Georg},
        }
    
    Star history
    ------------
    
    .. image:: https://api.star-history.com/chart?repos=deepinv/deepinv&type=date&legend=top-left&sealed_token=_m7-ngEzgaicNO-u585LK2zkRyHzwKnkM4SNVz6AhngSG7DpKD9wHcVOSqlwsi2X-cTgbZgVQ1FvK-bznTJ7pyOIY4L0-c83JnpoDxMBCkI27h-UOkx2B1d_j1sPoRQcT8q31PZSR7RTOCs34Bfm3fb0PiUJyNtv5syxkOIJb75nuwzomOtNwVCZwQtG
       :alt: Star History Chart
       :target: https://api.star-history.com/chart?repos=deepinv/deepinv&type=date&legend=top-left&sealed_token=_m7-ngEzgaicNO-u585LK2zkRyHzwKnkM4SNVz6AhngSG7DpKD9wHcVOSqlwsi2X-cTgbZgVQ1FvK-bznTJ7pyOIY4L0-c83JnpoDxMBCkI27h-UOkx2B1d_j1sPoRQcT8q31PZSR7RTOCs34Bfm3fb0PiUJyNtv5syxkOIJb75nuwzomOtNwVCZwQtG
    
    
    .. |Black| image:: https://img.shields.io/badge/code%20style-black-000000.svg
        :target: https://github.com/psf/black
    .. |Test Status| image:: https://github.com/deepinv/deepinv/actions/workflows/test_cpu.yml/badge.svg?branch=main&event=push
       :target: https://github.com/deepinv/deepinv/actions/workflows/test_cpu.yml
    .. |GPU Test Status| image:: https://github.com/deepinv/deepinv/actions/workflows/test_gpu.yml/badge.svg?branch=main&event=push
       :target: https://github.com/deepinv/deepinv/actions/workflows/test_gpu.yml
    .. |Docs Status| image:: https://github.com/deepinv/deepinv/actions/workflows/docs_cpu.yml/badge.svg
       :target: https://github.com/deepinv/deepinv/actions/workflows/docs_cpu.yml
    .. |GPU Docs Status| image:: https://github.com/deepinv/deepinv/actions/workflows/docs_gpu.yml/badge.svg?branch=main&event=push
       :target: https://github.com/deepinv/deepinv/actions/workflows/docs_gpu.yml
    .. |Python Version| image:: https://img.shields.io/badge/python-3.10%2B-blue
       :target: https://www.python.org/downloads/release/python-3100/
    .. |codecov| image:: https://codecov.io/gh/deepinv/deepinv/branch/main/graph/badge.svg?token=77JRvUhQzh
       :target: https://codecov.io/gh/deepinv/deepinv
    .. |pip install| image:: https://img.shields.io/pypi/dm/deepinv.svg?logo=pypi&label=pip%20install&color=fedcba
       :target: https://pypistats.org/packages/deepinv
    .. |discord| image:: https://dcbadge.limes.pink/api/server/qBqY5jKw3p?style=flat
       :target: https://discord.gg/qBqY5jKw3p
    .. |colab| image:: https://colab.research.google.com/assets/colab-badge.svg
       :target: https://colab.research.google.com/github/deepinv/deepinv/blob/gh-pages/auto_examples/_notebooks/basics/demo_quickstart.ipynb
    .. |youtube| image:: https://img.shields.io/badge/YouTube-deepinv-red?logo=youtube
       :target: https://www.youtube.com/@deepinv
    .. |paper| image:: https://joss.theoj.org/papers/10.21105/joss.08923/status.svg
       :target: https://doi.org/10.21105/joss.08923
    .. |stars| image:: https://img.shields.io/github/stars/deepinv/deepinv?style=flat&label=%E2%AD%90%20Star%20us%20on%20GitHub
       :target: https://github.com/deepinv/deepinv