《Attentive Generative Adversarial Network for Raindrop Removal from A Single Image》论文阅读之AttentiveGAN

        生成对抗网络(GAN)被称为“新的深度学习”,虽然还有着一些训练上的难点,但已经被广泛地应用到各种问题,产生了各种变体。本文通过精巧的注意力机制和损失函数设计,实现了效果极佳的图像雨滴去除效果,可以为雨天无人驾驶条件下的视觉感知算法提供助益。

paper: 《Attentive Generative Adversarial Network for Raindrop Removal from A Single Image》

github: code1 ,code2

摘要

雨滴粘附在玻璃窗或相机镜头上会严重影响背景图像的可见性,并大大降低图像的质量。本文通过视觉上去除雨滴来解决这个问题,将沾有雨滴的图像转化为清晰的图像。图像去雨滴的难点在于雨滴遮蔽的区域是未知的,且封闭区域背景的信息大部分已经完全丢失的。为了解决这个问题,我们采用了一个使用对抗训练的注意力生成网络。主要想法是将视觉注意力注入到生成性和判别性的网络中。在训练期间,我们的视觉注意力学习了雨滴区域及其环绕区域。因此,通过注入这些信息,生成网络将更加注意雨滴区域和周围结构,且判别网络将能够评估恢复区域的局部一致性。本文的主要贡献在于将视觉注意力注入传统的GAN网络。实验表明了方法的有效性,且在数量上和质量上超越了最先进的方法。
 

简介


玻璃窗、挡风玻璃或镜头上的雨滴阻碍背景场景的可见性,从而降低图像的质量。与未受雨滴影响的地区不同,雨滴区域是由于雨滴的球面形状获得更宽泛区域的反射光线,与鱼眼镜头相似。此外,在大多数情况下,相机的焦距集中在背景的场景,使近距离的雨滴形成模糊的像素。

本文提供了图像增加雨滴的方法。如图1所示,我们的目标是清除雨滴,并产生清晰的背景。方法是完全自动的。我们认为它将有利于图像处理和计算机的应用,特别是对于那些遭受雨滴、灰尘或人为影响的图像。

雨滴检测和去除问题已提出了一些解决方法。文献[17,18,12]这样的方法致力于探测雨滴,但没有移除它们。其他方法利用立体视觉[20]、视频流[22,25]或特殊设计的光学快门[6]来检测和去除雨滴,因此不适用于普通单帧图像。Eigen等人[1]提出的一个方法与我们的方法相似,试图通过深度学习的方法,基于单幅图像去除雨滴或污垢。然而,它只能去除图像中的小雨滴,而且输出图像比较模糊[25]。在第6节实验结果中,我们将发现该方法无法处理相对较大和稠密的雨滴。

与[1]相比,我们打算处理实质性雨滴,如图1所示。去雨滴问题通常是难以解决的,因为首先没有给出被雨滴遮挡的像素信息。其次,雨滴遮挡的背景信息在大多数情况下是完全丢失的。当雨滴相对较大,并且在输入图像上分布密集时,去雨滴问题将更难处理。为了解决这个问题,我们使用了生成式对抗神经网络,生成网络的图像将判别网络进行评估,以确保最后输出图像看起来像真实的图像。为了解决这个复杂的问题,在传统的生成网络前尝试生成注意力分布图。注意力分布图是所设计网络中至关重要的部分,因为注意力分布图能够使生成网络聚焦在有雨滴的区域。这张地图是由一个结合深度残差网络(ResNets)[8]和记忆神经网络(LSTM)[21]的循环神经网络和一部分标准的卷积层组成。我们称之为注意力循环网络。

我们生成网络的第二部分是自动编码器,它将输入图像和注意力分布图作为输入。为了获得更广泛的上下文信息,在自动编码器的解码端,我们应用多尺度的损失函数。这些损失函数中的每一项都比较了卷积层的输出和对应的真实背景。卷积层的输入是解码层的特征。为了自动编码器的最终输出,除了这些损失函数,我们应用感知损失来获得整体上更加真实的图像。这个最终输出也是我们生成网络的输出。

获得了生成图像输出后,我们的判别网络将检查它是否足够真实。就像在一些图像修复方法[9,13]中一样,我们的判别网络在全局和局部上都验证了图像的真实性。然而,与我们的方法不同,特别是在测试阶段,图像修复方法的目标雨滴区域没有给定。因此,判别网络将不会集中在这些局部区域的信息。为了解决这个问题,我们利用我们的注意力分布图来指导判别网络指向局部雨滴区域。

