虽然self-attention最初是为自然语言处理(NLP)任务而设计的,但最近却席卷了各种计算机视觉领域。然而,图像的二维性质给在计算机视觉中应用self-attention带来了3个挑战。
- 将图像处理为一维序列,忽略了其二维结构
- 二次复杂度对于高分辨率的图像来说计算太复杂
- 只捕捉了空间适应性,而忽略了通道的适应性
在本文中提出了一种新的Large Kernel Attention(LKA)模块,以使self-attention的自适应和长距离相关,同时避免了上述问题。作者进一步介绍了一种基于LKA的新的神经网络,即视觉注意力网络(VAN)。VAN非常简单和高效,并在图像分类、目标检测、语义分割、实例分割等大量实验方面,它的性能优于最先进的Vision Transformer和卷积神经网络。
1 相关工作
1.1 卷积神经网络
如何有效地计算强大的特征表示是计算机视觉中最基本的问题。卷积神经网络利用局部上下文信息和平移不变性特性来大大提高神经网络的效率。自AlexNet以来,cnn迅速成为计算机视觉的主流框架。为了进一步提高效率,研究人员花费了大量精力使cnn变得更深入、更轻。本文的工作与MobileNet相似,它将一个标准的卷积解耦为2个部分:depthwise convolution和pointwise convolution(也就是1x1Conv)。本文的方法将卷积分解为3部分:depthwise convolution、depthwise and dilated convolution、pointwise convolution。得益于这种分解,本文的方法更适合于高效地分解大型核卷积。作者还在方法中引入了注意力机制来获得自适应特征。
1.2 视觉注意力方法
注意力机制可以看作是根据输入特征的自适应选择过程,引入RAM的计算机视觉中。它在许多视觉任务中都提供了好处,如图像分类、目标检测和语义分割。计算机视觉中的注意可分为通道注意力、空间注意力、时间注意力和分支注意力4类基本类别,以及通道注意力和空间注意力的组合。每种注意力在视觉任务中都有不同的效果。
self-attention是一种特殊的注意力机制,起源于自然语言处理(NLP)。由于其具有较强的长程依赖性和适应性,在计算机视觉中发挥着越来越重要的作用。各种深度self-attention网络在不同视觉任务上的表现明显优于主流cnn,显示出基于注意力的模型的巨大潜力。然而,self-attention最初是最终为NLP设计的。在处理计算机视觉任务时,它有3个缺点:
- 将图像视为一维序列,忽略了图像的二维结构
- 对于高分辨率图像来说,二次复杂度过于复杂
- 只实现了空间适应性,忽略了通道维度的适应性。对于视觉任务,不同的通道通常代表不同的对象。通道适应性也被证明对视觉任务很重要。
图1
为了解决这些问题,作者提出了一种新的视觉注意力方法,即LKA。它包含了self-attention的优点,如适应性和距离依赖。此外,它还得益于convolution的优势,如利用局部的上下文信息。
1.3 视觉MLP
多层感知器(MLPs)是在cnn出现之前流行的计算机视觉工具。然而,由于计算要求高、效率低,mlp的能力在很长一段时间内受到了限制。最近的一些研究成功地将标准MLP解耦为空间MLP和通道MLP。这种分解允许显著的计算成本和参数减少,从而释放了MLP的惊人性能。读者可以参考最近的综述来获得更全面的了解。与本文最相关的MLP是gMLP,它不仅分解标准MLP,还涉及注意力机制。然而,gMLP有2个缺点:
- gMLP对输入大小很敏感,只能处理固定大小的图像
- gMLP只考虑图像的全局信息,而忽略了图像的局部结构
本文的方法可以充分利用其优点,避免其缺点。
2 本文方法
2.1 Large Kernel Attention
注意力机制可以看作是一个自适应选择过程,它可以根据输入特征来选择可鉴别特征,并自动忽略噪声响应。注意力机制的关键步骤是生成表示不同点的重要性的注意力图。要做到这一点应该学习不同点之间的关系。
图2
有2种众所周知的方法来建立不同的点之间的关系:
- 第一个:采用自注意力机制来捕获长期依赖。但是在计算机视觉中应用自注意力有3个明显的缺点
- 第二个:使用大核卷积来建立相关性并生成注意力图。这样做仍然有明显的缺点。大核卷积带来了大量的计算开销和参数
为了克服上述缺点,利用自注意力和大核卷积的优点,作者提出对大核卷积操作进行分解来捕获长期关系。如图2所示,大核卷积可分为3个部分:
- 空间局部卷积(深度卷积)
- 空间远程卷积(深度扩张卷积)
- 通道卷积(1×1卷积)
图3
如图3(a)所示,LKA模块可以写为:
表1
此外,LKA不仅实现了空间维度的适应性,而且还实现了通道维度的适应性。值得注意的是,在深度神经网络中,不同的通道往往代表不同的对象,而通道维度的适应性对视觉任务也很重要。
class AttentionModule(nn.Module):
def __init__(self, dim):
super().__init__()
# depth-wise convolution
self.conv0 = nn.Conv2d(dim, dim, 5, padding=2, groups=dim)
# depth-wise dilation convolution
self.conv_spatial = nn.Conv2d(dim, dim, 7, stride=1, padding=9, groups=dim, dilation=3)
# channel convolution (1×1 convolution)
self.conv1 = nn.Conv2d(dim, dim, 1)
def forward(self, x):
u = x.clone()
attn = self.conv0(x)
attn = self.conv_spatial(attn)
attn = self.conv1(attn)
return u * attn![image.png](/img/bVbqsl)
2.2 VAN Backbone
表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倍的下采样。
3 实验
3.1 分类实验
3.2 检测实验
3.3 语义分割
4 参考
[1].Visual Attention Network
原文:集智书童
作者:ChaucerG
推荐阅读
更多嵌入式AI技术相关内容请关注嵌入式AI专栏。