跟FFA-Net一个训练框架的感觉,最大创新点是NA注意力,但是实现偏简单,准备试一试效果

基于深度学习的图像去雨算法研究 图像去雨代码_2d

摘要:

在复杂的降雨条件下拍摄的图像,能见度往往会明显下降。雨模式普遍引入了多样性能见度退化,包括雨条纹、雨滴和雨雾。现有的单幅图像去噪方法多集中在单一类型雨模型上,不具备很强的泛化能力。本文提出了一个新的端到端的神经元注意力一步一步地去雨网络NASNet,可以高效的处理所有带雨类型的图像。一方面,我们更加关注神经元之间的关系,提出了一种轻量级的神经元注意(NA)结构机制。通过建立神经元间相互依赖和相互影响的模型,自适应地重新校准神经元间的特征响应。该结构由深度分离卷积和点卷积两部分组成,计算量小,性能优于SE块。另一方面,我们提出了一个分阶段的统一模式网络架构,分阶段的策略通过整合前一阶段的有用信息来指导后一阶段。通过NA模块实现了级间信息的动态拼接和融合。大量的实验表明,我们提出的NASNet在三个雨模型任务的所有6个公共大型数据集的定量和定性度量方面都显著优于现有的方法

创新点:

1.Neuron Attention (NA):

基于深度学习的图像去雨算法研究 图像去雨代码_自适应_02


作用:它可以明确地对网络中卷积特征神经元之间的依赖关系进行建模,我们的NA将每个通道的空间信息和每个空间的深度信息结合起来,选择性地强调信息神经元而不是无关紧要的神经元。众所周知,卷积滤波器可以在局部接受域内融合信道和空间关系,将最后卷积特征中的结构信息结合起来。因此,卷积后的输出无法利用卷积的最后一层局部区域以外的上下文信息。从NA出发,我们通过融合周围神经元的信息来重新校准每个神经元的响应值和值。同时,在最后的卷积特征中,外周神经元对应于其局部接受域信息。因此,它打破了该神经元的响应只能从最后一个卷积局部接受域获取信息的限制。

结构:如上图,输入H * W * C 先做一个深度分离卷积,再接ReLu激活函数,再用一个1 * 1卷积,接一个Sigmoid函数。其实就是一个深度分离卷积+Sigmoid得到一个H * W * C 注意力特征图再与原图相点乘。2.NASNet:

基于深度学习的图像去雨算法研究 图像去雨代码_自适应_03


动机:由于三种雨模型的复杂性,我们决定采用多阶段模式来设计我们的网络,同时通过动态调整神经元的响应来增加阶段级的特征连接和融合结构。前一阶段的信息可以指导后一阶段的学习,使冗余信息无需过多处理就可以深入到深层。消融实验表明,阶段级特征级联和自适应校正带来了巨大的性能改善。

结构细节

  1. block里面非ResNet残差结构,而是Concat的结构,搭配NA组成。
  2. 3个stage逐步叠加,最后输出有concat+NA。
  3. 多种有效的跳跃连接,促进低频信息的旁路流通。

损失函数L1+SSIM(隐藏的trick)

实验结果:

1.消融实验:与SE的参数量对比,K为卷积核大小

基于深度学习的图像去雨算法研究 图像去雨代码_基于深度学习的图像去雨算法研究_04


基于深度学习的图像去雨算法研究 图像去雨代码_2d_05


2.消融实验:与SE的效果对比

基于深度学习的图像去雨算法研究 图像去雨代码_基于深度学习的图像去雨算法研究_06


3.消融实验:Stage个数实验分析

基于深度学习的图像去雨算法研究 图像去雨代码_2d_07


4.消融实验:Stage Concat融合效果

基于深度学习的图像去雨算法研究 图像去雨代码_自适应_08

代码:

# # Neuron Attention # #
class Neuron_Attention(nn.Module):
    def __init__(self, channel):
        super(Neuron_Attention, self).__init__()
        self.dw_conv = nn.Conv2d(channel, channel, 3, padding=1, groups=channel)
        self.pw_conv = nn.Conv2d(channel, channel, 1, padding=0)
        self.relu = nn.ReLU(inplace=True)
        self.sigmoid = nn.Sigmoid()

    def forward(self, x):
        y = self.relu(self.dw_conv(x))
        y = self.pw_conv(y)
        y = self.sigmoid(y)
        return x * y