总的来说,除了引入一种新颖的去雨滴方法之外,我们的另一个主要贡献就是将注意力分布图注入到生成性和判别性的网络中,这是一种新颖且能有效地去除雨滴的方法,如我们在第6节的实验中所示。我们将发布我们的代码和数据集。

文章的其余部分结构如下。第二部分论述了雨滴检测和去除等领域的相关工作,以及在基于卷积神经网络的图像修复相关研究。第三部分解释了图像的雨滴模型,这是我们方法的基础。第四部分介绍了基于生成式对抗网络的方法。第五部分讨论了我们如何获取用于网络训练的合成和真实图像。第六部分从数量和质量上展示我们的评价。最后,第七部分总结了我们的论文。


相关研究


已存在部分研究论述恶劣天气的可见性增强,主要是处理烟雾或雾霾[19,7,16]以及雨痕 [3,2,14,24]。但是,这些方法不能直接将应用于去除雨滴,因为附在玻璃窗或镜头上的雨滴的形成和约束与雾霾、雾气或雨痕有所区别。

在一些图像检测雨滴的方法中,Kurihata等人[12]采用PCA学习了雨滴的形状,并尝试使用已学习的雨滴形状与测试图像进行匹配。然而,由于雨滴是透明的且形状各异,也存在无法确定需要学习雨滴的数量,如何保证PCA能够模拟各种雨滴的形状,以及如何防止一些与雨滴类似的区域被误检为雨滴的这些问题。Roser和Geiger提出了一种方法,可以将人工合成的雨滴和可能带有雨滴的补丁相比较。合成雨滴被假定为球面部分,且补丁也假定为倾斜球面部分[18]。这些假设可能在某些情况下起作用,由于雨滴存在各种形状和大小,故不能完全用于处理所有雨滴。

Yamashita等人的[23]使用立体视觉系统来检测和移除雨滴。它通过比较立体视觉所测量照片的差异和立体相机和玻璃表面之间的距离来检测雨滴。然后,使用未受雨滴影响的像素替换其他图像的雨滴区域像素进行去除雨滴,这种方法的前提是其他图像的对应区域没有遮挡背景场景的雨滴。在 Yamashita等人[22]的研究中,提出了另一种使用视频帧而不是立体视觉的类似方法。近年来,You等人[25]引入了一种基于运动的雨滴检测方法,以及视频修复技术消除探测到的雨滴。虽然这些方法在一定程度上可以去除雨滴,但是它们不能直接应用到单一图像的场合。

Eigen 等人[1]解决了单幅图像中的雨滴去除,据了解,是文献中唯一专门解决这个问题的方法。这个方法的基本思想是用一对有雨滴图像和对应无雨滴图像来训练一个卷积神经网络。此 CNN结构由3层组成,每层有512个神经元。虽然这种方法有效,特别是对于相对稀疏和小面积的雨滴或灰尘,但对于较大和稠密的雨滴它不能产生清晰的结果。此外,输出图像是模糊不清的。可能是因为网络的能力有限,以及损失函数无法提供足够的限制因素缺陷而造成。第6节展示所给方法结果与这个方法的比较。

在我们的方法中,我们利用 GAN [4]作为网络的基本结构,这种网络最近在处理图像修补或复原中比较普遍[9,13]。与我们的方法类似,文献[9] 在其判别网络中使用全局和局部质量评估。然而,与我们的方法不同的是,该方法图像修复的目标区域是人工给定的,从而局部评估(无论局部区域是否足够真实)能够得以实现。因此,我们不能将现有的图像修复方法直接应用于我们的问题。另一个类似的架构是Pix2Pix[10],将一个图像转换成另一个图像。文献提出了一种conditional-GAN,它不仅可以学习从输入图像到输出图像的映射关系,也能够学习一个训练该映射关系的损失函数。该方法是一种常规的映射,而不是专门针对雨滴去除的解决办法。

雨滴成像原理

所提出的雨滴图像模型认为是背景图像和雨滴效应的组合:

式中,I是输入彩色图像;M是二进制掩码。在掩码中,M (x)=1表示像素 x 是雨滴区域的一部分,否则认为是背景区域的一部分;B是背景图像,R是雨滴所带来的影响,表示背景信息的复杂混合物以及透过透镜或挡风玻璃的反射光线。算子⊙代表元素相乘。

