【论文笔记】Visual Attention Network

论文

论文题目:Visual Attention Network

论文地址:https://arxiv.org/abs/2202.09741

项目地址:Visual-Attention-Network · GitHub(官方)

transformers/src/transformers/models/van at main · huggingface/transformers · GitHub

参考博客:

【ARXIV2202】Visual Attention Network - 知乎

Visual Attention Network_小小小~的博客-CSDN博客

VAN:视觉注意力网络--大核注意力机制_wx60adfd72959c6的技术博客_51CTO博客

超越ConvNeXt | 大道至简,VAN用普通卷积,登顶Backbone性能巅峰(附代码解读)

摘要

虽然self-attention最初是为自然语言处理(NLP)任务而设计的,但最近却席卷了各种计算机视觉领域。然而,图像的二维性质给在计算机视觉中应用self-attention带来了3个挑战。

  1. 将图像处理为一维序列,忽略了其二维结构;

  2. 二次复杂度对于高分辨率的图像来说计算太复杂;

  3. 只捕捉了空间适应性,而忽略了通道的适应性。

在本文中提出了一种新的Large Kernel Attention(LKA)模块,以使self-attention的自适应和长距离相关,同时避免了上述问题。作者进一步介绍了一种基于LKA的新的神经网络,即视觉注意力网络(VAN)。VAN非常简单和高效,并在图像分类、目标检测、语义分割、实例分割等大量实验方面,它的性能优于最先进的Vision Transformer和卷积神经网络。

介绍

在计算机视觉领域。卷积神经网络(CNN)[41,40,39]由于其显著的特征提取性能,在过去十年中是不可或缺的主角。AlexNet[39]重新开启深度学习十年后,通过使用更深的网络[68,29]、更高效的架构[31,90102]、更强的多尺度能力[35,71,19]和注意力机制[34,17],在获得更强大的视觉支柱方面取得了一些突破。由于平移不变性和共享滑动窗口策略[67],CNN对于具有任意大小输入的各种视觉任务具有固有的效率。更先进的视觉主干网络通常会在各种任务中带来显著的性能提升,包括图像分类[29,17,52]、目标检测[14]、语义分割[89]和姿势估计[80]。

研究人员认为人类视觉系统只处理部分可能的刺激细节,而其余几乎未经处理。选择性注意力是处理视觉中复杂搜索组合方面的重要机制[77]。注意机制可以看作是一个基于输入特征的自适应选择过程。自从完全注意网络(fully attention)[78]被提出以来,self-attention(又称Transformer)迅速成为自然语言处理(NLP)中占主导地位的结构[16,5]。最近,Dosovitskiy等人[17]提出了视觉transformer(ViT),它将transformer主干引入计算机视觉,在图像分类任务上优于著名的CNN。得益于其强大的建模能力,基于transformer的视觉主干迅速占据了各种任务的排行榜,包括目标检测[52]、语义分割[89]等。

在本文中,​我们提出了一种新的注意机制​:大内核注意力(LKA),它是为视觉任务量身定制的。LKA吸收了卷积和self-attention的优点,包括局部结构信息、长依赖性和适应性。同时,它避免了它们在渠道维度上忽视适应性等缺点。在LKA的基础上,我们提出了一种新的视觉主干,称为视觉注意网络(VAN),它显著超过了著名的基于CNN和基于transformer的主干。本文的贡献总结如下:

  • ​我们设计了一种新的计算机视觉注意机制LKA,它既考虑了卷积和自注意力的优点,又避免了它们的缺点。在LKA的基础上,我们进一步介绍了一种简单的视觉主干,称为VAN​。
  • ​在大量的实验中,包括图像分类、目标检测、语义分割、实例分割等,我们发现VANs比最先进的ViTs和CNN有很大的优势​。包括swin transformer。
     

相关工作

卷积神经网络

如何有效地计算强大的特征表示是计算机视觉中最基本的问题。卷积神经网络利用局部上下文信息和平移不变性特性来大大提高神经网络的效率。自AlexNet以来,cnn迅速成为计算机视觉的主流框架。为了进一步提高效率,研究人员花费了大量精力使cnn变得更深入、更轻。本文的工作与MobileNet相似,它将一个标准的卷积解耦为2个部分:depthwise convolution和pointwise convolution(也就是1x1Conv)。本文的方法将卷积分解为3部分:depthwise convolution、depthwise and dilated convolution、pointwise convolution。得益于这种分解,本文的方法更适合于高效地分解大型核卷积。作者还在方法中引入了注意力机制来获得自适应特征。

