文章目录
前言(Preface)
此博客记录三种基于深度学习的图像去雾网络,简述其算法特点并定性定量分析网络性能。
GFN-dehazing
原文:Gated Fusion Network for Single Image Dehazing(用于单幅图像去雾的门控融合网络)
原文链接: Gated Fusion Network for Single Image Dehazing
原文开源代码:GFN-dehazing
Dehaze-cGAN
原文:Single Image Dehazing via Conditional Generative Adversarial Network(基于条件生成对抗网络的单张图像去雾算法)
原文链接: Single Image Dehazing via Conditional Generative Adversarial Network
原文开源代码:Dehaze-cGAN
Cycle-Dehaze
原文:Cycle-Dehaze: Enhanced CycleGAN for Single Image Dehazing(Cycle-Dehaze: 用于单幅图像去雾的增强型 CycleGAN 网络)
原文链接: Cycle-Dehaze: Enhanced CycleGAN for Single Image Dehazing
原文开源代码:Cycle-Dehaze
一、GFN-dehazing
由于大气光照的影响,雾霾图像中的颜色通常发生变化,并且光照散射和颜色衰减的影响,使图像在远处缺乏可见性。基于这两点原因,GFN-dehazing借助三类特殊类型的图像,完成图像去雾。
白平衡图像:白平衡图像作为输入的目的是消除大气颜色造成的色差。白平衡图像可以消除大气光引起的颜色偏移,其结果呈现低对比度,通过加入另外两项输入来提高对比度。
对比度图像:通过在模糊输入中减去整张图像的平均亮度值导出介质图像,然后使用带有亮度信息的参数线性恢复介质图像中的亮度,最终得到对比度增强图像;对比度增强图像会导致图像中较暗区域趋向于黑色。
伽马校正图像:使用伽马校正图像来弥补对比度增强图像中趋于黑色所丢失的信息。
下图分别为原始图像、白平衡图像、对比度图像和伽马校正图像。
下图为GFN-dehazing网络的整体结构。网络输入原始的雾霾图像及三组派生图像(白平衡图像、对比度图像、伽马校正图像),在末端处输出对应三组派生图像的权重,然后和原始的三组图像分别进行加权融合,合成去雾图像。
直接将网络输出的权重置信图和派生图像进行加权相加可能会造成输出的去雾图像产生伪影。所以通过改变图像的分辨率使用多尺度细化的方法提高输出图片的质量。下图为我根据文章思路对多尺度细化的理解,其中每个尺度下输入图片的分辨率不同(图片的大小不同),此处所使用的网络均为同一个网络,所用的损失函数不同。
第k尺度的损失函数为
L
c
o
n
t
[
θ
,
k
]
=
1
N
∑
∣
∣
F
(
I
i
,
k
,
θ
,
k
)
−
J
i
,
k
∣
∣
L_{cont}[θ, k] = \frac{1}{N}\sum ||F(I_{i,k}, \theta, k) - J_{i,k}||
Lcont[θ,k]=N1∑∣∣F(Ii,k,θ,k)−Ji,k∣∣,其中I为有雾图像;J为无雾图像。其中文章中引入鉴别器,将多尺度下最精细的输出或真实无雾图片作为输入。对尺度损失函数和鉴别器损失函数施加不同的权重作为整体的损失函数。
二、Dehaze-cGAN
Dehaze-cGAN是基于cGAN的思想,使用一种端到端的网络来解决图像去雾问题,其在生成器网络中使用编码和解码结构,从而获取更多的特征信息。在损失函数中引入预训练的VGG特征和L1正则化先验梯度,使其生成较为逼真的清晰图像,并且消除伪影。(在损失函数设计时,这点很类似于DCPDN的设计思路)
我们在这里可以对比一下原始GAN网络和Conditional-GAN网络的损失函数
原始GAN网络损失函数:
Conditional-GAN网络的损失函数:
在Conditional-GAN损失函数中生成器和判别器中均增加了一项y(样本标签)作为输入,CGAN的引入使得训练更加稳定和可控,可以使生成的样本更加准确,避免了一些原始GAN的缺陷。
Dehaze-cGAN的网络结构如下图所示。生成器基于编解码结构,完成自适应特征提取。使用求和代替通道拼接。鉴别器最后一层,使用Sigmoid函数将概率归一化为[0,1]。
Dehaze-cGAN的损失函数设计较为复杂,其中I为有雾图像;J为无雾图像。
生成器损失:
对抗损失函数
L
A
L_{A}
LA,使用此损失函数的cGAN算法不能很好的对雾霾进行去除,在生成的无雾图像上会产生一些颜色失真和伪影。
感知损失函数
L
P
L_{P}
LP,引入基于预先在ImageNet训练的VGG特征的感知损失,来增加图像的真实感,但是引入此函数后也会增加伪影的出现。
像素梯度损失函数
L
T
L_{T}
LT,加入基于图片内容的像素损失和L1正则化梯度损失来去除伪影,保留生成图像的细节和结构。
判别器损失:
三、Cycle-Dehaze
Cycle-Dehaze基于Cycle-GAN架构来完成图像的去雾任务,相较于前两种方法而言,Cycle-Dehaze不需要一一配对的有雾图像和无雾图像,并且Cycle-Dehaze也完全脱离了大气散射模型。Cycle-Dehaze通过改变损失函数获得了更好的效果。除循环一致性损失外添加循环感知一致性损失来增强单张图像去雾的效果。
Cycle-Dehaze的网络结构如下所示。网络结构中有两个生成器,两个判别器。其中生成器G来学习由有雾图像生成无雾图像,生成器F来学习由无雾图像生成有雾图像。生成器G将有雾图像转化为无雾图像,但是不能保证无雾图像中的信息与原始图像中包含的信息一致,所以加入生成器F将无雾的图像在转回至有雾的图像,通过循环一致性损失来让新的有雾图像与原始有雾图像一致。
Cycle-Dehaze中用到了两种损失:循环一致性损失&感知损失。循环一致性损失:来提高生成图像的PSNR(峰值信噪比),增强图像的定量结果。感知损失:保持图像的清晰度,提高图像的定性结果。
感知一致性损失的损失函数为:
完整损失函数为:
四、定性分析算法性能(Qualitative analysis of algorithm performance)
GFN-dehazing
第一行为输入有雾图像,第二行为输出无雾图像。
Dehaze-cGAN
第一行为输入有雾图像,第二行为输出无雾图像。
Cycle-Dehaze
第一行为输入有雾图像,第二行为输出无雾图像。
其中三组网络的输出效果GFN-dehazing更为真实一些,但是Cycle-Dehaze对数据集要求没有过于严格,不再需要同样场景下的有雾图像和无雾图像进行配对训练。
五、定量分析算法性能(Quantitative analysis of algorithm performance)
性能指标 | PSNR(峰值信噪比) | SSIM(结构相似性) |
---|---|---|
功能 | 衡量两张图像之间差异 | 评价两张图像的相似程度 |
计算公式 | P S N R = 10 l g ( M a x V a l u e 2 M S E ) PSNR =10lg(\frac{MaxValue^2}{MSE}) PSNR=10lg(MSEMaxValue2) | S S I M ( x , y ) = ( 2 μ x μ y + C 1 ) ( 2 δ x y + C 2 ) ( μ x 2 + μ y 2 + C 1 ) ( δ x 2 + δ y 2 + C 2 ) SSIM(x,y)=\frac{(2μ_{x}μ_{y} + C_{1})(2δ_{xy}+C_{2})}{(μ_{x}^2+μ_{y}^2 + C_{1})(δ_{x}^2+δ_{y}^2 + C_{2})} SSIM(x,y)=(μx2+μy2+C1)(δx2+δy2+C2)(2μxμy+C1)(2δxy+C2) |
GFN-dehazing | 22.30 | 0.88 |
Dehaze-cGAN | 33.61 | 0.915 |
Cycle-Dehaze | 15.41 | 0.66 |
2023/7/24我换了研究生期间的课题研究方向,考虑到实验室硬件设备难以支撑大规模模型的训练,使用深度学习完成图像去雾任务是我2023上半年努力的科研方向,现将一些较为经典的网络结构在这里和大家分享,帮助大家去更深理解原论文。博客中有些地方可能不够严谨、存在错误,大家可以在评论区或私信对我指出。如果有对图像去雾感兴趣的朋友可以私信我,我们可以共同讨论。制作实属不易,如果这篇博客对你有帮助的话,麻烦点赞、收藏、关注。科研路漫漫,大家加油!