结合FC-DenseNet和WGAN的图像去雾算法*
2020-08-12雎青青桑庆兵
孙 斌,雎青青,桑庆兵
江南大学 物联网工程学院,江苏 无锡 214122
1 引言
雾霾天气下,空气中存在大量诸如水蒸气、粉尘等悬浮颗粒。它们吸收并散射光线,致使设备采集的图片出现严重颜色衰减,清晰度、对比度下降,视觉效果差,这对后续计算机视觉任务造成严重影响。因此,对雾霾图像进行有效去雾是很有必要的。
近年来,图像去雾算法研究取得了重大进展。现阶段,图像去雾研究主要分成两种,基于特征和先验的方法以及基于学习的方法。基于特征和先验的去雾算法侧重对透射图的估计,其难点在于特征和先验的选择。常用的特征和先验有如下几种:(1)对比度。Tan[1]通过统计发现无雾图像对比度高,从而通过最大化图像的局部对比度进行图像去雾。(2)暗通道先验(dark channel prior,DCP)。He 等[2]发现在无雾图像中暗通道的值接近零,进而用此来估计透射图,并且根据大气散射模型计算出无雾图像。(3)颜色衰减先验(color attenuation prior,CAP)。Zhu 等[3]通过统计发现雾的浓度与亮度和饱和度的差成正比,并创建了场景深度的线性模型求解场景深度,进而计算出无雾图像。
基于学习的去雾算法可以分为两种,分步学习算法和端到端学习算法。分步学习算法与传统方法类似,侧重对中间变量的预测。例如,Cai等[4]通过分析人工先验特征,设计了DehazeNet,以完成对透射图的预测。与之相似,Ren等[5]提出了一种多尺度卷积神经网络(single image dehazing via multi-scale convolu-tional neural networks,MSCNN),通过两个不同尺度的网络模型,完成对透射图的精准预测;端到端学习算法,通过设计全卷积神经网络简单高效地实现图像去雾。例如,考虑到上述算法忽略对大气光值的合理预测,Li 等[6]利用线性变化将大气散射模型[7]中的多个中间变量整合成为一个,并提出AOD_Net(all-in-one dehazing network)直接预测无雾图像。
基于模型的去雾算法紧扣大气散射模型,严重依赖对中间变量的准确预测。事实上,每种算法在中间量的预测上均存在误差,在计算无雾图像时会放大误差[8],致使图片失真。相比之下,目前端到端去雾算法虽然可以避免这些误差,但依旧存在特征学习不充分,图片细节恢复不够逼真[9]的问题。
为此,本文提出了一种基于Wasserstein 生成对抗网络(Wasserstein generative adversarial networks,WGAN)[10]的端到端去雾模型。为充分提取和融合雾的特征,本文使用FC-DenseNet[11]在网络规模较小的情况下充分学习图像中雾的特征;考虑到图像去雾和去噪之间的相似性,本文将大气散射模型公式重新变形,通过深度残差学习得到清晰图像特征,并实现端到端的去雾;同时,为保护图片的结构细节信息,在以均方误差(mean square error,MSE)为损失函数的基础上,本文引入了感知结构损失构成了复合损失函数。为生成更加清晰自然的无雾图片,本文使用WGAN 对生成图片进行细致优化,从而生成更加清晰真实的无雾图像。
2 相关工作
2.1 大气散射模型
在计算机视觉领域,为了克服雾霾引起的图像失真问题,McCartney[7]提出了可以用来描述有雾图像形成过程的大气散射模型,其公式如下:
其中,I(x)为有雾图像,J(x)为无雾图像。A(x)为大气光值,代表大气光强度。t(x)为透射率,表示光线通过大气媒介传播到达成像设备过程中没有被散射的部分,x代表像素位置。式中右边第一项为直接衰减项,代表经过大气衰减后的物体的反射光,而第二项则表示为经过大气散射得到的增强的大气光。
当大气成分均匀,即A(x)恒定时,透射率可以表示为:
其中,β表示大气的衰减系数,d(x)是指场景深度。从公式中不难发现,场景深度和大气光值对图像去雾效果有很大的影响。在单幅图像去雾中,仅有雾图像已知,大气光值和场景深度均未知,而且关于大气成分均匀的假定并不一定成立。因此,如何对雾霾图像有效去雾是极具挑战性的问题。
2.2 生成对抗网络及其改进
生成式对抗网络(generative adversarial networks,GAN)是Goodfellow 等[12]设计出的一种深度学习模型。GAN由生成器G和判别器D构成。受二人零和博弈启发,生成器G尽可能生成逼真样本欺骗判别器D,而判别网络D尽量区分生成样本和真实样本。原始GAN以其具有生成良好感知质量的样本的能力而闻名,然而依旧存在模型崩溃、梯度弥散等缺陷。为了解决GAN 训练不稳定,模型容易崩溃的问题,Arjovsky等[10]从理论上分析了JS(Jensen-Shannon)散度不适合衡量分布之间不相交部分的距离,转而使用Wasserstein(Earth-Mover)距离W(q,p)去衡量生成数据和真实数据分布之间的距离,进而提出了WGAN。WGAN的损失函数如下:
这里,D 为满足Lipschitz连续的非线性函数集,Pg为生成数据分布,Pr为真实数据分布,在使用Wassers-tein 距离优化方式训练WGAN 时,判别网络D需要满足Lipschitz 连续性,即判别值近似于K×W(Pr,Pg),其中K作为Lipschitz 常数,代表判别网络梯度值的上界,而W(Pr,Pg)为Wasserstein距离,在网络训练时,通过将判别网络权值限制为[-c,c]的方式,确保权值参数的有界性,进而间接限制其梯度信息。
3 基于WGAN的图像去雾算法
本文借鉴生成对抗网络在低级视觉任务中的成功应用[13-15],提出了一种基于WGAN 的图像去雾模型。该模型采用残差学习思想将退化图像中雾的特征剔除得到清晰图像的特征,从而实现端到端去雾操作,并使用WGAN对生成图像优化,使生成图像更加清晰逼真。
3.1 生成网络框架
本文将大气散射模型式(1)重新编写:
其中,e(x)是指有雾图像中有雾部分信息。这与图像去噪模型类似,DeblurGan[15]利用深度残差思想将原始图像中高斯噪声的特征剔除,得到清晰图像的特征,并实现端到端的去噪。与之相似,本文利用深度残差学习,得到无雾图片的特征,实现端到端的去雾。本文生成网络模型主要由三部分组成,分别是多尺度特征提取、特征学习以及清晰图像重建,其网络结构图如图1所示。其中,f表示卷积核的尺寸,c为通道数,代表卷积核的个数,s为卷积步长,若不写则默认为1。
Fig.1 Structure of generator network图1 生成网络结构图
(1)多尺度特征提取。文献[4-5]证明多尺度特征可以保留原始图片更多细节信息,提高网络在不同尺度下的鲁棒性,有利于图像去雾。本文首先采用64个卷积核对有雾图片进行卷积操作得到初始特征图,然后与Inception_v1[16]类似,分别使用1×1、3×3、5×5 和7×7 四种不同尺度的卷积核对原始特征图进行特征提取,同时为控制模型规模、简化模型,这里每种卷积核个数置为16,并将各尺度特征图叠加,作为有雾图像的多尺度特征。
(2)特征学习。本文使用全卷积密集块网络(fully convolutional DenseNet,FC-DenseNet)模型从原始图像特征图中学习雾的特征信息。类似于U-Net[17],FC-DenseNet 主要分为编码部分、解码部分和跳跃连接三部分。在编码部分,使用5 组稠密块(dense block,DB)及相应的池化模块(transition down,TD)提取特征;在解码部分,使用5 组Dense Block 及相应的上采样模块(transition up,TU)融合特征。在编码与解码过程中,由于使用了下采样操作,对获取到的特征信息造成了一定程度的损失,因此在上采样过程中,将上采样得到的特征图与编码部分下采样之前的特征图级联,避免特征信息丢失,并作为下一层DB的输入;在编码过程中,每一个DB的输入特征和输出特征又进行了级联,但是在解码过程中,DB的输入和输出没有级联,其原因在于编码和解码过程中相同维度的浅层特征与深层特征已经存在跳跃连接,如果将其输入与输出级联,便会出现特征冗余的情况;同时特征数量的线性增长导致内存需求过大,计算速度降低的情况。
DB 块结构组成与DenseNet[18]类似,在一个DB中,每一层的输入是前面所有层的输出的总和,每一层的输出又构成了其后每一层的输入,通过将特征图重复叠加,实现特征的重用。本文采用的DB块结构,如图2 所示。其中,C 表示通道级联操作。一个DB 包含4 层layer 层,每个layer 层包含批标准化(batch normalization,BN)层、修正线性单元(rectified linear unit,Relu)层、卷积(convolution,Conv)层,通道数为16;一个TD 块包含了BN 层、Relu 层、Conv 层,通道数为64以及最大池化层;一个TU块包含上采样层操作。
Fig.2 Structure of DB图2 DB网络结构
(3)清晰图像重建。上述两部分分别求得原始图像特征和雾的相关特征。本文借助残差学习[19]的思想,将原始图像特征与雾的特征相减,得到清晰图像的特征,并通过两层卷积完成清晰图像的重建。其具体操作如图1 所示,主要包括一个Elementwise subtraction 层;一个特征融合层包含通道数为64 的Conv层、BN层和Relu层;一个通道数为3的Conv层作为输出层,其激活函数为双曲正切(hyperbolic tangent,tanh)函数。
3.2 判别网络框架
判别网络的作用是尽可能把真实图像和生成网络生成的图像区分开来。和大多数GAN网络结构一样,判别网络的结构设计一般不用太复杂,本文的判别网络如图3所示。不同于原始GAN的判别器作为一个真假二分类器,在WGAN 中判别器D(x)的目的是近似拟合真实样本与生成样本之间的Wasserstein距离,属于回归任务,因此网络输出端并没有使用Sigmoid激活函数而是直接输出结果。
Fig.3 Architecture of discriminator network图3 判别网络结构
3.3 损失函数
本文的损失函数由两部分组成,WGAN 的对抗损失和生成网络的内容损失。其公式如下:
其中,因为网络更加注重生成图片的质量,为凸显图像内容损失,本文置λ1=1,λ2=100。LWGAN为对抗损失,大多数条件生成对抗网络(conditional generative adversarial networks,CGAN)[20]的论文都使用vanilla GAN objective 作为损失函数,这种损失函数在网络训练时会带来梯度消失等不稳定情况,本文使用WGAN 作为判别函数,主要原因在于不同于原始GAN,其不需要纠结如何平衡判别网络和生成网络的训练程度,大大提高了训练的稳定性,同时也避免了相应的生成样本分布不均[21]的问题。式(3)为WGAN的损失函数,在优化生成网络时,其判别网络固定,因此仅需优化式(3)中后面部分。其生成网络的对抗损失函数如下所示:
这里,Pg为生成清晰图像数据分布,D(x)为判别网络输出。
Lcontent为生成网络的内容损失,其直接影响到生成图片的质量。为确保生成图像结构和内容上的相似性,本文采用复合损失函数对生成图片进行优化。其由两部分组成,其公式如下:
其中,LMSE即MSE 损失,LVGG为感知损失。MSE 损失是一种低级特征约束,其侧重于像素级别误差调整,表现在生成图像上,则是更注重图像颜色内容信息。这里将生成伪清晰图像和真实标签图像做均方误差,其公式如下:
其中,C为图像高级语义特征的通道数,W×H为图像特征维度大小。F为VGG16网络模型特征提取,本文采用第4 层池化层之前的卷积层作为高级语义特征图,对特征图进行MSE 损失计算从而得到感知损失,网络越深,特征越抽象。
本文提出的改进卷积神经网络的图像去雾模型,其优势如下:(1)通过简化大气散射模型,采用残差学习思想将退化图像中雾的特征剔除得到清晰图像的特征,从而避免在预测中间变量上的损失,相较于其他算法去雾效果更优;(2)通过构建FC-DenseNet进行特征提取,相较于其他方法,该模型能够在网络规模较小的情况下,充分提取和融合图像特征;(3)复合内容损失函数兼顾生成图像内容和结构上的信息,并使用WGAN对生成结果细致优化,生成清晰逼真的无雾图像;(4)该网络的输入是整幅图像,与其他算法切块操作[23]相比,一定程度上可以有效防止算法的过拟合,提高算法的泛化能力。
4 实验结果
为评估本文模型性能,本文在合成数据集和真实场景图像上与几种先进的单幅图像去雾算法进行比较,本文选取的对比算法主要包括DCP[2]、CAP[3]、DehazeNet[4]、MSCNN[5]、AOD_Net[6],其 中DCP 和CAP算法为基于先验特征的传统方法,DehazeNet和MSCNN 为基于多步学习的深度学习方法,而AOD_Net为端到端图像去雾算法。此外,为证明本文网络模块设计的有效性,本文对模型进行剥离对比实验。
4.1 实验设置
数据集:由于目前的研究中没有真实场景的雾霾图像数据集,与已知基于深度学习的图像去雾算法[4-5]类似,本文采用NYU Depth Dataset V2[24]作为基础数据集,该数据集包含1 449 张640×480 的室内彩色图像及其场景深度图。本文选取其中1 200 张图片作为基础训练数据集,选取其余200张图片作为基础测试数据集。针对每一张图片,随机生成4组大气光值α和大气衰减系数β,其中α∈[0.7,1.0],β∈[0.6,1.6],然后根据式(1)计算出4组透射图和合成有雾图像。本文共生成4 800 张有雾图像及其透射图作为训练集,生成800 张有雾图像作为合成图像测试集。为验证本文模型的泛化能力,本文收集了100张真实场景图片作为真实场景测试集。
参数设置:在网络训练阶段,每层卷积核初始化为高斯分布,偏置初始化为0,学习率初始化为0.000 1,模型训练采用小批量训练的方式,batch-size为2。本文模型的训练使用Keras 深度学习架构,采用RMS-prop算法优化模型参数,训练次数为100。实验机器为带有Nvidia GTX1080 GPU的计算机。
4.2 合成数据集上实验结果分析
为验证本文算法的去雾效果,本文在合成数据测试集上将本文模型与现有经典算法进行对比。在合成数据集中,有雾图像对应的清晰图像已知,因此能够定性和定量地评估模型性能。
图4 所示为测试集中比较典型的两个样本的去雾结果。其中第一幅图像背景较为昏暗,图像细节恢复无疑是个挑战。从图中不难发现,传统方法DCP和CAP 去雾结果相较于基于学习的方法,颜色更加鲜艳,但存在过度去雾的情况,图中主要表现为去雾后整体颜色偏深,在地毯处丢失相关细节特征。而基于学习的方法DehazeNet、MSCNN、AOD_Net均存在去雾程度不够的情况,相比之下本文算法去雾结果与原图更相似。第二幅图图像背景较为明亮,其难点在于在去除雾的同时保留远景的细节信息,从图中不难发现DCP、CAP算法过度去雾,造成颜色失真,具体表现为图中地砖颜色过深;而基于学习的算法依旧存在去雾程度不足,图像细节信息丢失的问题,具体表现为图中墙壁的亮度较为昏暗和窗外树的细节信息缺失。而本文算法去雾效果更贴近原图。不难发现,本文所提的算法总体适用性强,去雾结果与原始无雾图像也最为接近。
Fig.4 Dehazing results on synthetic images图4 合成图像上的去雾结果
为了从客观角度评价本文算法的优劣,本文采用峰值信噪比[25](peak signal to noise ratio,PSNR)和结构相似度[26](structural similarity index,SSIM)作为客观评价指标。峰值信噪比反映了图像结构信息的完整性,其值越高,图像受噪声的影响越小。结构相似度反映了图像结构信息的相似性,其值越大,图像越相近,失真差异越小。六种算法去雾前后的SSIM和PSNR指标结果如表1所示。与其他算法相比,本文算法结构相似度指标值更高,说明本文算法在去雾前后图像的结构更为相似,在图像边缘细节处复原效果较好;且本文算法在峰值信噪比指标上明显占有优势,表明本文算法的去雾图像与原始清晰图像像素级差异小,受噪声影响更小,图像更加清晰,去雾质量得到显著提高。
Table 1 SSIM,PSNR values on synthetic dataset表1 合成数据集的SSIM、PSNR值
4.3 真实图像上的实验结果分析
本文模型在合成雾天图像数据集上进行训练,并在合成测试集上取得了不错的去雾效果。由于真实场景与合成雾天图片在视觉观感上依旧存在差距,为验证本文算法的泛化能力,在自然场景数据集上将本文算法与其他算法进行比较,去雾结果如图5、图6所示。
图5 为一般场景去雾效果图,其中,第一幅图为人物场景图像,传统算法DCP、CAP在面部和头发的处理上出现了色彩失真、去雾过度的现象,基于学习的方法DehazeNet、MSCNN、AOD_Net依旧存在去雾不完全的情况,并且在细节处理上依旧存在瑕疵,主要表现在头发颜色和背景信息的复原上;第二幅图为风景图,从图中不难发现,传统方法和基于学习的方法会出现颜色失真、场景恢复不够自然的情况,而本文算法可以在保护图像颜色与对比度信息的情况下,生成更为清晰的图像。
Fig.5 Dehazing results on general images图5 一般场景去雾效果图
Fig.6 Dehazing results on complex images图6 复杂场景下的去雾效果图
图6 为复杂场景下的实验效果图。复杂场景下的去雾侧重在大气光值较低、背景较为昏暗的情况下,尽可能恢复图像的细节信息,这是图像去雾中一大难点。图6中第一幅图为阴雨天气,第二幅图为夜间有雾图像。实验结果表明,传统算法对此类图像的处理不太理想,均出现颜色扭曲和色彩失真的现象。本文算法效果相较于深度学习的方法(DehazeNet、MSCNN、AOD_Net),去雾图像细节信息保存完整,颜色恢复比较自然,去雾程度适中。因此可知,本文算法在自然雾天图像的处理优于其他对比算法,适用性强。
4.4 模型对比实验
为验证本文模型设计的合理性,本文对提出的模型进行剥离实验对比。对比模型主要包括:(1)仅使用多尺度特征提取模块和FC-DenseNet 特征学习模块的model_1,其损失函数为MSE损失;(2)仅使用本文生成网络模型的model_2,其损失函数为MSE损失;(3)使用本文生成网络模型,损失函数为MSE 损失,并使用WGAN 进行优化的model_3;(4)本文模型,即使用本文生成网络模型,损失函数为MSE损失和感知损失构成的复合损失,使用WGAN 进行优化。本文在合成测试集上对几种模型进行定性和定量的评估。
表2 中所示为各模型在合成数据集上各项指标的计算结果,与model_2相比,model_1未引入残差学习思想,反映在网络结构上,则是缺少Elementwise subtraction层,网络参数一样,实验数据表明这两种模型相差不大;与model_2 相比,model_3 使用WGAN对生成结果进行细致优化,从实验结果中可以看出,model_3的SSIM和PSNR均比model_2高,这说明生成对抗网络能够促使网络优化,对图像去雾有利;与其他模型相比,本文模型的SSIM 和PSNR 值均有所降低,原因在于为更好恢复图像细节,本文模型中加入了感知损失,这样很好地恢复图像高频细节信息,但也会造成一些像素级别的信息丢失。
Table 2 SSIM,PSNR values of different models表2 不同模型的SSIM、PSNR值
表2中的数据是在合成测试数据集中计算的,合成测试集与训练集相似度很高,致使两种评价指标的值都比较高。本文在真实场景下对模型的泛化能力进行评估,由于model_1 与model_2 的去雾结果相差不大,本文只选取model_2 进行实验对比,实现结果如图7 所示。通过对比不难发现,从整体上看,三个模型均有不错的去雾效果。但是,未使用生成对抗网络的model_2生成的图像颜色比较深,出现少许颜色失真。而使用WGAN 对网络进行优化后的model_3生成图像更为逼真,但出现了一些细节信息丢失的情况。而本文模型通过使用感知损失,获得了细节更加丰富的图像去雾效果。总体上说,本文提出的模型泛化能力强,去雾效果更优。
Fig.7 Dehazing results of different models图7 不同模型的去雾效果
5 结束语
本文提出了一种结合FC-DenseNet 和WGAN 的端到端图像去雾算法,通过简化大气散射模型,采用残差学习思想将退化图像中雾的特征剔除得到清晰图像的特征,从而实现端到端去雾;在特征提取过程中,本文利用DenseNet网络规模小,可以特征重用的机制,通过构建FC-DenseNet充分学习图像中雾的特征;最后,本文使用复合内容损失函数兼顾生成图像内容和结构上的信息,并使用WGAN 对生成结果细致优化,生成清晰逼真的无雾图像。实验结果表明,与其他对比算法相比,本文算法去雾能力更优,且可以用于其他低级视觉任务中。