雨滴本身是透明的。但由于它们的形状和折射率,雨滴区域中的一个像素不仅受到现实世界中某一点的影响,而且还受到整个环境的影响,使得大部分雨滴看起来都不同于环境背景的图像。此外,由于我们的相机被假定为关注背景,雨滴区域内的成像大多是模糊的。雨滴的某些部分,特别是在边缘和透明区域,包含了一些关于背景环境的信息。这些信息能够被我们的网络使用。

基于公式(1)的模型,需要从给定的输入图像I中获取背景图像B。为了实现这个目标,我们根据二进制掩码的思维创建了注意力分布图M。对于如图5所示的训练数据,为了获得这个掩码,我们简单地将雨滴图像I减去对应的清晰图像B。我们使用阈值来确定像素是否是雨滴区域的一部分。在实际中,我们在训练数据集中将所有图像的阈值设置为30。这个简单的阈值方式足够生成注意图的目的。


Attentive-GAN去除雨滴


图2显示了我们提出的网络工作的总体架构。根据生成对抗网络的理念,我们的网络有两个主要部分: 生成网络和判别网络。输入一个沾有雨滴的图像,生成网络将试图生成一个尽可能不沾有雨滴,并且尽可能真实的图像。判别网络则将验证生成网络生成的图像是否真实。

我们生成性的对抗性损失可以表达为:

G代表生成式网络,并对判别网络进行重新预测;I是从我们被雨滴降解的图像池中提取的样本,这是我们生成网络的一部分;R是一个清洁自然图像池中的样本。

生成网络
如图2所示,生成网络由两个子网络组成:一个注意力循环网络和一个上下文自动编码器。注意力循环网络的目的是在输入图像中找到需要引起注意的区域。这些区域主要是上下文自动编码器需要关注的雨滴区域及其周围结构,这样它就可以产生更好的局部图像复原效果,并且判别网络也可以更好地进行评估。

注意力循环网络:应用了一些视觉注意模型用于提取目标关注区域的特征。这个概念已被用于视觉识别和分类[26,15,5]。同样,我们认为视觉注意力是产生无雨滴背景图像的重要因素,因为它可以让网络知道移除和恢复作用应该集中在哪里。如图2中的架构所示,我们使用一个循环网络来产生我们的视觉注意机制。每一块(即每个时间步长长)都包含5层ResNet[8]-它们帮助从前一块的输入图像和掩码中提取特征-一个卷积的LSTM单元[21]和用于生成2D注意分布图的卷积层。

在LSTM中学习到的注意力分布图,是一个从0到1的矩阵,其值越大,它所表示的注意力就越大,如图3中的可视化结果所示。与二进制掩码不同的是,注意图是一个非二进制映射,它代表了从非雨滴区域到雨滴区域的逐渐增加的注意力,而且即使在雨滴区域内,这种程度也会有所变化。由于雨滴的周围区域也需要注意,而且雨滴区域的透明度实际上也不尽相同(有些部分并不完全遮挡背景,因此传达一些背景信息)。

卷积LSTM单元包括一个输入门、一个遗忘门、一个输出门和一个单元状态。状态与门之间在时间维度上的相互作用定义如下:

其中,是由ResNet生成的特征;对将要转递到下一个LSTM的状态进行编码;代表LSTM单元的输出特性;运算符 * 表示卷积运算。然后将LSTM的输出特性输入到卷积层中生成一张2维注意力分布图。在训练过程中,我们将注意力分布图的值初始化为0.5。在每一个时间步长中,我们将当前的注意力分布图与输入图像叠起来,然后将它们输入我们的循环网络的下一个块。

在训练生成网络时,我们使用成对的有/无雨滴的图像,其包含完全相同的背景场景。各循环块的损失函数为在时间步长t输出注意力分布图和二进制掩码之间的均方差(MSE)。LSTM循环网络重复N个时间步长。早期的注意力分布输了具有较小的权值,随着步长的增加权值增大。损失函数表示如下:

时间步长t输出的注意分布图,是输入图像与注意分布图拼接;t=1时,初始注意力分布图的值为0.5;函数表示时间步长t上的循环网络;我们设置 n=4、θ=0.8;我们期望一个更高的n将产生一个更好的注意力分布图,但相应地也需要更大的内存。

图3显示了我们的网络在训练过程中生成的注意力分布图的一些例子。正如我们所看到的,我们的网络不仅试图找到雨滴的区域,而且还要找到周围区域的一些结构。图8显示了测试阶段循环网络的效果。随着时间的推移,我们的网络工作越来越专注于在雨滴区域及其相关结构上。