视觉注意力方法

注意力机制可以看作是根据输入特征的自适应选择过程,引入RAM的计算机视觉中。它在许多视觉任务中都提供了好处,如图像分类、目标检测和语义分割。计算机视觉中的注意可分为通道注意力、空间注意力、时间注意力和分支注意力4类基本类别,以及通道注意力和空间注意力的组合。每种注意力在视觉任务中都有不同的效果。

self-attention是一种特殊的注意力机制,起源于自然语言处理(NLP)。由于其具有较强的长程依赖性和适应性,在计算机视觉中发挥着越来越重要的作用。各种深度self-attention网络在不同视觉任务上的表现明显优于主流cnn,显示出基于注意力的模型的巨大潜力。然而,self-attention最初是最终为NLP设计的。在处理计算机视觉任务时,它有3个缺点:

  1. 将图像视为一维序列,忽略了图像的二维结构

  2. 对于高分辨率图像来说,二次复杂度过于复杂

  3. 只实现了空间适应性,忽略了通道维度的适应性。对于视觉任务,不同的通道通常代表不同的对象。通道适应性也被证明对视觉任务很重要。

为了解决这些问题,作者提出了一种新的视觉注意力方法,即LKA。它包含了self-attention的优点,如适应性和距离依赖。此外,它还得益于convolution的优势,如利用局部的上下文信息。

视觉MLP

多层感知器(MLPs)是在cnn出现之前流行的计算机视觉工具。然而,由于计算要求高、效率低,mlp的能力在很长一段时间内受到了限制。最近的一些研究成功地将标准MLP解耦为空间MLP和通道MLP。这种分解允许显著的计算成本和参数减少,从而释放了MLP的惊人性能。读者可以参考最近的综述来获得更全面的了解。与本文最相关的MLP是gMLP,它不仅分解标准MLP,还涉及注意力机制。然而,gMLP有2个缺点:

  1. gMLP对输入大小很敏感,只能处理固定大小的图像

  2. gMLP只考虑图像的全局信息,而忽略了图像的局部结构

本文的方法可以充分利用其优点,避免其缺点。

方法

Large Kernel Attention(LKA)

注意力机制可以看作是一个自适应选择过程,它可以根据输入特征来选择可鉴别特征,并自动忽略噪声响应。注意力机制的关键步骤是生成表示不同点的重要性的注意力图。要做到这一点应该学习不同点之间的关系。

(彩色网格表示卷积核的位置,黄色网格表示中心点。从图中可以看出,13×13卷积分解为5×5深度卷积,5×5深度空洞卷积,膨胀速率3和1×1卷积 )

 有2种众所周知的方法来建立不同的点之间的关系:

  • 第一个:采用自注意力机制来捕获长期依赖。但是在计算机视觉中应用自注意力有3个明显的缺点

  • 第二个:使用大核卷积来建立相关性并生成注意力图。这样做仍然有明显的缺点。大核卷积带来了大量的计算开销和参数

为了克服上述缺点,利用自注意力和大核卷积的优点,作者提出对大核卷积操作进行分解来捕获长期关系。如图2所示,大核卷积可分为3个部分:

  • 空间局部卷积(深度卷积)

  • 空间远程卷积(深度扩张卷积)

  • 通道卷积(1×1卷积)

如图3(a)所示,LKA模块写作: 

 此外,LKA不仅实现了空间维度的适应性,而且还实现了通道维度的适应性。值得注意的是,在深度神经网络中,不同的通道往往代表不同的对象,而通道维度的适应性对视觉任务也很重要。

论文也通过实验比较了使用21*21大核卷积时,本文方法和普通卷积方法以及MobileNet方法参数量的变化,见Table3。

