1. 引言
雾是由于大气光被吸收和散射造成的自然现象。在雾的影响下,直射光线被散射以后造成图像对比度、可见度以及色彩保真度的下降。相机拍摄会由于大气散射光与物体反射光造成图像表面亮度和色彩失真。此外,相机从场景点接收到的信号随着距离增大而衰减。雾带来的图像对比度和可见度下降问题对于某些行业影响很大,比如自动驾驶、交通监控、卫星遥感等领域。
经典的图像去雾算法主要分为基于图像增强去雾算法和基于大气散射模型去雾算法两大类。基于图像增强去雾算法主要有直方图均衡化,小波变换,Retinex去雾算法等。Tan等观察到通常无雾图像对比度比含雾图像高,提出增大图像局部区域对比度去雾算法 [1]。基于大气散射模型的去雾算法根据图像景深信息计算出每个像素上的透射系数,由每个像素上的透射系数计算出透射图,利用透射图复原出无雾图像。Kopf等通过计算多张图像或物理三维模型的景深信息复原图像 [2]。He等通过观察大量的图像以及实验研究,提出了基于暗通道先验的单张图像去雾算法 [3]。He方法的缺点是在高亮度区域(如天空)会容易出现色彩失真。在He去雾算法的基础上,Meng等提出限制透射率函数边界来更精确的估计出透射率 [4]。Berman等提出了非局部区域去雾方法,他们观察到无雾图像中的颜色可以被RGB空间域100种不同颜色簇近似表示,而有雾图像的颜色像素会在RGB空间域形成雾线,利用这种雾线估计出每个像素的透射率 [5]。以上方法都基于一个或多个雾相关特征的先验信息,使用深度学习算法计算雾相关特征可以提高去雾算法的鲁棒性。Cai提出的DehazeNet是一种能提取出图像相关特征的卷积神经网络(Convolutional Neural Network, CNN),这种模型可以计算透射率 [6]。在DehazeNet上更进一步,Ren等使用多尺度深度卷积神经网络来计算透射率 [7]。Goodfellow等人提出的生成对抗网络(Generative Adversarial Networks, GANs)框架可以将随机输入噪声输出逼真图像 [8]。条件生成对抗网络(Conditional Generation Against Networks, cGAN)通过优化目标函数来学习从输入图像和随机噪声中生成清晰图像 [9]。cGAN在超分辨率、图像修复和样式转移等图像处理领域得到了广泛应用。Zhang等联合使用三种U-Net神经网络模型引导图像去雾 [10],第一个模型融合使用对抗损失与欧几里德损失的cGAN来估计透射率图;第二个模型先估计出雾相关特征,然后将雾相关特征与透射率联合在一起;第三个模型使用欧几里德损失函数和感知损失函数联合在一起输出无雾图像。
本文使用Tiramisu代替U-Net作为生成器网络模型,减少训练参数,提高参数利用率。判别器网络的最后一层借助Sigmoid函数完成归一化。使用损失函数加权和的方式训练网络模型,提出一种评价去雾能力的分数,保存训练过程中分数较高的模型及参数,进而使用分数最高的网络模型及参数对室外真实图像进行去雾训练测试。
2. 相关理论与改进算法
2.1. 相关理论
大气散射模型通常被用来描述在大气光和雾霾共同作用下的成像原理 [11] [12]:
(1)
其中,等式右边的第一部分J(x)t(x)为直接衰减项,第二部分
为大气光散射模型。x代表图像中的像素坐标,I(x)表示相机拍摄或人眼直接观察到的有雾图像,J(x)表示无雾图像,A(x)表示大气光值,t(x)表示介质透射率图。当大气光在图像中是均匀数值时,透射率图可以表示为:
(2)
式中β代表衰减系数,d(x)代表场景深度。通过估计透射率图,无雾图像可以使用下面等式表示:
(3)
2.2. 条件生成对抗网络
cGAN的损失函数由生成器和判别器的极小极大值对抗表示,用下式可以表示对抗过程 [13]:
(4)
其中D和G分别表示判别器和生成器。
输入有雾图像表示为x,x对应的无雾目标图像表示为y,给定一个随机矢量噪声z,生成器G生成与x相似的图像。本文使用一种评价去雾能力的分数,保存训练过程中分数较高的模型及参数。输入单张真实含雾图像通过条件生成对抗网络模型后可输出去雾图像。
下面详细介绍该条件生成对抗网络的各个模块。本文使用32层Tiramisu取代U-Net。这个模型的编码器和解码器端各有5个密度块,连接层有1个密度块。在编码器端,每一个密度块后紧跟一个下采样层。下采样层包含(BatchNorm-Relu-Convolution)操作。与编码器端相似,在解码器端,每一个密度块后紧跟一个上采样层。上采样层仅有一个逆卷积操作。编码器和解码器端的每个密度块各有4层。连接端的密度块有15层,上采样层增长率设置为12。图像的空间维度在经过一个下采样层以后空间维度减半,经过一个上采样层以后空间维度翻倍。Simon等提出的100层Tiramisu语义分割模型具有参数效率高的优点 [14]。生成器网络结构如图1。本文使用与DCGANs相同的判别器网络(Patch GAN) [15]。此模型仅对比目标图像与生成图像区域上的不同,而不是逐个像素对比。由于CNN在输出的感知域大于一个像素(对应于原图像中的像素块),因此使用填充控制感知域。本文使用Pix2Pix GAN中的70 × 70判别器,在最后的特征图集上应用逐个像素对比方式。在特征图的有效感知域上覆盖一块图像区域用来消除图像中的大量伪影。在判别器网络的最后一层利用Sigmoid函数来完成特征映射,以便使判别结果可归一化为[0,1] [16],判别器网络结构如图2。
Figure 2. Discriminator network structure
图2. 判别器网络结构
用来优化网络模型的损失函数为三个权重的加权组合,总损失的公式为:
(5)
其中LAdv损失定义为:
(6)
在模型每次迭代中,判别器更新一次,生成器更新一次。最后将结果与权Wgan相乘加到总损失函数。如文献 [13] 所述:利用L1损失和对抗损失加权来减少输出图像中的伪影。目标图像y和生成图像G(x, z)之间的L1损失计算如下:
(7)
将结果与权WL1相乘加到总损失函数。生成图像与目标图像通过一个预训练的VGG-19网络 [17],两张图像在通过池化4层后得到其L2损失,特征感知损失加入总损失函数,感知损失定义如下:
(8)
其中C,H,W分别代表输出的通道,宽度和高度。感知损失值是一个常数,对于池化4层的输出为1e−5。V表示由VGG-19网络模型执行的非线性CNN变换。此结果与权Wvgg相乘加到总损失函数。
3. 实验方法
3.1. 数据集
为提高算法的鲁棒性,本文使用两个不同的数据集合并训练。首先使用NYU-Depth V2数据集合成含雾图像得到一个含有大量真实含雾/真实不含雾图像对的数据集,NYU-Depth V2数据集由来自各种室内场景的视频序列组成,使用Microsoft Kinect的RGB深度摄像机记录 [18]。该数据集包含有1449张室内图像和其对应的图像深度信息对(RGB-D)。为模拟浓雾图像,本文给传输系数一个服从平均分布[0.2,0.4]的随机值,利用RGB-D图像生成透射图(t)来获得图像中每一像素的透射系数,大气光值(A)设置为1然后利用等式(1)生成含雾图像。本文注意到NYU深度数据集只有室内场景,一些室外场景的特定特征(例如天空)在NYU数据集中是没有的。为了解决室外场景问题,本文使用Codruta等创建的室外场景数据库(名为O-HAZE),O-HAZE数据集包含45对室外含雾/不含雾的图像 [19]。将这些图像和之前生成的图像放到一起建立数据集并把数据集中所有图像统一调整大小为(256,256,3)。此数据集共有1494张大小为(256,256,3)的图像,图3为真实清晰图像和生成含雾图像对比。
3.2. 实验过程
式5中使用的权值分别为Wvgg = 9,Wgan = 3,WL1 = 80。使用Adam优化器 [20],学习率的值设为0.001。算法实现为使用Google公司的Colab平台:15 GB内存,Nvidia Tesla K80 GPU。测试推理使用Nvidia公司的Jetson TX2平台。数据集被分为训练集,验证集,测试集。从数据集中随机选择1200张数据集的图像水平翻转后加到训练集。此时训练集共2400张图像,每次训练时图像顺序被随机打乱。数据集中剩余的294张图像再随机分为94张图像的验证集和200张图像的测试集。在每次迭代中,生成器更新一次,判别器更新一次。因此,每次迭代的每一次更新包含两个步骤。
Figure 3. Synthetic fog contrasts with real clear images
图3. 合成有雾与真实清晰图像对比
4. 实验结果与综合分析
最大峰值信噪比(Peak Signal to Noise Ratio, PSNR)测量了算法将噪声(雾)从噪声图像中去除的能力,两张相同的图像会有一个无限大的PSNR值,更高的PSNR值意味着去雾能力更好。结构相似性(Structural Similarity Index Measure, SSIM)测量了两张图像的相似程度。完全相同的两张图像SSIM值为1。本文定义了图像PSNR和SSIM的加权去雾分数作为一个拥有两种属性的指标。
PSNR的权重值(WPSNR)设置为0.05,SSIM的权重值(WSSIM)设置为1。一旦去雾分数在验证集中得到一个较高值时就保存模型,每次保存最大的10个检查点。本文还测试了表现较好的几个模型在真实含雾图像上的去雾能力,定量对比了这些模型在测试集上得到的PSNR和SSIM值,本文选择了文献 [3] [5] [6] 提出的模型对比分析本文提出模型的去雾能力,表1列出了PSNR,SSIM对比值。
Table 1. Quantitative comparison of different dehazing methods
表1. 不同去雾方法的定量对比
从表1可以看出,在没有大片天空区域的情况下,He算法去雾图像在结构相似度和最大峰值信噪比两个值较高。Cai算法虽然比Berman算法的结构相似度值较高,但是从图4可以看出Cai算法的去雾图像看起来去雾效果并不好,而Berman算法的结构相似度值虽然较低,但是图4中去雾图像却比Cai算法的图像清晰。很明显,本文提出的算法模型与真实图像在结构相似度和最大峰值信噪比值都有很大提升,去雾图像看起来细节丰富,层次鲜明。为了证明本文模型的鲁棒性,本文使用了不包含在数据集中的真实有雾图像上进行了评估,图4列出了原始含雾图像以及对应的去雾图像,为本文算法和前文提到去雾算法去雾图像的主观对比。图4的d行图像中看出本文的算法在重雾条件下可以还原出较多图像细节,可以清晰的看到后面楼房的窗户。从a行与c行图像对比可以看出本文的算法可以比其他方法提取出相同或更多的细节,输出色彩很真实。从第b行和d行可以看出,图像的分辨率比其他图像有很大提高。
5. 结论
本文改进一个基于条件生成对抗网络的图像去雾算法模型,无需估计图像大气光和透射图以及额外图像深度信息,将输入的含雾图像直接输出去雾图像。通过将U-Net模型替换为Tiramisu模型提高参数利用率提取出图像更多信息。训练过程中使用的图像数据集分为室内和室外图像,提高去雾模型的鲁棒性,可以适应常见的图像。最后提供了本文模型与其他去雾算法的客观对比与主观对比,结果证明本文算法可以较好的复原出浓雾图像的框架和细节,定量分析显示本模型生成图像与原始图像结构相似度达到0.89。综上所述,本文提出去雾模型可以很好的实现去雾效果,还原出图像的更多细节,对于雾天物体识别和雾天条件下监控有一些帮助。