资讯动态

域适应去雾:合成数据不够用,双向对齐跨域鸿沟

发布时间:2026/10/15 11:39:15 来源:尧图企业网站定制
1. 为什么“去雾”这件事光靠合成数据训练根本不够用如果你接触过图像去雾大概率会有这样一个体会拿合成雾图训出来的模型在真实雾天照片上跑一遍结果往往惨不忍睹。颜色偏得离谱、远处细节糊成一团、天空区域出现奇怪的色块——这些问题几乎成了去雾模型的“标配翻车现场”。而这篇论文要解决的核心矛盾恰恰就卡在这里合成域和真实域之间的鸿沟到底怎么跨过去。先把这个问题的背景说清楚。图像去雾Image Dehazing的目标是从一张被雾、霾、水汽散射影响的退化图像中恢复出清晰的场景。它的物理模型通常写成 I(x) J(x)·t(x) A·(1 - t(x))其中 I 是观测到的雾图J 是待恢复的清晰图t 是透射率A 是大气光。这个公式本身不复杂但问题在于真实场景中的 A 和 t 分布极其复杂而且没有“清晰图”作为监督信号——你不可能在同一时刻同一位置同时拍到有雾和无雾两张图。所以学术界的主流做法是用大气散射模型合成大量“雾图-清晰图”配对数据比如经典的 RESIDE 数据集然后在合成数据上训练去雾网络。但这里就出现了一个典型的**域偏移Domain Shift**问题合成雾的分布和真实雾的分布不一致。合成雾通常假设大气光均匀、透射率随深度指数衰减而真实雾受光源、颗粒物浓度、拍摄设备、天气条件等多重因素影响分布完全不同。模型在合成域上学到的映射关系迁移到真实域时就会失效。这篇论文的思路是把**域适应Domain Adaptation**引入去雾任务。它的核心主张是与其费尽心思去合成更“像”真实雾的数据不如让模型学会在两个域之间对齐特征分布。具体来说它设计了一个双向的域适应框架——一边做图像层面的域适应把合成雾图的风格迁移到真实域另一边做特征层面的域适应让网络在特征空间中对齐两个域的分布。这两条路互相配合最终让模型在真实雾图上也能有稳定表现。我个人的判断是这个思路的价值不在于某个模块有多新颖而在于它把“去雾”从一个纯监督回归问题重新定义成了一个跨域迁移问题。这个视角的转变才是这篇论文最值得细读的地方。接下来我会从问题本质、框架设计、关键模块、训练细节和实测经验几个角度把这篇论文拆开讲透。2. 合成雾与真实雾的分布差异到底差在哪几个维度2.1 大气光假设均匀 vs 非均匀合成雾图生成时大气光 A 通常被设为一个全局常数比如取图像中最亮的像素值或者某个固定值。这意味着整张图的“雾底色”是一致的。但真实雾天里大气光受光源方向、天空亮度、地面反射影响往往是空间变化的。比如城市夜景雾天路灯附近的大气光会明显高于远处暗区山区雾天天空区域的大气光又和地面植被区域完全不同。这个差异带来的直接后果是模型在合成数据上学到的“去雾”操作本质上是在做一个全局的颜色和对比度调整。但真实雾图需要的是空间自适应的恢复。如果模型没有显式建模这种非均匀性就会在亮暗交界处出现光晕或者颜色断层。2.2 透射率分布理想指数 vs 复杂多峰合成雾的透射率 t(x) 通常按深度图做指数衰减t exp(-β·d(x))其中 β 是散射系数d 是深度。这个分布在空间上是平滑单调的。但真实雾的透射率分布要复杂得多它受局部颗粒物浓度、气流、遮挡物影响可能出现多峰、突变甚至非单调的情况。比如一团浓雾飘过局部区域的透射率会骤降而旁边可能相对清晰。模型如果只见过平滑的透射率分布遇到真实雾中的突变区域就会“不知所措”表现为局部过增强或者恢复不足。2.3 噪声与成像链路差异合成雾图通常是“干净清晰图 合成雾”得到的噪声模型很简单。但真实雾图在成像过程中还叠加了传感器噪声、压缩伪影、白平衡偏移等问题。这些噪声和雾的退化耦合在一起让去雾任务变得更加病态。更麻烦的是不同设备拍出来的雾图噪声特性还不一样——手机、单反、监控摄像头各有各的成像风格。这三个维度的差异叠加起来就构成了合成域到真实域的巨大鸿沟。论文的域适应框架本质上就是在三个层面上同时做对齐图像风格、特征分布、以及任务相关的输出空间。3. 双向域适应框架图像层和特征层各自解决什么问题3.1 图像层域适应把合成雾“翻译”成真实雾的风格图像层域适应的思路很直观既然合成雾和真实雾在视觉风格上有差异那就训练一个图像翻译网络把合成雾图转换成“看起来像真实雾”的图同时保持内容结构不变。这样去雾网络就能在更接近真实域的数据上训练。论文里用的是类似 CycleGAN 的架构但做了针对去雾任务的改造。具体来说它有两个生成器一个把合成雾图转成真实风格雾图另一个反向操作。两个判别器分别判断图像是“真真实雾”还是“翻译过来的真实雾”以及“真合成雾”还是“翻译回去的合成雾”。循环一致性损失保证内容不跑偏。这里的关键设计是翻译过程只改变雾的风格不改变场景内容。所以论文在损失函数里加了内容一致性约束防止生成器把建筑、树木、行人这些结构信息改掉。实测中这一点非常重要因为如果内容变了去雾网络学到的映射就完全错了。3.2 特征层域适应让网络在深层特征上“分不清”两个域图像层适应解决的是输入端的风格差异但即使输入风格对齐了网络中间层的特征分布仍然可能不同。特征层域适应的目标就是让去雾网络提取的特征在合成域和真实域上具有相似的统计特性。论文采用的方式是对齐多层特征的均值和方差。具体操作是在去雾网络的不同深度插入域判别器判断当前特征来自哪个域同时用对抗损失逼迫特征提取器生成“域不变”的特征。这样网络学到的去雾表示就不会过度依赖某个域的特定统计规律。我自己的理解是这相当于给网络加了一个“正则化”它不能靠记住合成域的特定模式来去雾而必须学到更本质的雾退化规律。这个约束在真实测试时尤其重要因为真实域的统计特性和合成域差异很大只有域不变的特征才能稳定迁移。3.3 两个层面如何协同不是简单叠加图像层和特征层的域适应不是独立工作的它们之间存在一个正反馈循环。图像层翻译让合成数据更接近真实域这为特征层对齐提供了更好的输入特征层对齐又反过来约束图像翻译的方向防止翻译网络生成“过度风格化”但内容失真的图像。论文在训练策略上采用了交替优化的方式先固定去雾网络更新图像翻译网络和域判别器然后固定翻译网络更新去雾网络和特征域判别器。这种交替训练避免了两个模块互相干扰导致的训练不稳定。注意交替训练时学习率的设置非常关键。如果翻译网络学习太快去雾网络会跟不上如果去雾网络学习太快翻译网络又来不及适应。论文里用的是翻译网络学习率略低于去雾网络的策略实测下来比较稳。4. 去雾网络本身的设计为什么选编码器-解码器加多尺度特征4.1 基础架构编码器-解码器 跳跃连接去雾网络的主干是一个标准的编码器-解码器结构编码器逐层下采样提取多尺度特征解码器逐层上采样恢复空间分辨率。跳跃连接把编码器的浅层特征直接传到解码器对应层保留细节信息。这个选择在去雾任务里很常见原因是雾的退化既有全局的对比度下降也有局部的细节模糊。编码器-解码器能同时处理这两个尺度的问题——深层特征负责全局颜色和亮度校正浅层特征负责边缘和纹理恢复。4.2 多尺度特征融合不同深度的特征各管什么论文在解码器的每一层都引入了多尺度特征融合模块。具体来说它把编码器不同深度的特征上采样到同一分辨率然后拼接或加权求和。这样做的理由是浅层特征包含更多空间细节但语义信息弱深层特征语义强但空间分辨率低。去雾需要同时利用两者。实测中我发现这种融合方式对恢复远处细节特别有效。因为远处区域的雾浓度高、对比度低单靠深层特征容易恢复得过于平滑加入浅层特征后纹理和边缘能更好地保留。4.3 输出层设计残差学习还是直接回归论文采用的是残差学习方式网络不直接预测清晰图而是预测“清晰图与雾图的残差”。这样做的好处是网络只需要学习雾的退化分量而不是从零重建整张图。残差学习的收敛速度通常更快而且能避免网络在无雾区域做不必要的修改。不过残差学习也有一个坑如果雾图本身在某个区域已经很清晰网络可能会错误地加上残差导致过增强。论文通过域适应模块来缓解这个问题因为域不变特征能让网络更好地区分“真雾”和“伪影”。5. 训练细节损失函数、优化器和那些容易翻车的参数5.1 损失函数组合每一项都在解决什么问题论文的损失函数由几部分组成我按重要性排个序去雾重建损失合成域上有配对清晰图直接用 L1 或 L2 损失监督。L1 对异常值更鲁棒实测中 L1 恢复的细节更锐利。域对抗损失图像层和特征层各有一个用对抗方式对齐分布。这部分权重不能太大否则会破坏去雾重建。循环一致性损失图像翻译网络的核心约束保证内容不变。感知损失用预训练网络提取高层特征做约束提升视觉质量。但权重需要调太大容易导致颜色偏移。这些损失的权重平衡是训练中最耗时的部分。论文给出的配置是重建损失权重最高域对抗损失次之感知损失最低。我自己的经验是感知损失在去雾任务里要慎用因为预训练网络的特征空间和去雾任务的目标不完全一致容易引入不必要的纹理。5.2 优化器与学习率策略论文用的是 Adam 优化器初始学习率在 1e-4 量级采用余弦退火或者阶梯下降。批量大小受显存限制通常在 4 到 8 之间。这里有一个实操细节域判别器的学习率通常要低于主网络因为判别器太强会导致对抗训练崩溃。论文里判别器学习率是主网络的一半左右。另外训练初期可以先冻结域适应模块只训练去雾重建等重建损失稳定后再开启域适应。这个 warm-up 策略能显著提升训练稳定性。5.3 数据准备合成数据集怎么选、真实数据怎么用合成数据方面RESIDE 是绕不开的基准包含室内和室外两个子集。室内用 NYU2 深度图合成室外用 Make3D 深度图合成。论文通常在这两个子集上分别训练和评估。真实数据方面因为没有配对清晰图只能做定性评估或者用无参考指标。论文会收集一些真实雾图做视觉对比同时用 FADE、NIQE 等无参考指标做定量参考。这里要注意无参考指标只能作为辅助不能完全依赖因为它们的偏好和人类视觉感知并不总是一致。6. 实测中遇到的典型问题与排查思路6.1 颜色偏移为什么恢复结果总是偏蓝或偏黄这是域适应去雾最常见的翻车现象。根本原因通常是域判别器过强导致特征提取器过度追求“域不变”而丢失了颜色信息。排查思路是先降低域对抗损失的权重观察颜色是否恢复正常如果还不行检查图像翻译网络是否把合成雾的色调改得太过导致去雾网络学到了错误的颜色映射。另一个可能的原因是大气光估计不准。如果网络隐式估计的 A 偏离真实值恢复结果就会整体偏色。可以在网络里加一个显式的大气光估计分支或者用暗通道先验做初始化。6.2 远处细节糊成一片多尺度融合没起作用如果恢复结果的近处还行远处完全糊掉说明多尺度特征融合模块可能没有正确工作。排查步骤可视化编码器各层特征确认浅层特征是否包含足够的空间细节。检查融合模块的权重是否被深层特征主导。如果是可以给浅层特征更高的初始权重。确认训练数据中远处区域的雾浓度是否足够高。如果合成数据的雾浓度分布偏窄网络就没见过浓雾场景。6.3 训练不稳定对抗损失震荡怎么办域适应训练本身就比普通监督训练更难收敛。如果损失曲线剧烈震荡可以尝试降低域判别器的学习率或者给判别器加谱归一化。使用标签平滑把判别器的真实/虚假标签从 1/0 改成 0.9/0.1。延迟开启域适应先让去雾网络在合成域上充分收敛。减小批量大小或者用梯度累积来稳定梯度。提示对抗训练中判别器的更新频率通常要低于生成器。论文里是每更新两次生成器才更新一次判别器这个比例可以根据实际情况调整。7. 这篇论文的思路能迁移到哪些相邻任务域适应去雾的框架其实不局限于去雾。任何存在“合成训练数据 真实测试数据”分布差异的低层视觉任务都可以借鉴这个双向域适应思路。比如去雨合成雨图和真实雨图的分布差异同样很大雨线的形状、密度、方向在合成和真实场景中都不一样。去噪合成噪声通常是高斯白噪声真实噪声是传感器噪声分布完全不同。超分辨率合成退化通常是双三次下采样真实退化是复杂的模糊核加噪声。低光增强合成低光图是简单亮度缩放真实低光图有噪声、色偏、动态范围压缩等问题。这些任务的共同点是配对数据只能合成真实数据没有监督。域适应提供了一条可行的路径——不需要真实配对数据只需要真实域的无标注图像就能让模型适应真实分布。我在实际项目里试过把类似的框架用到去雨任务上效果比直接在合成数据上训练好很多尤其是在真实雨图的细节保留上。关键是要根据任务特点调整域适应的粒度去雨可能更需要在图像层做风格迁移因为雨线的视觉形态差异很大去噪可能更依赖特征层对齐因为噪声的统计特性在特征空间里更明显。8. 如果自己要复现哪些细节最容易被忽略复现这篇论文时有几个地方是论文里一笔带过但实际很关键的第一图像翻译网络的内容一致性约束。论文只说了用循环一致性损失但实际训练中如果只靠循环一致性翻译网络仍然可能改变局部结构。建议额外加一个结构相似性损失或者边缘一致性损失约束翻译前后的边缘图保持一致。第二域判别器的感受野。特征层的域判别器如果感受野太小只能看到局部特征对齐效果会打折扣。建议用全局平均池化或者大核卷积来扩大感受野让判别器能看到整张图的统计特性。第三真实域数据的数量和多样性。域适应需要真实域的无标注图像来估计分布。如果真实数据太少或者场景太单一对齐效果会很差。建议尽可能收集多样化的真实雾图覆盖不同天气、不同场景、不同设备。第四评估指标的选择。合成域上可以用 PSNR 和 SSIM但真实域上这两个指标没法算。论文里用了 FADE 和 NIQE但这两个指标对去雾结果的敏感度有限。实际评估时最好结合人工主观打分或者用下游任务比如目标检测的性能来间接衡量去雾质量。第五训练时间与显存。双向域适应框架比普通去雾网络多了一倍的参数和计算量。如果显存有限可以减小批量大小或者降低图像裁剪尺寸。但要注意批量太小会影响域判别器的统计估计可能需要用梯度累积来补偿。我自己在复现时的体会是这个框架的调参空间比普通去雾网络大得多因为多了域适应相关的超参数。建议先用小规模数据跑通流程确认各个模块都能正常工作再逐步扩大训练规模。一开始就上全量数据很容易因为某个超参数没设好而浪费大量时间。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