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

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

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. 将图像视为一维序列,忽略了图像的二维结构
  2. 对于高分辨率图像来说,二次复杂度过于复杂
  3. 只实现了空间适应性,忽略了通道维度的适应性。对于视觉任务,不同的通道通常代表不同的对象。通道适应性也被证明对视觉任务很重要。

image.png

图1

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

1.3 视觉MLP

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

  1. gMLP对输入大小很敏感,只能处理固定大小的图像
  2. gMLP只考虑图像的全局信息,而忽略了图像的局部结构

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


2本文方法


2.1 Large Kernel Attention

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

image.png

图2

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

  • 第一个:采用自注意力机制来捕获长期依赖。但是在计算机视觉中应用自注意力有3个明显的缺点
  • 第二个:使用大核卷积来建立相关性并生成注意力图。这样做仍然有明显的缺点。大核卷积带来了大量的计算开销和参数

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

  • 空间局部卷积(深度卷积)
  • 空间远程卷积(深度扩张卷积)
  • 通道卷积(1×1卷积)

特别是可以将卷积分解为深度扩张卷积,深度卷积和卷积。通过上述分解可以用轻微的计算代价和参数来捕获长程关系。在得到长期关系后可以估计一个点的重要性并生成注意力图。

image.png

图3

如图3(a)所示,LKA模块可以写为:

image.png

这里,是输入特征。表示注意力图。注意力图中的值表示每个特征的重要性。⊗指的是元素级的点乘。作者提出的LKA结合了卷积和自注意力的优点。它考虑了局部上下文信息、大的感受域和动态过程。

image.png

表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

2.2 VAN Backbone

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

表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 分类实验

image.png

3.2 检测实验

image.png

3.3 语义分割


4参考


[1].Visual Attention Network

相关文章
|
2月前
|
机器学习/深度学习 编解码 自然语言处理
全新AFPN出现 | 完胜PAFPN,堪称YOLO系列的最佳搭档
全新AFPN出现 | 完胜PAFPN,堪称YOLO系列的最佳搭档
144 0
|
2月前
|
机器学习/深度学习 人工智能 编解码
Backbone往事 | AlexNet~EfficientNet,10多个网络演变铺满了炼丹师们的青葱岁月
Backbone往事 | AlexNet~EfficientNet,10多个网络演变铺满了炼丹师们的青葱岁月
73 0
|
2月前
|
机器学习/深度学习 编解码 算法
ASF-YOLO开源 | YOLOv5范式永不言败,SSFF融合+TPE编码+CPAM注意力,再战精度巅峰!
ASF-YOLO开源 | YOLOv5范式永不言败,SSFF融合+TPE编码+CPAM注意力,再战精度巅峰!
223 0
|
2月前
|
机器学习/深度学习 自然语言处理 计算机视觉
【论文泛读】ConvNeXt:A ConvNet for the 2020s(新时代的卷积)
【论文泛读】ConvNeXt:A ConvNet for the 2020s(新时代的卷积)
|
异构计算
超越YOLOv7 | YOLOv6论文放出,重参+自蒸馏+感知量化+...各种Tricks大放异彩(二)
超越YOLOv7 | YOLOv6论文放出,重参+自蒸馏+感知量化+...各种Tricks大放异彩(二)
146 0
|
算法 文件存储 计算机视觉
最佳Backbone | RepVGG重镇VGG雄风,各大任务独占鳌头(附源码和论文下载)(一)
最佳Backbone | RepVGG重镇VGG雄风,各大任务独占鳌头(附源码和论文下载)(一)
87 0
|
编解码 并行计算 计算机视觉
最佳Backbone | RepVGG重镇VGG雄风,各大任务独占鳌头(附源码和论文下载)(二)
最佳Backbone | RepVGG重镇VGG雄风,各大任务独占鳌头(附源码和论文下载)(二)
75 0
|
机器学习/深度学习 SQL 编解码
涨点明显 | 港中文等提出SplitNet结合Co-Training提升Backbone性能(附源码和论文)(一)
涨点明显 | 港中文等提出SplitNet结合Co-Training提升Backbone性能(附源码和论文)(一)
147 0
涨点明显 | 港中文等提出SplitNet结合Co-Training提升Backbone性能(附源码和论文)(二)
涨点明显 | 港中文等提出SplitNet结合Co-Training提升Backbone性能(附源码和论文)(二)
71 0
|
计算机视觉
【前沿经典模型】ResNet最强改进之ResNeSt(附源码)(二)
【前沿经典模型】ResNet最强改进之ResNeSt(附源码)(二)
454 0

热门文章

最新文章

  • 1
    流量控制系统,用正则表达式提取汉字
    25
  • 2
    Redis09-----List类型,有序,元素可以重复,插入和删除快,查询速度一般,一般保存一些有顺序的数据,如朋友圈点赞列表,评论列表等,LPUSH user 1 2 3可以一个一个推
    26
  • 3
    Redis08命令-Hash类型,也叫散列,其中value是一个无序字典,类似于java的HashMap结构,Hash结构可以将对象中的每个字段独立存储,可以针对每字段做CRUD
    26
  • 4
    Redis07命令-String类型字符串,不管是哪种格式,底层都是字节数组形式存储的,最大空间不超过512m,SET添加,MSET批量添加,INCRBY age 2可以,MSET,INCRSETEX
    27
  • 5
    S外部函数可以访问函数内部的变量的闭包-闭包最简单的用不了,闭包是内层函数+外层函数的变量,简称为函数套函数,外部函数可以访问函数内部的变量,存在函数套函数
    24
  • 6
    Redis06-Redis常用的命令,模糊的搜索查询往往会对服务器产生很大的压力,MSET k1 v1 k2 v2 k3 v3 添加,DEL是删除的意思,EXISTS age 可以用来查询是否有存在1
    30
  • 7
    Redis05数据结构介绍,数据结构介绍,官方网站中看到
    22
  • 8
    JS字符串数据类型转换,字符串如何转成变量,+号只要有一个是字符串,就会把另外一个转成字符串,- * / 都会把数据转成数字类型,数字型控制台是蓝色,字符型控制台是黑色,
    20
  • 9
    JS数组操作---删除,arr.pop()方法从数组中删除最后一个元素,并返回该元素的值,arr.shift() 删除第一个值,arr.splice()方法,删除指定元素,arr.splice,从第一
    20
  • 10
    定义好变量,${age}模版字符串,对象可以放null,检验数据类型console.log(typeof str)
    19