深度网络设计技巧(五)之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

frac{K}{d}

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)。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>