图3.注意力分布图学习过程的可视化。在训练过程中,我们的注意力循环网络更加注重雨滴区域和相关结构。



图4.我们上下文自动编码器的架构。多尺度的损失和感知损失被用来帮助训练自动编码器。

上下文自动编码器:我们上下文自动编码器的目的是生成一个没有雨滴的图像。自动编码器的输入是输入图像和循环网络生成的注意力分布图的拼接。我们的深度自动编码器有16个conv-relu块,并添加了跳过连接,以防止模糊的输出。图4说明了上下文自动编码器的体系结构。

如图所示,我们的自动编码器有两个损失函数:多尺度损耗和感知损失。对于多尺度损耗,我们从不同的解码器层中提取特征,以形成不同尺寸的输出。通过采用这种方法,我们打算从不同的尺度获取更多的上下文信息。这也是为什么我们称之为上下文自动编码器的原因。

我们将损失函数定义为:



其中,Si表示从解码层中提取的第i个输出,Ti表示与Si相同比例的真实值标注。是不同尺度的权重。我们把更多的权重放在更大的尺度上。更具体地,我们使用了倒数第1、3、5层的输出,其对应尺度为原尺寸的1/4、1/2和1。由于包含的信息不重要,更小的尺度没有再使用了。三个层的权重则分别设置为0.6、0.8和1.0。

除了基于逐点计算的多尺度损失外,我们还应用了一个感知损失[11],以测量去雨图像和真实无雨图像之间全局的特征差异。这里所说的特征可以从已经训练好的CNN,比如在ImageNet中训练的VGG16中提取出来。我们的感知损失函数可以表示为:



其中,VGG是一个预训练的CNN,其可以产生对应于输入图像的特征空间的表达。O为上下文自动编码器(或者说整个生成网络)输出的去雨图像。T是真实的无雨图像。

总地来说,我们的生成网络的损失函数可以表示为:



其中,

判别网络
为了将生成的图像和真实图像区分开,一些基于GAN的方法在判别部分中采用全局和局部的图像内容一致性(例如[9,13])。全局判别器查看整个图像,以检查是否存在不一致性,而局部判别器则查看特定的小区域。如果我们知道有哪些区域极可能是伪造的(比如image inpainting的任务中,需要被恢复图像区域已经给出) ,那么局部鉴别器的策略就特别有用。不幸的是,在我们的问题上,特别是在我们的测试阶段,我们不知道哪些区域沾有雨滴。因此,局部鉴别器必须尝试自己找到这些区域。

为了解决这个问题,我们的想法是使用一个带注意力的鉴别器。为此,我们仍可利用注意力循环网络生成的注意力分布图。具体来说,我们从判别器中间的某层提取特征,然后输入到一个CNN中去,以期待其输出一个注意力掩码。我们根据CNN的输出和注意力分布图来定义一个损失函数。更重要的是,对于CNN的输出,在将它们输入下一层之前,我们将其与判别网络的原始特征相乘。这样做的基本思想是引导我们的判别器将注意力集中在注意力分布图所指定的区域上。最后,在最后一层,我们使用一个全连接层来决定输入图像是假的还是真实的。图2的右半部分说明了判别器的结构。
判别器的损失函数可表示为:



在这里,Lmap是从判别器中间某层生成的注意力掩码图和真实注意力分布图之间的差异:



其中,Dmap表示由判别网络生成二维注意力掩码图的过程,设定为0.05。R为真实无雨图像。

我们的判别网络包含7个3x3的卷积层,一个全连接层(1024个神经元)和一个sigmoid激活函数。倒数第3层(含全连接层)前为掩码后的图像特征。

雨滴图像数据集

类似于目前的深度学习方法,我们的方法需要相对大量的数据和训练用的真实值标注。然而,由于没有现成的雨滴附着在玻璃窗或镜头上数据集,我们就创建了自己的数据集。对于我们的情况,我们需要一组图像对,其中每一对都包含完全相同的背景场景,但是一个是沾有雨滴的,另一个是没有雨滴的。为此,我们使用两个完全相同的玻璃: 一个喷水,另一个保持干净。使用两片玻璃可以使我们避免图像对的不一致,因为玻璃有一个不同于空气的折射率,因而折射出光线。一般来说,我们也需要处理其他任何导致不一致的原因,例如摄像机的运动; 以及确保大气条件(如阳光、云层等)以及在采集过程中的静态背景物体。

