ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

计算成像入门:前向模型、逆问题与AI先验的工程实践

计算成像入门:前向模型、逆问题与AI先验的工程实践 计算成像这个方向我最早接触是从手机多摄和夜景算法开始的。当时一直有个疑问为什么同样一片传感器有的团队能拍出接近单反的夜景有的却连基本细节都糊成一团后来才慢慢意识到差距不在后期调色而在对成像物理过程的理解深度。计算成像的核心就是把光怎么变成电信号这件事用数学写清楚再反过来解出我们真正想要的图像。这一讲我想把入门最关键的三个概念——前向模型、逆问题、AI——用从业者的视角讲透不堆公式重点说清楚它们各自解决什么问题、为什么必须这样设计、实际落地时哪里最容易翻车。1. 计算成像到底在算什么从拍照到解方程的思维转变1.1 传统成像和计算成像的分水岭在哪里传统相机的逻辑很直接镜头把场景聚焦到传感器上传感器把光强转成电压读出电路量化成像素值一张图就出来了。整个过程是物理直接映射图像质量取决于光学设计和传感器工艺软件能做的只是锦上添花。计算成像不一样它承认一个事实从场景到最终图像之间存在一个可以被建模的变换过程而这个变换往往是病态的——信息在传递中丢失了、混叠了、被噪声污染了。一旦你接受这个前提思路就完全变了。你不再问怎么把镜头做得更好而是问我能不能设计一个编码方式让传感器记录的不是最终图像而是某种中间测量值然后通过计算把原始场景恢复出来。这就是计算成像的本质把成像问题转化为一个数学反演问题。单像素相机、编码孔径、光场相机、无透镜成像全都是这个思路的产物。我常跟新人打一个比方传统成像像是用复印机复印文件复印质量取决于机器计算成像是先把文件打散成碎片、编码后存储再根据碎片的统计规律拼回原文。前者简单直接后者灵活但需要更强的数学工具。1.2 为什么必须先把前向模型写出来前向模型forward model是计算成像的地基。它描述的是给定一个真实场景 x经过成像系统的物理过程最终得到测量值 y 的映射关系通常写成 y A(x) n其中 A 是成像算子n 是噪声。这个式子看起来简单但它是整个系统设计的起点。为什么必须先写前向模型因为逆问题的求解完全依赖于它。你不知道 A 长什么样就不知道哪些信息被保留、哪些被丢弃也就无法判断恢复是否可能。举个例子编码孔径成像里A 是一个由编码图案决定的卷积加下采样算子如果你把编码图案设计成随机二值矩阵A 的频域响应就比较平坦逆问题相对好解如果设计成有规律的低频图案高频信息几乎全丢再强的算法也救不回来。实际项目中我见过太多团队跳过前向建模直接上深度学习结果网络在训练集上表现很好换一个场景就崩。原因很简单网络隐式学到的 A 和真实物理过程不一致泛化能力自然差。前向模型不是学术装饰它是约束算法搜索空间的物理先验。1.3 逆问题为什么病态病态体现在哪逆问题就是已知 y 和 A求 x。听起来是解方程但成像里的逆问题几乎都是病态的ill-posed主要体现在三个方面。第一是不适定多个不同的 x 可能产生相同的 y。比如下采样操作把 4K 图像降成 1080p无数张 4K 图都能降成同一张 1080p 图你无法唯一确定原图。第二是不稳定y 里一点点噪声可能导致解出来的 x 面目全非。第三是解不存在由于噪声和模型误差严格满足 y Ax 的 x 可能根本不存在。病态意味着你不能直接求逆必须引入正则化或先验。这就是为什么计算成像和优化理论、统计推断、深度学习深度绑定——它们本质上都在提供什么样的 x 是合理的这个先验信息。稀疏性、低秩、深度图像先验、扩散模型先验都是不同形式的正则化手段。2. 前向模型的构建细节从物理过程到矩阵算子2.1 把光学、传感器、噪声拆成可计算的模块构建前向模型的第一步是分解物理链路。一个典型的成像链路可以拆成场景辐射度 → 光学系统传递 → 传感器采样 → 读出噪声 → 量化。每一段都可以单独建模最后乘起来或级联起来。光学部分通常用点扩散函数PSF描述它告诉你一个理想点光源经过系统后在传感器上变成什么形状。如果系统是空间不变的光学传递就是一个卷积如果空间变化比如大视场镜头边缘畸变严重就得用分块卷积或更复杂的算子。传感器部分涉及采样和积分像素不是理想点它有一定面积会对入射光做空间积分这个积分本身就是一个低通滤波。噪声部分要区分读出噪声、散粒噪声、暗电流它们的统计特性不同散粒噪声服从泊松分布读出噪声通常近似高斯。我一般建议新人先用最简模型跑通假设空间不变、只考虑高斯噪声把 A 写成卷积矩阵。等这条链路验证没问题再逐步加入空间变化、泊松噪声、量化误差。一次性建太复杂的模型调试成本会高到让你怀疑人生。2.2 离散化连续物理模型怎么变成矩阵真实世界是连续的但计算必须离散。离散化的关键是把连续算子 A 用矩阵或可快速计算的算子表示。对于卷积型成像A 可以写成托普利兹矩阵或循环矩阵后者可以用 FFT 加速复杂度从 O(N²) 降到 O(N log N)。对于编码孔径这类系统A 往往是编码图案逐元素相乘 卷积 下采样的组合。这里有个容易踩的坑离散化尺度选择。如果场景的离散网格比传感器像素细太多A 的维度会爆炸如果太粗又会丢失高频细节导致模型和真实物理不匹配。我的经验是离散网格至少要比传感器像素密度高一倍给逆问题留出超分辨的空间同时用算子形式不显式构造矩阵来控制内存。另一个细节是边界条件。卷积时图像边界怎么处理直接影响边缘区域的恢复质量。零填充会引入暗边周期延拓会产生环绕伪影对称延拓相对温和但也不是万能。实际项目里我会根据场景内容选边界策略并在损失函数里对边界区域单独加权。2.3 噪声建模为什么不能一律当高斯处理噪声建模是前向模型里最容易被低估的部分。很多论文为了数学方便直接假设加性高斯噪声但真实传感器在低照度下主要是散粒噪声服从泊松分布它的方差和信号强度相关不是常数。如果把泊松噪声当高斯处理逆问题的求解会出现系统性偏差亮区噪声被高估暗区噪声被低估恢复出来的图像要么暗部噪声爆炸要么亮部过度平滑。正确做法是用泊松-高斯混合模型或者用方差稳定变换如 Anscombe 变换把泊松噪声近似转成高斯再套用成熟的高斯去噪算法。我在一个低照度成像项目里吃过这个亏。最初用高斯假设暗部恢复出来全是彩色噪点换成泊松模型后同样的算法框架暗部信噪比提升了将近一倍。噪声模型选错后面所有优化都是在错误的道路上狂奔。3. 逆问题求解的三条路线优化、迭代、学习3.1 基于正则化的优化方法从 Tikhonov 到全变分最经典的逆问题求解是正则化优化minimize ||y - Ax||² λR(x)第一项保证数据一致性第二项 R(x) 是正则项λ 控制两者权衡。Tikhonov 正则用 L2 范数解有闭式形式计算快但会过度平滑边缘。全变分TV正则用梯度稀疏性能保边但优化是非光滑的需要 ADMM、 primal-dual 等算法。选正则项本质是在选先验。TV 适合分段常数图像比如医学 CT、遥感对于纹理丰富的自然图像TV 会产生塑料感这时候可以考虑高阶 TV、非局部均值或稀疏字典。λ 的选择也很讲究太大则细节丢失太小则噪声放大常用 L 曲线法或交叉验证来定。我个人的经验是优化类方法可解释性强、理论保证好适合对稳定性要求高的场景比如工业检测、医学重建。但它的缺点是求解慢而且正则项的表达能力有限面对复杂先验时力不从心。3.2 迭代重建Plug-and-Play 为什么好用Plug-and-PlayPnP是这几年非常实用的框架。它的核心思想是把优化算法如 ADMM里的去噪子问题替换成一个现成的去噪器这个去噪器可以是 BM3D、NLM也可以是训练好的 CNN。这样一来你既保留了优化框架的收敛性又借用了强大去噪器的先验表达能力。PnP 的好处是模块化前向模型 A 和去噪器解耦换传感器只需改 A换先验只需换去噪器。我在做多模态融合成像时特别依赖这个特性不同模态的前向模型不同但去噪先验可以共享。不过 PnP 也有坑。去噪器的噪声水平参数必须和迭代过程中的等效噪声匹配否则会震荡或不收敛。实践中我会用一个噪声水平调度策略从大到小逐步降低模拟退火的感觉。另外PnP 的收敛性理论保证比纯优化弱需要监控残差和目视检查。3.3 深度展开网络把迭代算法展开成网络深度展开deep unfolding是把迭代算法的每一步映射成网络的一层展开固定次数后端到端训练。比如 ISTA 展开成 LISTAADMM 展开成 ADMM-Net。这样网络结构有物理意义参数量比黑箱网络少泛化性通常更好。展开网络的关键设计是哪些参数可学习、哪些固定。前向算子 A 通常固定它是物理的步长、阈值、正则权重可以学习。训练时用真实测量值 y 和真值 x 配对损失用 MSE 或感知损失。我实测下来展开网络在训练分布内表现极好但分布外泛化仍然依赖训练数据的多样性。如果训练集只有某类场景换场景后性能下降明显。解决办法是加入物理仿真数据做增广或者在损失里加入前向一致性约束强制网络输出经过 A 后仍能匹配 y。4. AI 在计算成像里的真实角色不是替代物理而是补先验4.1 端到端网络能做什么、不能做什么端到端网络直接从测量 y 回归图像 x省去了显式建模和迭代。它在特定任务上确实能打比如固定编码孔径的超分辨、特定显微镜的点扩散函数反卷积。但它有两个硬伤。第一是物理不一致。网络输出的 x 经过真实前向模型 A 后未必能得到接近 y 的测量值这意味着它可能编造了不存在的细节。第二是泛化差。训练时的噪声水平、编码图案、场景分布一变性能就崩。我见过一个端到端去模糊网络训练时用高斯模糊核换成运动模糊后输出全是伪影。所以端到端网络适合场景固定、数据充足的封闭任务不适合开放环境。要用它最好加上前向一致性损失或者用展开结构约束。4.2 扩散模型和 score-based 方法带来的新可能扩散模型作为先验是这两年计算成像里最让人兴奋的方向。它的思路是训练一个去噪网络学习图像分布的 score 函数然后在逆问题求解时用这个 score 作为先验通过迭代采样恢复图像。相比传统正则扩散先验的表达能力强得多能生成纹理自然、细节丰富的结果。实际用法有几种一是把扩散模型当作 PnP 里的去噪器替换 BM3D二是用扩散后验采样DPS直接在测量条件下采样三是用扩散模型做后处理先优化求解再扩散精修。我在一个稀疏视角 CT 重建项目里试过 DPS相比 TV 正则细节恢复明显更好但采样速度慢需要几百步迭代实时性差。扩散模型的坑在于采样步数、噪声调度、条件引导强度都需要调而且它对前向模型的准确性很敏感。如果 A 有偏差扩散模型会自信地生成错误结构。4.3 数据驱动先验和物理模型的融合策略最稳的方案永远是物理模型加数据先验的混合。具体做法用前向模型保证数据一致性用神经网络提供先验两者在优化框架里交替。PnP、展开网络、扩散先验都属于这个范畴。融合的粒度可以不同。粗粒度是 PnP去噪器和前向算子完全解耦中粒度是展开网络每层都有物理结构细粒度是把物理参数也做成可学习比如让网络同时估计 PSF 和图像。细粒度最灵活但最难训练容易陷入局部最优。我的建议是先从 PnP 入手验证前向模型和去噪先验是否匹配稳定后再尝试展开网络提升速度如果对生成质量要求极高且算力充足再上扩散先验。不要一上来就端到端那是在给自己挖坑。5. 实操中那些文档不会告诉你的坑5.1 仿真数据和真实数据的域 gap 怎么缩小做计算成像研究前期几乎都在仿真数据上验证。但仿真和真实之间有一道鸿沟仿真假设的 PSF、噪声、编码图案和真实系统总有偏差。这个 gap 不处理算法上真实设备就废。缩小 gap 的常用手段一是标定真实系统的 PSF 和噪声参数用实测值替换仿真假设二是做域随机化训练时随机扰动 PSF、噪声水平、编码图案让网络见过足够多的变化三是用少量真实配对数据做微调。我在一个无透镜成像项目里先用仿真预训练再用 50 组真实数据微调最终真实场景的 PSNR 比纯仿真训练高了 4 dB 以上。标定这件事值得单独说。PSF 标定通常用点光源或刀口法但真实系统的 PSF 可能随视场变化单点标定不够。我会在视场里选多个位置分别标定然后插值得到空间变化的 PSF。噪声标定则用暗场和多亮度平场拟合出噪声方差和信号强度的关系。5.2 评价指标选错优化方向就错了PSNR 和 SSIM 是最常用的指标但它们和人类视觉感知的相关性有限。计算成像里如果目标是视觉质量PSNR 高不代表好看如果目标是下游任务检测、分割那应该直接用下游指标评估。我踩过的坑一个去噪项目PSNR 优化到很高但下游目标检测的 mAP 反而下降因为过度平滑把一些小目标抹掉了。后来改用感知损失加下游任务损失联合训练才把问题解决。所以指标选择要服务于最终目标。重建任务看 PSNR/SSIM感知任务看 LPIPS下游任务看任务指标。最好多个指标一起看避免被单一指标误导。5.3 算力、内存和实时性的现实约束计算成像的算法往往很重尤其是扩散先验和深度展开。实际部署时算力和内存是硬约束。我见过论文里的算法在服务器上跑几分钟一张图到嵌入式设备上根本跑不动。优化方向一是用算子形式避免显式构造大矩阵用 FFT 或稀疏矩阵加速二是模型量化、剪枝、蒸馏三是减少迭代步数用展开网络替代长迭代四是分块处理把大图切成小块分别恢复再拼接但要注意块间一致性避免拼接缝。实时性要求高的场景比如手机夜景、自动驾驶通常只能用轻量展开网络或 PnP 加快速去噪器。扩散模型目前还很难做到实时除非用蒸馏或一致性模型加速。6. 入门学习路径和第一个可跑通的项目建议6.1 数学和编程基础该补到什么程度入门计算成像数学上需要线性代数矩阵、特征值、SVD、优化理论凸优化、梯度下降、ADMM、概率统计贝叶斯、最大似然、噪声模型。不需要一上来就啃透边做边补效率更高。编程上Python 是绝对主力NumPy 做数值计算SciPy 做优化和信号处理PyTorch 做深度学习和 GPU 加速。建议熟练掌握用 FFT 做卷积、用自动微分求梯度、用 GPU 批量处理。MATLAB 在光学和医学成像社区仍有大量遗产代码看得懂就行新项目我基本都用 Python。6.2 从哪个小项目切入最合适我推荐从图像去模糊或单像素成像仿真切入。去模糊的前向模型简单卷积加噪声逆问题经典资料多容易跑通。单像素成像则能完整体验编码、测量、重建的全流程而且前向模型清晰适合理解计算成像的精髓。具体步骤先写前向模型用已知图像生成仿真测量值然后实现一个 TV 正则的优化求解看恢复效果再换成 PnP 或展开网络对比提升最后加入噪声、模型误差观察鲁棒性。这一套走下来前向模型、逆问题、AI 三条线就都摸到了。6.3 怎么判断自己真的入门了一个简单的标准给你一个新的成像系统你能独立写出它的前向模型判断逆问题是否病态、病态在哪选择合适的正则或先验并解释为什么这么选。能做到这些说明你已经从调包进入设计阶段。再高一级的标准你能设计编码图案或光学系统主动改善逆问题的条件数让后续重建更容易。这就是计算成像从计算辅助成像走向计算驱动成像的标志也是这个领域最有意思的地方。我在实际项目里最深的体会是计算成像的难点从来不在某个算法而在对整个链路的理解。前向模型错了逆问题再花哨也没用先验选错了AI 再强也救不回来。把物理、数学、学习三件事打通才是这个方向真正的门槛。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表