论文阅读:Attentive Generative Adversarial Network for Raindrop Removal from A Single Image

顺手把这两篇比较相像的GAN网络整理一下。

心有猛虎,细嗅蔷薇。

2018CVPR:Attentive GAN

本篇文章是2018年一篇CVPR,主要是针对雨滴Raindrop的去除提出了一种方法,在GAN网络中引入注意力机制,将生成的注意力图和原始有雨图像一起输入,完成去雨。是北大Jiaying Liu老师课题组的一篇文章,同组比较知名的去雨方面研究还有杨文瀚。

在这里插入图片描述
作者源代码:戳我
python3.5复现代码:戳我

作者指出,对于雨滴去除问题,首先是被雨滴遮挡的区域没有给出,其次大部分被遮挡区域的背景信息完全丢失,因此存在一定的挑战性。本文则是使用了一种基于对抗训练的注意力生成网络,在生成网络和判别网络中引入视觉注意力信息。并且在训练中视觉注意力学习雨滴区域和其周围信息,引入视觉注意力机制后,生成网络就会更加关注雨滴区域和周围结构,判别网络则能评估恢复区域的局部一致性。
关键词: 雨滴 + GAN + 视觉注意力

前人的工作及缺陷:

雨滴检测和去除问题已提出了一些解决方法。
有一些方法致力于探测雨滴,但没有移除它们。
其他方法利用立体视觉、视频流或特殊设计的光学快门来检测和去除雨滴,因此不适用于普通单帧图像。
Eigen等人提出了一种方法(一个三层的CNN网络),试图通过深度学习的方法,基於单幅图像去除雨滴或污垢。然而,它只能去除图像中的小雨滴,而且输出图像比较模糊,并且该方法无法处理相对较大和稠密的雨滴。

主要创新之处:

1、提出了一种注意力循环网络。在传统的生成网络前尝试生成注意力分布图,使得生成网络聚焦在有雨滴的区域。具体实现由一个结合深度残差网络(ResNets)和记忆神经网络(LSTM)的循环神经网络和一部分标准的卷积层实现。(5ResNet + LSTM + conv)
2、在生成器的后半部分是一个U-Net形状的自动编解码器,输入是输入图像和注意力分布图。损失函数则是使用了获取广泛上下文信息的多尺度损失及使更加真实的感知损失。
3、判别器网络中则是在全局和局部验证图像的真实性,并且利用注意力分布图来指导判别网络指向局部的雨滴区域。

前人工作:

Kurihata等人采用PCA学习了雨滴的形状,并尝试使用已学习的雨滴形状与测试图像进行匹配。然而,由于雨滴是透明的且形状各异,也存在无法确定需要学习雨滴的数量,如何保证PCA能够模拟各种雨滴的形状,以及如何防止一些与雨滴类似的区域被误检为雨滴的这些问题。

Roser和Geiger提出了一种方法,可以将人工合成的雨滴和可能带有雨滴的补丁相比较。合成雨滴被假定为球面部分,且补丁也假定为倾斜球面部分。这些假设可能在某些情况下起作用,由于雨滴存在各种形状和大小,故不能完全用于处理所有雨滴。

Yamashita等人使用立体视觉系统来检测和移除雨滴。它通过比较立体视觉所测量照片的差异和立体相机和玻璃表面之间的距离来检测雨滴。然后,使用未受雨滴影响的像素替换其他图像的雨滴区域像素进行去除雨滴,这种方法的前提是其他图像的对应区域没有遮挡背景场景的雨滴。

Yamashita等人还提出了另一种使用视频帧而不是立体视觉的类似方法。

You等人引入了一种基于运动的雨滴检测方法,以及视频修复技术消除探测到的雨滴。虽然这些方法在一定程度上可以去除雨滴,但是它们不能直接应用到单一图像的场合。

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

网络结构:

在这里插入图片描述

由网络结构图可以看出,
首先是向生成器网络输入有雨图,然后通过5ResNet + LSTM + convs网络得到当前阶段的2D注意力图,并将当前阶段的注意力图和原始图像一起输入到下一阶段。
然后将生成的2D注意力图和原始图像一起输入到一个U-Net得到去雨之后的图像。
判别器网络输入的则是生成器网络生成的去雨图片。

