在计算机视觉领域,雾天拍摄的图像往往存在对比度低、色彩失真和细节模糊等问题,这给后续的目标检测、场景识别等任务带来了巨大挑战。传统去雾算法通常基于大气散射模型,但这类方法在处理复杂场景时容易产生光晕效应或色彩偏差。我们团队开发的这套多尺度自适应注意力图像去雾方案,通过深度学习与注意力机制的结合,在多个公开数据集上达到了SOTA水平。
关键创新点:模型在多个尺度上提取特征后,通过自适应注意力模块动态分配不同区域的去雾强度,避免了传统方法"一刀切"的处理方式。
采用U-Net结构的编码器-解码器框架,编码器部分包含:
解码器部分通过转置卷积逐步上采样,每个阶段与对应尺度的编码器特征进行跳跃连接。这种设计既能捕获全局雾浓度分布,又能保留局部细节特征。
该模块的核心是一个轻量级的子网络:
matlab复制function att_map = AdaptiveAttention(feat)
avg_pool = globalAveragePooling2dLayer('Name','gap');
max_pool = globalMaxPooling2dLayer('Name','gmp');
concat = concatenationLayer(3,2,'Name','cat');
fc1 = fullyConnectedLayer(64,'Name','fc1');
fc2 = fullyConnectedLayer(size(feat,3),'Name','fc2');
sigmoid = sigmoidLayer('Name','sig');
lgraph = layerGraph();
lgraph = addLayers(lgraph, avg_pool);
lgraph = addLayers(lgraph, max_pool);
lgraph = addLayers(lgraph, concat);
lgraph = addLayers(lgraph, fc1);
lgraph = addLayers(lgraph, fc2);
lgraph = addLayers(lgraph, sigmoid);
lgraph = connectLayers(lgraph, 'gap', 'cat/in1');
lgraph = connectLayers(lgraph, 'gmp', 'cat/in2');
lgraph = connectLayers(lgraph, 'cat', 'fc1');
lgraph = connectLayers(lgraph, 'fc1', 'fc2');
lgraph = connectLayers(lgraph, 'fc2', 'sig');
att_map = predict(lgraph, feat);
end
该模块通过分析全局和局部特征,为每个空间位置生成0-1之间的注意力权重,指导网络在不同区域施加不同程度的去雾处理。
我们使用RESIDE数据集进行训练,包含:
数据增强策略:
采用多任务损失函数:
code复制L_total = λ1*L_mse + λ2*L_ssim + λ3*L_perceptual
其中:
matlab复制options = trainingOptions('adam', ...
'InitialLearnRate', 1e-4, ...
'LearnRateSchedule', 'piecewise', ...
'LearnRateDropFactor', 0.5, ...
'LearnRateDropPeriod', 20, ...
'MaxEpochs', 100, ...
'MiniBatchSize', 16, ...
'Shuffle', 'every-epoch', ...
'Plots', 'training-progress');
在SOTS测试集上的定量结果:
| 方法 | PSNR ↑ | SSIM ↑ | CIEDE2000 ↓ |
|---|---|---|---|
| DCP | 16.62 | 0.817 | 12.45 |
| AOD-Net | 19.06 | 0.850 | 9.87 |
| Ours | 23.41 | 0.912 | 6.32 |
典型场景的定性对比显示,我们的方法在以下方面表现突出:
去雾后图像偏暗:
局部区域过度增强:
显存不足:
该框架经少量修改可应用于:
实际项目中,我们曾将该算法集成到交通监控系统中,使雾天条件下的车牌识别准确率从42%提升至89%。关键是在不同天气条件下动态调整注意力模块的初始化参数。