这篇文章
是今年发表的一篇Transformer类文章。
文章作者提出了ViT的增强版——SuperViT,其核心有2个:①多尺度输入;②Token-keeping-rate机制
。作者通过一系列实验证明SuperViT可以在计算效率和正确率上实现比Swin-T更好的表现力!
参考文档:
①
源码
②
Transformer学习(四)—DeiT
③
各类Transformer都得稍逊一筹,LV-ViT:探索多个用于提升ViT性能的高效Trick
Super Vision Transformer
Abstract
首先需要指明的一点是,SuperViT比
ViT
强在哪?
-
计算效率
。SuperViT通过使用较低分辨率的输入图像来将token控制在较小的范围内,从而降低相似度计算次数;此外,作者将一些含有重要信息较少的token直接丢弃,从而进一步降低每一种尺度下的注意力计算量。 -
准确率
。SuperViT使用
Token-Keeping-rate
机制,也可以理解为丢弃不相关的token的方法。这种方式可以将注意力集中在信息更加重要的地方;此外,多尺度的输入产生了不同尺度的相关性与感受野,从而可以提取更加丰富的特征信息。
本文提出了一种新的优化ViT的模型——
SuperViT
,其具有以下特点:
-
Vision Transformer具有较弱的归纳偏置、计算量和token数量成正比等缺陷。近年来,为了解决这些问题,陆续出现了
DeiT
、
LV-ViT
、
T2T-ViT
、
PVT
、
Swin-T
等用于改进ViT模型的方法。SuperViT也是出一这一目的,简单来说,SuperViT通过使用多尺度的输入形式以及Token-Keeping-rate机制来实现计算效率的提升与目标识别准确度的增加。 -
具体而言,
多尺度输入(Multi-size)
可以产生多种感受野的token,其中高分辨率图像具有较小的感受野但是其具有丰富的局部信息;低分辨率图像则具有较大的感受野,但是天然会损失一些细节信息。这种多种分辨率结合的方式可以提取到较大和较小范围内的特征信息。此外较小分辨率的输入在产生token的时候,必定会输出较少数量的token,这样一来便可以减少相似度计算量。
Token-Keeping-rate机制
根据注意力的大小来丢弃一些不重要的token,从而为下一次迭代中Transformer的计算量带来计算效率和准确性的提升;
对于同一个输入尺度,作者设置了多个keeping rate来选择不同粗细的重要token
。 - SuperViT在ImageNet上证明了其具有较大幅度降低计算资源以及提升识别准确率的特点。
1 Introduction
- Vision Transformer的兴起始于2020年的ViT一文,ViT最大的缺陷在于其计算量偏大,对于Transformer来说,token越多计算复杂度越高,故ViT很难推广到实时场景下使用。
-
对于一幅图像来说,token序列长度和patch-size是成反比的,因此一个思路就是想办法增大patch-size,但是众所周知Transformer在较小尺寸的patch上可以实现较好的表现力,这是因为其可以提取更丰富的局部信息并且更加接近卷积的归纳偏置,这也可以减少训练的难度。
现存的一些Vision-Transformer方法都只采用固定的patch-size,而使用多种尺寸的patch-size还未有人尝试过,显然多尺寸(multi-size)带来的最大好处在于通过将大尺寸和小尺寸结合,可以利用大patch实现较低计算量和较小patch实现性能的提升
。 - 图像中存在着一些冗余区域或者说含有较多无用信息的区域——背景等。近年来有许多模型就争对这一问题选择去丢弃这些区域,虽然提升了计算效率,但他们都带来了性能的降低。此外大多都采用固定的丢弃率从让模型变得不那么灵活,且固定的丢弃率并不能较好的实现表现力和计算效率的trade-off。
基于上述的现状,作者提出SuperViT模型,这里的
“super”表示使用多种尺度patch-size的同时采用多种keeping-rate来较好的实现计算效率和性能的平衡
。在具体实施过程中:
-
SuperViT输入
m m
m
种不同尺寸的图像(通过上、下采样实现),然后使用固定的patch-size(源码是
16 × 16 16\times 16
16
×
16
)去产生token,这样就相当于是不同的patch-size去分割同一张图像了。 -
而每一个尺度都配有
n n
n
种keep-rate,这样就一共有
m × n m\times n
m
×
n
种组合,每一种组合都去做inference,最后将所有梯度结合并更新网络,具体如何更新见3.3节的Training Objective。此外,每一种组合都会进行
N N
N
次的MSA计算,源码中采用间断式地丢弃token,比如
N = 12 N=12
N
=
12
,则第3、6、9次保持
k e e p i n g _ r a t e = 1 keeping\_rate=1
k
ee
p
in
g
_
r
a
t
e
=
1
,其余情况都进行丢弃。从最后结果来看,这种
间断式
的丢弃证明是可行的。 - SuperViT是首次在前向过程中拥有多种复杂度的尝试。
Note:
- SuperViT获取token的方式是使用patch-size为16的卷积核,步长stride为16的Conv2d来做的。
2 Related Work
略
3 Methodology
3.1 Overview
首先简略回顾下ViT,具体可参考我的另一篇
深度学习之ViT
。
①设输入为
I ∈ R H × W × C \mathcal{I}\in\mathbb{R}^{H\times W\times C}
I
∈
R
H
×
W
×
C
,使用
P × P P\times P
P
×
P
的size去分割图像,则获取
N = H W P 2 N=\frac{HW}{P^2}
N
=
P
2
H
W
个块,每个token的shape为
P × P × C P\times P\times C
P
×
P
×
C
;每一个token经过投影层输出
D D
D
维的向量——
x i 0 ∈ R D x_i^0\in\mathbb{R}^{D}
x
i
0
∈
R
D
,然后这些token进行整合就是注意力模块的输入了,我们一般记为
R B × N × P 2 C \mathbb{R}^{B\times N\times P^2C}
R
B
×
N
×
P
2
C
(
B B
B
为batchsize):
X 0 = [ x c l s 0 ; x 1 0 ; ⋯ ; x N 0 ] + E p o s . (1) X^0 = [x^0_{cls};x^0_{1};\cdots;x^0_N] + E_{pos}.\tag{1}
X
0
=
[
x
c
l
s
0
;
x
1
0
;
⋯
;
x
N
0
]
+
E
p
os
.
(
1
)
其中
x c l s x_{cls}
x
c
l
s
为类别token,
E p o s E_{pos}
E
p
os
为位置编码向量。
②接下来要将输入送进Attention模块,在Vision-Transformer里,一般只用Encoder模块,其包括MHSA和FFN,2者都需要使用LN层和skip-connection。具体表达如下:
Y l = X l − 1 + M H S A ( X l − 1 ) . (2) Y^l = X^{l-1} + MHSA(X^{l-1}).\tag{2}
Y
l
=
X
l
−
1
+
M
H
S
A
(
X
l
−
1
)
.
(
2
)
X l = Y l + F F N ( Y l ) . (3) X^l = Y^l + FFN(Y^l).\tag{3}
X
l
=
Y
l
+
FFN
(
Y
l