1. 项目概述与核心思路
在计算机视觉领域,单幅图像去雾一直是个极具挑战性的问题。传统方法往往将去雾作为独立任务进行处理,而忽略了与其他视觉任务的潜在关联。我们提出的DCMPNet框架创新性地将深度估计与去雾任务相结合,通过双任务协同机制实现了性能的相互促进。
这个设计的灵感来源于对雾霾形成机制的深入观察。在大气散射模型中,场景深度与雾浓度存在直接关联。这意味着深度信息可以成为去雾的重要线索,而去雾结果反过来也能提升深度估计的准确性。基于这种互惠关系,我们构建了一个端到端的双任务学习框架。
关键洞见:深度图中的边缘和纹理信息能够指导去雾网络更好地恢复细节,而去雾后的清晰图像又能为深度估计提供更可靠的输入。
2. 网络架构设计解析
2.1 整体框架结构
DCMPNet采用双分支架构,包含一个共享编码器和两个任务特定的解码器。编码器基于改进的ResNet-50实现,主要创新在于集成了我们设计的MFM(Multi-Feature Fusion Module)模块。
网络工作流程可分为三个阶段:
- 特征提取阶段:共享编码器从输入雾图提取多尺度特征
- 任务交互阶段:通过差异感知机制实现深度与去雾信息的交换
- 联合优化阶段:两个任务通过设计的损失函数共同优化
2.2 MFM模块详解
MFM是多特征融合模块的核心创新,其结构包含三个关键组件:
-
自适应池化层:对不同尺度的特征图进行动态调整,确保尺寸匹配
- 使用可学习的池化核尺寸
- 支持从3×3到7×7的多粒度特征保留
-
通道注意力机制:基于SE模块改进,增加了空间注意力分支
python复制class MFM(nn.Module): def __init__(self, in_channels): super().__init__() self.pool = AdaptivePool2d(output_size=(1,1)) self.fc = nn.Sequential( nn.Linear(in_channels, in_channels//4), nn.ReLU(), nn.Linear(in_channels//4, in_channels), nn.Sigmoid() ) def forward(self, x): b, c, _, _ = x.size() y = self.pool(x).view(b, c) y = self.fc(y).view(b, c, 1, 1) return x * y.expand_as(x) -
特征选择门控:动态决定各尺度特征的融合权重
- 使用softmax实现权重归一化
- 引入温度系数控制选择锐度
3. 差异感知机制实现
3.1 深度引导的去雾优化
我们设计了一个深度差异图(Depth Difference Map, DDM)来量化去雾结果与理想图像在深度空间中的差异:
code复制DDM = |D_dehaze - D_gt| / (D_gt + ε)
其中ε为防止除零的小常数。这个差异图会被转化为注意力权重,引导网络重点关注去雾效果不佳的区域。
3.2 去雾引导的深度优化
对称地,我们利用去雾质量图(Dehazing Quality Map, DQM)来提升深度估计:
code复制DQM = 1 - SSIM(I_dehaze, I_gt)
低质量区域(DQM值高)会获得更高的深度估计损失权重,迫使网络在这些区域投入更多计算资源。
4. 损失函数设计
4.1 基础损失项
-
去雾损失:
- L1像素损失:保证全局颜色一致性
- MS-SSIM损失:保持结构相似性
- 感知损失:基于VGG16的高层特征匹配
-
深度损失:
- 尺度不变对数误差
- 边缘感知平滑项
4.2 交互损失项
-
深度一致性损失:
math复制L_{dc} = \| \nabla D \odot (I_{dehaze} - I_{gt}) \|_1 -
去雾引导损失:
math复制L_{dg} = \| D_{pred} - D_{gt} \|_1 \odot DQM
5. 实现细节与调优
5.1 训练策略
采用两阶段训练方法:
- 预训练阶段:分别训练去雾和深度估计网络
- 联合训练阶段:固定编码器参数,微调解码器
关键超参数设置:
- 初始学习率:1e-4(Adam优化器)
- batch size:8(2×RTX 3090)
- 输入分辨率:640×480
5.2 数据增强
针对雾图特点设计的增强策略:
- 随机大气光扰动(A ∈ [0.7, 1.0])
- 雾浓度抖动(β ∈ [0.5, 1.5])
- 混合真实雾与合成雾数据
6. 实验结果分析
在主流数据集上的性能对比:
| 方法 | PSNR ↑ | SSIM ↑ | RMSE ↓ | 推理时间(ms) |
|---|---|---|---|---|
| DCP | 18.72 | 0.80 | 0.142 | 120 |
| AOD-Net | 21.35 | 0.85 | 0.118 | 45 |
| GFN | 22.41 | 0.87 | 0.105 | 65 |
| Ours | 24.63 | 0.91 | 0.088 | 52 |
可视化结果分析表明,我们的方法在以下场景表现突出:
- 重度雾霾下的远景恢复
- 雾浓度不均匀的场景
- 存在景深突变的边缘区域
7. 实际应用中的注意事项
-
硬件适配建议:
- 最低要求:GTX 1060(6GB显存)
- 最佳性能:RTX 3060及以上
- 对于嵌入式设备,可缩减MFM通道数至1/4
-
常见问题排查:
-
问题:深度图出现块状伪影
原因:MFM中温度系数设置过高
解决:调整τ从1.0降至0.3 -
问题:去雾结果偏色
原因:大气光估计不准确
解决:在预处理中添加白平衡校正
-
-
调优技巧:
- 对于航拍图像:增大DDM的权重系数
- 对于近景特写:增强边缘约束项
- 实时应用:用Ghost模块替换标准卷积
8. 扩展应用与未来方向
在实际项目中,我们发现这套框架还可应用于:
- 水下图像增强(需调整散射模型)
- 沙尘图像恢复
- 医学影像去噪
一个有趣的发现是,将MFM模块移植到其他视觉任务中也能带来约2-3%的性能提升,特别是在需要多尺度特征融合的场景。这提示我们模块设计具有较好的通用性。
在工程实践中,有几点经验值得分享:
- 双任务框架对batch size敏感,建议不小于8
- 交替训练时,建议先进行5轮去雾单独训练
- 使用混合精度训练可节省30%显存,几乎不影响精度