深度网络设计技巧之VAN:Visual Attention Network#超越Swin的纯CNN#

Posted 烧技湾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度网络设计技巧之VAN:Visual Attention Network#超越Swin的纯CNN#相关的知识,希望对你有一定的参考价值。

单位:清华,南开(程明明团队)
ArXiv:https://arxiv.org/abs/2202.09741
Github: https://github.com/Visual-Attention-Network

导读:
今天了解一个卷积的新操作,即解耦卷积。说是新,其实旧,比如MobileNet为了高效率地推断,将一个标准的CNN看成一个Depth-wise CNN和Point-wise CNN,即解耦。本篇文章将一个更大的卷积核解耦成三个不同类型的CNN操作。虽然取得了超过众多SOTA的性能,但是在MLP中采用经典的DW-FFN,究竟是MLP带来了性能提升,还是大核注意力起了作用,有点存疑!


文章目录


摘要

尽管初衷为自然语言理解而设计的,但最近自注意力机制已经席卷了计算机视觉各个领域。但是,图像的2D本质给自注意力机制应用到计算机视觉中带来三个挑战:

  • 将图像看成1D序列,忽略了其2D结构;
  • 对于高分辨率图像,具有平方复杂度的运算量;
  • 仅仅抓捕空间注意力,但忽略了通道注意

本篇文章提出大核注意力(large kernel attention)模块,在避免上述问题的同时,实现了自注意力中自适应和长距离的相关性。基于LKA模块,设计了一个视觉注意力网络,即Visual Attention Network,VAN。VAN架构极其简洁,在广泛的实验中如识别、检测、语义分割、实例分割等任务中超过了当前SOTA的transformer架构,并且较大优势超过了CNN。

一、网络设计

1.1 CNN与Self-Attention

上面分析了自注意力的三个缺点,而CNN操作采用静态的权值而缺乏适应性,而适应性被证明起着关键的作用。Convolution operation adopts static weight and lacks adaptability, which has been proven critical [36,16].
本篇作者设计的LKA模块,结合了CNN和自注意力的优点,包括局部结构信息、长距离依赖性和适应性,并且避免了自注意力的缺点,对通道适应性也考虑进去。

1.2 大核注意力,LKA


S t a n d a r d C N N = D W C N N + D i l a t e d C N N + P W C N N Standard^CNN = DW^CNN + Dilated^CNN + PW^CNN StandardCNN=DWCNN+DilatedCNN+PWCNN
分解LKA的一种范式。该范式显示了一个13×13的卷积能够解耦成一个5×5的DW-CNN,一个dilation=3的5×5 DW-CNN和一个PW-CNN。

如同MobileNet中,将一个标准的卷积解耦成两个部分,即depth-wise卷积和point-wise卷积,DW-CNN和PW-CNN;作者将一个卷积操作解耦成三部分,即DW-CNN、Dilated-CNN和PW-CNN。如上图所示,通过该方法能够有效解耦大核的卷积运算。


图(a)和图(b)的区别在于同位元素点乘。

1.3 几种注意力

LKA可以描述成:

其中 F ∈ R C × H × W F \\in R^C \\times H \\times W FRC×H×W是输入特征, A t t e n t i o n ∈ R C × H × W Attention \\in R^C \\times H \\times W AttentionRC×H×W表示注意力图。注意力图中的数值对应每个特征的重要程度。 ⊗ \\otimes 指的是同位元素乘法。


通过上述表格,可以看出LKA考虑了局部上下文信息、长距离感受野、动态处理即通道适应性与空间适应性。而CNN和Self-Attention只考虑部分特性。

1.4 MLP,多层感知器

多层感知器,在CNN出来之前就非常流行,但是因为全连接的方式,运算量大、效率低而陷入低迷。最近,一些研究将标准的MLP解耦成一个空间MLP和通道MLP,使得性能提升。与作者的MLP比较相近的结构是gMLP(还没了解这个结构,暂且保留)。gMLP有两个缺点:1)尺度敏感,只能处理固定尺度的图像;2)只考虑全局信息,而忽略了局部结构。而作者设计的结构能克服这两点。


class Mlp(nn.Module):
    def __init__(self, in_features, hidden_features=None, out_features=None, act_layer=nn.GELU, drop=0.):
        super().__init__()
        out_features = out_features or in_features
        hidden_features = hidden_features or in_features
        self.fc1 = nn.Conv2d(in_features, hidden_features, 1)
        self.dwconv = DWConv(hidden_features)
        self.act = act_layer()
        self.fc2 = nn.Conv2d(hidden_features, out_features, 1)
        self.drop = nn.Dropout(drop)
	
	#方便看代码,隐去了初始化
    def forward(self, x):
        x = self.fc1(x)
        x = self.dwconv(x)
        x = self.act(x)
        x = self.drop(x)
        x = self.fc2(x)
        x = self.drop(x)
        return 

对作者MLP的表达存疑,它就是一个常用扩展了DW-CNN的反馈网络。并且,DW-CNN的通道那么大,对结果肯定有提升。腐蚀实验里面,只对LKA对比分析了。那么,LKA起多大作用就不好说。

1.5 复杂度分析

作者采用通用的分析策略,即对比参数量和浮点运算次数,Floating point opertions (FLOPs)。为了简洁格式,计算过程省略了偏置,假设输入和输出特征尺度都为 H × W × C H \\times W \\times C H×W×C,那么参数量和运算量计算如下:

这里前提是参照上述解耦图,即一个 K × K K \\times K K×K的卷积可以分解为一个dilation=d、卷积核为 K d \\fracKd dK的Depth-wise dilation convolution,一个 ( 2 d − 1 ) ( 2 d − 1 ) (2d-1)(2d-1) (2d1)(2d1)的DW-CNN,以及一个 1 × 1 1 \\times 1 1×1的PW-CNN。


Number of parameters for different forms of a 21×21 convolution. 该表格对比三种CNN在相同Kernel和Channel的参数量,即标准的CNN、MobileNet以及LKA。

二 实验

2.1 可视化


作者采用Grad-CAM可视化了Swin-T、ConvNext-T、VAN-Base的CAM,即class activation map,激活类热力图。

2.2 性能对比


这幅图将最近SOTA方法都做了比较,实验充分,在ImangNet val集上,在运算量(GFLOPs)和参数量(param)同等条件下取得了最好性能(Acc)。

以上是关于深度网络设计技巧之VAN:Visual Attention Network#超越Swin的纯CNN#的主要内容,如果未能解决你的问题,请参考以下文章

《深度学习》李宏毅 -- task5网络技巧设计

深度学习基本功2:网络训练小技巧之使用预训练权重冻结训练和断点恢复

深度学习基本功1:网络训练小技巧之理解Batch SizeIterations和Epochs

深度学习-网络调参技巧

分类网络设计技巧

干货!深度学习七个实用技巧