Abstract
雨水条纹会严重降低能见度,导致许多当前的计算机视觉算法无法工作。因此有必要去除图像中的雨水。我们提出了一种基于CNN和RNN的新型深度网络体系结构,用于单图像去雨。由于背景信息对于降雨非常重要,我们首先采用 dilated卷积神经网络来获取大的感受野。为了更好地适应除雨任务,我们还修改了网络。在大雨中,雨水条纹有各种方向和形状,可以看作是多个雨水层的积累。我们通过结合the squeeze-and-excitation block,根据强度和透明度为不同的雨条纹层分配不同的α值。由于雨条纹层彼此重叠,因此在一个阶段中不容易除去雨水。因此我们进一步将雨水分解分为多个阶段。结合递归神经网络以保留先前阶段中的有用信息并有利于后期的除雨。我们对合成数据集和现实数据集进行了大量实验。我们提出的方法在所有评估指标下都优于最先进的方法。
1 Introduction
雨是现实生活中非常普遍的天气。 但是,它会影响可见性。 特别是在大雨中,来自各个方向的雨水累积,使背景场景朦胧,严重影响许多计算机视觉系统的准确性,包括视频监控,物体检测和自动驾驶中的跟踪等。因此,它是一个重要的 任务是去除雨水并从雨水图像中恢复背景。
在过去十年中,图像去雨引起了很多关注。 已经提出了许多方法来解决这个问题。 现有方法可以分为两类,包括基于视频的方法和基于单一图像的方法。 由于基于视频的方法可以利用帧之间的关系,因此从视频中去除雨水相对容易。 然而,单个图像去雨更具挑战性,我们在本文中专注于此任务。 对于单图像去雨,传统方法,如判别稀疏编码,低秩表示和高斯混合模型,已经应用于这项任务,它们工作得很好。 最近,基于深度学习的去除方法由于其强大的特征表示能力而受到广泛关注。 所有这些相关方法都取得了良好的性能,但仍有很大的改进空间。
现有方法主要有两个局限。 一方面,根据,空间背景信息对于去雨是非常有用的。然而,许多当前的方法基于图像块去除雨条纹,这忽略了大区域中的上下文信息。 另一方面,由于大雨中的雨会有各种各样的方向和形状,它们以不同的方式模糊了场景。 将整体除雨问题分解为多个阶段是一种常见的方法,因此我们可以迭代地去除雨水条纹。 由于这些不同的阶段共同起作用以消除雨水条纹,因此前一阶段的脱轨信息对于指导和有利于后期雨水排除是有用的。 然而,现有方法独立地处理这些雨条去除阶段并且不考虑它们的相关性。
在解决上述两个问题的推动下,我们提出了一种新的用于单个图像去雨的深度网络。我们提出的网络的管道如图2所示。我们逐步消除雨水条纹。在每个阶段,我们使用具有多个全卷积层的上下文聚合网络来去除雨条纹。由于雨水条纹有各种方向和形状,我们网络中的每个通道都对应一种雨条纹。(SE)块用于根据每个卷积层中的相互依赖性将不同的α值分配给各种通道。受益于指数级增长的卷积扩张,我们的网络具有较大深度的接收场,这可以帮助我们获取更多的上下文信息。为了更好地利用前一阶段除雨的有用信息,我们进一步将回归神经网络(RNN)架构与三种循环单元结合起来,以指导后期的阶段。
主要贡献如下所示
1.我们提出了一种新颖的统一深度网络,用于单个图像的消除,逐步消除雨水。 具体来说,在每个阶段,我们使用上下文扩张网络来消除雨。 SE块用于根据其属性将不同的α值分配给各种雨条纹层。
2.据我们所知,这是第一篇考虑不同降雨阶段之间相关性的论文。 通过将RNN架构与三种循环单元相结合,可以结合前一阶段中用于除雨的有用信息来指导后续阶段的脱轨。 我们的网络适用于恢复雨水复杂的雨水图像,特别是在大雨中。
3.与各种数据集上最先进的方法相比,我们的深度网络实现了卓越的性能。
2.Related Works
将观测到的雨水图像O分解为无雨背景场景B和雨水条纹层R的线性组合是常用的雨水模型:
通过从观察图像O中去除雨条纹层R,我们可以获得无雨场景B.
根据方程(1)中的降雨模型,许多除雨算法假设雨条应该是稀疏的,并且在下降方向和形状上具有相似的特征。然而,实际上,空气中的雨滴具有各种外观,并且发生在距相机不同的距离处,这导致雨条纹的不规则分布。 在这种情况下,单个雨条纹层R不足以很好地模拟这种复杂情况。
为了降低复杂性,我们将具有相似形状或深度的雨条视为一层。 然后我们可以将捕获的雨天场景划分为几个雨条纹层和未受污染的背景的组合。 基于此,雨模型可以重新表述如下:
根据[28],实际情况可能更糟,特别是在暴雨的情况下。 空气中多次降雨条纹的累积可能导致衰减和散射,这进一步增加了雨条纹亮度的多样性。 对于相机或眼睛可视化,散射会导致雾霾效应。 这进一步污染了观察到的图像O.对于相机成像,由于像素数量的限制,远处的雨条纹不能占据整个像素。当与其他东西混合时,图像将模糊。 为了解决上述问题,我们进一步考虑全球大气光,并根据其强度透明度为不同的雨条层指定不同的α值。我们进一步将雨模型推广到:
A是大气光度,a0是传输图,ai(i>0)是雨层或者雾层的亮度。
4.Deraining Method
为了解决方程(3)中的问题,我们不打算使用人工先验的分解方法来学习,将观测到的雨图像O直接映射到雨条纹层R的函数f,因为R比B更稀疏并且具有更简单的纹理。然后我们可以从O中减去R得到无雨场景B.上面的函数f可以表示为深度神经网络,并通过优化损失函数来学习 基于上述动机,我们提出了用于图像去雨的RESCAN。 我们的网络框架如图2所示。我们逐步消除雨水条纹。 在每个阶段,我们使用具有SE块的上下文聚合网络来去除雨条纹。 我们的网络可以处理各种方向和形状的雨条纹,网络中的每个特征图对应一种雨条纹。 在我们的网络中使用的扩张卷积可以帮助我们拥有一个大的接收领域并获得更多的上下文信息。 通过使用SE块,我们可以根据每个卷积层中的相互依赖性为各种要素图指定不同的alpha值。当我们分多个阶段去雨时,前几个阶段的去雨的有用信息可以指导后期的学习。 因此,我们将RNN架构与存储器单元结合在一起,以充分利用前一阶段的有用信息。
在下文中,我们首先描述基线模型,然后定义循环结构,通过迭代分解具有不同特征的雨条来提升模型的容量。
4.1 SE Context Aggregation Net
RESCAN的基本模型是一个没有重复的前向网络。 我们通过扩展Context Aggregation Net(CAN)[11,12]和Squeeze-and -itation(SE)块[29]来实现它,并将其命名为SE Context Aggregation Net(SCAN)。
对于特征图,我们将它们的每个通道视为雨条纹层Ri的嵌入。 回想一下在方程(3)中,我们将不同的α值αi分配给不同的雨纹层Ri。 我们不是为每个雨层设置固定的α值αi,而是更新每个网络层中雨条纹层嵌入的alpha值。 虽然卷积运算隐含地为每个通道引入权重,但这些隐式权重并不是针对每个图像的。 为了在每个图像的每个网络层上明确导入权重,我们使用SE块[29]扩展每个基本卷积层,该块计算每个项目的每个通道的标准化alpha值。 通过乘以SE块学习的α值,通过卷积计算的特征映射被明确地重新加权。
SCAN与以前的模型之间的明显区别[8,27]是SCAN没有批量标准化(BN)[30]层。 BN广泛用于训练深度神经网络,因为它可以减少特征图的内部协变量偏移。通过应用BN,每个标量特征被归一化,并且具有零均值和单位方差。这些特征彼此独立并具有相同的分布。然而,在方程(2)中,不同层中的雨条纹在方向,颜色和方向上具有不同的分布。形状,对于不同雨条纹层的每个标量特征也是如此。因此,BN与我们提出的降雨模型的特征相矛盾。因此,我们从模型中删除了BN。第5节中的实验结果表明,这种简单的修改可以显着改善性能。此外,由于BN层在GPU中保留了特征映射的规范化副本,因此删除它可以大大减少对GPU内存的需求。对于SCAN,我们可以在没有BN的情况下在训练期间节省大约40%的内存使用量。因此,我们可以构建更大容量的大型模型,或者增加batchsize以稳定培训过程。
4.2 Recurrent SE Context Aggregation Net
由于存在许多不同的雨条纹层并且它们彼此重叠,因此在一个阶段中不容易去除所有的雨水条纹。 因此,我们采用循环结构将雨水分解分解为多个阶段。 这个过程可以表述为:
Rs 第s阶段的输出 Os 第s阶段后临时复原图像
上述去雨模型已在[9,13]中使用。 然而,他们的方法[9,13]中使用的循环结构只能被视为同一网络的简单级联。 他们只使用最后阶段的输出图像作为当前阶段的输入,而不考虑这些阶段之间的特征连接。
由于这些不同的阶段共同作用以消除雨水,因此可以将不同阶段{O 1,O 2,...,O S}的输入图像视为具有降低的雨水条纹干扰水平的雨图像的时间序列。 研究不同阶段特征之间的重复连接而不是仅使用循环结构更有意义。 因此,我们将递归神经网络(RNN)[31]与记忆单元相结合,以更好地利用前一阶段的信息,并指导后期的特征学习。
在我们的框架中,方程(5)可以进一步重新表述为:
其中Ris是第s级的分解的第i个雨条纹层,xs-1是第(s-1)级的隐藏状态。 与方程(3)中的降雨模型一致,通过将Ris与不同的α值相加来计算R s。
对于去雨任务,我们进一步探索三种不同的循环变量,包ConvRNN,ConvGRU [32]和ConvLSTM [33]。 由于空间限制,我们仅在下面介绍ConvGRU [32]的细节。
ConvGRU 门控循环单元(GRU) 是顺序模型中非常流行的循环单元。 我们的模型采用了卷积版ConvGRU。 将x js表示为第s阶段中第j层的特征映射,并且可以基于x j s-1(前一阶段的同一层中的特征映射)和xj-1s在同一阶段的上一层中映射的特征来计算.
w指扩散卷积核,u指普通卷积核
与卷积单元相比,ConvRNN,ConvGRU和ConvLSTM单元分别具有两倍,三倍和四倍的参数。
4.3 Recurrent Frameworks
我们进一步研究了两个框架来推断最终输出。 它们都使用Os和先前的状态作为第s阶段的输入,但是它们输出不同的图像。 在下文中,我们详细描述了加法预测和完整预测,以及它们相应的损失函数。
Additive Prediction
加性预测广泛用于图像处理。 在每个阶段,网络仅预测先前预测与清晰图片之间的残差。 它结合了以前的特征图和预测作为输入,可以表述为:
xs-1指之前的状态
Full Prediction:完整预测意味着在每个阶段,我们预测整个降雨条纹R.这种方法可以表述为:
Rs指的是在s阶段预测出的整个下雨条,Os+1等于B清晰图像加剩余未清除的下雨条
5.4 Analysis on SCAN
为了证明SCAN是作为去雨任务的基本模型的最佳选择,我们在两个数据集上进行实验,以比较SCAN及其相关网络体系结构的性能,包括Plain(所有卷积的膨胀= 1),DetailsNet中使用的ResNet [ 8]和ID-CGAN中使用的编码器 - 解码器[27]。 对于所有网络,我们设置相同的深度d = 7和宽度(24个通道),因此我们可以将它们的参数和计算数量保持在相同的数量级。 更具体地,我们保持它们的层L0,Ld-5和Ld-6具有相同的结构,因此它们仅在层L1至L4中不同。 结果显示在表3中.SCAN和CAN在两个数据集中都获得了最佳性能,这可归因于这两种方法的感受野随着深度的增加呈指数增长,而其他方法的感受域与深度仅有线性关系。
此外,SCAN和CAN的结果之间的比较表明SE块对基础模型贡献很多,因为它可以明确地学习每个独立的雨条纹层的α值。 我们还用BN检查了SCAN模型。 结果清楚地证实,在排除任务中去掉BN是一个很好的选择,因为雨条层彼此独立。
5.5 Analysis on RESCAN
由于我们在4.2节列出了三个循环单元和两个循环框架,我们进行了实验来比较这些不同的设置,包括{ConvRNN,ConvLSTM,ConvGRU}×{Additive Prediction(Add),Full Prediction(Full)}。 [9,13]中的循环框架,我们也实现了方程式中的设置。 (5)(Iter),其中未保留先前的状态。 在表4中,我们报告结果。
很明显,Iter无法与所有RNN结构竞争,并且不会比SCAN更好,因为它会遗漏先前阶段的信息。 此外,ConvGRU和ConvLSTM优于ConvRNN,因为它们维护更多参数并需要更多计算。 然而,很难在ConvLSTM和ConvGRU之间选择最佳单位,因为它们在实验中表现相似。 对于经常性框架,结果表明完全预测更好。
6.conclusion
我们在本文中提出用于单图像去除的RESCAN。 我们将除雨分为多个阶段。 在每个阶段,采用上下文聚合网络来消除雨水条纹。 我们还修改CAN以更好地匹配除雨任务,包括指数增加的扩张和BN层的移除。 为了更好地表征不同雨条纹层的强度,我们采用SE块来根据其属性分配不同的α值。 此外,纳入RNN是为了更好地利用前几个阶段的降雨有用信息,并指导后期学习。 我们还测试了不同网络架构和循环单元的性能。 合成数据集和现实数据集的实验表明,RESCAN在所有评估指标下都优于最先进的方法。
感觉注意力机制比RNN效果要大一点吧,RNN的改进其实也没那么大,今年cv论文注意力机制真的出了好多论文啊,paper代码写的不错,链接:https://github.com/XiaLiPKU/RESCAN/tree/master/config