冯燕茹,王一斌
(1. 防灾科技学院 信息工程学院,河北 三河 065201;2. 四川师范大学 工学院,四川 成都 610068)
雾天条件下拍摄的户外图像,受大气中悬浮气溶胶等颗粒对光线的散射和吸收作用影响,会出现对比度低,色彩饱和度差,细节丢失等图像降质问题,为后续计算机视觉任务,如遥感监测、交通监控、目标跟踪与识别等,带来了不利的影响。因此,如何消除雾气造成的影响,复原清晰的无雾图像具有实际应用价值和研究意义[1]。
目前,单幅图像去雾的算法可分为两类:基于先验的图像去雾算法和基于神经网络的去雾算法。基于先验的去雾算法以大气散射物理成像模型为理论依据,通过先验信息来估计模型中的透射率及大气光,最终获取清晰图像。例如,He 等人提出的暗通道先验Dark Channel Prior(DCP)表明,户外图像中非天空区域的局部邻域内总有像素的某个颜色通道具有较低的像素值[2]。Fattal 等人发现透射率与场景反射不相关,并由此构建求解透射率的约束方程[3]。Meng等人提出了基于边缘及纹理约束先验Boundary Constraint and Contextual Regularization(BCCR)的去雾算法[4]。Yoon 等人发现了光的波长与成像时场景目标的颜色相关,提出了基于波长自适应先验 Wavelength-adapitve Prior(WAP)的图像去雾算法[5]。然而,依据观察或信息统计获得的先验信息无法泛化到所有的雾天场景,算法的鲁棒性较差,去雾精度不高。例如,DCP 无法描述雾图中白色的前景目标,导致估计的透射率精度较低,去雾结果存在色差。
随着深度学习的快速发展,基于神经网络的图像去雾算法广受关注。例如,Zhang 等人提出了金字塔稠密连接网络Densely Connected Pyra⁃mid Dehazing Network(DCPDN),联合估计透射率,大气光及清晰图像[6]。Yin 等人进一步将金字塔模块与编码解码网络相结合,提出了Residu⁃al Dense Pyramid Network(RDPN),它能从雾图中捕捉有效的上下文信息,以直接估计清晰图像[7]。受此启发,Chen 等人提出了 Gated Con⁃text Aggregation Network(GCAN),进一步利用门限融合机制自适应融合多层次的上下文特征来实现去雾[8]。随着研究的深入,Shao[9]和 Yin[10]等人提出了基于先验信息的图像去雾网络。具体来说,Shao 等人提出Domain Adaptation De⁃hazing Network(DADN),它利用领域自适应知识获得合成雾图与真实雾图间的分布差异,引导网络去雾[9]。而 Yin 等人提出的 Attentive U-Re⁃current Network(AURN),将循环网络生成的透射率图视为先验信息,引导后续的编码解码网络实现去雾[10]。虽然此网络具有较好的去雾效果,但仍存在以下问题:①网络仅考虑了透射率对清晰图像估计时的单向辅助作用,而未考虑清晰图像对透射率估计的辅助作用,从而忽略了透射率与清晰图像间的依赖关系;②网络未充分利用透射率与清晰图像间存在的物理约束,降低了去雾的精度;③多尺度上下文信息未充分利用,约束网络表现力和性能。
针对上述问题,本文提出了嵌入大气散射物理成像模型的分解合成循环细化网络,该模型由两个并行的多尺度金字塔编码解码网络分支作为结构框架,并将Long Short-Term Memory(LSTM)[11]循环单元和多尺度金字塔模块嵌入到两个网络分支中。为探索透射率与清晰图像间的依赖关系,充分利用两者满足的物理约束,该模型分别用两个网络分支估计透射率和清晰图像,并将输出的透射率,清晰图像依据大气散射物理成像模型合成雾图,连同估计的透射率和清晰图像循环作为网络模型的输入。使得清晰图估计分支能在透射率和合成雾图的引导下循环细化清晰图像,同时透射率估计分支在清晰图像和合成雾图的辅助下循环细化透射率。其间,为了充分利用多尺度上下文信息,在两个多尺度金字塔编码解码网络的瓶颈处分别插入LSTM循环单元,增强循环间的信息交互。另一方面,网络最后的多尺度金字塔模块,能有效地利用多尺度上下文信息预测结果。实验证明,算法在合成雾图及真实图像上均能取得较好的去雾效果,在视觉评价和客观评价方面优于现有的去雾算法。
依据1976 年McCartney 提出的大气散射物理成像模型,雾天拍摄的降质图像可描述为:
其中:(x,y)为像素的坐标位置索引;I为雾天图像;A为大气光;J为清晰图像;t为透射率,它与场景的深度和雾的浓度分布有关,可表示为:
其中:d(x,y)表示场景的深度,β为散射系数。t值越小,雾浓度越大;t值越大,雾浓度越小。
由此可知,t和J不但满足公式(1)的约束关系,且t中包含的雾浓度信息可作为清晰图像J估计的先验信息,而清晰图像J中包含的深度信息亦可作为透射率t估计的先验信息。受此启发,本文提出嵌入物理成像模型的分解合成循环细化去雾网络。
算法原理如图1 所示,从中可见,本文所提的去雾算法为分解合成的循环结构。在循环开始时,首先输入初始雾图,并利用网络模型中的透射率估计分支和清晰图估计分支分别从初始雾图中估计出透射率和去雾后的清晰图像,以实现分解操作;随后依据大气散射物理成像模型(公式(1))将估计的透射率和清晰图像合成雾图,以实现合成操作;最后,合成的雾图级联本次循环时估计的透射率和清晰图像一起作为下次循环时网络的输入。循环执行上述过程,直到循环数达到预先设置的最大循环数时停止。此时,清晰图估计分支输出的去雾结果,即为算法最终的结果。
图1 嵌入物理成像模型的分解合成循环网络模型流程图Fig.1 Flowchart of decomposition-composition and re⁃current refinement network based on the physical imaging model
具体来说,本文所提的分解合成循环细化网络结构如图2 所示,主要包括两个结构相同的多尺度金字塔编码解码网络分支,即透射率估计分支和清晰图像估计分支,分别预测并循环细化透射率和清晰图像。在网络循环的过程中,模型将上次循环时估计的透射率,清晰图像以及合成的雾图共同作为模型下次循环的输入,此操作不但能使上次循环时估计的透射率和清晰图像分别作为本次循环时,清晰图像估计分支和清晰图像估计分支的引导信息,还能将两分支估计结果合成的雾图,循环作为网络的输入,以达到充分利用两者间物理约束,实现去雾的目的。相关的函数表示如下:
图2 嵌入物理成像模型的分解合成循环细化网络结构Fig.2 The architecture of decomposition-composition and recurrent refinement network based on physical imaging model
其中:n为循环次数;tn-1,Jn-1,In-1分别为第n-1 次循环时网络输出的透射率,清晰图像以及合成的雾图;tn,Jn,In分别为第n次循环时获得透射率,清晰图像以及合成的雾图。[⋅]为级联操作。Ht及Hj分别为透射率估计分支函数及清晰图像估计分支函数。
如图1 所示,n-1 次循环时网络的输出tn-1,Jn-1,级联雾图In-1,作为本次循环网络的输入,并由公式(3)的Ht和公式(4)的Hj分别预测第n次循环时的tn和Jn,以实现分解操作。随后公式(5)依据大气散射物理成像模型(公式(1))将网络分支预计的tn和Jn合成雾图In,并进一步级联tn和Jn作为n+1 次循环时网络的输入,以实现合成操作。
网络中透射率估计分支及清晰图像估计分支均具有相同的循环网络结构,即多尺度金字塔的编码解码网络。它在编码解码网络中添加了LSTM 循环单元及多尺度金字塔模块,以便加强循环间的信息交互,充分利用多尺度上下文信息。以透射率估计分支Ht为例,各组件的描述如下:
(1)编码器
从 输 入tn-1,Jn-1,In-1提 取 特 征 。 它 包 含 1个卷积池化层,3 个稠密模块。考虑到卷积池化层组合被广泛用于图像分类,以实现空间维度减少,感受野增大,我们在网络的初始阶段设计了1个核为3×3,步长为2 的卷积层;以及1 个核为5×5,步长为2 的最大池化层。随后,为了最大化信息流,确保网络的快速收敛,卷积池化层输出的信息进入 dense-net121 网络[6]所提供的 3 个稠密模块。这里每个稠密模块的最后均包含一个转换层,以提供下采样操作。故编码器输出的特征大小为输入图像大小的1 32。相关函数:
其中:Hcp为卷积池化层函数,He为编码器中加转换层的稠密模块函数,en为第n次循环编码器输出。
(2)LSTM 循环单元
基于编码解码的循环网络,仅利用网络的输出作为输入来实现循环,忽略了循环时中间层信息的交互。为解决该问题,我们在编码器与解码器的中间嵌入卷积LSTM 循环单元,以便将本次循环时中间层捕获的信息用于下次循环。
其中:Hlstm为卷积 LSTM 循环单元的函数,hn为当前第n次循环时卷积LSTM 循环单元的输出。更多卷积LSTM 循环单元细节详见3.3 节。
(3)解码器
为将特征重构为与输入图像大小一致的透射率,我们堆叠5 个稠密模块[6]来构成解码器。与编码器对应,每个稠密模块最后都添加一个上采样操作,以逐步增大空间维度。相关函数如下:
其中:Hd为解码器中添加了上采样操作的稠密模块函数,dn为当前第n次循环时解码器的输出。
(4)多尺度金字塔模块
虽然嵌入LSTM 循环单元的编码解码网络能充分利用网络的中间信息,强化循环操作间的信息交互,但忽略了雾天场景在不同尺度下的全局信息。受全局上下文信息在目标分类及图像分割任务中应用的启发[12-14],在编码解码网络的最后插入多尺度金字塔模块,估计最终结果。这里,本文不但利用大的池化尺度来捕捉全局上下文信息,还利用小的池化尺度来获取体现场景结构的局部信息。
函数如下:
其中:HP1,HP2,HP3,HP4为池化层函数,分别提取池化大小为 1 32,1 16,1 8,1 4 特征;↑ 为上采样操作,它将池化后的特征上采样为与输入图像大小相同的特征;Hr为映射层,它采用核为3×3,步长为1 的卷积层将级联的多尺度特征映射为透射率tn。
受文献[10]启发,编码器及解码器中间层提取的特征,包含与视觉任务相关的丰富信息,在此处添加LSTM 循环单元,可最大程度捕获当前循环时,与任务相关的重要信息,用于下次循环。这里采用卷积LSTM 实现该操作,它具有参数少,实现简单的优点。其结构如图3 所示,包含输入门P,输入门控制单元G,输出门控制单元O和记忆单元C,遗忘门控制单元R。输入门P和输入门控制单元G共同控制进入记忆单元C的信息;遗忘门控制单元R控制记忆单元C中的信息被保留或被删除;输出门控制单元O控制从卷积LSTM 中输出信息。其中P,G,O,R各包含 2 个卷积层,且2 个卷积层的输入分别为编码器的输出en(见公式(6))以及第n-1 次循环时Hlstm的隐藏状态hn-1,而LSTM 的输出为当前第n次循环时隐藏状态hn(见公式(7))。相同的LSTM 循环单元同样嵌入到清晰图像估计分支Hd中。
图3 LSTM 循环单元结构示意图Fig.3 The architecture of LSTM recurrent unit
从图4 可见,在实现的过程中,对于透射率估计分支和清晰图像估计分支而言,第n-1次循环时LSTM 输出的hn-1将作为第n次循环时LSTM 输入,从而加强了循环时的信息交互,充分利用了编码解码中间层捕获的丰富信息。
图4 LSTM 单元的工作机制Fig.4 The work mechanism of LSTM units
考虑到分解合成循环细化网络在实施过程中,涉及到透射率和清晰图像的分解合成操作,因此损失函数包括两部分:透射率和清晰图像估计的损失函数和合成雾图的损失函数。假设i=1,2,…,m分别为一组Ht估计的透射率和真实透射率,其中为第n次循环时Ht估计的透射率。故Ht对应的损失函数Lt表示为:
其中:k为分解合成循环细化网络的最大循环次数,‖ ‖2为 2 范数操作。
假设Ii和i=1,2,…,m分别为一组输入的初始雾图和合成雾图,则合成操作对应的损失函数Lh为:
考虑到本网络的训练集需包含雾图,真实透射率,清晰图像,故利用 RESIDE[15]和 data-DCP⁃DN 数据集[6]来创建本文的训练集及测试集。从data-DCPDN 选取4 000 对室内雾图,透射率和清晰图像,这里雾图和透射率图利用公式(1)和公式(2)合成,且合成参数设置A∈{0.5,1.0},β∈{0.4,1.6}同文献[6]中参数设置。进一步从RESIDE 中选择4000 对不同雾浓度的室外图像对,利用公式(1)和公式(2)合成雾图和透射率图时 ,合 成 参 数A∈{0.8,0.85,0.9,1.0},β∈{0.04,0.06,0.08,0.1,0.12,0.16,0.2}取值同文献[15]。故本文的训练集共包含8000 对室内室 外 图 像 。 同 理 ,从 RESIDE[15]和 data-DCP⁃DN[6]额外选取 400 张室外图像对和 400 张室内图像对,组成包含800 对图像的测试集Test O。最后,选取包含不同雾浓度的500 张室内图像及500 张室外图像的公共测试集SOTS 来进一步测试算法性能。
算法在NVIDIA RTX 2080 Ti GPU 的PC机上,通过搭建Pytorch 深度学习的网络框架实现。网络最大循环次数n=3。初始J0设为输入雾图I,初始t0设为初值为0.5 的透射率图。优化算法选用改进的梯度下降法Adaptive Moment Estimation(Adam)算法来更新网络模型的参数,其更新的操作如下所示:
其中:k为时间步,gk为时间步为k时的梯度,mk和vk分别为k时梯度的一阶矩(梯度均值)和二阶矩(方差),mk-1和vk-1分别为k-1 时梯度的一阶矩和二阶矩估计,β1和β2分别为一阶矩和二阶矩的指数衰减率,θk和θk+1分别为时间步为k和k+1时的参数,η为学习率,ε为维持数值稳定性而添加的常数分别为mk和vk的偏差修正。
从公式(14)至公式(16)可见,利用Adam 来更新网络权重时,首先利用公式(14)对梯度gk和梯度平方进行滑动平均,使得mk和vk的每次更新都与历史值相关。随后,利用公式(15)对mk和vk进行偏差修正。最后,Adam 算法利用学习率η及 修 正 的对 模 型 中 的 参 数θk进 行 更新,获取θk+1。同其他去雾网络[6-7,10],本文也选用Adam 算法的默认参数β1=0.9,β2=0.999,ε=10-8来设置实施优化。
为了选取最优的网络循环参数n,我们分别设置n=1,2,3,4,5。其中n=1 时,网络无循环,此时清晰图像估计分支Hj获得的结果即为最终结果。不同参数设置下的模型在SOTS 测试集上测得的量化结果如表1 所示。可见随着n值的增加,模型的性能逐渐提高,但当n≥3 时,模型的性能逐减稳定。为平衡模型的去雾精度及计算成本,本文设置网络参数n=3。在此基础上,进一步验证分解合成结构及多尺度金字塔模块的有效性。首先,我们从模型中移除透射率估计分支Ht,仅留下清晰图像估计分支Hj,故网络的分解合成结构去除,第n次循环时公式(4)中Hj的输入更新为Jn-1,对应的变异模型为w/oHt。随后,我们从初始模型的Ht和Hj中移除多尺度金字塔模块,使得公式(8)的输出dn直接进入映射层Hr,对应的变异模型为w/op。w/oHt和w/op在SOTS 测试集上测得的量化结果如表1 所示,可 见w/oHt和w/op的 SSIM 值 和 PSRN 值 均 低于初始的网络模型(n=3),证明分解合成结构及多尺度金字塔模块能帮助网络性能提升。
表1 不同参数设置及网络结构的SSIM 和PSNR 值Tab.1 Different parameters setting and network architec⁃ture in terms of SSIM and PSNR
综上所述,在分解合成循环细化网络中,透射率估计分支与清晰图像估计分支相互辅助和相互约束,共同生成高精度的透射率图和清晰图像。为验证透射率估计分支的有效性,选取DCP[2],BCCR[4],WAP[5],DCPDN[6]算法的透射率估计结果,与本算法透射率估计结果相对比。不同算法在测试集Test O 和SOTS 的平均SSIM值如表2 所示,从中可见本文算法在所有数据集上均具有最高的SSIM 值,透射率估计的准确度较高。
表2 不同算法的透射率SSIM 值Tab.2 Transmission map by different algorithms in terms of SSIM
为验证算法有效性,本小节选取DADN[9],DCPDN[6],GCAN[8],DNPAB[10],RDPN[7]算法与所提算法的去雾结果进行对比。从Test O 中选取的3 幅室内和室外雾图,各算法的视觉对比结果如图 5 所示。图 5(b)~5(f)为对比算法的去雾结果,图 5(g)为本文算法结果,图 5(h)为真实清晰图像。为了更好地观察去雾效果,图5 第三行及第五行分别为图5 第二行及第四行对应图片的局部放大图。从中可见,GCAN 算法,RDPN 算法和DNPAB 算法虽能去除雾气,但去雾结果仍有明显的颜色偏移。如第一行图5(d)的窗帘颜色过白,图 5(e)的窗帘呈现蓝绿色,图 5(f)的窗帘存在明显的黑影。此外,第五行的图5(d)和图5(f)存在颜色过暗或过亮的问题。DCPDN 算法结果则存在色彩对比度过大的问题,如图5(c)第一行的窗帘顶部为粉红色,图5(c)第二行和第四行的天空出现了失真的亮白色。DADN 算法结果存在明显的雾残余,如图5(b)的第一行和第三行的柜子和人群处的残雾。相比而言,本文算法能彻底除雾,其去雾结果(如图5(g))与真实结果(如图5(h))最接近,视觉效果最好。图5 下方标出的PSNR/SSIM 值以及表3 列出的各算法在Test O 及SOTS 上的平均量化结果表明,本文算法在所有数据集上均具有最高的PSNR 和SSIM值。以SOTS 数据集上测得的PSNR 为例,本文算法较次优的DADN 算法至少提高了12%。
表3 不同算法的去雾结果Tab.3 Dehazing results by different algorithms
图5 合成图去雾结果对比(PSNR/SSIM 值标于图像下方,最优结果加黑)Fig.5 The comparison of dehazing results on synthetic images(The PSNR/SSIM values are marked under each image with best results in bold)
真实图像的去雾结果如图6 所示。为了更好的观察细节及色调信息,第二行和第四行分别展示了第一行,第三行图像中的局部细节。从中可见 DADN[9],GCAN[8],DNPAB[10]和 RDPN[7]的去雾结果均存在不同程度的雾残余,如图6(b)、6(d)、6(e)和图 6(f)中第二行的树林因雾残余而导致绿色树林的鲜艳度不高,此外第四行的楼房墙壁处也有明显的雾气。DCPDN 算法[6]结果存在对比度大,局部区域颜色偏亮的问题,如图6(c)第一行天空颜色明显失真。本算法结果(见图6(g))清晰度和颜色保真度最高。
图6 真实图去雾结果对比Fig.6 The comparison of dehazing results on synthetic images
为进一步验证本算法处理真实雾图的有效性,采用无参考的图像质量评估指标量化结果[16],如图像对比度(CG)、视觉对比度(VCM)、信息熵(ENT)。CG 体现了图像的色彩程度,VCM 体现了图像的可视度,ENT 体现了去雾图像所包含的信息量。上述三个指标值越高,表明算法的去雾效果越好。表 4 为[6-7]提供的 30 张富有挑战性的真实雾图去雾量化结果。由此可见,本文算法在三个指标上均具有较高的值,清晰度和对比度优于已有的算法。
表4 不同算法的去雾结果Tab.4 Dehazing results by different algorithms
由于本文所提的分解合成循环细化网络包含分解、合成,循环细化操作,因此算法的运行时间值得关注。本节比较本文算法与DCP[2],DADN[9],DCPDN[6],GCAN[8],DNPAB[10]算 法的平均运行时间。值得一提的是,DCP 算法是传统去雾算法,算法运行平台为Matlab,其余算法为基于神经网络的去雾算法,算法运行平台为Pytorch。传统算法DCP 可直接运行代码来实施去雾,而基于神经网络的去雾算法,如DADN,DCPDN,GCAN,DNPAB 算法,需预先训练获得去雾模型后,再进一步进行运行时间的对比。不同算法的单张图像平均运行时间如表5 所示。从中可见,本算法的运行时间位于第二,明显优于DADN,DCPDN,DCPDN 和 DCP 算法的运行时间。GCAN 因采用单个编码解码网络及门限融合机制实施去雾,网络结构较轻,算法效率较高,运行时间最短。相比之下,本文算法采用两个金字塔多尺度编码解码网络分别估计透射率和清晰图像,较GCAN 算法的运行时间仅相差0.026 s,但算法的精度值,如PSNR,较GCAN提高了近19%。故算法能更好地平衡运行时间和精度。
表5 不同算法的单张图像平均运行时间Tab.5 Average running time of different methods processing single image
为充分挖掘去雾先验,探索透射率与清晰图像间的约束关系,提高去雾算法的精度,提出了嵌入物理成像模型的分解合成循环细化网络。此网络共包含两个结构相同的并行循环分支:透射率估计分支及清晰图像估计分支。前者估计透射率,后者估计清晰图像。每次循环时,两分支预测的透射率及清晰图像将共同作为网络的输入,因此透射率估计分支能在包含深度信息的清晰图像引导下,估计和优化透射率;而清晰图像估计分支能在包含雾浓度信息的透射率引导下,估计和优化清晰图。此外,每次循环时两分支估计的结果,将通过大气散射物理成像模型合成的雾图并输入到网络中,以确保透射率估计分支和清晰图像估计分支的预测结果满足大气散射物理成像模型的约束关系。值得一提的是,为了提高各分支的预测精度,采用嵌入LSTM 循环单元的多尺度金字塔编码解码网络作为分支的框架,它不但能利用LSTM 捕捉每次循环时与任务相关的丰富信息用于下次循环,还能利用多尺度金字塔模块挖掘上下文特征用于透射率估计和图像去雾。在合成图及真实图上的测试表明,本文所提的嵌入物理成像模型的双向协助网络,能高效估计透射率和清晰图像,且去雾精度较已有去雾算法至少提高了12%,单张雾图的平均处理时间仅为0.037 s,可用于图像去雾的工程实践中。