论文地址:https://arxiv.org/abs/1803.08396
代码地址:https://github.com/hezhangsprinter/DCPDN
代码跑通参考:https://blog.csdn.net/qq_32734095/article/details/89059949
https://blog.csdn.net/qq_41202069/article/details/106589603(在此遥拜大佬,感谢大大分享,比心)
我们提出了一种称为密集连接金字塔除雾网络(DCPDN)的新型端到端单图像去雾方法,它可以共同学习透射图,大气光和去雾。端到端学习是通过将大气散射模型直接嵌入到网络中来实现的,从而确保所提出的方法严格遵循物理驱动的散射模型。受密集网络的启发,可以最大限度地利用不同层次特征的信息流,我们提出了一种新的边缘保持密集连接的编码器 - 解码器结构,其中包含用于估计传输图的多层金字塔池模块。该网络使用新引入的边缘保留损失函数进行了优化。为了进一步在估计的传输图和去抖动结果之间结合相互结构信息,我们提出了一种基于生成对抗网络框架的联合鉴别器,以确定相应的去雾图像和估计的传输图是真实的还是假的。进行消融研究以证明在估计的传输图和去除颤动结果时评估的每个模块的有效性。大量的实验证明,所提出的方法比现有技术的方法有显着的改进。
论文整体流程如下:
论文分为4个模块,1)金字塔密集连接的传输图估计网; 2)大气光估计网; 3)通过方程式进行除雾;4)Joint Discriminator Learning。
本文提出了一种紧密连接的编码器/解码器结构,采用dense block用作网络中的基本结构,原因在于,它可以使这些功能的信息流最大化,并通过连接所有层来确保更好的收敛性。
(1)编码部分:即multi-level pyramid pooling module,采用Dense net-101中的第一个卷积层和前三个dense block作为backbone,将所得到的特征用不同尺寸的pooling,4个pooling layer 分别将图片处理为1/4,1/8,1/16,1/32,以此获得多尺度的特征图。
(2)解码部分:为了将transmission map 恢复为原图大小,堆叠了5个有refined up-sampling Transition-Blocks的dense blocks,最后,同一dimension的特征图都会串联起来。
此处的1/4,1/8,1/16,1/32多级池化的原因:获取更多的全局信息,在估计透射图时,尽可能保留多尺度的信息。
假设大气光图A是均匀的,即所预测的A是2D-map,其中每个像素A(z)都有A(z)= c成立(c是常数)。本文中为了估算大气光,我们采用8块 U-net 结构,其中编码器由四个Conv-BN-Relu块组成,而解码器由对称Dconv-BN-Relu块1组成。
为连接透射图、去雾图与大气光之间的关系,作者将大气散射模型公式=−()(1−())()直接嵌入至总体优化结构之中。
在此处,用Gt表示所估计的透射图,Gd表示去雾后的图片,为了确保透射图Gt(I)和除雾后的图像Gd(I)分别与相应的真实 t 和 J 尽可能相近,故用GAN做了 Joint Discriminator ,以transmission Map和相应的dehazed Image成对输入至网络中,(3)式作为优化目标。
L2损失:会得到一个倾向于模糊的结果,会丢失细节。
动机:1)边缘对应于图像强度的不连续性,因此可以通过图像梯度来表征。
2)CNN结构的浅层可以捕捉到低级特征,如边缘和轮廓,因此前几层作为深度网络中的边缘检测器。
基于以上考虑,提出了一种新的边缘保留损失函数,即由三个不同部分组成:L2损失,双向梯度损失和特征边缘损失。
Edge-preserving 损失公式如下:
其中,LE表示总体损失,L,2表示L2损失,L,表示双向梯度损失,L,f表示特征损失。
双向梯度损失的公式如下:
Hx和Hy是分别计算沿行(水平)和沿列(垂直)的图像梯度的运算符,而w,h表示输出特征图的宽度和高度。
特征损失的公式如下:
其中,其中Vi表示CNN结构,ci,wi,hi是Vi中相应的低层特征的尺寸。由于边缘信息保留在低级特征中,我们采用VGG-16中的relu1-1和relu2-1之前的层分别作为边缘提取器V1和V2。
DCPDN总体损失如上,其中,Lt为edge-preserving loss,L为预测大气光的L2损失,L为图像去雾的L2 损失,Lj为joint discriminator loss,定义如下:
作者提出从头训练整个网络难度较大,且网络收敛较慢,一个可能的原因是不同的任务梯度混合了,例如,来自模糊图像损失的梯度可能最初使透射图的损失“梯度”偏离,从而导致收敛变慢。
因此,采用分步骤训练的策略,分开优化每个任务,再整体优化网络。
实验结果对比图:
数据集采用NYU-depth2数据集,该数据集有深度信息,以下为评估表格
P.S.
(1)可以在网络后面加GAN结构,可以增强性能