我们拍摄了1119对图片,各种背景场景和雨滴。我们使用索尼A6000和佳能EOS 60进行图像采集。我们的玻璃板厚度为3毫米,并附在相机镜头上。我们设置了玻璃和相机之间的距离,从2厘米到5厘米不等,以产生不同的雨滴图像,并尽量减少玻璃的反射效果。图5显示了我们数据的一些样本。

表1.定量评价结果



表中,A是我们的上下文单独。A+d是自动编码器+判别器。A+ad是自动编码器,加上注意力鉴别器。Aa+AD是我们的完整体系结构:专注的自动编码器加留心的鉴别器。

试验结果

定量评估
表1显示了我们的方法与其他现有的方法的定量比较:Eigen13[1],Pix2Pix[10]。如表中所示,与这两种方法相比,我们的PSNR和SSIM指标更高。这表明,我们的方法可以产生与真实无雨图像的结果。

我们还将我们的整个注意力GAN与我们自己网络的某些部分进行比较: A(没有注意力分布图的自动编码器)、A+D(非注意力自动编码器+非注意力判别器)、A+AD(非注意自动编码器加注意力判别器)。用AA+AD(注意自动编码器加注意力判别器)表明了我们全体注意力的GAN。如评估表所示,AA+AD的性能优于其他可能的配置。这就是生成网络和判别网络都需要注意力分布图的定量证据。

定性评价
图6显示了Eigen13[1]和 Pix2Pix[10]的结果与我们的结果进行比较。可以看出,相比特征13和 Pix2Pix,我们的方法在去除雨滴方面更加有效。在图7中,我们还比较了我们的整个网络(AA+AD)和其他可能的结构(A,A+D,A+AD)进行比较。虽然A+D在性质上比A好,而且 A+AD比A+D好,但是我们的整个网络比A+AD更有效。

图9提供了我们的结果和Pix2Pix结果的另一个比较。可以看到,我们的输出具有更少的工件和更好的恢复结构。



图6. 比较几种不同方法的结果。从左到右: 真实值,雨滴图像(输入),Eigen13[1],Pix2Pix[10]和我们的方法。尽管雨滴的颜色、形状和透明度各不相同,但几乎所有的雨滴都被我们的方法去除了。



图7.比较我们网络架构的一些部分。从左到右: 输入,A,A+D,A+AD,我们的完整体系结构(AA+AD)。



图8.可视化的注意力分布图产生的我们的新的注意力循环网络。随着时间的增加,我们的网络越来越关注雨滴区域和相关结构。



图9.仔细看看我们的输出和 Pix2Pix的输出之间的比较。我们的输出具有更少的不自然的修改痕迹和更好的恢复结构。

应用
为了进一步地证明我们的算法有助于机器视觉的应用,我们采用 Google Vision API(https://cloud.google.com/vision/) 来测试使用我们的输出是否可以提高识别性能。结果见图10。可以看出,使用我们的算法处理之后,识别效果要好于不使用我们的算法处理。此外,我们对测试数据集进行了统计评估,图11显示,无论是从识别输入图像中的主要对象的平均得分,以及被识别的对象标签的数量上看,使用我们的算法处理之后的识别效果显著优于那些没有处理的效果。

结论

本文提出了一种基于单图像的雨滴去除方法。该方法利用一个生成对抗网络,网络通过专注循环网络生成注意力分布图,并使用该地图和输入图像通过语义编码器生成去雨滴图像。判别式网络对生成的图像从局部和整体评估其真实性。为了进行局部验证,我们将注意力分布图注入网络。方法创新在于将注意力分布图应用于生成网络和判断网络。我们也认为本文的方法是第一种可以处理雨滴相对严重的场景,这也是目前比较先进的图像去雨滴方法无法达到的效果。



图10.提高 Google Vision API识别结果的例子。我们的方法增加了主要目标检测的得分以及被识别对象的数量。



图11.基于 GoogleVision API 的优化概要:(a)输入图像中识别主要对象的平均得分;(b)识别物件标签数目。我们的方法提高了10%的识别率,并通过100%额外的对象标识来使召回受益。

 

参考链接:

1.https://www.auto-testing.net/news/show-98137.html

2.https://blog.csdn.net/c_chuxin/article/details/82988811

猜你喜欢

转载自blog.csdn.net/Gavinmiaoc/article/details/86542945