资讯详情

资讯详情

动态厚散射介质成像:基于深度学习的散斑逆映射重建方法

很多人第一次听到透过散射介质成像这个概念时第一反应通常是这不就是隔着雾拍照回来再做图像增强吗但等真把一个发光目标放进一杯搅拌中的牛奶后面你就会发现事情远没那么简单——你看到的不是模糊而是彻底的细节搅碎像一堆不断翻滚的颗粒状噪点。那团乱糟糟的散斑里其实完整地装着目标信息只是被介质的随机散射加密了。动态厚散射介质成像这个课题研究的正是如何把这个加密—解密的过程交给深度学习模型让它在介质本身还在不断变化的情况下从相机采集到的散斑光强序列中恢复目标的高质量图像。它区别于传统的散斑相关成像和波前整形方法重点解决两个叠加的难题介质足够厚导致多次散射完全淹没规则光路以及介质本身动态导致散斑图案快速去相关。这篇文章我会从物理本质、传统路线为什么失效、深度学习网络怎么设计、数据和实验怎么搞、训练评估有哪些坑这几个维度把我实际接触这个方向的经验和判断完整写出来。适合正在做计算成像、光学神经网络或者医学影像算法的人参考也适合刚入门想找切入点的同学。1. 先把问题拆明白散射、厚度与动态各意味着什么1.1 散射光不是噪声而是被加密的目标信号要理解这个课题第一步是转变一个观念穿过散射介质后形成的散斑图案并不是目标信息被毁掉了而是被一种极其复杂的方式重新编码了。一束光在散射介质里每碰到一个粒子就会改变传播方向这些改变叠加起来最后在探测器上形成干涉图案。这个图案里每一个亮暗点的强度其实都同时携带了目标上多个位置的信息只是映射关系严重非线性化、非局域化。举个例子一个简单的物体发光假设只有一个点光源。这个点光源经过厚散射介质后会在探测器上形成一个散斑图案。如果光源稍微移动散斑图案会产生某种相关性的变化。多个点光源同时存在时散斑图案就是这多个点对应散斑的相干叠加。所以严格来说只要探测器能够记录下完整的光场信息包括相位理论上信息并没有丢失。问题是现实中普通相机只能记录光强相位信息在探测的一瞬间就丢掉了。所以深度学习在这里的任务本质上是从强度散斑这种严重缺失信息、又叠加了复杂降质的观测中去估计原始目标的分布。它是一个典型的病态逆问题。1.2 厚散射和薄散射的边界到底在哪很多人对厚的理解是物理尺寸大比如10厘米厚的泡沫、半米厚的烟雾。但在散射光学里判断薄厚看的不是几何厚度而是光学厚度。这里有几个关键参数。散射平均自由程l_s表示光子在两次散射之间走过的平均距离传输平均自由程l_t则把散射的各向异性考虑进去l_t l_s / (1 - g)其中g是散射相函数的各向异性因子取值范围在 -1 到 1 之间对于典型的生物组织和浑浊液体g一般在 0.8 到 0.98 附近。光学厚度OD定义为介质几何厚度L与传输平均自由程的比值OD L / l_t。当OD接近 1 时基本上单次散射事件占主导还有一部分弹道光能直接穿透过来常规的图像复原算法还有操作空间。当OD大于 10 甚至更高时光子平均经历了十几次到几十次散射弹道光成分几乎衰减为零这时已经进入了厚散射的范畴。在厚散射条件下任何基于弹道光或者单次散射假设的传统成像手段都失去基础。我做实验时习惯用浓度梯度大致估一下状态在固定光路长度下如果收集到的散斑图案开始出现明显的颗粒细化单个散斑尺寸变得比像素还小且整体光强变得非常微弱基本可以判断已经进入厚散射主导区。1.3 动态散射的难点拆解散斑去相关在跟你的采集速度赛跑动态这个属性是让问题难度再上一个台阶的核心原因。散射介质的微观结构随时间变化比如液体里的粒子在布朗运动、湍流在演化、生物组织在微动那么目标的散斑图案也在不断变化。描述变化速度的常用指标是散斑去相关时间τ_c——真正意义上的散斑记忆持续时间。在动态厚散射场景中τ_c可能短到几十毫秒甚至几毫秒。比如我试过用磁力搅拌器搅动浑浊液体搅拌转速到一定程度后高速相机设定在 1000 帧每秒相邻两帧的散斑图案相关系数仍然只有很小的值。这意味着什么意味着你没有任何时间窗口去做长时间曝光累积也无法逐点扫描或者多次测量取平均。每一次曝光你看到的只是整个演化过程中的一瞬。动态和厚散射叠加在一起构成了这个课题最核心的矛盾信号本身已经弱到几乎没有弹道光可用了同时你又不能靠多拍几帧累积来提升信噪比因为每一帧散斑对应的散射状态都在变。传统的线性成像方法在这两个条件下几乎是集体失效的这也就解释了为什么这几年有大量工作开始转向深度学习。2. 为什么传统光路级的方案在厚动态场景集体失灵2.1 波前整形与反馈优化迭代速度追不上变化速度波前整形是散射成像领域非常有代表性的一类方法。思路很直接既然散射介质会打乱波前那我们在入射端放一个空间光调制器SLM通过不断调整每个像素的相位让经过散射介质后的光在目标位置重新聚焦。实际操作中通常用迭代优化算法比如遗传算法或连续序列算法根据探测器上的反馈信号来逐步修正SLM的相位图。这个方案在静态厚介质中能取得不错的效果因为它不依赖任何介质模型只看反馈信号。可一旦介质动态起来问题就暴露了算法一轮迭代需要几十次甚至几百次测量每测量一次都需要固定散射状态而动态介质的散斑去相关时间远小于整个迭代周期。等算法还没收敛完介质的散射状态已经换了无数轮之前优化的相位图完全作废。我曾经在一个动态毛玻璃系统上试过简单的反馈式波前整形静止状态时大约 40 轮迭代就能把信号聚焦强度提升一个量级但把毛玻璃换成旋转状态后无论怎么调迭代参数聚焦强度始终没有实质提升。本质原因就是你永远在追逐一个不断移动的目标而且追赶速度比目标移动速度慢好几个数量级。2.2 传输矩阵测量方案静态的万能钥匙在动态下直接失效传输矩阵方法把散射介质看作一个线性系统用传输矩阵T描述入射光场和出射光场的映射关系E_out T · E_in。如果能够事先测出T那么理论上就可以通过矩阵求逆来恢复目标。测量传输矩阵通常用四步相移法或Hadamard基扫描法逐一对输入模式进行调制并记录输出。这套流程在静态介质中相当可靠问题出在两个层面。第一厚散射介质的传输矩阵维度非常大测量时间很长。第二动态介质本身的T是在不断变化的你花了几分钟甚至几十分钟测出来的矩阵在测量完成的那一刻就已经过期了。这就像是拿到一张已经失效的旧地图去导航最后的恢复结果基本是一团乱码。而且还有一个物理层面更麻烦的问题在厚散射条件下传输矩阵的态密度极高很小的介质扰动就会导致矩阵元素发生显著变化。换句话说动态引起的矩阵扰动幅度被厚散射本身放大了这让任何基于固定线性映射的恢复算法在动态厚介质中都变得非常脆弱。2.3 散斑相关与记忆效应方法依赖的记忆本身在缩短还有一类经典方法走的是散斑相关的路线。基于光学记忆效应当目标在某个角度范围内转动或平移时散斑图案会随之产生规律性的变化因此可以通过散斑自相关或者散斑扫描来恢复目标。这方法在薄散射甚至中等厚度的静态介质中表现不错一度被广泛使用。但它有两个天然限制。第一记忆效应有一个范围超出这个范围散斑就完全不相关了这个范围会随着介质厚度增加急剧缩小。到了厚散射阶段记忆角往往小到只有微弧度级别意味着可成像的视场非常有限。第二动态介质条件下散斑图案本身的演化会让参考散斑失效。用静态散斑去自相关动态散斑得到的结果几乎不可用。所以我在评估传统方法时形成了一个判断波前整形、传输矩阵、记忆效应这三条经典路线本质上都需要某种形式的时间稳定性作为前提动态厚散射恰好把这种稳定性破坏了。这个背景下深度学习方案就成了绕开时间稳定性约束的新路径——它不需要实时反馈不需要反复测量完整矩阵而是直接从数据里学习散斑图到目标图像的逆映射。传统方案在静态薄介质中各有优势但在动态厚介质中的表现差距非常明显可以用一张表直观对比方法类别核心依赖条件静态薄介质表现动态厚介质核心障碍波前整形反馈迭代速度效果好迭代周期远大于去相关时间传输矩阵系统线性时不变高精度重建矩阵测量时间长动态下失效记忆效应相关法散斑相关性稳定中等厚度可用记忆角变小参考散斑失稳深度学习逆映射训练数据分布薄厚均可用需要合理设计输入时序与泛化策略3. 深度学习方案的核心架构逻辑不是简单端到端3.1 先把问题化成网络能学的形式设计深度学习方案之前要先把成像过程写成数学形式。设目标图像为x散射介质状态为s(t)探测器上的散斑图为y(t)那么正向过程可以抽象成y(t) F(x, s(t))其中F是一个复杂的、与时间相关的非线性映射包含光的散射、衍射、干涉和强度探测。深度学习要做的是学习一个逆映射G使得G(y(t)) ≈ x。这里面有一个很关键的设计分歧G的输入到底是单张散斑图还是一个时间段内的连续多帧散斑图序列我个人的实践结论是在动态厚散射场景中单帧输入是一个陷阱。单帧散斑包含的信息量在厚散射条件下极度衰减网络很容易过拟合到训练集里特定的散射状态测试时稍微换一个动态状态就崩溃。而多帧时序输入让网络有机会从散斑的时间演化中提取额外的约束信息——不同时刻的散斑是由同一个目标经过不同散射状态产生的这些观测之间共享着目标不变这个隐含条件。3.2 从U-Net到混合Transformer的结构取舍在具体网络结构上U-Net 仍然是一个非常值得作为基线选择的架构。它的编码—解码结构天然适合像素级重建任务跳跃连接能把浅层的高频细节直接传递到解码端这对恢复目标的边缘纹理非常关键。但纯U-Net在动态厚散射场景中有明显短板它缺乏显式的时间建模能力。所以更常用的做法是在U-Net基础上扩展时间维度引入3D卷积、ConvLSTM或者更现代的Transformer时间注意力模块。我自己在某个模拟项目X实验中发现用连续5帧散斑作为输入前两层用3D卷积提取局部时序特征后半部分换成时间多头注意力比直接用U-Net逐帧处理而后在特征层拼接PSNR高出约2到3个dB。生成式模型也是一个值得关注的方向。GAN和扩散模型在处理病态逆问题时优势明显因为纯回归模型拟合的是条件均值生成结果容易走向平均化和模糊化——这在散射成像里尤其致命因为目标的高频细节是整个重建最有价值的部分而回归模型往往把它们平滑掉了。加入对抗损失或扩散去噪过程能约束网络产生更锐利、更真实的纹理结构。3.3 物理约束怎么嵌入网络从纯数据驱动走向物理自适应纯粹让网络从数据里学逆映射很容易遇到一个实际问题换一种散射介质、换一个浓度、换一个动态速度模型就崩了。要解决这个问题不能只靠堆数据更有效的思路是把物理模型嵌入网络结构里。一个比较成熟的做法是设计物理信息前端网络不直接输出目标图像而是先预测散射介质的关键物理参数比如光学厚度、散射粒子浓度、动态速度等级然后这些参数被送入一个可微分的散射模型层由该层生成预期的散斑特征再与真实散斑特征做比较。这样一来网络学习的不再是特定散射状态下的像素映射而是从散斑到物理状态再到目标的梯度路径。我试过这个方案之后的理解是物理约束带来的最大收益是可控的泛化性。纯数据驱动模型对分布外数据基本没有防御能力但物理约束模型即使遇到训练中没见过的新散射状态网络至少会给出一个物理上合理的重建结果而不是完全随机的噪声。还有一个更轻量的技巧叫域随机化训练时不要用单一散射参数而是同时混入多种浓度、多种流速、多种介质类型的模拟数据让网络不得不学习散射背后的公共结构。实际效果相当明显。换新的实验介质时用域随机化训练的模型比单一条件训练的模型扛揍得多。4. 数据从哪来仿真模拟与实验采集的完整链路4.1 动态厚散射的仿真蒙特卡洛还是相位屏训练数据是第一大难关。动态厚散射的配对数据散斑图 真值目标图像在真实实验中极其难采所以绝大多数研究都是从仿真数据起步的。仿真路径主要有两类。蒙特卡洛光子传输是物理精度最高的一类方法——大量光子逐个在介质中随机游走在每个散射事件处根据相函数随机改变传播方向。它能精确模拟多次散射、吸收、各向异性缺点是计算量巨大。动态场景需要每一帧重新模拟生成一个几千帧的数据集可能需要数小时甚至数天。所以纯蒙特卡洛更适合做少量验证集不适合大规模生成训练数据。工程上更高效的选择是相位屏模型或者基于散射矩阵的简化模拟。相位屏的做法是把介质沿传播方向切分成多层每层用一个随机相位屏表示散射对波前的扰动层与层之间用衍射传播连接。这样模拟动态时只需要让每个相位屏随时间缓慢更新比如叠加布朗运动的随机相位增量就能高效生成时序散斑序列。我常用的一个配置是模拟一个散射层厚度约10倍传输平均自由程的介质粒子直径在100nm到1μm之间浓度调节到光学厚度OD在10到20之间。目标图像用自然图像数据集经过光学系统模型生成散斑后再加入不同类型和强度的噪声。这样生成的数据能覆盖相当广的散射状态空间。4.2 真实光路怎么搭建动态厚散射平台的关键细节从仿真走到实验光路搭建有几个容易踩的坑。一个典型平台布局是目标透射式比如用显示器或胶片图案→ 散射介质池 → 成像物镜 → 高速相机。散射介质可以是水与牛奶或二氧化钛悬浊液的混合物动态效果用磁力搅拌器产生。这里最重要的细节是采集同步。如果要拿实验数据做监督训练就必须保证每个散斑帧都有对应的目标真值。最常用的做法是利用一个分束器分出一路参考光路在同一次采集中记录目标的直接图像代价是光路复杂度和系统光效率。另一个更省事的思路是使用时间编码目标——目标本身是周期翻动的已知图案比如液晶显示器轮流显示几张图像同时用高速相机同步采集散斑然后靠时间戳对齐散斑帧和对应的显示器图案。动态速度的控制同样需要量化。我建议用搅拌转速或者蠕动泵流速作为显式标签记录到每个数据样本里。训练时这些标签可以当成额外的条件输入测试时就可以按速度区间评估模型的稳定性。散斑去相关时间方面建议做一个简单测量连续采集几千帧散斑计算相邻帧的相关系数并绘制下降曲线从中提取τ_c。这个值会告诉你当前的动态等级是判断实验配置是否合理的基础数据。4.3 数据时序增强让模型在没有见过的新动态状态上也能用有了配对数据之后数据的时序形态也值得做文章。我试过一种特别有效的增强方式在时间维度上做随机动态重采样。具体来说原始数据是以某个固定帧率采集的训练时随机在不同帧间距上抽取子序列再对子序列随机进行时间方向的翻转和轻微的帧间抖动。这样模型相当于看到了多种不同速度档位的散斑演化过程提高了对动态速度变化的适应性。另外一个技巧是混合域图像。如果真实实验数据有限可以先用仿真数据训练一个预训练模型然后在真实数据上做微调。微调时注意先用低学习率冻结编码器主体只更新尾部几层避免真实数据量少导致的灾难性遗忘。这个流程在迁移实验中稳定有效。5. 训练与评估中容易踩的坑和实战解法5.1 Loss函数怎么设计才不把图像训糊Loss函数的选择直接决定重建图像的质感。最基础的做法是用MSE或L1损失它们收敛快、实现简单但单独使用会产生明显的模糊效应。原因是L1或L2损失对应的是像素空间的平均距离最小化网络倾向于输出所有可能重建结果的平均而平均值天然是平滑模糊的。我实践下来比较可靠的做法是组合损失或者叫多目标损失函数将多种损失项加权求和L_total λ1 · L1 λ2 · SSIM λ3 · L_perceptual λ4 · L_gradient其中L_perceptual是感知损失把重建图和真值图分别送进预训练的VGG网络在特征空间计算距离L_gradient是梯度域差异损失用来约束边缘锐度。一个比较宽松的起点权重是λ11.0、λ21.0、λ30.1、λ40.05但具体还需要根据数据集规模和散射强度手动调。有个值得注意的现象在动态厚散射数据集上SSIM损失权重调太高反而会让纹理细节丢失——因为SSIM对局部结构变化敏感网络为了让每个局部窗口的统计特性接近真值会倾向于抹掉高频特征。我一般把SSIM的权重控制在不要成为主导项的范围内。5.2 评估指标不要只盯PSNRPSNR是图像重建领域最常用的指标但在散射成像这个场景下它经常会骗人。PSNR基于MSE计算对像素级误差敏感却完全不在意视觉效果。一个重建图如果只是把散斑噪声抹平了PSNR可能不低但人眼看着就是糊成一片毫无可用信息。更合理的评估体系应该包含几层结构相似性SSIM负责评估亮度、对比度和结构的相似程度感知指标LPIPS贴近人眼感受再配合USAF分辨率测试卡定量评估能分辨的最高空间频率最后务必做盲测——把重建结果拿给其他同学看让他们判断目标的轮廓、纹理是否真实可辨。盲测这一点我在很多项目里发现是最接近实际应用的判定标准因为你在真实的医学或工业场景中使用模型时最终评判者一定是人眼或者下游算法不是某个数学指标。5.3 泛化性是最深的一个坑换介质、换浓度、换速度就崩这是整个课题最核心也最容易被忽视的问题。我做过一个实验用单一浓度的二氧化钛悬浊液采集数据集固定转速训练U-Net做重建。同分布测试集上PSNR能到31dB但把浓度提高20%转速提高30%之后PSNR直接掉到23dB重建结果出现明显的伪影和结构性扭曲。这说明模型学到的是当前散射状态特有的映射而不是散射逆问题的解。对抗这个问题的方向有几个。第一是在训练数据里显式做域随机化把浓度、温度、流速、粒子种类都作为可变量混入训练集。第二是条件化网络把散射介质的物理参数作为额外输入比如一个光厚度特征编码让网络学会根据当前状态自适应调整映射——这种方法对参数的覆盖范围非常敏感训练时必须尽可能覆盖物理上合理的参数空间。第三是引入无监督域适应环节用真实场景中无标签的散斑数据做一致性约束或对抗判别减小模拟和真实的域差距。我个人的建议是做动态厚散射成像项目时从一开始就建立一套多状态评估协议至少准备低速、中速、高速三档动态状态以及一种训练阶段完全没有见过的散射介质类型。每轮模型迭代都在这些状态下测试而不是只看单一测试集的分数。放弃了这一步很多模型在论文指标上光鲜亮丽一到实际场景就原形毕露。6. 从散射成像到实际场景这个技术能改变什么6.1 生物医学透过活体组织深层成像生物组织是典型的动态厚散射介质——细胞在移动、血流在脉动、组织界面在微振动。传统的显微成像是把组织切成薄片来做因为只有薄片才允许光基本沿直线穿透。如果能实现动态厚散射条件下的成像就能在活体状态下做深组织观测比如脑皮层的血流动态监测、皮肤深层结构的无创检查、甚至透过浑浊体液做内窥镜成像。这类应用对成像速度要求极高同时也对重建的可靠性要求苛刻——医学影像里一个重建伪影可能是致命误差。所以我不太建议任何团队一开始就直接瞄准临床场景更务实的路径是先做体外组织仿体实验验证模型在散射参数范围内的可靠性再逐步推进。6.2 工业与环境感知浑浊水、烟雾与湍流工业视觉里有大量视线被阻的难题水下机器人在近海浑浊水域作业、消防机器人在浓烟中搜救、工业管道内壁在油雾环境下检测。这些场景的共同点是散射介质动态变化且光学厚度大。深度学习反演方案可以把短时间内的多帧散斑观测映射成清晰的目标视图帮助机器人实时识别障碍物或目标物体。我接触过的一个水下成像模拟项目核心目标是恢复浑浊水中的目标物轮廓。训练数据用一台高速相机对着浊度可控的水槽拍摄真值通过清水条件下同步采集获得。模型在浊度检测范围和动态波动范围内表现不错验证了这类技术在实际硬件上落地的可行性。6.3 从透过成像到在散射中理解任务迁移的扩展空间这个方向还有一个更深的延展不一定要把图像完美重建出来而是直接从散斑中识别目标语义。比如做安全监测时只要判断烟雾后面的人是否在挥手或判断浑浊液体中某个物体是不是需要的零件根本不需要完整重建整个画面。把分类、检测等任务直接接在散斑特征上网络可以学出一套跳过重建的语义映射计算开销更小鲁棒性往往更高。这种任务驱动的散射感知思路可能是比纯重建更务实的落地方向因为它避开了重建固有的病态性。散斑里虽然缺少部分高频信息但目标的宏观类别信息和结构信息通常还是保留着的深度学习利用这部分信息做识别是更划算的选择。应用场景介质类型动态来源核心价值活体深组织成像生物组织血流、微动无损深层观测水下机器人感知海水、悬浮颗粒湍流、粒子迁移浑浊水域作业能力消防与救援烟雾、粉尘气流、燃烧浓烟环境目标识别工业管道检测油雾、蒸汽流速、温度变化不停机无损检测光学加密与通信随机介质环境扰动鲁棒信息解调7. 个人实操体会如果重做这个项目我会怎么安排说了这么多最后分享几条我做动态厚散射成像项目积累下来的直接经验第一条先把仿真和评估协议做好再碰光路。动态厚散射数据的采集成本很高如果没有一套成熟的仿真数据生成器和多状态评估标准实验阶段很容易陷入数据采了一堆但不知道拿来干什么的困境。我倾向于用两到三周时间把仿真管线做扎实同步设计评估协议确保每一次光路改动都能用同一套指标衡量效果。第二条动态序列的时序对齐是隐藏的最大工程问题。很多项目前期因为散斑帧和真值帧之间有时序偏移训练出来的模型性能虚高或虚低但排查起来极其消耗时间。我的解法是在数据采集系统里同时记录一个同步脉冲信号每一帧都打上时间戳训练前先用互相关对齐检查一遍。这个习惯帮我在后来省了大量调试时间。第三条多看重建结果少看指标。指标只能告诉你数字变化看重建图才能理解模型真正学到了什么。尤其在散射成像这种病态逆问题上网络经常用看起来合理的纹理来掩盖物理上的错误这是指标完全反映不出来的。每次训练结束后我至少会随机抽 20 组测试样本逐张对照散斑输入、真值和重建输出从视觉上判断哪些结构被忽修复了、哪些被伪造了。还有一个一直沿用的技巧在动态序列训练中给输入帧之间加轻微的时间抖动——比如随机让帧间距变化一帧或者随机丢弃一两帧。这个数据增强策略虽然简单却显著提升了模型对动态速度漂移的稳定性。很多现象是网络在固定帧率数据上表现良好一遇到真实动态状态变化就开始抖动出错而这种看似细小的时序扰动往往能带来几个百分点的性能提升。动态厚散射介质成像这个方向目前仍然处于从实验室走向应用的早期阶段物理上的复杂性和工程上的繁琐程度都不低。但也正因为这样这个课题留给算法工程师和光学工程师的发挥空间还很大。技术路线已经打开剩下的是把每一步做扎实。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →