张琪东 迟 静 陈玉妍 张彩明
1 (山东财经大学计算机科学与技术学院 济南 250014)
2 (山东省数字媒体技术重点实验室(山东财经大学) 济南 250014)
3 (山东大学软件学院 济南 250101)
图像去雾是图像处理和计算机视觉领域的研究热点,也是一个充满挑战性的难题.雾是由大气中悬浮的细小水滴或冰晶经大气散射后产生的天气现象,带雾图像存在诸多问题,如对比度低、饱和度低、纹理细节丢失、颜色出现偏差等.这类图像实际用于视频监控、自动驾驶、图像识别等领域时,会对现有技术的处理结果造成负面影响.因此,图像去雾作为一种不可或缺的图像预处理技术,具有十分重要的研究意义.
图像去雾方法可分为基于图像增强的方法、基于图像复原的方法、基于深度学习的方法.基于图像增强的方法[1-2]主要通过去除图像噪声和提高图像对比度恢复无雾图像.基于图像复原的方法[3-7]大多以大气散射模型为基础,通过估计透射率和大气光实现去雾,但是容易出现参数估计不准确等问题,影响生成图像质量.基于深度学习的方法[8-19]主要通过卷积神经网络(CNN)实现端到端去雾,相比基于图像增强和图像复原的方法,其生成图像的质量得到大幅度提升,但同时伴随着模型复杂度的提升和运行效率的降低.
在图像去雾中,根据雾浓度对带雾图像进行分类,有助于在图像去雾时选择合适的网络模型,使去雾处理更具有针对性,从而在一定程度上简化网络结构,减少内存占用.但在目前的去雾领域中,对雾浓度分类的研究较少,多数现有雾浓度分类算法[20-23]的准确率有待提升,且没有固定的分类标准.分类网络结构的设计和带雾图像特征的选择作为2 个关键因素,共同影响着最终分类的准确率和识别度.因此,如何借助雾浓度的分类,更具针对性地设计去雾模型的网络结构,使模型能够为不同雾浓度的输入图像选择合适的分支网络,以更灵活地处理,这对于在保证精度的前提下简化网络结构、减少内存占用、提高计算效率具有重要意义.
针对现有去雾模型对浓雾图像去雾效果欠佳、精度和算力难以有效平衡的问题,本文提出一种新的图像去雾方法,主要贡献有3 个方面:
1)提出一个基于雾浓度分类与暗-亮通道先验的多分支去雾模型,该模型包括轻量级雾浓度分类器和基于暗-亮通道先验的多分支去雾网络2 个部分.前者对输入带雾图像进行分类,输出雾浓度标签;后者根据标签针对性地选择相应的分支去雾网络,恢复无雾图像,从而实现图像去雾质量与网络计算效率的良好平衡.
2)提出新的暗通道先验损失函数与亮通道先验损失函数,用于约束分支去雾网络.该损失函数可以增强模型去雾性能,提高生成图像的对比度,使去雾后的图像更加清晰.
3)提出一个新的雾浓度分类方法,并基于该方法提出一个新的雾浓度分类损失函数.该损失函数的引入,可使模型依据带雾图像的暗通道特征和恢复难度,并结合生成图像的质量与模型的计算效率,得到对带雾图像更加合理和准确的分类结果.继而依据分类结果,由相应的分支网络处理带雾图像,从而在保证精度的前提下,有效提高模型的效率,减少内存的占用.
早期的传统去雾方法多数是基于图像增强和图像复原的方法.文献[2] 对图像进行偏色检测校正,通过亮度和对比度增强以及饱和度补偿获得无雾图像.文献[3]通过高阶滤波迭代优化透射率,利用大气散射模型复原无雾图像.文献[6]提出暗通道先验(dark channel prior, DCP),指出室外无雾彩色图像的大多数图像块中通常存在一个像素值很低的颜色通道,并基于DCP 和大气散射模型,通过暗通道图来估计透射率和大气光,从而实现先验去雾.该方法广泛应用在图像去雾领域中,但其生成图像存在整体颜色过暗和局部细节模糊等问题.基于暗通道先验,文献[7]提出了暗通道与亮通道相结合的去雾算法.亮通道先验理论的基本思想是,在最模糊的图像块中通常存在一个像素值很高的颜色通道.然而,基于先验的去雾算法普遍存在透射率估计不准确、天空区域过曝、图像颜色过暗等缺点.综上,传统方法虽然运行速度较快、实现较为简单,但去雾效果不理想.
随着深度学习技术的兴起,利用卷积神经网络恢复无雾图像的研究取得较大进展.早期的深度学习算法大多基于大气散射模型,利用卷积神经网络估计大气散射模型的参数.文献[8]利用神经网络估计带雾图像的透射图,通过大气散射模型实现去雾.文献[9]提出了基于多尺度卷积神经网络的去雾模型,通过不同尺度的网络估计并优化透射图,应用大气散射模型输出无雾图像.文献[10]将大气散射模型直接嵌入到网络中,利用联合训练实现端到端去雾.文献[8–10] 所述的方法虽然在去雾效果上得到了不同程度的提升,但仍然需要估算透射率和大气光值,因此难以避免参数估计不准确和无法生成高精度图像等问题.
近年来,基于深度学习的很多图像去雾技术不再依赖大气散射模型,无需估计透射率和大气光,而是利用输入的带雾图像,通过训练卷积神经网络模型,直接生成无雾图像.文献[11]将透射率和大气光统一为一个参数表示,并构建轻量级卷积神经网络估计该参数的值,进而生成无雾图像.文献[12]将注意力机制与图像去雾相结合,提出了基于特征注意的深度去雾网络.文献[13]提出一种基于注意力机制的多尺度去雾网络,通过通道注意力机制将不同尺度的特征和经过残差块卷积后的不同分支特征相融合实现去雾.文献[14]提出了一种基于U-Net[24]架构的具有密集特征融合的多尺度增强去雾网络,通过增强解码器逐步恢复无雾图像.文献[11–14]中的模型有效提升了去雾性能以及生成图像的精度,但精度的提升往往依赖于网络深度与宽度的增加.这会导致参数量与算力需求的增加,从而不可避免地出现模型内存占用增大和计算效率降低的问题,而且模型对于新样本的适应性不强,泛化能力较弱.文献[15]利用带雾图像和清晰图像的信息分别作为负样本和正样本,设计了以自编码器为核心的轻量级去雾网络,均衡了模型的性能与参数量.文献[16]提出无监督自增强去雾框架,通过将透射图分解为密度信息和深度信息实现去雾,在提高模型去雾性能的同时增强了泛化能力.
很多研究工作将生成式对抗网络(generative adversarial network, GAN)[25]引入到图像去雾中.文献[17]提出了一种基于循环生成式对抗网络Cycle-GAN[26]模型的去雾方法,训练时无需使用成对的带雾图像与目标无雾图像,并加入循环一致性损失和感知一致性损失,提高了图像纹理细节恢复的质量以及视觉上的去雾效果.文献[18]基于GAN 提出了一个端到端去雾模型,可在实现去雾的同时避免网格伪影的产生.文献[19]针对现有模型对真实带雾图像的泛化能力差的问题,提出了基于GAN 的域自适应去雾模型.通过图像转换模块实现合成带雾图像与真实带雾图像之间的相互转换,然后使用转换前后的图像训练2 个具有一致性约束的去雾网络,有效提升了模型的泛化能力.这些基于深度学习的去雾模型在训练时大多采用最常见的L1 损失或L2 损失,而L1 损失和L2 损失在很多情况下会使得模型对图像中纹理细节的处理过度平滑,导致生成图像的部分边缘区域出现一定程度的模糊,并且会存在雾残留,尤其在处理浓雾图像时,部分生成图像会有大量的雾残留,整体质量较差.
近年来,基于深度学习的图像分类研究取得长足进展.文献[27]针对样本收集难度较大、标记数据较少等问题,利用多尺度生成器生成不同尺度的图像特征,获得多尺度信息的相似性得分并进行标签传播,通过计算传播结果实现分类.文献[28]提出一种基于余弦相似性的Softmax 损失函数,计算嵌入表示与分类全连接层权重的正负相似性,有效提升多分类任务性能.文献[20–23]把图像分类引入到图像去雾工作中,实现对带雾图像的识别与分类.文献[20]通过灰度共生矩阵提取图像纹理细节特征,使用支持向量机实现对有雾图像与无雾图像的识别,但是无法根据雾浓度实现对带雾图像的精细分类.文献[21]使用高斯混合模型对无雾、有雾、浓雾3 种雾浓度图像的概率密度进行建模,并通过期望最大化算法学习模型参数.文献[22]提出了基于颜色特征和角偏差特征的雾浓度分类方法,通过训练支持向量机实现对4 种不同雾浓度图像的分类.文献[23]利用序数关系实现雾图像的能见度检测.文献[20–23,27–28]所述的方法普遍存在2 个问题:1)雾浓度分类方法的相关数据集较少,没有固定的分类标准,并且雾浓度的大小是相对的,其分类结果不具备普适性;2)雾浓度分类方法采用的是硬分类,没有考虑分类结果对整个去雾模型的去雾质量和计算效率之间的平衡所产生的影响,分类方法不具备自适应性和灵活性.
本文提出一个新的基于雾浓度分类与暗-亮通道先验的多分支去雾模型,模型的结构如图1 所示.本文模型由2 部分组成,分别是轻量级雾浓度分类器(light-weight fog image classifier, LFC)和基于暗-亮通道先验的多分支去雾网络(multi-branch defogging network based on dark and bright channel priors, MBDN).LFC 由3 个卷积块与2 个全连接层组成,利用本文提出的新的雾浓度分类损失函数,并结合生成图像的质量与模型的计算效率,实现对带雾图像的分类;MBDN 由3 个结构相同、宽度不同的分支去雾网络组成,分别用于处理轻雾图像、中雾图像、浓雾图像.每个分支去雾网络都由3 个模块组成:特征提取模块(feature extract module, FE)、通道注意力模块(channel attention module, CA)、空间注意力模块(space attention module,SA).本文方法的基本流程是:首先将带雾图像I输入至LFC,得到输入图像的概率向量p,向量中的元素p1,p2,p3分别表示图像属于轻雾、中雾、浓雾3 类图像的概率值,取最大概率值所对应的雾浓度类别作为输入图像的浓度标签;然后将浓度标签输入至MBDN,MBDN 根据当前输入图像的浓度标签将其输送到相应的分支去雾网络.在分支去雾网络中,FE用于提取融合特征,输出组合特征图至CA,CA 通过通道注意力机制在通道方向上获取特征权重,再由SA 通过空间注意力机制在像素维度上进一步获取特征权重,使模型能够定位重点信息,提高处理效率.同时,结合本文新提出的暗通道先验损失与亮通道先验损失,进一步约束分支去雾网络,提高分支网络的去雾性能,最终生成无雾图像.
图1 本文方法框架Fig.1 Framework of our method
本文提出一个新的LFC,可根据带雾图像的暗通道特征和恢复难度以及生成图像的质量,将带雾图像分为轻雾、中雾、浓雾3 类.LFC 由3 个卷积块和2 个全连接层组成,其中每个卷积块由1 个卷积层、1 个激活层、1 个最大池化层组成.LFC 是一个十分轻量级的分类网络,参数量仅有0.32 MB,它的引入几乎不会对本文模型的去雾工作带来计算成本和内存占用量的增加.模型中各模块的参数量对比及说明详见3.3 节.设当前带雾图像为I,将其输入至LFC,可得到带雾图像I的概率向量p(I)=(p1,p2,p3),p1,p2,p3分别表示I属于轻雾、中雾、浓雾类别的概率.取其中最大概率值元素所对应的雾浓度类别作为当前图像的分类结果,该结果表示为浓度标签L.L将与I共同输入至后续的分支去雾网络MBDN.设FLFC(·)为LFC 的函数表示,则LFC 的处理过程可表示为
2.1.1 雾浓度分类方法
为了提高雾浓度分类的合理性和准确性,同时保证整个网络模型在去雾精度和算力消耗上的良好平衡,本文提出一种新的雾浓度分类方法.雾浓度在现实世界中是指悬浮在空气中的雾滴数量的多少,反映在图像上表现为图像的不清晰程度.不同雾浓度的图像具有不同的暗通道特征和恢复难度,因此,可用暗通道特征和恢复难度来描述图像雾浓度.新方法根据带雾图像的暗通道特征和恢复难度这2 个因素,实现对雾浓度的分类.2 个因素值的计算分别为:1)求取带雾图像的暗通道图的平均像素值并归一化;2)将带雾图像通过DCP[6]算法去雾处理后,求取生成图像的峰值信噪比(peak signal to noise ratio,PSNR)与结构相似性(structural similarity, SSIM),这二者均为评价图像质量的指标.暗通道图的平均像素值代表了带雾图像的暗通道特征.由暗通道先验理论可得,输入图像中存在的雾越浓,其暗通道图通常会越亮.而浓雾图像相对轻雾图像而言,恢复难度自然会更大,即浓雾图像经同一去雾算法处理后的生成图像的PSNR 值与SSIM 值往往会更低.因此,可用PSNR 值与SSIM 值表示带雾图像的恢复难度.这里用于计算PSNR 值与SSIM 值所采用的去雾处理操作,仅仅是为了得到不同带雾图像经过同一算法去雾后的客观量化结果,以此来反映不同带雾图像的恢复难度,对去雾处理操作本身的精度没有特别的要求.因此,本文使用综合速度最快的DCP 算法来对图像进行去雾操作.另外,本文也对去雾后图像的PSNR 值和SSIM 值与雾浓度的关系在多个数据集上进行了实验论证.图2 展示了在RESIDE[29]数据集中的室内训练集ITS (indoor trainset)上的验证结果.这里,采用DCP 算法处理ITS 数据集后,对图像的雾浓度和去雾后图像的PSNR 值与SSIM 值的乘积之间的关系进行了直观的可视化展示.其中,横轴表示图像根据乘积值由小到大重新排列后的序列号,纵轴表示PSNR 值与SSIM 值的乘积.可见,PSNR 值和SSIM 值的乘积与图像雾浓度之间的关系呈现了一种规律,即:去雾后具有较小乘积值的雾图像中存在的雾往往较浓,其恢复难度相对于乘积值较大的雾图像而言往往会更高.图2 中的曲线表示了这种规律.基于上述理论,本文综合考虑带雾图像的暗通道特征和恢复难度,提出了新的雾浓度分类方法.将带雾图像的雾浓度系数定义为去雾后所得图像的PSNR值和SSIM 值的乘积与带雾图像的暗通道图的平均像素值的归一化结果之比.设雾浓度系数为K,输入的带雾图像为I,其暗通道图为Id,由DCP 算法处理后的生成图像为IDCP,则雾浓度系数K的具体表示为
图2 雾浓度与去雾后图像PSNR 值和SSIM 值乘积的关系可视化Fig.2 Visualization of the relationship between fog concentration and PSNR-SSIM product of defogged images
其中VPSNR(·)表示求取图像的PSNR 的数值,VSSIM(·)表示求取图像的SSIM 的数值,VMP(·)表示求取暗通道图的平均像素值并归一化.
图3 展示了本文提出的雾浓度分类方法在ITS数据集上的预分类结果.利用式(2)计算带雾图像的雾浓度系数K,同样,根据K值对ITS 数据集中的所有带雾图像由小到大排序,体现为序列号的由小到大.我们发现图像雾浓度呈现了从浓到轻的趋势,这表明具有较高K值的图像的雾浓度往往较低,而具有较低K值的图像的雾浓度往往较高.我们从视觉上对这种趋势直观地进行了展示.图3 表示图像雾浓度的变化趋势.同时,为方便直观地展示效果,这里按照K值的区间粗略地将其平均分为轻雾、中雾、浓雾3 个区域.可见,本文的分类方法可以有效地对带雾图像的浓度进行划分.关于本文分类方法的合理性的进一步论证,详见3.3 节.
图3 新的雾浓度分类方法在ITS 数据集上的预分类结果Fig.3 Pre-classification result with the new fog concentration classification method on ITS dataset
显然,仅根据均分K值范围的方式将图像划分为轻雾、中雾、浓雾3 类是不合理的.我们需要结合数据集的实际情况,以及整个网络模型的去雾质量和计算效率,对图像雾浓度类别进行动态和灵活地划分.因此,基于新的雾浓度分类方法,本文又提出了雾浓度分类损失函数,用于约束LFC 对带雾图像类别的识别,以实现动态分类.该损失函数的引入,可建立起LFC 和MBDN 之间的联动优化,使整个网络模型可根据带雾图像的暗通道特征和恢复难度,并结合生成图像的质量与模型的计算效率,得到更加合理和准确的分类结果.继而可根据分类结果,由相应的分支去雾网络处理不同类别的带雾图像,从而达到整个网络模型在去雾精度和运算效率上的良好平衡.下面详细介绍雾浓度分类损失函数.
2.1.2 雾浓度分类损失函数
本文提出新的雾浓度分类损失函数,该函数使得LFC 能够根据带雾图像的暗通道特征和恢复难度实现动态分类.而且,将该损失函数引入整个网络模型的联合训练中,还可以使得分类能够同时依据生成图像的质量与模型的计算效率,进一步提高分类的合理性和准确性,继而提升整个网络的性能.
由2.1.1 节所述可知,在考虑带雾图像的暗通道特征和恢复难度的情况下,图像中存在的雾越浓,则雾浓度系数K的值越小.对所有图像的K值做归一化处理,结果记为k,k∈(0,1).显然,k值的大小同样反映了雾的浓度.当k值趋近于1 时,说明图像中存在的雾很少,我们希望这种情况下,LFC 所得概率向量中代表轻雾图像的概率p1的值最大;同样,k值趋近于0.5 时,说明图像中存在的雾属于中等程度,我们希望其概率向量中代表中雾图像的概率p2的值最大;k值趋近于0 时,说明图像中的雾很浓,我们希望其概率向量中代表浓雾图像的概率p3的值最大.基于此,本文提出新的雾浓度分类损失函数,公式定义为
其中k为雾浓度系数K的归一化值,每张图像的k值是由式(2)计算得到的已知量;p1,p2,p3分别表示当前带雾图像经过LFC 计算得到的概率向量中属于轻雾、中雾、浓雾类别的概率值,是待优化的未知量.通过Lk来约束LFC,使其能够根据雾浓度系数实现对雾图像的分类.如式(3)所示,若当前输入带雾图像的k值越接近1,则该图像属于轻雾类别的概率应该越高,即:LFC 对该图像生成的概率向量中,p1的值应该越大并且越接近于k.在优化LFC 的过程中,式(3)通过缩小k与p1的距离可使p1增大,同时减小p2,p3.若当前输入图像的k值越接近0.5,则该图像属于中雾类别的概率应该越高,即:LFC 对该图像生成的概率向量中,p2的值应该越大并且越接近于 2k.式(3)在优化LFC 的过程中,通过缩小 2k与p2的距离可使p2增大,同时减小p1,p3.若当前输入图像的k值越接近0,则该图像属于浓雾类别的概率值应该越高,即:LFC对该图像生成的概率向量中,p3的值应该越大.式(3)通过缩小1-k与p3的距离,可使p3增大的同时减小p1,p2,从而实现对LFC 优化.
可见,雾浓度分类损失能够使LFC 根据带雾图像的暗通道特征和恢复难度,实现对带雾图像的分类.同时,本文还将雾浓度分类损失引入到对整个模型的联合训练中,通过与其他损失函数相结合,使模型能够进一步根据生成图像的质量和计算效率,得到对带雾图像更加合理和准确的分类结果.继而依据分类结果,由相应的分支去雾网络处理带雾图像,从而在保证精度的前提下,有效提高模型的效率,减少内存的占用.关于联合训练的方法及总损失函数,详见2.3 节.
多分支去雾网络MBDN 由3 个结构相同、宽度不同的分支网络组成,分别用于处理浓度标签为轻雾、中雾、浓雾的带雾图像,最终将其恢复为无雾图像.宽度是神经网络的基本维度之一,指神经网络每层的通道数.宽度贡献了大量计算量,可以使模型的每一层学习到更加丰富的特征.若宽度过小,会导致模型特征提取不充分,模型性能受限;若宽度过大,会使模型提取过多重复特征,加大模型计算负担.同样,对于图像去雾工作而言,为去雾模型设计合适的宽度值,并根据雾图像的分类结果,针对性地处理不同类别的雾图像,不仅能够提升模型的去雾性能,而且能够减少计算成本.因此,综合考虑带雾图像的恢复难度,以及网络宽度对模型精度和速度的影响,并经过多次实验,本文将轻雾分支网络的宽度设置为48,中雾分支网络的宽度设置为56,浓雾分支网络的宽度设置为64,以实现图像去雾质量与网络计算效率的良好平衡.
将当前带雾图像I以及经过LFC 得到的该图像的浓度标签L,共同输入至MBDN,MBDN 根据当前输入图像的浓度标签,为其选择合适的分支去雾网络.这样,随着图像的雾浓度从重、到中、再到轻,其恢复难度逐渐降低,即使采用结构逐渐简单的分支网络,亦可以达到理想的去雾效果.因此,分支去雾网络结构的设计可以在降低网络复杂度和减少内存占用量的同时,保证生成图像的质量.另外,为进一步提升去雾精度,本文还提出了新的暗通道先验损失函数与亮通道先验损失函数,以进一步约束分支网络,使其具有更优的去雾性能.
2.2.1 多分支去雾网络MBDN
多分支去雾网络MBDN 由FE、CA 和SA 这3 个模块组成.FE 提取带雾图像的特征,并将输出的特征图在通道方向上相连接,实现特征融合;CA 在通道方向上获取特征权重,使模型识别并获取更有价值的通道信息[30];SA 在空间方向上获取特征权重,使模型定位图像中重要的空间位置,重点关注浓雾区域并进行处理.注意力机制的引入,使模型能够定位重点信息,并抑制非重点信息,提高了模型的计算效率.同时,结合本文新提出的暗通道先验损失与亮通道先验损失来训练模型,以进一步提高模型的去雾性能.下面具体介绍MBDN 的3 个模块.
1)特征提取模块(FE)
将带雾图像输入至特征提取模块,首先通过卷积层将输入的RGB 带雾图像转换为特征图,然后通过3 个带有残差连接的特征提取器FE1, FE2, FE3 进一步提取特征.每个特征提取器由20 个结构完全相同的残差块[12]组成,加入残差连接可以更有效地减少梯度消失,使模型训练简单化.最后把每个特征提取器输出的特征图在通道方向上连接起来,实现特征融合,输出组合特征图FFE.
2)通道注意力模块(CA)
CA 基于注意力机制获取不同通道的权重.该部分的输入是组合特征图FFE,通过自适应全局平均池化(global average pooling, GAP)[31]将FFE的尺寸由H×W×C变为1×1×C,即将FFE变成一个维度为C的向量vGAP.为使特征图的每个通道具有不同的权重,以提取通道相关性,将vGAP进行逐点卷积来提取通道特征,并利用修正线性单元(rectified linear unit,ReLU)激活函数获取各通道权重,再卷积恢复至原维度,通过Sigmoid 激活函数得到特征向量vCA,vCA中的每个元素值即为各通道的权重值.最后将生成的特征向量vCA与FFE逐元素相乘,得到具有通道权重的组合特征图FCA.
3)空间注意力模块(SA)
SA 在提取通道特征的基础上,进一步提取空间特征,即获取组合特征图FCA通道方向上的所有通道在同一像素点位置的权重.SA 模块的输入为FCA,FCA经卷积、激活后,尺寸变为H×W×1,且被赋予空间特征的权重.换言之,SA 模块将FCA转换为一个尺寸为H×W的权重矩阵MSA,MSA的每个元素即为FCA相应空间位置的特征权重.然后将权重矩阵MSA与FCA逐元素相乘,生成特征图FSA.最后将FSA转换为RGB 图像,得到输出图像Io,即最终的去雾图像.
2.2.2 暗通道先验损失与亮通道先验损失
本文用于训练分支去雾网络的损失函数由3 个约束项组成:L1 损失、暗通道先验损失、亮通道先验损失.其中L1 损失是传统方法中常采用的约束项,暗通道先验损失和亮通道先验损失则是本文提出的2 个新约束项.暗通道先验损失用于增强模型的去雾性能,提高生成图像的去雾效果.亮通道先验损失在增强去雾效果的同时,可适当提高生成图像的亮度与对比度.该损失有效解决因仅使用暗通道先验损失造成的生成图像过暗问题,以及因使用L1 损失对纹理细节过度平滑导致的边缘区域模糊问题,从而使去雾后的图像更加清晰.下面具体介绍3 个损失约束项以及相关理论.
1)暗通道先验与亮通道先验理论
暗通道先验理论的基本思想是,在非天空区域的彩色无雾图像中,大多数局部区域中都存在一些像素,这些像素在至少1 个颜色通道中的强度很低.此处,像素强度指该通道中的像素值,取值范围为0~255.对任意图像I,其暗通道Id(x)的表达式为
其中IC表示彩色图像I的某一颜色通道,y∈Ω(x)表示以像素点x为中心的局部区域内的像素.暗通道先验理论指出,对无雾图像而言,其暗通道Id(x)应尽可能的小,并且趋近于0.
亮通道先验理论指出,大多数模糊图像的局部区域中都存在一些像素,这些像素在至少1 个颜色通道中具有很高的强度.对任意图像I,其亮通道Ib(x)的表达式为
其中IC,y∈Ω(x)的含义与式(4)中相同.由亮通道先验理论可推得,带雾图像的亮通道相对无雾图像要高.
本文将图像暗通道图的2 范数定义为图像的暗通道值,将亮通道图的2 范数定义为亮通道值.基于暗通道先验理论与亮通道先验理论,本文计算了ITS数据集中的13 990 对带雾图像与清晰图像的暗通道值与亮通道值,并从中随机选取了1 399 对带雾图像与清晰图像的计算结果进行可视化.图4 和图5 分别展示了这些带雾图像与清晰图像的暗通道值对比曲线和亮通道值对比曲线.图4中,橙色曲线表示带雾图像的暗通道值,蓝色曲线表示清晰图像的暗通道值.图5中,橙色曲线表示带雾图像的亮通道值,蓝色曲线表示清晰图像的亮通道值.综合图4 和图5 表明,带雾图像的暗通道值与亮通道值都相对较高,而清晰图像的暗通道值与亮通道值都相对较低.该结果与暗通道先验理论和亮通道先验理论也是相吻合的.因此,根据带雾图像与清晰图像的这一暗通道与亮通道特征,本文提出了暗通道先验损失与亮通道先验损失,这2 项损失能够有效提升模型的去雾能力,使生成图像具有更好的去雾效果,同时提高图像的亮度与对比度,使生成图像更加清晰.
图4 带雾图像与清晰图像的暗通道值对比曲线Fig.4 Comparison curves of dark channel values between the foggy and clear images
图5 带雾图像与清晰图像的亮通道值对比曲线Fig.5 Comparison curves of bright channel values between the foggy and clear images
2)暗通道先验损失
上述暗通道先验理论和实验表明,带雾图像的暗通道值较高,清晰图像的暗通道值较低.若模型去雾性能较差,则其生成图像的部分区域仍会存在雾残留,暗通道值就会偏高.而且相比于轻雾图像,浓雾图像去雾后的雾残留会更多,暗通道值会更高.因此,为增强模型的去雾性能,我们希望生成图像的雾残留尽量少,即生成图像的暗通道值尽可能小.基于此,本文提出暗通道先验损失函数,用于约束分支去雾网络所生成图像的暗通道值,以提升模型的去雾效果,尤其是对浓雾图像的去雾效果.暗通道先验损失函数表示为
其中xi为第i个像素点,Id为生成图像的暗通道图,Id(xi)为生成图像的第i个像素点的暗通道值,H,W为图像尺寸.该损失函数值越小,表明生成图像的暗通道值越小,整体的雾残留越少.
3)亮通道先验损失
上述亮通道先验理论和实验表明,带雾图像的亮通道值相比清晰图像要高.因此,适当降低生成图像的亮通道值,可提升生成图像的清晰度,从而提高模型的去雾效果.基于此,本文提出亮通道先验损失函数,用于约束分支去雾网络所生成图像的亮通道值,使其尽可能的小.另外,由于暗通道先验损失易使生成图像亮度过暗,导致生成图像的对比度降低.通过引入亮通道先验损失与暗通道先验损失共同约束模型,可很好地保持生成图像的亮通道值与暗通道值的平衡,从而在提高模型去雾性能的同时,保证生成图像的亮度与对比度,使模型生成的图像更加清晰.亮通道先验损失函数表示为
其中xi为第i个像素点,Ib为生成图像的亮通道图,Ib(xi)为生成图像的第i个像素点的亮通道值.该损失函数值越小,表明亮通道值越小,生成图像越清晰.
4)L1 损失
用于计算生成图像与目标清晰无雾图像之间对应像素的误差,表达式为
其中IGT为目标清晰无雾图像,Io为模型的生成图像,即去雾后的图像.
综上,多分支去雾网络MBDN 的总损失函数为
其中 ω1, ω2, ω3是损失函数的权重.关于暗、亮通道先验损失的消融实验,见3.5.1 节.
在2.1 节中,本文提出新的雾浓度分类方法,根据带雾图像的暗通道特征和恢复难度进行分类,并由此提出了新的浓度损失函数,该损失函数能够使LFC 得到对带雾图像的更加合理和准确的分类结果.然而在实现分类时,还要考虑到分类结果对整个网络模型最终生成图像的质量以及计算效率的影响.因此,本文不是根据预定的浓度标签来单独训练LFC,而是将LFC 和MBDN 联合起来进行训练,从而使分类既考虑到带雾图像的暗通道特征和恢复难度,又考虑到最终生成图像的质量和网络的计算效率.联合训练时,固定MBDN 中已经训练完成的分支去雾网络,对LFC 进行训练,使LFC 能够根据带雾图像的暗通道特征和恢复难度,并结合生成图像质量以及模型的计算效率,实现对输入图像的分类.联合训练中,当前输入的带雾图像会分别经过每个分支去雾网络,将LFC 输出的当前图像的概率向量中每个元素的概率值与对应类别的分支去雾网络所生成图像的乘积之和,作为联合训练的最终结果.联合训练输出图像的公式表示为
其中M为带雾图像的总类别数,本文中M=3,I为输入图像,pi为当前输入图像被分至第i类的概率,BNi(I)为第i个分支去雾网络所生成的图像.IJ为联合训练的最终输出图像.
在联合训练过程中,带雾图像的特征以及生成图像的质量均是影响模型性能的关键因素.而本文提出的雾浓度分类损失函数,可根据带雾图像的暗通道特征和恢复难度约束模型,将其与L1 损失相结合,可进一步保证生成图像的质量.此外,通过雾浓度分类损失与L1 损失共同约束模型,还可以使模型能够根据计算效率进一步优化分类结果.例如,若低宽度分支去雾网络足以处理当前图像且能够保证生成图像的质量时,则无需使用更高宽度的分支去雾网络处理,从而使当前图像雾浓度分类降低1 个等级,有效提高了模型的计算效率.另外,为增加分类结果的可信度,我们还引入了类间损失[32],与L1 损失和雾浓度分类损失共同约束整个模型.因此,本文模型联合训练的总损失函数由3 个约束项组成:
1)L1 损失
用于计算生成图像与清晰图像之间对应像素的误差,以保证生成图像的质量,表达式为
其中IJ为联合训练时模型的生成图像,IGT为目标清晰无雾图像.
2)类间损失
用于扩大概率向量中各元素之间的距离,即增大每个分类结果之间的概率差距,使概率向量中最大的元素值趋近于1,从而增加最大概率对应的分类结果的可信度,避免分类结果的模糊性.公式为
3)雾浓度分类损失
雾浓度分类损失Lk如式(3)所示,该损失用于约束LFC,使其能够根据带雾图像的暗通道特征和恢复难度实现分类.
综上,联合训练的总损失函数为
其中 λ1, λ2, λ3是损失约束项的权重.
本文采用RESIDE, RS-HAZE[33], O-HAZE[34]这3个数据集进行实验.
3.1.1 RESIDE 数据集
RESIDE 包含由NYU Depth Dataset V2[35]和Middlebury Stereo Datasets[36]合成的室内图像与室外图像.在RESIDE 数据集中,本文分别使用ITS 与OTS (outdoor train set)进行训练,使用SOTS (synthetic objective testing set)进行测试,使用HSTS (hybrid subjective testing set)测试模型对真实雾图像的去雾效果.本文在训练分支去雾网络时,在ITS 中,使用13 000 张图像用于训练,990 张用于验证.在OTS 中,使用130 000张图像用于训练,990 张用于验证.SOTS 包含500 张室内图像与500 张室外图像,本文使用SOTS 分别对ITS 与OTS 进行测试实验.
3.1.2 RS-HAZE 数据集
RS-HAZE 是一个合成的遥感图像去雾数据集,由512×512 的遥感图像块组成,包含51 300 张训练集图像和2 700 张测试集图像.我们使用5 130 张图像进行训练,900 张图像进行测试.
3.1.3 O-HAZE 数据集
O-HAZE 包含45 张不同场景中拍摄的室外真实雾图像,雾图像中均为真实雾霾,由专业造雾设备生成.我们在O-HAZE 中随机选取30 张图像来测试模型的泛化能力.
本文训练模型的机器配置与运行环境为:Ubuntu 18.04, GeForce RTX 3 090, CUDA 11.0, PyTorch 1.7.0,Pycharm 2021, Python 3.6.
模型的训练主要分为2 个步骤:第1 步,使用式(9)定义的损失函数,即:将新提出的暗通道先验损失和亮通道先验损失,与L1 损失相结合,分别训练3个分支去雾网络,使其能够将带雾图像恢复至无雾清晰图像.本文实验中,将式(9)中的权值设置为ω1=1,ω2=10,ω3=10.此外,为了减少训练成本,我们在训练分支去雾网络时,按照数据集图像的雾浓度系数K值由小到大排列,并按照区间粗略地将数据集分为3 类,以分别训练3 个分支网络.其中,轻雾分支网络训练集包含k∈(0,0.4)的图像,中雾分支网络训练集包含k∈(0.3,0.7)的图像,浓雾分支网络训练集包含k∈(0.6,1)的图像,k为雾浓度系数K的归一化值,其中,每个分支网络的训练集中存在一定的重合,是为了保证分支网络的精度.第2 步,固定训练好的3 个分支网络,使用式(13)定义的损失函数,即:将新提出的雾浓度分类损失与L1 损失和类间损失相结合,对模型进行联合训练,使LFC 能够根据带雾图像的暗通道特征和恢复难度,并结合生成图像质量与模型计算效率,实现对带雾图像的分类.本文实验中,将式(13) 中的权值设置为λ1=1000,λ2=1,λ3=1.其中,训练分支去雾网络时,设置迭代次数为8E5,批处理大小为4,学习率初始值为1E-4,使用Adam 优化器[37]优化学习率,通过余弦退火衰减函数将学习率从初始值调整为0,设置β1=0.99,β2=0.999;联合训练时,设置批处理大小为64,初始学习率为2E-4,训练周期为100.
为证明本文提出的雾浓度分类方法的合理性和有效性,对本文模型在多个数据集上的分类结果,以及生成图像的质量和网络的计算性能进行了测试.表1 是对SOTS 室内测试集的测试结果.实验中,利用训练好的网络模型对500 张室内测试图像进行分类,得到轻雾类图像69 张、中雾类图像303 张、浓雾类图像128 张.为测试生成图像的质量和计算性能,将3 类图像均输入至MBDN 中的每个分支去雾网络,得到不同分支网络下生成图像的平均PSNR 值,该值可反映图像的生成质量.表1 中第5 列的参数量表明,LFC 的参数量相比分支去雾网络而言非常小,因此LFC 的引入几乎不会对模型的去雾工作带来更多的计算成本和内存占用.由第2 列轻雾图像去雾后的平均PSNR 值对比可得,轻雾图像经过3 个不同分支去雾网络处理后,所得图像的平均PSNR 值十分接近,而轻雾分支网络的参数量相对浓雾分支网络减少了40%有余.由此可见,使用低宽度的分支网络处理轻雾图像,即可获得与高宽度网络非常相近的结果,其精度的损失是可以忽略不计的,但计算成本却大大降低.对比第3 列中雾图像去雾后的平均PSNR 值同样可得,中雾图像经过中雾分支网络处理后的图像精度,相比浓雾分支网络略有一点下降,该损失是可接受的,但中雾分支网络相比浓雾分支网络,参数量却减少了30% 有余.因此,通过对带雾图像的分类,以损失极小的精度为代价,使参数量大大降低,从而提高了计算效率,减小了计算成本,这证明了本文的雾浓度分类方法是合理和有效的.
Table 1 Average PSNR and Parameters Comparison of Our Branch Networks for Three Levels of Images in SOTS (Indoor)表1 本文分支网络处理SOTS 室内数据集中3 类图像的平均PSNR 以及参数量对比
为了验证本文方法的有效性,我们分别在RESIDE数据集中的SOTS, HSTS 测试集,和RS-HAZE, O-HAZE测试集上对模型进行测试实验.我们对比了8 种去雾算法,在视觉上展示了本文方法与其他方法在不同数据集上的去雾效果的对比结果.同时,为了更直观地展示模型对不同雾浓度类别图像的去雾效果,我们在SOTS 测试集中对轻雾、中雾、浓雾3 类图像分类展示.
图6、图7、图8 分别展示了轻雾、中雾、浓雾3类图像经本文方法和其他方法处理后在SOTS 数据集上的视觉对比结果.在图6~8 中,分图(a)中的图像来自SOTS 室内测试集,分图(b)中的图像来自SOTS室外测试集,每图的第1 列为输入的带雾图像,最后1 列为目标清晰无雾图像.由图6~8 可见,DCP 算法由于先验假设的局限性,存在参数估计不准确等问题,导致其生成图像的颜色失真较为严重,如图6(a)第2 列第1 行结果图的桌面区域和图7(b) 第2 列第2 行、第3 行结果图的天空区域颜色失真严重,另外,由图8 可见,DCP 算法对浓雾图像处理效果较差,存在着较多的雾残留;AOD-Net 算法的去雾效果较差,尤其是在处理浓雾图像时,仅去除了小部分雾霾,而且生成图像色彩比例失衡,如图8(b)第3 列第2 行结果图的对比度较低,且有明显的雾残留,图7(a)第3列第2 行结果图中的桌面区域颜色出现明显偏差;DehazeNet 算法生成图像的亮度过高,其去雾效果虽优于AOD-Net 算法,但仍无法达到满意的结果,如图7(b)第4 列第2 行结果图的天空区域过亮,图8 中的浓雾图像在去雾后仍存在较多的雾残留;GCANet 算法对纹理边缘细节的处理效果较差,部分图像出现颜色失真问题,如图7(b)第5 列第2 行结果图的天空区域出现大范围的模糊,图7(b)第5 列第3 行结果图的天空区域过曝;FFA 算法在轻雾、中雾图像上的表现较好,但在处理浓雾图像时,存在局部区域模糊的问题,如图8(a)第6 列第3 行结果图左侧墙壁区域和图8(b)第6 列第2 行结果图的路面区域,均出现一定程度的模糊;MSBDN 算法的生成图像整体偏亮,且对浓雾图像的去雾效果欠佳,如图8(a)第7 列第3 行、图8(b)第7 列第1 行结果图中仍存在较多的雾霾;AECRNet 算法在室内图像中的表现较好,但在部分室外图像中的处理效果较差,如图8(b)第8 列第3 行结果图的天空区域出现模糊;D4 算法的生成图像整体较亮.相比其他方法,本文模型具有更好的去雾效果,尤其在处理浓雾图像时,可有效减少雾残留,使生成的图像更加清晰,这也证实了本文提出的暗通道先验损失函数与亮通道先验损失函数的优势.
图6 不同方法对SOTS 数据集中的轻雾图像去雾后的视觉对比结果Fig.6 Visual comparison of defogged results obtained by different methods on light fog images in SOTS dataset
图7 不同方法对SOTS 数据集中的中雾图像去雾后的视觉对比结果Fig.7 Visual comparison of defogged results obtained by different methods on medium fog images in SOTS dataset
图8 不同方法对SOTS 数据集中的浓雾图像去雾后的视觉对比结果Fig.8 Visual comparison of defogged results obtained by different methods on dense fog images in SOTS dataset
我们在RS-HAZE 数据集上对模型进行了实验,图9 展示了本文方法与其他部分方法在RS-HAZE 数据集上的视觉对比结果,同时对方框内的图像细节区域进行了放大.由图9 可见,DCP, AOD-Net 的图像质量和去雾效果均较差,在雾浓度较低的图像中,FFA, AECRNet 的处理效果较好,本文方法在细节方面的表现更优于FFA, AECRNet.如图9 第1 行、第2行结果图,本文方法能够更好地保留图像细节信息和整体色彩;对于雾浓度极大的图像,如图9 第3 行结果图,在图像失真较为严重时,本文方法能够更大程度地保证生成图像的质量.
图9 不同方法在RS-HAZE 数据集上的去雾效果视觉对比Fig.9 Visual comparison of defogged results obtained by different methods on RS-HAZE dataset
为了测试模型的泛化性,我们在O-HAZE 数据集中随机选取了30 张图像,不进行模型的训练,通过ITS 数据集训练的模型直接输出结果,图10 展示了本文方法与其他方法在O-HAZE 数据集上的视觉对比结果.由图10 可见,本文方法具有较优的泛化能力.此外,我们在图11 中展示了本文模型与其他模型在RESIDE 的子数据集HSTS 中真实雾图像上的表现.
图10 不同方法在O-HAZE 数据集上的去雾效果视觉对比Fig.10 Visual comparison of defogged results obtained by different methods on O-HAZE dataset
图11 不同方法在HSTS 数据集上的去雾效果视觉对比Fig.11 Visual comparison of defogged results obtained by different methods on HSTS dataset
在视觉对比实验的基础上,本文使用不同的图像质量评价指标对模型进行了量化对比实验.使PSNR 反映图像的失真情况,以衡量重构图像的质量;使用SSIM 衡量生成图像与真实图像的相似程度,通过上述2 个指标进一步评价和证明本文方法的有效性.表2 展示了本文模型与其他模型分别在SOTS,RS-HAZE,O-HAZE 测试集上的量化评估结果,表2表明,本文方法在SOTS 和RS-HAZE 上均表现最佳.在O-HAZE 上,本文方法的平均PSNR 值优于除D4,MSBDN 外的其他方法,SSIM 值优于除D4, GCANet外的其他方法,虽然本文方法的平均PSNR 与SSIM不是最优,但是由图10 可见,本文方法在处理轻雾图像时可以达到较好的视觉效果.
Table 2 Average PSNR and SSIM Evaluation for Different Methods on SOTS, RS-HAZE and O-HAZE Datasets表2 不同方法在SOTS, RS-HAZE, O-HAZE 数据集上的平均PSNR 与SSIM 评估结果
本文对SOTS 室内测试图像进一步测试,保存了模型对SOTS 室内测试图像分类结果,使用不同模型对轻雾、中雾、浓雾图像分别测试评估.表3 展示了SOTS 室内测试集中轻雾、中雾、浓雾3 类图像分别在不同去雾模型上的量化评估结果.除表2 中的2 个图像质量评估指标外,表3 增加了参数量评估指标,参数量为网络模型中所需要训练的参数总量,可用于衡量网络的空间复杂度以及所占内存的大小.通过综合比较各模型的PSNR、SSIM 和参数量,以证明本文分类方法和分支去雾网络的有效性.表3 的评估结果表明,在去雾质量方面,本文模型处理不同雾浓度图像的结果均为最佳.在参数量方面,相比AODNet, DehazeNet, GCANet, AECRNet 方法,本文模型的参数量略大,但是对去雾质量的提升却是极大的;而相比FFA, MSBDN, D4 方法,本文模型均能够以较小的参数量,达到较高的去雾质量.另外,本文模型自身还可根据带雾图像的分类结果在不同去雾分支间灵活调整,进一步平衡了整个网络的去雾质量和计算效率.综上,本文方法可以灵活处理不同浓度的带雾图像,显著提高了模型的计算效率,同时使用新提出的暗通道先验损失函数与亮通道先验损失函数,显著提高了模型的去雾性能,使得方法能够在达到较高精度的前提下,有效降低模型的空间复杂度和内存使用量,实现了去雾精度和速度的良好平衡.
3.5.1 暗、亮通道先验损失
我们对新提出的暗通道先验损失Ld和亮通道先验损失Lb进行了消融实验,以证明引入这2 个先验损失后能够使模型的去雾性能得到进一步提升.图12 展示了利用不同损失约束项训练的模型在SOTS 室内测试集上得到的直观视觉结果,表4 展示了图12 第2~5 列的每张图像的PSNR 值对比结果.图12 中,第1 列为带雾图像,第2 列为仅使用L1 损失训练的分支去雾网络的视觉结果,第3 列为去掉暗通道先验损失Ld后训练的分支网络的视觉结果,第4 列为去掉亮通道先验损失Lb后训练的分支网络的视觉结果,第5列为使用式(9)即总损失LB训练的分支网络的视觉结果,第6 列为清晰无雾图像.方框区域对所有结果在相同位置的细节表现进行了放大.对比第2~5 列的去雾结果可见,第2, 3 列图像均存在不同程度的残留雾;第4 列图像细节处相对第2, 3 列表现较好,但在PSNR 值上仍逊于第5 列图像;第5 列结果图中的细节更加清晰,去雾效果更好.综合图12 与表4,可证明本文提出的2 个先验损失的有效性,它们与L1 损失共同约束分支去雾网络,可使模型的生成图像在视觉上更加清晰,在精度上达到更高的水平.图13 中的各曲线展示了在ITS 数据集上使用不同损失约束项对本文模型进行训练时,生成图像的PSNR 值变化曲线对比情况.由图13 可见,加入暗通道先验损失和亮通道先验损失所训练的模型,其生成图像的PSNR值上升速度更快,且收敛时可以达到更高的数值.
Table 4 PSNR Evaluation Results of Images in Columns 2 to 5 in Fig.12表4 图12 中第2~5 列图像的PSNR 评估结果
图12 采用不同损失函数约束项的模型去雾视觉效果对比Fig.12 Visual comparison of defogged results obtained by models with different loss function constraints
图13 采用不同损失函数约束项训练模型时的PSNR 曲线Fig.13 PSNR curves of the model under different loss function constraints
3.5.2 雾浓度分类损失
为验证雾浓度分类损失Lk的有效性,我们在式(13)中固定了 λ1, λ2,取λ3=0,1,4,10分别进行了实验,在SOTS 室内测试集上的实验结果如图14 所示.圆点代表将 λ3=0,即去掉雾浓度分类损失Lk这1 个约束项,此时,所有图像都会被划分为浓雾类,虽然PSNR值较λ3=1时略高,即精度略微上升,但相比之下参数量增加了近40%,大大增加了计算成本,这说明雾浓度分类损失能够使模型达到去雾精度和计算效率的良好平衡.可见,虽然平均参数量有所减小,但PSNR值降幅较大,说明此时对Lk的权重 λ3设置过大,抑制了L1 损失,从而导致了生成图像质量的下降,这证明了当 λ3=1 时,我们能够以较低的参数量得到较优的结果.
图14 不同权重雾浓度分类损失的PSNR 和参数量对比Fig.14 Comparison of PSNR and parameters of different weight of fog concentration classification loss
本文提出一个基于雾浓度分类与暗-亮通道先验的多分支图像去雾模型,可根据带雾图像的暗通道特征和恢复难度,结合生成图像的质量与模型的计算效率,实现对带雾图像的分类,并根据分类结果为当前输入的带雾图像选择合适的分支去雾网络,分别实现轻雾、中雾、浓雾图像的去雾处理.新的雾浓度分类损失函数的提出以及在模型联合优化中的应用,可使模型对带雾图像进行动态分类,达到去雾精度和计算消耗的良好平衡;新的暗通道先验损失和亮通道先验损失的提出以及在分支去雾网络中的应用,大大提高了生成图像的质量.与当前图像去雾领域中现有的大多数经典去雾模型相比,本文模型具有更高的去雾性能,且能够在保证生成图像精度的同时减少参数量,降低网络的空间复杂度,提高计算效率.
作者贡献声明:张琪东负责设计具体算法、实施实验、撰写论文;迟静提出研究思路和方案框架,指导论文撰写;陈玉妍负责数据采集、整理和论文校对;张彩明提供算法理论指导.