
DeepInverse迭代优化算法完全指南ADMM、HQS、FISTA与PGD一次搞懂【免费下载链接】deepinvDeepInverse: a PyTorch library for solving imaging inverse problems using deep learning项目地址: https://gitcode.com/gh_mirrors/de/deepinvDeepInverseDeepInverse: a PyTorch library for solving imaging inverse problems using deep learning是一个基于 PyTorch 的图像逆问题深度学习库。本指南带你一次搞懂它内置的 4 大迭代优化算法——ADMM、HQS、PGD、FISTA它们如何求解数据保真项 正则项的优化问题、各自适用什么场景以及如何用几行代码跑通 PnPPlug-and-Play图像重建。一、为什么逆问题需要迭代优化医学成像MRI、CT、遥感、显微镜等场景中我们拿到的从来不是原图 x而是它经过物理过程 A 之后的测量 y ≈ A(x)——模糊、失线、加噪、欠采样……绝大多数重建方法都归结为同一个优化问题x̂ argmin_x D(x, y) λ·R(x)D(x, y)数据保真项衡量重建结果与观测数据的一致性R(x)正则/先验项注入图像应该平滑、稀疏或干净的先验知识λ平衡两者的正则化参数由于这个最小化通常没有解析解只能迭代求解——这正是 PGD、FISTA、HQS、ADMM 登场的地方。二、DeepInverse 的优化模块结构所有迭代优化算法都集中在deepinv/optim/模块中结构非常清晰deepinv/optim/optimizers.py—— 面向用户的高层接口包含ADMM、HQS、PGD、FISTA等类如 deepinv/optim/optimizers.py 中的ADMM类、L1596 的PGD、L1737 的FISTAdeepinv/optim/optim_iterators/—— 底层迭代子每个算法的每一步更新公式都在这里例如admm.py、hqs.py、pgd.pydeepinv/optim/data_fidelity.py—— 数据保真项如 L2 保真项定义在deepinv/optim/data_fidelity.pydeepinv/optim/prior.py—— 先验/正则项包括显式正则TV、L1和PnP 去噪器先验统一的抽象是所有算法都继承自BaseOptim你只需要提供数据保真项 先验项 物理模型剩下的交给算法迭代。三、四大迭代优化算法详解3.1 PGD近端梯度下降最易上手的起点Proximal Gradient Descent是四大算法中最简单直观的一个每步只做两件事沿数据保真项的梯度走一小步步长 γ用先验的近端算子或去噪器压一下结果u_k x_k − γ·∇D(x_k, y) x_{k1} prox_{γλR}(u_k)✅ 优点实现简单、每步计算量小⚠️ 缺点收敛速度为 O(1/k)可能需要较多迭代源码位置deepinv/optim/optimizers.py 的PGD类3.2 FISTA给 PGD 装上加速器FISTA在 PGD 的基础上引入动量外推项把收敛速度从 O(1/k) 提升到 O(1/k²)u_k z_k − γ·∇f(z_k) x_{k1} prox_{γλR}(u_k) z_{k1} x_{k1} α_k·(x_{k1} − x_k) # 动量外推✅ 同样的迭代次数下FISTA 通常比 PGD 收敛更快⚠️ 对步长 γ 更敏感需要 γ ≤ 1/Lip(∇f)L 为梯度 Lipschitz 常数源码位置deepinv/optim/optimizers.py 的FISTA类一句话选择先验近端算子容易计算、问题梯度平滑时优先用 FISTA。3.3 HQS半二次分裂PnP 重建的常客Half-Quadratic Splitting把问题拆成两个近端步交替求解不引入对偶变量u_k prox_{γf}(x_k) x_{k1} prox_{σλR}(u_k)✅ 结构比 ADMM 更简洁天然适合把prox换成神经网络去噪器PnP✅ DeepInverse 中 HQS 还支持DEQ深度平衡展开与Anderson 加速等高级选项源码位置deepinv/optim/optimizers.py 的HQS类3.4 ADMM最通用、最强大的老大哥Alternating Direction Method of Multipliers引入一个对偶变量 z 来解耦数据保真项和正则项u_{k1} prox_{γf}(x_k − z_k) x_{k1} prox_{γλR}(u_{k1} z_k) z_{k1} z_k β·(u_{k1} − x_{k1})✅ 对两项都不好处理的复杂问题最鲁棒是稀疏编码、块匹配BM3D 类等经典方法的标准解法⚠️ 多维护变量每步开销略大于 HQS关键参数步长 γ 与松弛参数 β默认均为 1.0源码位置deepinv/optim/optimizers.py 的ADMM类底层迭代在deepinv/optim/optim_iterators/admm.py四、四大算法快速对比与选型指南算法核心思想迭代变量收敛速度最佳适用场景PGD梯度步 近端步仅原始变量 xO(1/k)入门、调试、步数预算紧张FISTAPGD 动量加速x 动量变量 zO(1/k²)光滑数据保真项 简单近端算子HQS双近端步交替仅原始变量 x较快PnP 去噪器先验、轻量重建ADMM增广拉格朗日解耦原始变量 对偶变量最鲁棒复杂正则项、稀疏/非光滑问题选型建议不确定时用ADMM最稳追求简洁和速度且近端算子容易算时用HQS / FISTA刚学习框架时用PGD把流程跑通。五、跑一个 PnP 迭代重建只需几步以经典的缺失值填充 高斯噪声逆问题为例用 PGD PnP 去噪器先验的完整流程是定义物理模型如dinv.physics.Inpainting含 mask 与噪声模型定义数据保真项data_fidelity dinv.optim.data_fidelity.L2()定义 PnP 先验prior dinv.optim.Prior(denoiser...)去噪器可换成 BM3D、DnCNN 等组装算法并调用model dinv.optim.PGD(priorprior, data_fidelitydata_fidelity)然后x_hat model(y, physics)四个算法的调用方式完全一致——只换算法名其他参数不变方便你横向对比效果。更完整的可运行示例可参考examples/plug-and-play/demo_vanilla_PnP.py—— 最基础的 PnP 迭代重建examples/plug-and-play/demo_PnP_custom_optim.py—— 自定义迭代子examples/optimization/demo_TV_minimisation.py—— ADMM 全变差正则六、新手必须知道的 5 个通用参数四个算法共享一套参数体系定义在BaseOptim中见deepinv/optim/optimizers.py参数含义默认值stepsize(γ)步长过大会发散1.0lambda_reg(λ)正则强度权衡细节与噪声1.0g_param/sigma_denoiser先验参数如去噪器噪声水平Nonemax_iter/early_stop最大迭代数 / 提前停止100 / Falsecrit_conv收敛判据residual或costresidual⚡进阶技巧把unfoldTrue打开算法的步长、λ、甚至每层的去噪器都可以反向传播训练——这就是展开网络Unfolded Network让迭代优化算法与深度学习无缝衔接。这是 DeepInverse 区别于传统优化库的最大亮点。七、总结DeepInverse 把逆问题重建统一为argmin D(x,y) λR(x)四大算法PGD / FISTA / HQS / ADMM提供了从入门到鲁棒的完整工具链全部位于deepinv/optim/模块所有算法支持PnP去噪器当先验与RED去噪器定义梯度两种深度学习先验方式并可一键展开unfold进行端到端训练新手路径先用 PGD 跑通examples/plug-and-play/demo_vanilla_PnP.py再切换 ADMM/FISTA 对比效果最后开启 unfold 训练参数掌握这四个算法你就拥有了 DeepInverse 迭代重建的核心钥匙。【免费下载链接】deepinvDeepInverse: a PyTorch library for solving imaging inverse problems using deep learning项目地址: https://gitcode.com/gh_mirrors/de/deepinv创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考