在Table4中,论文验证了LKA中3种不同卷积对实验性能的影响。 

  • DW-Conv:DW Conv可以利用图像的局部上下文信息。如果没有它,分类性能将下降0.5%(74.9%),显示了局部结构信息在图像处理中的重要性.
  • DW-D-Conv:DW-D-Conv提供深度方向的扩张卷积,这在捕获LKA中的长程依赖性方面起到了作用。如果没有它,分类性能将下降1.3%(74.1%对75.4%),这证实了即长期依赖对视觉任务至关重要。
  • 注意机制:注意机制的引入可以看作是使网络实现了适应性。得益于此,V AN Tiny实现了约1.1%的改善(74.3%对75.4%)。
  • 1×1 Conv:1×1 Conv通道维度中的关系。结合注意机制,引入了渠道维度的适应性。它带来了0.8%(74.1%对75.4%)的改善,这证明了渠道维度适应性的必要性。

通过以上分析,LKA可以利用本地信息,捕获长距离依赖,并且在通道和空间维度上都具有适应性。此外,实验结果证明所有属性对识别任务都是积极的。虽然标准卷积可以充分利用局部上下文信息,但它忽略了长期依赖性和适应性。在自我注意方面,虽然它能够捕捉长期依赖,并在空间维度上具有适应性,但它忽略了局部信息和通道维度上的适应性。

论文验证了LKA使用21*21卷积核时,效果和计算量达到和谐。 

VAN Backbone

VAN具有简单的层次结构,即H/4×W/4、H/8×W/8、H/16×W/16和H/32×W/32四个输出空间分辨率递减的阶段。这里,H和W表示输入图像的高度和宽度。随着分辨率的降低,输出通道的数量不断增加。输出通道Ci的变化如表2所示。

对于如图3(d)所示的每一个阶段,首先对输入进行下采样,然后用stride来控制下采样率。然后,每个stage上的所有其他层保持相同的输出大小,即空间分辨率和通道数量。然后,将L组批处理归一化、GELU激活、LKA注意力和卷积网络依次叠加,提取特征。最后,在每个阶段的末尾应用一个normalization层。根据系统参数和计算成本,设计了VAN-Tiny、VAN-Small、VAN-Base和VAN-Large四种架构。整个网络的详细情况如表2所示。

复杂度分析

为了简化格式,在计算过程中省略了偏差。假设输入和输出特征具有相同的大小H×W×c。参数和FLOPs可以表示为:

这里,d表示膨胀率,K表示核的大小。当K=21时,param可以写成:

作者发现,当d=3时,上式可以取最小值。所以,默认设置为K=21和d=3。对于不同数量的通道,在表3中显示了特定的参数。根据FLOPs和参数的公式,X/Our对FLOPs和参数是相同的。同样地,Y/Our对于flop和参数也是相同的。这表明分解在参数和分解大核卷积方面具有显著的优势。

复现细节

默认情况下,LKA采用5×5深度卷积,7×7深度卷积和1×1卷积来近似21×21卷积。在这种设置下,VAN可以有效地实现局部信息和远程连接。分别使用7×7和3×3 stride卷积进行4倍和2倍的下采样。

实验

图像分类

可视化

结果显示,VAN-Base可以清晰地聚焦于目标对象。因此,可视化直观地证明了VAN的有效性。 

目标检测

语义分割

核心代码

class LKA(nn.Module):
    def __init__(self, dim):
        super().__init__()
        self.depth_wise = nn.Conv2d(dim, dim, 5, padding=2, groups=dim)
        self.depth_wise_dilated  = nn.Conv2d(dim, dim, 7, stride=1, padding=9, groups=dim, dilation=3)
        self.point_wise  = nn.Conv2d(dim, dim, 1)

    def forward(self, x):
        u = x.clone()        
        attn = self.depth_wise(x)
        attn = self.depth_wise_dilated(attn)
        attn = self.point_wise(attn)
        return u * attn


class SpatialAttention(nn.Module):
    '''
    Van spatial attention layer composed by projection (via conv) -> act -> Large Kernel Attention (LKA) attention ->
    projection (via conv) + residual connection.
    '''
    def __init__(self, d_model):
        super().__init__()
        self.proj_1 = nn.Conv2d(d_model, d_model, 1)
        self.activation = nn.GELU()
        self.spatial_gating_unit = LKA(d_model)
        self.proj_2 = nn.Conv2d(d_model, d_model, 1)

    def forward(self, x):
        shorcut = x.clone()
        x = self.proj_1(x)
        x = self.activation(x)
        x = self.spatial_gating_unit(x)
        x = self.proj_2(x)
        x = x + shorcut
        return x
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值