具体实现:

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

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

2、Attentive-GAN

在这里插入图片描述

其中G、D分别代表生成和判别网络;
I是包含雨滴的雨图,是生成器网络的输入;
R是自然界的无雨的清晰图片。

3、生成器

注意力循环网络+上下文自动编码器。
注意力循环网络的目的是在输入图像中找到需要引起注意即包含雨滴的区域。
这些区域是上下文自动编码器需要关注的雨滴区域及其周围结构,这样它就可以产生更好的局部图像复原效果,并且判别网络也可以更好地进行评估。

注意力循环网络:
应用了一些视觉注意模型用于提取目标关注区域的特征。视觉注意力是产生无雨滴背景图像的重要因素,因为它可以让网络知道移除和恢复作用应该集中在哪里。
使用一个循环网络来产生我们的视觉注意机制。
每一块都包含5层ResNet它们帮助从前一块的输入图像和掩码中提取特征-一个卷积的LSTM单元和用于生成2D注意分布图的卷积层。

在LSTM中学习到的注意力分布图,是一个从0到1的矩阵,其值越大,它所表示的注意力就越大。与二进制掩码不同的是,注意图是一个非二进制映射,它代表了从非雨滴区域到雨滴区域的逐渐增加的注意力。
卷积LSTM单元包括一个输入门、一个遗忘门、一个输出门和一个单元状态。状态与门之间在时间维度上的相互作用定义如下:
在这里插入图片描述

Xt 是由ResNet生成的特征;
Ct 对将要转递到下一个LSTM的状态进行编码;
Ht 代表LSTM单元的输出特征;
运算符 * 表示卷积运算,W是权重系数。
然后将LSTM的输出特性输入到卷积层中生成一张2维注意力分布图。
在训练过程中,我们将注意力分布图的值初始化为0.5。
生成的2D注意力分布图:
在这里插入图片描述

上下文自动编码器

在这里插入图片描述

上下文自动编码器的目的是生成一个没有雨滴的图像。自动编码器的输入是输入图像和循环网络生成的注意力分布图。我们的深度自动编码器有16个conv-relu块,并添加了跳跃连接,以防止模糊的输出。
自动编码器有两个损失函数:多尺度损耗和感知损失。对于多尺度损耗,我们从不同的解码器层中提取特征,以形成不同尺寸的输出。通过采用这种方法,我们打算从不同的尺度获取更多的上下文信息。还应用了一个感知损失以测量去雨图像和真实无雨图像之间全局的特征差异。

4、判别器

通常使用全局判别器和局部判别器来进行判别,全局判别器查看整个图像,以检查是否存在不一致性,而局部判别器则查看特定的小区域。

这里还是利用注意力循环网络生成的注意力分布图。具体来说,我们从判别器中间的某层提取特征,然后输入到一个CNN中去,其输出一个注意力掩码。我们根据CNN的输出和注意力分布图来定义一个损失函数。更重要的是,对于CNN的输出,在将它们输入下一层之前,我们将其与判别网络的原始特征相乘。这样做的基本思想是引导我们的判别器将注意力集中在注意力分布图所指定的区域上。最后一层使用一个全连接层来判别输入图像的真假。

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

损失函数:

1、训练注意力循环网络
在这里插入图片描述
各循环块的损失函数为在时间步长t输出注意力分布图At和二进制掩码M之间的均方误差(MSE)。LSTM循环网络重复N个时间步长。早期的注意力分布输了具有较小的权值,随着步长的增加权值增大。

2、上下文自动编码器

多尺度损失:
在这里插入图片描述
其中,Si表示从解码层中提取的第i个输出,Ti表示与Si相同尺度的groundtruth。

感知损失:
在这里插入图片描述
3、生成器总损失:

在这里插入图片描述

4、判别器损失:

在这里插入图片描述
其中,L map 是为鉴别器内层提取的特征与最终注意力图之间的损失:

在这里插入图片描述

实验

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

在这里插入图片描述
并采用 Google Vision API(https://cloud.google.com/vision/) 测试了使用我们的输出是否可以提高识别性能。

分页

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章