基于自注意力机制的单幅图像去雨滴方法
2021-06-03刘双元江佳俊
郭 嘉,蒋 旻*,刘双元,江佳俊
(1.武汉科技大学 计算机科学与技术学院,湖北 武汉 430065;2.智能信息处理与实时工业系统湖北省重点实验室(武汉科技大学),湖北 武汉 430065)
0 引 言
图像去雨滴属于图像去噪[1-4](图像去雨[5]、去雾[6]、除雪[7]、超分辨[8])范畴,它的最终目的是改善给定的图像,解决实际图像由于雨滴干扰而导致图像质量下降的问题,给户外视觉应用(如目标追踪[9]、物体识别[10]、动作识别[11]、目标检测[12])提供帮助。通过去雨滴可以有效地提高图像质量,更好地体现原来图像所携带的信息。作为一种重要的预处理手段,人们对图像去雨滴[13]算法进行了广泛的研究。由于雨滴的透镜效果,在现有的去雨滴算法中,雨滴去除效果较好,却丢失部分图像边缘信息,或者有的致力于研究检测图像边缘信息,保留图像细节,雨滴消除的就不完全。同时由于网络结构的复杂,还可能面临参数量巨大的问题。如何在消除雨滴和保留细节上找到一个较好的平衡点,同时如何在保持去雨效果的同时控制参数量,都成为近年来研究的重点。
注意力机制由于其可以从众多信息中选择出对当前任务目标更关键的信息的特点,在深度学习领域(如语音识别、机器翻译等)上得到广泛的应用。最近提出的新的注意力机制——非局部神经网络(non-local neural networks)[14]可以很好地解决图像中长距离约束。在去雨应用中,该算法可以通过非局部神经网络[14]的逐像素相乘的方式,得到每个像素间的一个权重矩阵,该矩阵可以表达雨滴覆盖下的背景像素与其他背景像素的相关性,将输入特征映射为上面每个位置的特征值赋给对应的位置,其他位置全部清零,从而实现自注意地由其他背景信息来预测当前位置的背景信息。所以,该文认为可以将该自注意力机制[14]运用到去雨滴应用中。
为了消除数字图像中的雨滴,恢复图像质量,同时减小参数量,将非局部神经网络[14]加入图像的特征提取部分,以获取雨滴部分与其他无雨部分的长范围依赖;同时为了消除不同尺度大小的雨滴,在网络中加入扩张卷积[15]来扩大感受野;整个网络设计为五个由浅入深的模块(block)结构,block内部采用循环计算,加深模块并减小参数量,block之间采用稠密的残差连接[16],将不同block的负残差concatenate在一起,充分利用低级特征来实现雨滴的去除。另外,对所有负残差都进行损失约束,使预测图像更接近真实图像。
1 相关工作
近年来,研究人员针对单幅图像的雨滴去除问题提出了许多方法。该文将这些方法分为两类:基于模型的方法和基于深度学习的方法。
从2009年到2017年间,针对雨滴去除问题的解决方案大部分是采用基于模型的方法。该类方法基于雨滴的物理成像过程或者模拟它们的几何外观来消除雨滴。Roser等[17]提出了一种采用球体截面对雨滴进行建模的方法来检测雨滴。在文献[18]中,贝塞尔曲线被用于雨滴建模,获得了比文献[17]更高的建模精度。但是,雨滴具有各种形状和大小,上述模型只能去除已进行参数建模的那一部分雨滴。You等[19]研究并模拟了附着液滴边缘的暗带,以恢复雨滴的3D形状,并利用立体声来计算深度来恢复雨滴下的背景信息。庞彦伟等[20]首先将一幅带雨滴图像通过一个双边滤波器分解为低频和高频两个部分,对于低频部分,即背景部分保持不变,然后通过字典学习区分高频中的雨成分和非雨成分,最后,组合低频成分和高频无雨成分,从而获得雨滴去除后的图像。
相比于其他方法,深度学习在复杂机器视觉任务上取得了优异的效果,例如动作识别、目标检测等。而应用在图像去噪、图像复原等底层任务上,也取得了很好的效果。随着深度学习技术的发展,许多研究开始利用深度学习的方法来去除图像中的雨滴。Eigen等[21]建立了一个三层的网络,从合成的图像中学习静态雨滴和污点的特征以预测无雨图像的输出。但该方法无法消除大而密的雨滴。石晓晴[22]将雨滴检测问题转化为图像分类问题,训练一个可以区分雨滴与非雨滴的算法模型,进行雨滴定位,根据雨滴定位信息,结合图像补全方法去除雨滴,该方法对稀疏的雨滴有效,无法处理较密集的雨滴。曾坤等[23]提出了一种基于GAN的雨滴去除方法,该方法主要通过生成对抗网络,利用深度去雨算法来达到雨滴去除的效果,主要对较小雨滴有用。
Qian等[24]提出了AttentiveGAN来同时检测和去除雨滴并生成相应的注意力图。该算法将视觉注意力注入生成对抗网络。在训练阶段,算法利用注意力机制专注于雨滴区域及其周围的环境的输入。他们用0,1分别表示图像中的无雨覆盖的像素以及有雨覆盖的像素,由此来生成雨滴图像的掩码,由于无雨图像的二进制形式过于简单,结果在许多情况下预测的图像可能包含明显的伪像。Quan等[25]在Qian的基础上加入了形状驱动模块来帮助确定注意蒙版,局部图像强度的变化容易对形状驱动模块中的边缘检测器的检测性能产生影响,从而降低生成图像的准确性。Hao等[26]结合现实中雨滴的折射性来获得图像的注意掩码,模型复杂且参数量巨大,不适用于小型嵌入式系统。Lin等[27]建立了A2Net,使用功能聚合操作,将注意力集中在亮度(Y通道)上,而不是色度(UV通道)上,融合相邻要素来实现雨滴去除。对于亮度较差的图像,效果会变差。
该文采用稠密的残差连接[16]在每个模块间引导去雨图像的生成;并通过加入非局部神经网络[14]解决了雨滴的自注意力问题;算法还在非局部神经网络前加入扩张卷积[15]来扩大感受野,以此来获得不同尺度大小的雨滴;另外还使用递归策略[28]以达到参数数量与模型性能之间的折衷;最后,每一个模块的输出都有原图像的叠加,更加保证图像结构的清晰。
2 基于自注意机制的去雨滴网络
基于深度学习的单幅图像的去雨滴工作重点在于设计出一个带雨滴图像端与不带雨滴图像端的复杂映射模型。
由于雨滴分布的不确定性以及雨滴状态的复杂性,想要在网络中准确找出雨滴位置并进行消除一直是单幅图像去雨滴任务中的重点和难点。最初人们大多根据雨滴外形特征来区分雨滴部分和非雨滴部分,后来基于深度学习的模型中虽利用到了雨滴像素和非雨滴像素的不同的因素,但依然结合了雨滴的外形特征来设计模型,具有一定的局限性。非局部神经网络[14],作为一个高效、简单和通用的模块,用于获取深度神经网络的长时记忆,是计算机视觉中经典的非局部均值运算的一种泛化结果。即非局部运算将某一处位置的响应作为输入特征映射中所有位置的特征的加权和来进行计算。以此将其运用在文中的去雨网络中,来获取雨滴像素与非雨滴像素之间特征的联系,达到雨滴像素与非雨滴像素之间的特征自注意。
文中算法的目标是:给定一幅雨滴图像X,经过网络处理得到去除雨滴后的结果图像Y。
文中借鉴文献[28]的模块间级联和模块内递归,建立了一个基于自注意机制的级联稠密残差网络,如图1所示。整个网络由n个子模块B1,B2,…,Bn级联组成。每个子模块的结构如图1所示。可以看到,Blocki的输入是Blocki-1模块输出的去雨滴图和残差连接。每个模块由特征提取模块和递归消除模块组成。特征提取模块由扩张卷积和非局部神经网络组成;递归消除模块由两个卷积递归5次得到。
图1 级联的密集残差网络
2.1 级联的密集残差网络
残差连接[29]是为了解决反向传播中的梯度消失问题而提出的。该残差网络可以同时解决计算机资源的消耗以及深层模型容易过拟合的问题。之后,Huang等[16]提出从浅层到深层密集的连接特征图方法,ResNet[29]和 DenseNet[16]都在网络输入输出之间加入了连接,ResNet[29]按残差块为单位添加网络隐含层的连接,DenseNet[16]在每层添加连接,从特征的角度考虑,通过特征重用和旁路(Bypass)设置,减轻了反向传播中梯度消失的问题并减少模型参数的数量。Tai等[30]在回归任务中也引用了稠密的残差连接来处理图像的修复问题,这表明稠密的残差连接可能对网络的长期记忆和网络中高层信息的恢复有益。
在文中的网络中,如图1所示,在模块间使用稠密的残差连接[16],并在每个块中使用长捷径[31]来简化学习过程。使用这样的框架的原因:第一,高层卷积特别是过深的网络会丢失一些底层细节信息,而去雨任务更注重的细节信息往往包含在网络底层;第二,低层的特征语义信息比较少,但是包含了对象空间信息,有助于提供结构及内容信息;而高层的特征语义信息比较丰富,但是丢失了对象空间信息。所以文中网络通过长捷径[31]来强化低层信息。
每个模块由自注意特征模块和递归消除模块构成,在每个自注意特征模块之后以及递归消除模块之中都加入concat连接,减少网络层数,并在开始和最后加入卷积进行提取和组合特征。每个模块输出之后,将其与原图相加,即可得到一次预测图,随着块的深入,预测图更加接近真实图。
使用级联的密集残差网络逐步消除的效果如图2所示。可以看出,输出图像的SSIM(structural similarity index,结构相似性)值[32]以及PSNR(peak signal to noise ratio,峰值信噪比)值随着块的深入逐渐增加。
图2 网络中模块1、模块3、模块5的输出
2.2 自注意特征提取模块
自注意特征提取模块由四个扩张卷积[15]和一个非局部神经网络[14]构成。扩张卷积[15]用来扩大感受野,非局部神经网络[14]用来获取需要修复的雨滴的位置。
2.2.1 特征自注意
注意力研究方面,至关重要的是在深度神经网络中获取长时记忆(long-range dependency)。而将非局部计算作为获取长时记忆的通用模块加入神经网络中,是提高神经网络性能的一个重要方法。卷积和递归运算都是在一个局部特征邻域进行处理,可以是空间局部特征邻域,也可以是时间局部特征邻域,因此只有不断重复这些运算,逐步在数据中传播信号,才能获取长时记忆。而不断重复局部计算有几个限制。首先,计算效率低下。其次,会产生一些优化问题,需要仔细解决。最后,这些问题使multihop dependency建模十分困难,multihop dependency建模就是在很长的时间/空间位置之间来回传送信息。非局部神经网络[14]首先被提出用于实现视频分类任务的远程依赖性的计算。在每个2D非局部操作中,位置处的响应被计算为所有空间位置处的特征的加权和。这种非本地操作主要还是受到传统的非本地均值滤波的启发,而传统的非本地均值滤波也被早期的单图像去雨方法[30]所利用。
该文将非局部神经网络[14]引入文中的雨滴去除网络模块中,如图1所示。因为去除雨滴恢复背景信息需要细节信息,而深层网络会丢失细节信息,所以文中将特征自注意模块[14]放置在浅层卷积层之后,以捕获图像中的雨滴。通过非局部神经网络[14]的逐像素相乘的方式,得到每个像素间的一个权重矩阵,之后将输入特征映射为上面每个位置的特征值赋给对应的位置,由其他背景信息来预测当前位置的背景信息。
2.2.2 扩大感受野
雨滴形状和尺寸都不同,单纯的1*1或3*3的卷积并不能涵盖各种各样的雨滴,为了解决这个问题,在每个块的第一个卷积之后加入4个扩张卷积[15]来系统地聚合上下文信息,如图1所示,文中设置的膨胀系数分别为2,4,8,16。这样设计的扩张卷积[15]不会丢失大量的分辨率,同时增加了感受野,使细节更显著。
2.3 递归消除模块
递归神经网络具有可变的拓扑结构且权重共享,被用于包含结构关系的机器学习任务。同时因递归网络的可拆卸性和可拓展性,使得文中网络可根据任务的难度大小增减网络规模。文中使用递归策略[26]达到参数数量与模型性能之间的折衷。如图1所示,在该任务中,将自注意特征提取模块的输出特征图X0馈送到递归块的所有后续输出中,用于逐步消除图像中的雨滴。
Xt=g(Xt-1)+X0
(1)
其中,g表示一个块内的每个递归单元,Xt表示每个模块输出的图像,Xt-1表示前一模块的输出。
2.4 损失函数
对于每个块,采用L2+SSIM损失[32],它可以更好地保证结构的完整性以及每个像素的相似性。
块n的总损失函数LBn由MSE损失LMSEn和SSIM[32]损失LSSIMn组成。它们的计算分别如式(2)~式(4)所示。
LBn=LMSEn+αLSSIMn
(2)
(3)
LSSIMn=log(1.0/S(fn(Xi,W,b),Y)+1e-4)
(4)
式(3)和式(4)中,X,Y和Xi分别表示带雨滴的图像,相应的干净图像和Bi的输入;M表示投入训练的雨滴图像的数量;W和b是文中模型需要调整的参数;f(·)表示相应块的功能映射,即每个块的输出;S(·)表示SSIM(结构相似性)函数,该函数用来计算每个输入图像对对应像素间的亮度、对比度以及结构的相似性。该函数输入为该模块预测的输出图像以及干净无雨图像对,输出为0到1间的数值。SSIM具体算法参见文献[32]。α是平衡MSE损失和SSIM损失的超参数,文中实验设置为1。
我们这些学生的学习水准都很差劲儿,一问三不知是我们的家常便饭。如果市政府不组建这所学校,让这些少年散放到社会上——毫无疑问,我们当中得有很多人会成为少年犯。市政府正是基于这样的担心才成立了这所非驴非马的学校,把这些天性难驯的顽劣学生圈在这儿读书,让他们学习将来到社会上生存的手艺,成为自食其力的、无害的人。总之,这家学校不是培养国家的栋梁和大用之材的地方。
所以整个网络的总损失函数为:
(5)
3 实 验
本节将文中方法与三种深度学习方法进行了比较:pix2pix[33]、AttentiveGAN[24]和A2Net[27]。为了公平地比较,使用文献[24]中的deraindrop雨滴数据集来重新训练所有这些方法。
3.1 数据集和评估标准
使用deraindrop[24]数据集,该数据集包含一个训练集TrainData,两个测试集TestA和TestB。TrainData包含861组(带雨滴图像,不带雨滴的图像)图像对,将这861组包含各种大小尺度不同的雨滴的图像,生成tfrecords文件,90%做训练集,10%做验证集,训练时随机生成一个batch大小的裁剪为128*128像素的训练对投入训练网络以进行雨滴消除的训练。TestA包含58对精确对照的图像,TestB包含249对图像,这些图像可以更好地反映雨滴分布的复杂性,但其中一小部分质量不高。文中在TestA和TestB上测试上述方法,以便更准确地比较上述方法的性能。
实验采用SSIM[32]和PSNR两个评价指标来对实验结果进行数值比对。峰值信噪比(PSNR),单位是dB,数值越大表示失真越小。结构相似性(SSIM),也是一种全参考的图像质量评价指标,它分别从亮度、对比度、结构三方面度量图像相似性。SSIM取值范围[0,1],值越大,表示图像失真越小。SSIM在图像去噪、图像相似度评价上是优于PSNR的。
3.2 实验环境及参数设置
使用TensorFlow在具有10 GB GPU内存的NVIDIA GeForce GTX 1080上的Python环境中训练和测试该算法。采用RMSProp优化器进行参数学习。初始学习率为0.001。batchsize的大小设置为12。衰减率为0.1,衰减次数为10 000。训练网络总迭代次数为60 000。对于所有实验,将non-local模块的卷积核大小设为1×1,其余部分卷积核大小设置为3×3,4个空洞卷积的采样间隔分别为2、4、8和16,除了合并卷积,每个卷积层都有16个特征图。
3.3 实验结果分析
图3显示了用于测试的三个雨滴去除图像的视觉比较,可以看出,pix2pix[33]可以去除雨滴,但背景效果很模糊,AttentiveGAN[24]算法的去除效果比pix2pix[33]好,但是有些去雨后的区域比较模糊;文中方法具有与A2Net[27]相似的去雨效果,优于其他两种方法。
图3 不同去雨算法在deraindrop数据集上得到的结果比较
3.3.1 不同去雨算法之间的定量评估
文中还采用SSIM[32]和PSNR测度对算法去雨效果进行了定量评估。SSIM取值范围[0,1],值越大,表示图像失真越小。PSNR值越大,就表示失真越小。如表1所示,所有表中评价指标格式为SSIM/PSNR值,对于TestA,文中SSIM测度上优于其他方法。这表明文中方法可以产生与无雨图像更相似的结果。在TestB上,文中方法在PSNR测度上的结果与A2Net[27]方法也差不多。这是因为数据集TestB中雨滴的分布(雨滴的大小,样式)更加复杂,对去雨方法能处理现实中复杂雨滴环境的要求更高。PSNR是基于均方误差(MSE)计算的,由于均方误差无需考虑局部图像质量即可测量全局像素误差,所以相对SSIM,PSNR稍差些对最终效果影响不大。文中在Testa和Testb上SSIM指标优于其他算法,PSNR指标和A2Net[27]相当,且优于其他算法。此外,文中模型包含的参数要少得多,计算成本更低。
表1 不同去雨算法在deraindrop数据集上的评价指标比较
3.3.2 去雨网络模型研究
文中将只有稠密残差引导的网络作为基线模型,然后依次加入non-local模块[11]和扩张卷积[29]去测评文中模型。如图4和表2所示,实验表明,文中模型在该数据集上得到了良好的效果。只使用基线模型时图中雨滴位置会被深色像素替代,加入non-local模块之后,发现雨滴位置的像素会接近旁边区域的像素,但是大片的雨滴的地方还会有一些模糊像素,加入扩张卷积之后,一些大的雨滴也会被处理得更清晰了。
图4 文中模型增加或减少其中一部分模块的结果对比
表2 不同模块下网络模型的评价指标比较
3.4 参数量对比
Pix2pix[33]以及AttentiveGAN[24]都是在GAN(generative adversarial network)的基础上来对图像进行处理的,该模型特点包括生成器以及鉴别器,两个模型单独交替训练,因此需要很大的参数量来实现其功能。A2Net[27]采用了一个相邻聚合网络来实现雨滴的去除,可以将复杂的图像到图像映射问题转换为亮度(Y通道)和色度(UV通道)处理问题,减少了一定的参数量,但依然需要一个编码器和两个解码器来学习。而文中方法采用端到端的处理方式,以及残差和非局部连接,将参数量减少到0.22 M(如表1所示),依然具有良好的性能。
3.5 损失函数
在本节中,对不同的损失函数对模型性能的影响进行实验。传统基于MSE的损失不足以表达人的视觉系统对图片的直观感受。例如有时候两张图片只是亮度不同,但是之间的MSE loss相差很大。而一幅很模糊与另一幅很清晰的图,它们的MSE loss可能反而相差很小。人类衡量两幅图的距离时,更偏重于两图的结构相似性,而不是逐像素计算两图的差异。SSIM loss是按三个维度进行比较:亮度,对比度,结构。其效果将更符合人类视觉系统。文中使用MSE+SSIM loss将同时对逐像素以及亮度,对比度和像素进行比较,得到的图像将更符合所期望的视觉效果。图5显示了使用不同损失函数的结果比较。可以看出,仅使用MSE损失会产生过于平滑的结果,而使用SSIM损失则可以更好地保留细节。此外,如图5所示,将SSIM[32]和MSE损失结合起来可以生成具有更好全局结构和更清晰细节的图像。表3还表明,使用SSIM[32]和MSE损失结合可以进一步改善性能,使雨滴下恢复的背景细节更加清晰。
图5 使用不同损失函数的雨滴去除结果比较
表3 不同损失函数的SSIM/PSNR比较
3.6 扩充数据集上的效果
为了验证文中算法的可行性,用手机透过带水滴的玻璃片拍摄了78张小区的照片,并对图片上的水滴进行去除,由于手机无法固定导致像素无法对齐,仅展示雨滴去除的视觉效果,如图6所示。
图6 在扩充数据集上的效果
4 结束语
提出了一种基于自注意力的单幅图像去雨滴的网络。首先对雨滴图像进行特征提取,特征提取时,先经过4个扩张卷积来扩大感受野,之后进入non-local局部神经网络获取雨滴部分与周围点的特征映射关系,接着投入递归卷积网络进行雨滴的去除,最后递归5个相同的模块,同时在模块间加入稠密的残差映射,由低级特征结合高级特征来引导最终输出,以得到更细致的输出。每个模块的输出都是与原图相加的结果,更保证了图像细节的良好处理。实验结果表明,模型在有效去除雨滴的情况下防止了图像的过渡平滑和失真,所提方法较现有方法去雨滴能力稍强,同时含有较少参数量,对小型去雨滴设备友好。