基于Msmall-Patch训练的夜晚单幅图像去雾算法——MP-CGAN
2020-06-06王云飞王园宇
王云飞,王园宇
(太原理工大学信息与计算机学院,山西晋中030600)
(*通信作者电子邮箱w_h7377@163.com)
0 引言
雾是悬浮在空气中的微粒子,会对光造成散射、折射等现象,在夜晚光照强度低的情况下,雾会加重色彩失真、能见度低的程度,给人的户外行动造成不便,因此,如何有效去除夜间雾具有研究意义。
现有夜间去雾方法大都是对白天去雾方法的改进,如对暗通道先验(Dark Channel Prior,DCP)[1]与大气散射模型[2]改进:文献[3]提出用颜色转移法[4],将夜晚图片转换为灰色图片,结合DCP 去雾,结果存在伪影;文献[5]提出用光照补偿实现光照平衡后得到大气光,结果出现颜色失真;文献[6]提出用层分离技术[7]去除光辉,结合DCP 去雾,结果出现噪声;文献[8]提出用局部大气光与全局大气光的均值作为大气光值,其结果出现颜色失真,这是因为大气光取值不准确;文献[9]在文献[6]基础上使用超像素算法去雾,其计算量较大;文献[10]使用图像融合方法实现去雾,其结果存在伪影;文献[11]提出用最大反射先验得到大气光,其取得的大气光值存在偏差;文献[12]提出用权重熵估计透射率,结合DCP 去雾结果存在伪影。综上所述,用这些方法实现夜间去雾会出现颜色失真、伪影及噪声等现象,这是因为相对白天,夜晚大气光不均匀,因此,这些方法取得的中间参数大气光及透射率值不准确,导致恢复图像存在颜色失真、伪影、噪声等现象。方帅等[13]提出通过估计光照图求得大气光值,用信息熵估计透射率,其结果存在伪影,这是因为信息熵估计透射率不准确;杨爱萍等[14]提出将图像分为结构层与纹理层,在结构层用中值滤波器求得大气光值,在纹理层上估计透射率,最后将两者结合去雾,其结果存在颜色失真,这是对大气光取值不准确造成的。
与上述方法相反,文献[15]提出用卷积神经网络(Convolutional Neural Network,CNN)实现从夜晚雾图到清晰图直接去雾,但其恢复图像存在模糊现象,这是由像素损失自身缺陷造成的。近些年生成对抗网络(Generated Adversarial Network,GAN)[16]在图像重建方面取得了不错的效果,其由生成器与鉴别器构成,将噪声输入生成器学习真实数据分布,鉴别器判断数据真假性,其缺点是生成不受控制。为解决GAN生成自由的问题,文献[17]提出条件生成对抗网络(Conditional Generated Adversarial Network,CGAN),将条件与噪声同时输入生成器,目标函数如式(1)所示:
其中:x指输入图片,y指清晰图片,z指随机噪声。但CGAN会引入噪声,对此,文献[18]提出感知损失,即用已经训练好的深层神经网络提取图片高级特征;文献[19]在CGAN 损失基础上加入像素损失,其结果仍存在噪声伪影;文献[20-23]在文献[19]基础上加入感知损失,其结果仍有伪影出现,这说明感知损失不足以消除CGAN 产生的噪声伪影;文献[24]在生成器训练时对鉴别器最后Patch 部分使用Min-Pool方式训练,这是因为得分低的区域是图片中最假的区域,然而,生成器与鉴别器训练是迭代进行的,仅对生成器采取这种训练使得两者训练不同步,造成鉴别器容易将生成器生成的图片误判为真。
鉴于上述分析,由于图像去雾亦属于图像重建,因此本文使用CGAN 实现夜间图像去雾,这跳过估计中间参数步骤,同时避免了像素损失缺点;然而,CGAN 容易产生噪声及伪影,同时容易误判,对此,本文提出基于Msmall-Patch 训练的条件生成网络(Multiple small-Patch training for Conditional Generated Adversarial Network,MP-CGAN)去雾算法,首先对生成器与鉴别器都使用Msmall-Patch 训练,即只对图片的关键部分惩罚,一方面加强了对糟糕区域或容易被误判区域的惩罚,另一方面保持了生成器与鉴别器训练的同步性;与之对应,提出重度惩罚损失,即提取数个最大损失值惩罚图片;另外,为得到更好的去雾效果,提出新的复合损失函数,将重度惩罚损失、感知损失与对抗感知损失结合使用,并对UNet(U Network)网络[25]改进,对其增加多个密集块缓解梯度消失。
1 本文方法
1.1 生成器
生成器的作用是输入夜间雾图片产生清晰图片,除去雾外,生成器还可以保留原始图片的结构与细节,深层的神经网络可以提取更多的高级特征;然而,这也容易造成梯度消失,使网络训练与收敛困难。鉴于上述分析,本文采用的生成器网络结构与文献[26]类似,将UNet 与密集神经网络(Densely connected convolutional Network,DenseNet)[27]结 合 即UDNet(U Densely connected convolutional Network)网络,这是因为DenseNet 网络设计了多个密集块(Dense Block,DB),密集块中的每一层神经元彼此连接,大量短连接缓解了梯度消失,同时加强信息流动与特征复用,减少参数计算量与特征丢失;UNet 用长跳跃连接,将编码器浅层特征直接连接到对称的解码器深层特征,减少低维特征丢失。将两种网络结合使用比单独使用UNet 网络有较好的去雾效果,具体细节在实验2.3节详述,UDNet 网络结构如图1 所示,生成器包括编码器与解码器,密集块中每层神经元之间包括组合操作,其由归一化层(Batch Normalization,BN)、ReLU(Rectified Liner Uints)激活函数及卷积层组成,目的是保持图片大小不变;编码器密集块之间是下采样(Downsampling,D)层,包括卷积与平均池化操作,目的是降低图片维度大小;解码器密集块之间是上采样(Upsampling,U)层,只包括反卷积操作,目的是增加图片维度大小;生成器网络结构参数设置在2.1节详述。
图1 MP-CGAN网络结构Fig. 1 Network structure of MP-CGAN
1.2 鉴别器
鉴别器的作用是判断图片的真假性,将真实图片与假图片对输入鉴别器判断:若为真实图片,鉴别器给出一个接近于一的高分;若为假图片,给出一个接近于零的低分。生成器期望生成的假图片能骗过鉴别器,而鉴别器的目的就是鉴别出真假图片,两者互相抗衡,保持动态平衡训练直到鉴别器无法判别图片真假性停止训练。
与文献[20]相似,本文采用卷积层、BN、LeakyReLU(Leaky Rectified Liner Uints)激活函数组成鉴别器网络,并采用文献[19]提出的Patch GAN 结构,即判别器判断图片每块区域的真假性;然而,本文与文献[19-20]网络结构有以下方面不同:1)利用鉴别器网络多个隐含层提取真实图片与假图片的中低级特征,将特征图误差作为对抗感知损失,以最大限度保留全局结构;2)若生成器训练能力强,会导致其生成的假图片很容易骗过鉴别器,因此采用Msmall-Patch 网络结构,即在原先Patch结构基础上作优化,目的是提取糟糕区域或容易被误判区域,对其重度惩罚,同时使两者对彼此的抗衡能力增强,提高生成图片质量,具体细节在1.3节与1.4节详述,鉴别器网络结构参数设置在2.1节详述,网络结构如图1所示。
1.3 Msmall-Patch训练
文献[19]CGAN 采用Patch 训练,鉴别器输出N×N个概率值,每个概率值表示原图中的某一个区域有多大概率是真实图片;然而,Patch 训练是对多个区域实施平均惩罚,其容易忽略对糟糕区域惩罚,且容易误判;另外,人的视野总是容易被糟糕区域吸引,即使图片中大部分区域很真实,若有一小部分区域是糟糕区域,这幅图片会被认为是质量不好的图片。因此提出对生成器与鉴别器都使用Msmall-Patch 训练,即对提取到的多个小区域实施重度惩罚,这些小区域对应糟糕区域或容易被误判区域,另外,这样保持了生成器与鉴别器训练同步性,会加快训练收敛。具体方式为:生成器训练与文献[24]类似。鉴别器训练时,当输入假图片时对鉴别器最后Patch 部分用Max-Pool方式训练,这是因为假图片中得分较高的区域容易被误判为真实图片;同理,输入真实图片时对鉴别器最后Patch 部分采用Min-Pool方式训练。综上所述,生成器采用Msmall-Patch 训练重点惩罚糟糕区域,鉴别器采用Msmall-Patch 训练提高鉴别器鉴别能力,减少误判。图2(a)展示输入假图片时鉴别器使用Msmall-Patch 训练,可以看出Patch 训练对图片的每一部分都惩罚(图片显示大小为4×4),而Msmall-Patch 训练只对最容易被误判部分惩罚(图片显示大小为2×2,对应图2(b)白框区域)。
图2 Msmall-Patch训练Fig. 2 Msmall-Patch training
1.4 损失函数
1.4.1 重度惩罚损失
Patch 训练对应平均惩罚损失,即对所有损失取均值惩罚图片;公式如式(2):
其中:x指雾图片,y指清晰图片,l、w、n分别指样本图片的长度、宽度与批处理数,E指期望值,avg 指对所有损失取均值。平均惩罚损失会对所有区域实施均匀惩罚,这会造成对噪声伪影出现的区域惩罚力度不够的问题。为解决此问题,与Msmall-Patch 训练相对应,提出重度惩罚损失,即选取数个最大损失值取均值惩罚图片,具体表现为:生成器方面,产生最大损失值的区域对应糟糕区域,鉴别器方面,产生最大损失值的区域对应易被误判区域。因此,使用重度惩罚损失可以加强对噪声的惩罚,其公式如式(3):
其中,num_max指从输出中选取数个最大损失值;图3(a)、(b)展示了平均惩罚损失与重度惩罚损失。可以看出,平均惩罚损失对每个区域都惩罚,而重度惩罚损失只惩罚部分关键(糟糕或被误判)区域。
图3 损失对比Fig. 3 Loss comparison
1.4.2 对抗感知损失
CGAN 会引入噪声,为去除噪声,文献[19]加入像素损失,但像素损失会导致图像全局结构上出现细节丢失、颜色失真和模糊现象,且容易误判,如两幅图像上仅有少量像素不同,人脑识别两幅图像是相似的,像素损失却判断两幅图像有较大不同;为进一步提升生成图片质量,文献[28]提出特征匹配损失,即将真假图片输入鉴别器,对其中某一层隐含层作特征提取,这可以阐述人的视觉感受,解决像素损失的缺点,同时提高对噪声的惩罚,提高生成图片质量。尽管Msmall-Patch训练会加强对噪声的惩罚,但仍有残留,为提取更丰富的中低级特征,去除由CGAN 引入的噪声等,与像素损失不同,本文将对抗感知损失[29]加入生成器损失,其特点是将鉴别器多层隐含层作为特征提取器,将真实图片与假图片输入鉴别器网络提取图片特征,将转换图片与目标图片的特征图误差作为对抗感知损失,其公式如式(4):
其中:x表示真实雾图,y表示真实清晰图片,Di表示鉴别器网络第i层隐含层提取的特征图。
1.4.3 感知损失
尽管引入对抗感知损失会去除一部分噪声伪影等,但仍有残留,为减小颜色失真与进一步提升生成图片细节,本文引入感知损失。与对抗感知损失类似,感知损失[18]也是将CNN网络隐含层作为特征提取器,然而,感知损失是用已经训练好的图片分类网络VGG(Visual Geometry Group)[30]作特征提取;相对鉴别器网络,VGG 有更深的网络结构与多层卷积块,不仅可以保留全局结构,还可以提取更丰富的高级特征与细节,如颜色与纹理方面,在视觉效果上有更好的表现;另外,感知损失不需要成对图片输入网络,而对抗感知损失与此相反,这使感知损失训练参数较少,效率较高。过程是将真实图片与假图片输入VGG 网络隐含层提取高级特征,经过pool4 层之后计算感知损失,公式如式(5):
其中:V表示VGG 网络的隐含层提取的特征图,x指夜晚雾图片,y指真实清晰图片。综上所述,生成器损失为:
其中:W指权重,通过最小化式(6)训练生成器;生成器与鉴别器依次迭代训练,鉴别器损失为:
2 实验
2.1 实验训练及网络结构参数设置
本文使用来自文献[15]中的数据集,图片包括城市、街道及其他普通夜景,数据集包括黄色与白色背景合成雾图,如图4所示;数据集共有20 000张,其中训练集有19 000张,测试集有800 张,验证集200 张。生成器网络结构参数设置:编码器与解码器各包括5 个密集块,每个密集块有4 层神经元,瓶颈层设1 个密集块12 层神经元,通道增长率为15,密集块中的卷积核大小是3×3,零填充为1,步幅为1;密集块之间采用为2×2 平均池化,生成器通道数为C(60)-DB(120)-D(60)-DB
(120)-D(60)-DB(120)-D(60)-DB(120)-D(60)-DB(120)-D(60)-DB(240)-U(60)-DB(240)-U(60)-DB(240)-U(60)-DB(240)-U(60)-DB(240)-U(60)-DB(240)-C(3),其中:C(K)指卷积后输出的通道数,DB(K)指密集块输出的通道数,D(K)指下采样后的通道数,U(K)指上采样后的通道数。
图4 数据集图片Fig. 4 Images in dataset
鉴别器网络结构参数设置:网络共设五层卷积层,其中前两层卷积核大小为3×3,步幅为1,零填充为1;后三层卷积核大小为4×4,步幅为2,零填充为1;鉴别器输出patch 大小为32×32(其中每一个值对应原始图片70×70 区域),Max/Min-Pool 大小为8×8,Msmall-Patch 大小为4×4;鉴别器网络由BN-LeakyReLU-Conv 组成,简写为BLC,则鉴别器通道数为C(64)-BLC(128)-BLC(256)-BLC(512)-C(1)。
模型使用Tensorflow 框架在TitanX GPU 上训练大约15 h;生成器的输入输出大小为256×256×3,鉴别器的输入大小为256×256×6,输 出 大 小 为256×256×1;在 训 练 阶 段,设 置batchsize=10,epoch=250,采用Adam 优化算法训练网络,β1=0.5,学习率设为1×10-4,经过50 次epoch 训练后每个epoch 学习率衰减1×10-6倍,鉴别器与生成器循环迭代训练,设置WA=WI=0.01,WF=0.001,WP=10;VGG 网络输入图片大小设为224×224,每经过25 次epoch 训练验证集进行验证,由于生成对抗网络损失无法指示学习过程,所以在生成图片质量好时停止训练。
2.2 分析网络结构作用
本文采用UDNet 网络,相对UNet 网络来说,UDNet 网络在其基础上增加多个密集块进一步加强信息流动与特征复用;为证明UDNet 网络的有效性,本文在相同条件设置下对UNet 网络也进行训练,图5 展示了两种网络结构的去雾质量效果,尽管UNet 与UDNet 能产生相似结果,但相比UNet(29.54 dB,0.89),UDNet(29.98 dB,0.92)产生较大的峰值信噪 比(Peak Signal-to-Noise Ratio,PSNR)与 结 构 相 似 性(Structural SIMilarity,SSIM)值。
图5 两种网络训练时的评估值变化曲线Fig. 5 Evaluation value-curves oftwo networks during training
2.3 分析损失函数作用
为生成质量更高的图片,本文提出新的复合损失函数;为了验证每一种损失的有效性,本文在验证集上验证,并用表1说明。可以看出,相对平均惩罚,重度惩罚损失在PSNR 上略有提升,在SSIM 上有较大提高,这是因为重度惩罚损失对结构的惩罚程度更大;对抗感知损失在PSNR 上有较大提高,感知损失在SSIM 上有较大提高,这是因为相对对抗感知损失,感知损失提取的特征为高级特征,提取的细节更丰富;复合损失函数使用时PSNR 值与SSIM 值最高。同时,图6 展示了验证集例子在不同损失下的去雾效果,图6(b)表示加入平均惩罚损失虽然去掉部分雾,但引入伪影及噪声(如灯笼处及灯光处),图6(c)表示加入对抗感知损失,发现消除了一部分伪影,但仍有雾残留,图6(d)表示加入感知损失消除了伪影,但在图像细节及颜色保真方面与真实清晰图仍有差距;图6(e)表示重度惩罚损失仍会产生少许的伪影;图6(f)表示加入对抗感知损失消除了伪影;图6(g)表示加入感知损失去雾效果与图6(h)(真实清晰图)较接近,这是因为感知损失能提取更丰富的纹理、颜色特征。
表1 不同损失的去雾质量评估Tab. 1 Dehazing quality evaluation with different losses
图6 不同损失的去雾效果Fig. 6 Dehazing effect with different losses
2.4 合成雾图上的去雾比较及分析
本节将本文方法与其他夜间去雾方法在合成数据集上进行去雾效果比较,用PSNR 与SSIM 作为评估标准。表2 表示图像去雾质量评估,结果表明本文方法无论是PSNR 还是SSIM 都比其他方法较高,这是因为:使用Msmall-Patch训练方法(重度惩罚损失)加强了对糟糕区域或容易被误判区域的惩罚,提升了PSNR与SSIM值;加入感知损失加强了对高级特征的提取,提升了SSIM 值;加入对抗感知损失加强了对中低级特征的提取,尽可能地保留全局结构,提升了PSNR 值。同时,用四个测试集例子进行说明,如图7 所示:前两行表示黄色背景合成雾图,后两行表示白色背景合成雾图,可以看出,文献[5]、文献[6]、文献[9]方法普遍存在着颜色失真(如黑框区域)及雾残留,这是由于对大气光取值不准确造成的;文献[5]及文献[6]方法在图片天空出现块效应、伪影及噪声(如白框区域),这是由于对透射率取值不准确造成的;文献[15]方法去雾后存在模糊现象且仍有雾残留,这是由像素损失本身缺陷造成的;文献[22]方法会出现少量噪声及伪影,这说明感知损失缺乏对低级特征的提取,仅加入感知损失不足以消除CGAN 产生的噪声伪影。而本文方法产生的去雾与颜色保真效果与真实清晰图较接近,这是因为本文方法跳过了估计透射率与大气光步骤,避免了因取值不准确而导致的重建图像出现噪声、颜色失真等现象;另外,使用Msmall-Patch 训练方法(重度惩罚损失)提高了生成器与鉴别器的互相抗衡能力,使生成的图片质量更好;同时结合感知损失与对抗感知损失避免了像素损失缺点,加强了对噪声的惩罚,提升了生成图片细节。
表2 本文方法与其他方法在合成雾图上的去雾质量评估Tab. 2 Dehazing quality evaluation of the proposed method and other methods on synthetic images with haze
图7 本文方法与其他方法在合成雾图的去雾效果Fig. 7 Dehazing effect of the proposed method and other methods on synthetic images with haze
2.5 真实雾图上的比较及分析
尽管本文方法在合成雾图上有较好的去雾效果,为进一步验证本文方法的优越性,在真实雾图上将本文方法与其他夜晚去雾方法及先进CGAN 去雾方法比较,如图8 所示,前两行表示黄色背景真实雾图,后两行表示白色背景真实雾图,可以看出,文献[5]方法虽然可以去掉一些雾,但会出现颜色失真并有大量噪声出现,这是因为其提出的大气散射模型不具有鲁棒性;文献[6]方法虽然可以很好地去掉光辉,但容易出现大量伪影及块效应,这是因为其对透射率取值不准确造成的;文献[9]方法尽管能去掉一些雾及块效应,但仍有雾残留及存在颜色失真,这说明传统大气散射模型不适应夜间去雾;文献[15]方法去雾后存在模糊现象,这说明像素损失对噪声的惩罚能力弱;文献[22]方法会有少量伪影存在,这说明仅提取高级特征不会完全去除伪影;本文方法能产生较好的去雾效果与颜色保真,是因为本文方法跳过估计中间参数步骤,而且针对CGAN 产生的噪声及伪影,提出Msmall-Patch 训练,加强了生成器与鉴别器的同步性训练,加快收敛,提高了生成图片质量,并提出新的复合损失函数提高了对高级与低级特征的提取,加强了对噪声的惩罚,使用UDNet网络减少了特征丢失,因此MP-CGAN模型可以产生较好的去雾效果。
图8 本文方法与其他方法在真实雾图的去雾效果Fig. 8 Dehazing effect of the proposed method and other methods on real images with haze
3 结语
本文提出新的条件生成对抗网络(MP-CGAN)实现夜晚图像端对端去雾,跳过估计透射率与大气光步骤,避免了传统夜间去雾方法的缺点;为验证本文方法优越性,分别在合成雾图与真实雾图与CGAN 去雾方法及其他夜间去雾方法比较,实验表明本文方法具有较好的去雾效果与颜色保真;这证明,本文提出的Msmall-Patch 训练方法提高了对噪声的惩罚力度,复合损失函数提高了生成图片质量;同时,UDNet 网络能更有效地去雾;然而,网络允许输入图片大小固定,不具有灵活性,未来工作研究如何使网络具有更好的灵活性。