基于改进生成式对抗网络的图像去雾算法研究
2021-04-29王铭姜淑华吴杰王春阳
王铭,姜淑华,吴杰,王春阳
(长春理工大学 电子信息工程学院,长春 130022)
户外环境下采集到的图像往往都会受到不同程度的雾气的干扰,即使是在晴朗的天气下,图像也有可能被薄雾干扰,在一些高精度要求的科研任务中,这将造成十分不利的影响[1]。所以,如何有效地去除图像中的雾气,在不丢失图像细节信息、不引入额外干扰信息的前提下,尽可能地还原图像的色彩、对比度等,提高图像的使用价值,这些研究都具有十分重要的研究意义与现实意义,是当今图像处理领域一大热点问题。
雾气一般可分为两种:一种是自然形成的雾,空气中的小水珠同空气中的尘埃结合或是进一步凝聚,在无风的情况下,形成了弥漫在空气中的小水滴,大量的小水滴便形成了会对视野造成干扰的雾;另一种是由于城市中工厂、汽车排放所产生的雾,这种雾气是由于排放废气中含有大量的烟尘小颗粒,散布在空气中形成了雾。两者都会对光线产生吸收、散射,进而影响被观测物体传输到采集设备镜头的光线,形成了带有雾的、低质量的图像[2]。
从图像去雾的原理来分,把图像去雾方法分为基于图像增强的去雾方法和基于模型的去雾方法[3]。基于图像增强的去雾方法是不考虑雾天图像成像模型的去雾方法,该方法从结果出发,忽略雾天图像的形成机制,仅从雾天图像自身具有的低亮度和低对比度的特征,根据实际任务的不同,对图像中需要的部分信息进行修饰和增强,最终改善和提高图像的质量[4]。但是基于图像增强的方法都只是通过对图像本身进行操作,一味地试图通过增强色彩或者增强对比度的方式实现图像的去雾操作,这种去雾方式没有考虑到具体的雾天图像形成机制,在处理方式上没有基于雾天图像特点的理论指导,去雾后的图像容易产生增强过度等问题,反而降低了图像的清晰度,故此类方法实际应用有限。另一种基于模型的图像去雾方法包括基于场景深度已知的去雾算法,基于辅助信息求解场景深度信息的去雾算法,基于先验条件的去雾方法[5]。然而该类算法仍然存在颜色退化、透射率估计不足等问题。
针对当前去雾方法人工设计模型提取特征不完备的特点,基于生成对抗网络提出了新的图像去雾方法,该方法利用生成对抗网络的生成器,以有雾图像为基础,生成尽可能真实的去雾后图像[6]。本文提出的方法从网络结构上调整图像的输入方式,降低了模型的计算参数,减少训练模型的时间,同时使用局部颜色直方图匹配,有效防止了颜色的退化,使去雾图像更加清晰。
1 Pix2pix与cycleGAN网络模型
Pix2pix是GAN的一种改进模型,相比于从前的单图片的图像去雾,它成功地实现了批量图片的去雾应用[7]。这一章分别从两个模型的结构和损失函数进行分析,在这之前,首先介绍一下GAN的概念。
1.1 使用GAN进行图像合成
GAN(Generative Adversarial Networks),意为对抗生成网络,它是一种无监督的学习方法,它巧妙的利用“对抗”的思想来学习数据并生成全新的样本[8]。GAN 主要由生成器 G(Generater)和鉴别器D(Discriminator)两部分组成:其中生成器G负责生成图片,它通过接收到的一个随机噪声z来生成的图片记为G(z);鉴别器D负责判别一张图片是不是“真实的”,设它的输入x为一张图片,输出D(x)表示x为真实图片的概率,若输出为1,代表是真实图片的概率为100%,若输出为0,代表不可能是真实的图片[9]。在训练的过程中生成网络G的目标是尽量生成真实的图片去欺骗鉴别网络D。而D的目标是尽量把G生成的图片和真实的图片区分开来,这相当于网络G与网络D之间的一场“博弈”,最后的结果是使网络D生成的图片最可能接近真实图片。这场“博弈”其实就是GAN的对抗损失函数的优化过程。
1.2 GAN的对抗损失函数
整个损失函数的式子由两部分构成。x表示用于训练的真实图片的训练集,pdata表示图片分布,G代表通过训练得到的生成器,pz代表噪声,其中pz是已知量,pdata是未知量。根据交叉熵损失GAN构造了公式(1)的损失函数:
其中,Ex~Pdata(x)指在直接训练时用到的样本真实输入;Ez~pz(z)是指从已知的噪声中提取的样本;G希望生成器生成的图片接近真实为好,此时V(D,G)越小,D希望V(D,G)越大越好,二者进行通过梯度下降的方法,相互博弈,交替优化,当训练结束时,就可以从Pz(z)中随机取一个噪声,经过G运算后生成新的样本[10]。
1.3 Pix2pix的损失函数
与GAN的目标函数相比在Pix2pix的优化目标中,只需要加入条件y即可,具体损失函数如公式(2)所示:
式中,G的输入为一个Y类图像y;输出为生成图像G(y);D的输入为一个X类图像x,一个Y类图像y。D要判断x图像是否是真正的y对应的图像,并输出一个概率。这里噪声z对输出结果影响很小,所以舍去z以达到模型的简化。此时由于数据集不是成对的,可能导致映射F将所有x都映射为Y空间中的同一张图片,从而导致训练的无效化。对此提出了循环一致损失的概念,并提出了CycleGAN模型来对数据集图片进行整体去雾[11]。
1.4 CycleGAN的双射映射原理
若将对抗性损失应用于两种映射,需要再假设一个映射G来实现Y空间的图片y转换为X中的图 片G(y)[12]。CycleGAN 同 时 学 习F和G的 两个映射,实现把一个X空间内的图片风格转到Y空间域的图片,也可以把Y空间域的图片风格转换到X空间域。数学表达式要求F(G(y))=y,G(G(x))=x。循环一致损失函数定义为:
这里为鉴别器G引入了一个鉴别器DX,用来判别反向映射的图片真假。最后的目标函数对如下:
参数λ是用来权衡两种损失函数之前的相对重要性的。λ越大,训练得到的模型循环一致性越好;λ越小,生成的图片与目标域图片的差距越小[13]。因此,CycleGAN模型可以看作是公式(5)所表示的优化问题:
F和G的目标是最小化该目标函数,而DX和DY的目标是最大化该目标函数。
CycleGAN的主要应用是具有不同风格图像之间的相互转换,相较于Pix2pix模型,其最大的贡献在于循环一致性损失的引入[14]。使其能够利用非成对数据(unpaired data)进行训练,可扩展性及应用性更广。图1为CycleGAN的网络型。
图1 CycleGAN结构示意图
图2的模型延续使用了GAN的对抗损失函数,同时能在X,Y双域进行相互映射。它的生成网络在参数优化上存在一定改进空间。
图2 使用不同尺寸的patchGAN生成的图像
2 基于CycleGAN去雾网络的改进
CycleGAN在去雾方面已经达到易获得图像集、成像质量高的要求,但是由于鉴别器和生成器的天生网络结构不足,则可以通过调整鉴别器输入方式,使整个网络训练的参数变少,加快模型收敛。同时对数据集进行颜色直方图匹配过程,利用改进后的数据集可以生成颜色域更加丰富的图片。
2.1 基于patch的鉴别器的改进
CycleGAN中对鉴别器的要求不是很高,一般的GAN是只需要输出一个true or fasle的矢量,这是对整张图像的评价,则在鉴别器输入端就不必以一整张图作为输入,只需对通过卷积层逐次叠加而最终生成的N×N的一个图像patch进行判别就可以了,其中的每一个元素,实际上代表着原图中的一个比较大的感受野,也就是对应着原图中的一个patch。
图2比较了patch和整张图进行计算的效果。最左边不使用GAN而使用L1损失,最右边依次为 1×1,16×16,70×70,256×256的 patchGAN(patch尺寸为在去雾训练集下实验的各个实验尺寸聚类得到),由于输入图片尺寸是256,所以最右边的256×256的patchGAN相当于对整张图进行计算,这里引入图像质量评价指标FCN,对数据集中去雾图片进行各个尺寸的patch输出图像评估,FCN是一种评价图像性能的指标,它由像素准确度、平均准确度和Class IOU三个衡量因素组成。FCN是对图像进行像素级分类,表1为 patch取 1×1,16×16,70×70,256×256四种不同尺寸下的输出图像FCN的指标值。
表1 四种不同尺寸patch方式下的FCN指标
从图中可以看出,使用1×1和16×16的patch⁃GAN产生的图片效果不算很好,原因在于patch取的太小了,但是70×70的patchGAN产生的图片已经和整体计算几乎没有区别,因此本实验选择对图片每个70×70的patch进行计算概率,这样做可以加快计算速度以及加快收敛。
图中L1是一种正则化,设下(x,y)是一个真实的图片对。G生成的是G(y),那么G(y)应该接近真实的图像x,因此可以在G(y)和x之间定义L1损失如下:
它可以在损失函数中给每个参数加上权重,引入模型复杂度指标,从而抑制模型噪声,减小过拟合,同时加快模型收敛并提高生成图像的精度。
该部分的网络结构图如图3所示。
图3 鉴别器网络图
与图像分类任务不同,图像风格鉴别任务依赖于图像的局部特征。所以,鉴别器网络D被设计的较浅。图中经过4个过滤器个数依次为64,128,266,512的卷积层,卷积核大小为4 × 4,移动步长为2,经计算原1×256×256×3的图片经过这四个卷积层后输出尺度为1×16×16×512。在平层之后,网络经用一个3×3卷积层最终输出尺度为1×16×16×1,此尺度在降低了分辨率编码后可用于基本局部特征的分类,并获得分类返回。
为防止加深网络深度带来梯度弥散或梯度爆炸,在每层卷积层加上一个BN(batch normal⁃ization),加速网络收敛的同时缩小输入空间,从而降低调参难度。每层卷积层的输出要通过一个激活函数,以防止训练模型的过拟合,原网络中采用的激活函数是Relu,函数图像如图4所示。
图4 Relu函数曲线
当x>0时,梯度成函数趋势,不会随着训练轮数的增加而达到饱和,但考虑到原激活函数Relu对学习率的大小比较敏感,选择采取Leaky⁃Relu形式的激活函数。函数图像如图5所示。
图5 LeakyRelu函数曲线
LeakyRelu函数是Relu函数的变体,对输入小于0部分的反应有所变化,减轻了Relu函数的稀疏性,可以设置“negative_slop”这个系数保证在输入小于0的时候有微弱的输出。本实验采用α=0.2的LeakyRelu。
2.2 局部颜色直方图匹配
基于GAN去雾后的图像颜色存在一定退化,图片的色调变成了暗黄色,失去了原来色彩丰富、对比明显的特点,影响现实感。因此,本文使用局部颜色直方图匹配的方法来解决这一类的问题,对去雾后的图片进行进一步增强。局部颜色直方图匹配,是指在全局颜色直方图匹配的基础上,将图片划分为面积相等的m×n块。如图6所示,将源图像S划分为m×n个小块:
图6 局部颜色直方图匹配原理图
将目标图像C划分为m×n个小块:
分别对每个对应块进行直方图匹配,得到每个块的源图像S和目标图像C概率分布函数:
再分别求得每个对应分块的逆映射:
将经过匹配后的每个小块ti(i=1,2,...,m×n)按编号顺序拼合,则可得到经过匹配后的图像T:
3 实验结果
实验环境为ubuntu16.04系统,深度学习框架tensorflow,python2.7编程语言。实验采用的数据集均为海康威视彩色相机拍摄,其中1 500张户外晴朗场景图作为trainA,1 000张雾天下的场景图作为trainB,采用改进后的Defog-GAN网络进行训练,设置学习率为0.000 1,迭代次数为9 000轮,每1 000轮保存一次模型。
3.1 评价指标
(1)均值
均值是指就整个图像而言,所有像素的平均值,越大的均值代表了图像整体亮度越高,其图像质量越好,其计算公式为:
(2)标准差
标准差是指相对于均值,图像像素灰度值的离散程度。越大的标准差表示图像的像素的灰度级分布越分散,图像整体越平衡,其计算公式为:
(3)熵
熵用来描述图像的平均信息量,熵值越大表示图像包含信息越多,通常意味着图像质量越好,计算公式为:
式中,P(l)是一个概率,表示了灰度值为l的像素值在图像中出现的概率,可通过频数计算。
3.2 去雾算法比较
本文选取传统去雾效果较好的DCP、NLID算法作为本次实验的对比进行实验。得到如图7所示的三个算法结果对比图。
图7 DCP、NLID与本文算法结果图
表2为三种算法去雾前后效果图的数值评价指标,从数值角度上分析,本文方法在亮度、信息量、像素分布情况与其它三种方法近似或略优,生成去雾图像整体亮度高于DCP、NLID算法,图像整体均衡程度和包含色彩信息优于其他算法,然而提供的图像边缘信息略显不足,没有增强景物之间的对比度,优点是保证了去雾前后没有色彩的失真。
表2 去雾前后图像效果评价
在相同数据集和配置文件下将两个模型训练10个周期,共做了五组实验,如表2所示。
表3 相同条件下改进前后训练10周期的时间/(单位:h)
实验表明改进鉴别器输入方式后的网络模型训练中有效的节省了计算量,使模型训练模型的平均时间要比之前快6.07%。
4 结论
通过实验表明本文提出的基于生成式对抗网络的Defog-GAN算法在去雾效果上优于传统算法,去雾后的图像整体亮度、整体均衡程度偏高,色彩信息丰富。通过对去雾后的图像进行局部颜色直方图匹配,有效地解决了颜色退化的问题。改进网络鉴别器的输入方式,大大降低了参数计算量,缩短了模型的训练时间。