基于改进DehazeNet的图像去雾方法①
2021-05-21王高峰张亚南
王高峰,张 赛,张亚南,邵 倩,高 涛
1(贵州宇鹏科技有限公司,贵阳 550014)
2(长安大学 信息工程学院,西安 710072)
1 引言
雾霾天气是一种常见的天气现象,雾霾天气中包含的粒子使得大气光散射,从而造成拍摄的图像质量严重降低.在伴随有沙尘的雾霾天气情况下,甚至会严重干扰人们的视觉问题[1].因此,对于去雾图像处理对图像研究领域以及社会发展有着重要的积极作用,并且许多优秀的去雾算法已经孕育而生.
目前对于图像的处理方法主要分为两类:图像增强和图像复原[2].图像增强算法不考虑图像降质的本质原由,仅从增加图像对比度和凸显有用细节入手,虽然在一定程度上有去雾的效果,但丢失了很多图像细节,对于雾天车辆检测图像,其本身由于光照,杂质影响,图像细节不够明显,车辆特征不够突出,因此不采用图像增强算法.图像复原算法基于物理模型,是当前去雾算法研究被广为使用的一种方法.2011年,He 等[3]提出了一种暗原色先验的去雾理论假设,利用引导滤波细化透射率恢复图像,在物体对象亮度接近天空光亮度时候,这种基于统计规律得出的先验去雾方法将不能够取得较好的去雾效果;Zhu 等[4]提出一种颜色衰减先验去雾算法,通过建立有雾图像的线性模型并利用监督学习方法来恢复出场景深度信息,该方法可以复原出较多的细节信息,但仍存在一定程度残雾;Wang等[5]提出一种基于线性传输的去雾算法,该算法运行速度较快,但存在去雾越彻底,复原图像整体越暗的现象.近年来,深度学习凭借其强大的学习能力,在图像去雾领域已经取得了较好的效果,最常见的如Cai 等[6]提出的DehazeNet,该网络是一种端到端的训练模型,通过网络训练对透射率值进行学习,从而实现图像去雾,但是该网络只估计出透射率图部分并没有得出大气光值部分.受到DehazeNet 以及Zhang 等[7]的深度学习去雾启发,本文提出一种改进的对抗性神经网络来估计大气照度和透射率,提出了解决这个问题的方案.在这种方法中,使用独立的神经网络体系结构来建立大气散射模型中的未知变量.
2 改进的深度学习图像去雾模型
2.1 大气模型
通常情况下,在计算机视觉中,式(1)被广泛认为是雾图像形成模型.
其中,x代表像素点,I(x)是待去雾图像,J(x)是需要恢复的无雾图像,A是全球大气光成分,t(x)是透射率.因此,无雾图像可以通过结合全球大气光照估计值和透射率来获得,从上式显然可得,如果我们不加任何限制的话是有无穷多个解的,因此,合适的透射率是去雾问题的关键.许多成功的去雾理论算法以式(1)作为研究基础来估计图像的透射率值,但是其中传统方法占据大多数.近年来,CNN 在图像处理领域方面取得重大进展,已经实现了很多优秀的算法成果.2017年,Li 等[8]提出大气散射模型可以通过具有单变量和偏差的非线性变化所描述,并将其用式(1)变化得式(2)、式(3).
式(2)、式(3)中,x代表图像像素点,I(x)是待去雾图像,J(x)是需要恢复的无雾图像,A是全球大气光成分,t(x)是透射率,参数k最终会被消掉.符合深度学习工作原理,并且显示了卷积方法的有效性,因此,本文使用深度学习方法进行图像去雾.
2.2 DehazeNet 深度学习去雾算法
Cai 等[6]提出的DehazeNet是一种端到端的深度学习去雾网络.该网络将有雾图像作为输入,并输出对应的透射率图,随后通过大气散射模型恢复无雾图像.DehazeNet 采用基于卷积神经网络的深层架构,其网络层专门设计用于体现图像去雾中已建立的先验假设.其结构图如图1所示.
图1 DehazeNet 网络架构图
图1中,与传统的卷积层不同的是,DehazeNet 采取了Conv+Maxout[9]结构,该网络层根据不同的假设与先验设计不同的滤波器.对于16 个卷积滤波器时,其中每4 个是上述一种先验特征滤波器,之后,通过Maxout unint 激活函数,每4 个输入一张图,当输入图像为3×16×16,输出为16×12×12.上一层的输出作为多尺度平行卷积操作的输入,由于多尺度特征被证明有利于去雾并在inception[10]模型中使用,即同一张图使用不同尺度的卷积核进行卷积操作.DehazeNet 中分别使用16 个3×3、16 个5×5 以及16 个7×7的卷积核,每一种尺度对应输出16 个特征图,并且通过padding 操作使得输出尺寸相同,输出为48×10×10.随后,局部极值部分中对多尺度输出进行最大值池化操作,最大池化对局部数据敏感,另外根据透射率具有局部不变性,所以使用文中使用了7×7 局部最大值滤波替代最大池化,输出为48×6×6.最后,因为ReLU[11]抑制了小于0的数,只适用于图像分类等方面,并不适合图像复原.因为最后的透射率图允许高于1 或者低于0,所以作者提出了一种新的双边线性整流函数BReLU,如图2所示,该函数既保持了局部线性,有保持了双边的限制.线性回归部分中,上层局部极值的输出通过1 个4×4的卷积核,产生1×1的标量,并且使用BReLU 进行激活,最终,输出的是一个标量,即输入块中心点的透射率值.
图2 BReLU 激活函数
2.3 本文算法实现
2.3.1 提出的深度学习去雾网络
DehazeNet 算法很好的实现了去雾效果,但该方法只估计了去雾要求的透射率图.为了解决彻底去雾的问题,本文设计了一种深度学习网络,在估计透射率部分之外,同时准确输出大气光值,最后通过图像复原公式,恢复出无雾图像.网络架构如图3所示.
图3 去雾网络架构
如图3所示,网络架构可分为估计透射率部分和估计大气光值部分.在Zhang 等[7]提出的一种端到端的去雾网络中,作者在使用了卷积层池化层和上采样层,取得了较好的效果,但由于使用卷积核较大,导致运行时间缓慢,这对我们进行图像去雾造成阻碍.为了解决这一问题,本文在估计透射率部分用深度可分离(DS卷积)来取代原有常规卷积层.2018年,Sandler 等[12]提出了MobileNet v2 这一架构,该卷积层可分为深度卷积(depthwise convolution)和逐点卷积(pointwise convolution)两部分,前者针对每个输入通道采用不同的卷积核,即一个卷积核对应一个输入通道,后者采用1×1 卷积核的普通卷积操作,两者结合,效果等同于普通卷积,但会大幅度的减少计算量和模型参数,进而提升运算时间.
2.3.2 透射率图估计
图1左侧部分中,是对透射率图的估计.输入有雾分别经过DS 卷积和池化层,与传统的卷积层+池化层相比,DS 卷积可分解为深度卷积(depthwise convolution)和逐点卷积(pointwise convolution),两者结合,效果等同于常规卷积,但是参数数量和复杂度大大减少.为了使输出结果非线性,我们使用ReLU 激活函数.在最后一层卷积中,由于输出的透射率图是灰度图,所以我们采取了一个1×1的卷积核,这样可以将前面的深度为10的特征图转为深度为1.1×1 卷积核不仅可以保留前层的平面架构信息,也可以起到将低深度的作用.考虑到透射率的值在0 到1 之间,所以我们在这一层的激活函数使用Sigmoid 以保证输出的值在该范围内.池化层我们选取的是最大池化层,最大池化层方法可以很好地维持特征图的平移和旋转不变性,然而这样做会缩小特征图,但我们所需的透射率图和输入图大小相同,所以在池化层后我们添加了上采样层来保证特征图大小不变.
2.3.3 大气光值估计
下层部分中,即估计大气光值部分,考虑到该值是和整幅图像相关,所以我们应采取较大的卷积核,这样感受野较大,有利于这部分的工作,同时综合计算量,我们采取膨胀卷积的方法,这样做的好处是在不丢失太多信息的情况下,加大了感受野,让卷积层输出包含较大范围的图片特征信息.该部分特征提取相对简单,所以我们设置了两层卷积层.同时,最大池化层也是我们的选择,这样可以在保持不变形的基础上起到降维的作用.最后,我们采用了全连接层,依次降到256、10和1,最后将大气光值输出.
式(1)可变换为式(4):
式中,x代表图像像素点,I(x)是待去雾图像,J(x)是需要恢复的无雾图像,A是全球大气光成分,t(x)是透射率,t0作为阈值通常设置为0.1,其目的是为了避免当t(x)很小的时候,导致J(x)值很大,从而造成图片的某些地方会受到强烈的噪声影响.随后,通过上述神经网络获得透射率和大气光值之后,根据式(2),我们可以得到恢复的无雾图像.
3 试验分析
本文使用RESIDE 中的公开数据集ITS 以及搜集雾天图像对网络进行训练,在深度学习网络框架PyTorch 进行实现,该框架是在深度学习领域具有热门的流行程度.在本文训练方法中,使用Adam 优化损失函数,调整Batch Size 值为16,设定初始学习率的值为0.01,当训练为20 000 步后,设定学习率为0.0001,并且当损失函数不再下降停止训练.其中,对比算法有DCP 算法、Retinex 算法、CAP 算法以及深度学习AOD-Net和DehazeNet 算法.
3.1 构建数据集
为了对网络架构进行定量分析,对数据集进行人工加雾处理.将ITS 数据集进行人工加雾处理,并且搜集雾天图像,最终包含8410 张训练图像数据集,部分图片如图4展示.由于部分数据集原始图像中本身包含有一定量的雾程度,会对试验造成一定的影响,所以本文对部分数据集进行定性评价.
图4 数据集构建
3.2 试验结果定量评价
该试验部分我们使用在图像去雾中被广泛使用的以结构相似性SSIM (Structural SIMilarity)及峰值信噪比PSNR (Peak Signal-to-Noise Ratio)两个指标来衡量我们试验结果的标准,实验结果如表1所示.
表1 数据集图像去雾结果指标
图5为数据集去雾结果对比图.其中,DCP、CAP以及AODNet 两者去雾算法自身设计导致不能够将原始无雾图像和有雾图像的映射关系很好的表达出来,从而导致去雾效果不够理想.而Retinex 去雾效果造成图像整体偏向灰色,DehazeNet 结构中也同样采用一定的手工特征,造成图像去雾不整洁.本文提出的深度学习算法网络,去雾效果好,细节恢复更多,具有更强的鲁棒性.
3.3 实验结果定性分析
该部分实验我们将本文提出的方法与上述几种方法仍在相同的条件下进行对比实验.结果如图6所示.其中DCP 算法去雾后图像出现光晕,其原因是因为大气模型估计值偏差较大.CAP 算法经去雾后,图像丢失了部分原始颜色,效果较差.同样,AOD-Net 算法由于本身结构的问题,导致去雾效果较差.Retinex 去雾后图像呈灰色.DehazeNet 图像发黑,丢失了原有图像的信息.而本文提出的深度学习网络去雾效果较好,不仅恢复了更多原始图像信息,而且具有较强的鲁棒性.
4 总结
本文受到现有深度学习去雾方法的理论指导,在原有的网络上进行改进,提出一种改进后的端到端的深度学习去雾网络.该网络可分为两部分,即估计透射率图部分和大气光值部分.通过与当前流行的去雾算法相比,包括传统算法与深度学习算法,实验表明,本文提出的新的深度学习去雾网络能保留更多的原始图像信息,去雾效果干净,具有较强的鲁棒性.但在部分雾度较浓的情况下,去雾效果不太理想,结合图像数据集的制作以及原始有雾图像与人工加雾图像的占比不同,相信经过对数据集的调节和训练方式的改善,会对本文算法去雾效果提供帮助.
图5 去雾结果对比图
图6 去雾结果对比图