丁宇阳,李明悦,谢柠宇,刘 渊,晏 涛
江南大学 人工智能与计算机学院,江苏 无锡214122
雨天能见度降低,高密度的雨水还会使光线发生漫反射,在远处呈现雾状,给自动驾驶、交通监控等基于目标识别的实际应用产生了极大的影响,降低了目标检测的准确性。
图像去雨一直是计算机视觉领域的热门研究课题[1],伴随着全天候自动驾驶等人工智能技术的发展显得愈发重要。在相机镜头中,近处的雨滴通常会发生光的折射而使场景变形,远处的雨条纹看起来像薄雾,会导致场景模糊和泛白[2-4]。单张图像去雨算法只能通过背景的颜色信息来修复被遮挡区域,在存在大面积雨条纹遮挡时,无法有效地修复图像细节。同时,由于单张图像很难获取准确的深度信息,在修复带有雾气的远景时,不能准确分离出前景与背景,从而导致颜色的错误修复。
光场相机作为一种新兴的成像传感器,能够记录三维场景丰富的结构和纹理信息,使光场图像在去雨工作中有以下优势:(1)在3D EPI(Epipolar Plane Image)中,近景雨条纹的斜率与远景雨条纹的斜率有很大差异,相比于传统2D图像更能更加准确地提取出雨条纹。(2)在面临大面积雨条纹遮挡时,可以利用相邻子视点未被遮挡的部分来有效地修复图像。(3)相比于单张图,可以更正确地提取深度信息,有助于去除远景的雨雾。
本文提出了一种基于双LSTM神经网络的光场去雨算法,包含三个步骤,如图1所示。第一步,使用匹配成本量方法计算场景深度图;将深度图与输入雨图连接,作为后续网络的输入。第二步,使用RSDNet提取雨条纹,再将雨水蒙版连接到雨图,输入BRNet。第三步,使用BRNet来修复背景得到无雨图。其中应用的LSTM结构将RSDNet中间有用的特征传递给BRNet。
图1 本文算法总览Fig.1 Overview of proposed method
本文使用Blender来渲染近景的雨条纹和远景的雾气,并利用斯坦福的真实光场数据集来合成真实世界的光场有雨图像,用于训练和评估提出的网络架构。
本文的贡献归纳为以下几个方面:
(1)针对光场图像,提出了一种基于深度学习的光场图像去雨算法,该算法可以提取雨条纹并修复光场图像得到无雨图。
(2)提出了一种双LSTM结构,将RSDNet丢失的部分中间信息传递到BRNet,保留雨条纹的高频信息。
(3)构建了一个使用真实场景光场图像合成的光场有雨图像数据集,有利于后续研究人员对光场图像去雨的研究。
传统算法通常利用优化模型或机器学习方法来探索雨纹的物理特征。利用雨条纹图像特征等先验信息,对单张图像中的雨和背景进行信号分离。但是,当图像包含大量雨条纹时,这些方法无法获得高质量的无雨图像。
Garg和Nayar[2-3]提出了一个雨的视觉综合模型,该模型可以捕获雨的动力学特性,并且构建了基于物理学的运动模糊模型来解释雨的光学特性,最终提出了一种视频雨水检测与去除算法。但是,该方法并不能稳定地清除雨条纹。Yu等人[5]将去雨问题公式化为图像分层问题,即雨条纹层叠加在背景层上。他们使用基于两个高斯混合模型(GMM)的分段平滑先验算法,用于对背景和雨条纹图层进行建模。使用半二次方分裂[6]技术来解决非凸问题,以产生无雨图像和雨条纹图像。Luo等人[7]提出了一种非线性复合模型来模拟雨天图像。他们使用一种基于字典学习的稀疏编码算法,以准确分离雨条纹和无雨层。Kang等人[8]使用基于形态成分的分析方法,将除雨公式化为图像分解问题。该方法首先使用双边滤波器[9]将雨图像分解为低频和高频部分,然后利用字典学习和稀疏编码,根据雨条纹的特点,只针对高频部分来处理,将高频部分分解为雨条纹部分和背景部分,最后与低频部分相加得到无雨图。Chen等人[10]提出了一种低秩的降雨模型,并将其从矩阵推广到张量,以捕获降雨条纹之间的时空相关性。该方法将输入分解为雨条纹部分,无雨背景部分和成像噪声部分。Li等人[11]把雨图像进行分层,并分别对两层梯度进行正则化,使其中一层具有长尾分布,而另一层具有短尾分布,通过迭代来解决正则化问题。
随着深度学习算法和相关硬件技术的发展,基于深度学习的除雨方法在过去几年中取得了重大进展,已成为当今研究的主流趋势。
Fu等人[12]提出了DerainNet的神经网络来完成除雨。该方法首先通过滤波器将输入的雨图像分为低频的基础图和高频的细节图,根据雨条纹主要在高频的特点,只训练高频图来得到无雨的高频细节图,最后和基础层相加得到最终的无雨图像。但是,该方法很难完全去除雨条纹。Qian等人[13]提出了一种从单张图像去除雨滴的注意力机制生成对抗网络。生成器网络借助注意力机制来更多的关注雨滴区域及其周围环境,判别网络则用于判别恢复的无雨区域的局部一致性。Hu等人[4]分析了景深对降雨图像的影响,建立了一个带有雨条纹和雾的成像模型。他们提出了一个深度引导的注意力机制的神经网络,来生成预测的无雨图像。然而,从单张雨图像中估计出的深度图是往往是不准确,严重影响了随后除雨算法的效果。Li等人[14]提出了一种NL(Non-Local[15])增强的网络[16]框架。其网络由残差模块和NL模块组成,残差模块用来获取局部信息,NL模块用来获得全局信息。
Ren等人[17]提出了一个递归网络来解决多阶段的除雨问题。他们在每一层均部署了ResNet,利用跨阶段深层特征的相关性,形成渐进式递归网络(PReNet)。Yang等人[18]提出了一种新的降雨图像模型,包括一个降雨条纹累积层和多个降雨条纹层。基于该模型,他们提出了一种迭代的雨水检测和清除网络来逐步清除积累的雨条纹。在每次迭代中,使用多流扩张卷积模型,以不同的感受野来获得二元雨条纹图、雨条纹外观图和无雨图。Zhang等人[19]提出了一种密度感知的多流网络,该方法不仅可以除雨,还可以估计雨水的密度,从而根据不同密度来更好地完成除雨任务。他们所提出的体系结构包括两个部分,一是雨密度分类网络,用于确定给定雨图像的密度水平,二个是多流密集卷积的除雨网络,用于利用估计的雨量密度信息来完成除雨工作。
Wang等人[20]提出了一种结合了时间先验和人工监督的半监督方法。为了更好地模拟实际雨条纹的随机分布,他们提出了一种空间关注网络(SPANet),该网络以局部到全局的方式消除雨条纹。Jiang等人[21]提出了一种多尺度渐进融合网络(MSPFN),利用多尺度降雨信息来协同模拟降雨条纹。Ren等人[22]提出了一种单递归网络(SRN)进行图像去雨,两次递归网络可以通过LSTM进行多阶段传播。另外,该方法还提出了双递归网络(BRN)来传递雨条纹和背景图像之间的信息。
视频除雨方法也有大量的研究成果,Garg和Nayar[2-3]提出了视频雨水建模的开创性工作。最近有研究人员利用视频帧序列中的空间和时间冗余信息来进行除雨[23-26]。
Li等人[23]提出了一种多尺度卷积稀疏编码(MS-CSC)模型来去除视频中的雨条纹。该方法使用卷积操作在稀疏特征图上提取视频中雨条纹的特征,然后利用多尺度滤波器来去除不同位置的雨条纹。Liu等人[24]提出了一个循环除雨和背景重建的神经网络,它结合了基于空间纹理特征的除雨和基于时间相干性的背景细节重建。Yang等人[25]提出了一个两级递归网络,该网络逆向恢复了视频雨水合成的过程。Yang等人[26]提出了一种基于时间相关性和一致性的两阶段自学习网络来去除雨条纹。
视频中不同帧之间的雨条纹位置不相关,相比之下,光场图像的不同子视点图中的雨条纹位置具有高度相关性。同时,光场图像中也不能利用时间信息。因此,光场图像去雨与视频去雨有很大不同。
综上,单张图像和视频的除雨算法均有很多的研究成果,然而在光场图像中的去雨算法却鲜有研究。当单张图像包含大量雨条纹时,这些方法均无法获得高质量的无雨图像,也难以正确处理远景的颜色和纹理恢复问题。因为光场图像记录了三维场景丰富的颜色、纹理和结构信息,所以不论在雨条纹检测和无雨图修复中,均可以展现出更好的性能。
本文算法主要包含以下三个步骤:
(1)使用基于匹配成本量的方法计算输入光场图像的深度图。
(2)把带雨的光场图结合上一步得到的深度图作为输入,使用3D残差雨条纹检测网络RSDNet来提取雨条纹图。
(3)把带雨的光场图结合上一步得到的雨条纹图和第一步得到的深度图作为输入,使用3D U型背景修复网络BRNet进行无雨光场图像恢复。
采用匹配成本量最小化的方法[27]计算输入光场图像的子视点视差图。该方法将光场单一子视点作为目标视点,目标视点的视差值可由匹配成本量计算得出。使用该方法来分别迭代计算作为本文所提算法输入数据的3D EPI中每个子视点的视差图。
匹配成本量是待计算视差的图像对的差分的集合。匹配成本量一共有dn层,每层对应一个视差。每一层的成本,是按该层对应视差d整体平移后的图像Id与原图像I的差异。因此,固定像素(x,y),可在成本量C中得到C(x,y)是一个向量,代表该像素的视差取值取[d0,dn]范围内的某个离散值的成本,更低的成本值对应的视差更接近正确结果。
匹配成本根据相位平移定理计算得到。根据图像傅里叶变换的平移性质,图像I与平移后图像Iω存在如下关系:
其中,F是傅里叶变换算子。位于(s0,t0)视点I按一系列视差标签d平移至目标视点(s,t):
平移后图像与原图像的差异定义为匹配成本量C,具体描述如下:
其中,(s,t)代表光场视点坐标。该方法更多细节可参考文献[27]。
本文的双LSTM结构如图2所示,标准LSTM[28]由遗忘门f、输入门i、输出门ο和隐藏状态h组成。在算法[29]中提出了Bilateral LSTMs结构,通过循环网络,使其雨条纹信息与背景信息相互作用,从而达到更好的背景层恢复效果。由于光场图像相比于单张图像参数量剧增,为防止内存占用过高,本文所提算法中将该结构改为单向作用,实现隐藏层的跨阶段传播。
图2 双LSTM结构Fig.2 Dual LSTM structure
雨条纹提取网络中LSTM结构可以表示为:
其中,⊗表示3D卷积,σ表示Sigmoid激活函数,f(⋅)表示输入卷积层,x为输入,d为深度图,W和b是对应的卷积矩阵和偏置向量。
雨条纹恢复网络中LSTM结构可以表示为:
其中,r和h分别为雨条纹提取网络的生成雨条纹蒙版及隐藏层。
本文提出的RSDNet结构如图3所示,在得到了每个光场图像的深度图之后,把得到的深度图分别串联在有雨水光场3D EPI之后,作为雨条纹提取网络的输入。本文提出的雨条纹提取网络总共使用12个3D卷积残差块,每一层由两个卷积核为3×3×3大小的3D卷积层组成,每个卷积层后接一个ReLU激活函数,再接一个BN(Batch Normalization)层组成,BN层的结果作为下一层残差块的输入。最后一层使用Sigmoid为激活函数,来提取出雨条纹蒙版。生成的雨条纹蒙版是一个0到1的单通道3D数据,越接近1代表雨条纹越明显,越接近0代表雨条纹越淡,越趋向于背景。
图3 本文的网络结构图Fig.3 Proposed network structure
在网络第二层使用LSTM结构来传递部分雨条纹信息给BRNet,本文提出的LSTM结构如图3。由于随着网络的加深,雨条纹的部分特征会丢失,这样会导致部分高频信息的缺失,最后导致雨条纹难以完全去除。而使用LSTM结构可以把第一个3D残差网络提取的部分雨条纹信息通过筛选给予第二个网络,弥补了雨条纹提取网络的不足。本文提出的RSDNet的损失,定义如下:
其中,Lossr表示雨条纹损失,Rgt表示雨条纹的真值,Rgen表示生成的雨条纹。
本文的BRNet网络结构如图3所示,以多雨的3D EPI,结合第一步生成的深度图和第二部分生成的雨条纹图作为输入,给予网络场景深度和雨条纹位置及大小的先验信息,以便网络可以同时处理近景的雨条纹和远景的雾气效果。每个卷积层的卷积核大小为3×3×3,选择ReLU作为激活函数。每个卷积层之后添加BN层,以避免梯度消失。编码器通道的数量设置为64到1 024。解码器部分与编码器部分对称,并且相应的层通过跳级连接进行连接,以减少高频信息的缺失。最后一层使用Sigmoid为激活函数,输出无雨的3D EPI。
在网络第二层使用LSTM结构来接收RSDNet提取出来的部分雨条纹信息,这部分信息将会用于增强编码层的信息传递,同时传递到解码层来增强细节区域雨条纹的去除。这对于恢复无雨图有着重要意义。
本文提出的BRNet的损失Lossb被定义为:
其中,Lossb表示为总的无雨图损失LossL2表示L2损失,Lossper表示感知损失,Lossstyle表示风格损失,参数λ1,λ2和λ3依照经验被设置为0.1、10和10。
LossL2被定义为:
其中,Bgen表示生成的无雨图结果,Bgt表示无雨图像的真值。本文使用预训练的VGG-16网络对生成的结果和真值进行特征提取。并选择pool1、pool2和pool3网络层来计算特征图的损失。
感知损失Lossper定义如下:
其中,ψgen和ψgt分别表示生成结果和图像真值对应的VGG网络所提取的第P层特征图,N表示特征图的总层数,在本次实验中为3。
风格损失Lossstyle定义如下:
其中,G代表Gram矩阵,用来计算特征图的自相关性。
因为目前不存在公开的带雨的光场图像数据集,也为了在复杂场景上验证本文所提算法的有效性,专门制作了一个带雨的光场图像数据集。将雨条纹叠加到现实世界的光场图像上,以生成更有真实感的带雨光场图。具体而言,首先从斯坦福大学的公共数据集中获取真实场景的数据,使用基于匹配成本量的方法获得光场数据的深度图。然后使用Blender软件渲染了多个具有不同方向的9×9光场雨条纹数据集。最后,将虚拟雨条纹数据和视差图按比例合成的数据添加到原始光场数据中,如图4所示。
图4 本文模拟现实世界的有雨LFI的生成过程Fig.4 Proposed real-world-like rainy LFI generation procedure
该方法具有两个优点。第一,真实场景光场图像比建模的光场图像更接近真实场景。第二,合成雨带也具有丰富的三维信息,更有利于网络的训练。本文使用了120组光场数据,其中80组光场图像用来训练,30组光场图像用来评估模型,10组光场图像用来测试。合成低频雨图像的公式如下:
其中,F是雾的图像,D是深度图,其已标准化为[0,1],R是雨条纹的图像,R͂是带有雾的合成雨条纹图像,B是无雨图,即背景图,α和β是常数参数,分别设置为0.3和0.6。本文在Titan X GPU上进行网络的训练,训练次数为500,初始学习率设为0.000 2。
将本文的方法与基于经典优化算法的除雨方法[11]和基于深度学习的方法[12-13,20-21]在单张2D图像进行了定量比较。为了实验更加合理公正,使用制作的光场数据集的单张子视点图像作为基于深度学习方法[11-12,20-21]的训练集,按照各个文献原来既定的参数进行训练,均在评估数据的平均指标达到最优时保存模型。同时,还添加了两组基于视频的除雨算法[23-24]的对比实验,由于本文的训练数据和视频不同,所以使用其训练好的模型进行测试。在光场图像9×9的中心子视点上,采用了两个典型的度量标准,即峰值信噪比(PSNR)和结构相似性(SSIM),以比较本文的方法与其他方法的性能。如图5~10所示,(a)~(h)分别是输入图像、Li[11]、Fu[12]、Qian[13]、Wang[20]、Jiang[21]、本文算法的实验结果,以及真值图像,同时分别标注了PSNR/SSIM指标。实验结果表明,基于深度学习的除雨方法[12-13,20-21]在大多数场景中优于基于传统优化算法方法,而基于视频的除雨算法[23-24]在评测指标上的表现并不理想。本文实验结果的PSNR和SSIM值均高于其他方法,特别是在具有复杂结构的小场景中,如图9和10所示,本文的算法可以和其他算法拉开较大的差距。对于雾气效果明显的大型场景,如图6、7和8所示,本文也具备一定优势。而对于一些结构简单,景深较浅,雾气效果不是很明显的场景,如图5所示,Wang[20]和Jiang[21]等人的算法也有良好的表现,本文算法无法与他们的算法拉开较大差距,但数值仍然是最优的。
图5 场景1图像去雨效果实验对比(PSNR/SSIM)Fig.5 Rain streaks removal in Scene 1
图6 场景2图像去雨效果实验对比(PSNR/SSIM)Fig.6 Rain streaks removal in Scene 2
定性分析表明。Li的方法[11]可以很好地去除一些细雨条纹,但是它既不能成功去除近景较大的雨条纹,也不能除去远景的雾气效果,并且在图像的细节中引入了模糊,如图7~10所示。基于深度学习的方法[12-13,20-21]在大多数情况下效果良好,但它们仍然存在一些缺陷。Fu的方法[12]在可以处理掉大多数细雨条纹,但是面对近景比较大的雨条纹,仍然会留下明显的痕迹,如图5~7所示。同时,如图9和图10所示,它无法去除图像中远景的雾气效果。其原因可能是该方法采用了滤波器将输入图像分为高频层和低频层,而只把高频层通过神经网络进行了处理,没有处理包含大的雨条纹和雾气的低频层。
图7 场景3图像去雨效果实验对比(PSNR/SSIM)Fig.7 Rain streaks removal in Scene 3
图8 场景4图像去雨效果实验对比(PSNR/SSIM)Fig.8 Rain streaks removal in Scene 4
图9 场景5图像去雨效果实验对比(PSNR/SSIM)Fig.9 Rain streaks removal in Scene 5
图10 场景6图像去雨效果实验对比(PSNR/SSIM)Fig.10 Rain streaks removal in Scene 6
Qian的方法[13]可以除去大部分雨条纹。然而,它仍然不能非常有效地消除大的雨条纹,如图9和10所示。原因可能是该方法专门设计用于去除雨滴,因此对于去除雨水条纹效果不佳。同时该方法可以去除部分远景的雾气效果,但是会给图片整体引入模糊和黑影,这可能是因为其第一层网络结构中感知图预测不是很准确导致的。
Wang[20]和Jiang方法[21]的结果也有着类似的问题,即只能处理细小的雨条纹,而面对近景大的雨条纹却表现不佳,如图7~9。这可能是因为面对大面积遮挡时,单张图只能借助周围像素的信息来修复被遮挡区域,这会导致修复错误或者难以修复。同时未能合理利用深度信息,导致远处的雨雾也并不能很好地去除。
视频除雨算法也存在类似问题,如图11所示。Li的方法[23]只能去除少量雨条纹,而Liu的方法[24]可以去除掉大部分雨条纹,但是在面对远景雨雾基本没有效果,可能是该方法并没有把远处雨水的特点做充分考虑。
图11 与视频去雨效果实验对比(PSNR/SSIM)Fig.11 Comparison with rain removal on video sequence
图13 真实场景2图像去雨效果实验对比Fig.13 Rain streaks removal in real Scene 2
图14 真实场景2图像去雨效果实验对比Fig.14 Rain streaks removal in real Scene 3
本文提出的方法采用3D EPI作为输入,以检测雨条纹并恢复被雨条纹覆盖的遮挡区域。通过利用3D EPI中的大量纹理和结构信息,可以更准确检测雨条纹并更好地恢复背景。实验表明,本文方法可以比任何其他方法更正确地保留和恢复LFI的纹理细节,也可以有效去除远景雾气效果,如图10中红色/绿色框中突出显示的区域所示。因此,本文算法的性能总是比其他方法[11-13,20-21]更好。本文在真实多雨光场数据集上进行了测试,如图12~14所示,本文的结果均好于其他方法,证明了本文算法的实用性。本文得到的深度图和雨条纹图部分结果如图15,表明提出的方法可以准确且有效地提取雨条纹。另外,由于输入的3D EPI维度高于普通2D图像,本文方法的内存成本和计算成本高于其他所有方法。
图12 真实场景1图像去雨效果实验对比Fig.12 Rain streaks removal in real Scene 1
图15 本文得到的深度图和雨条纹图部分结果Fig.15 Depth maps and rain streak images for proposed method
提出一种基于结合深度信息的神经网络的光场图像去雨算法,利用光场图像丰富的三维信息来有效去除雨条纹,得到高质量的无雨图。并且使用真实光场图像构建了一个带雨光场图像数据集,用于训练和评估提出的算法。算法首先使用匹配成本量方法计算光场图像的深度图,之后结合3D EPI输入到RSDNet,利用3D残差网络提取每个子视点的雨条纹蒙版,最后把雨条纹蒙版与3D EPI连接后传入BRNet,利用3DU型网络进行背景修复。本文的算法充分利用3D EPI的纹理和结构信息来检测和消除图像中的雨条纹,并提出了一种有效的双LSTM结构,保留网络中有用的中间信息,避免了雨条纹高频信息的丢失。实验结果表明,本文的方法能够更准确地提取近景的雨条纹,对于远景雾气的去除也有良好的表现,优于最新的2D图像去雨方法和视频去雨方法。