论文: 《An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale》
代码: https://github.com/google-research/vision_transformer
创新点
作者表明在视觉任务上,CNN并不是必须的,Transformer也可以很好的执行分类任务;与CNN SOTA方法相比,ViT使用更少训练资源,取得不错结果;
算法
CNN具有两个归纳偏置:
局部性:比如椅子桌子在一起;
平移不变性;
transformer不具有这些性质,因此当数据量不充足时
,无法很好泛化;但是我们发现大规模训练胜过归纳偏置;最好的模型在 ImageNet 上达到 88.55%,在 ImageNet-ReaL 上达到 90.72%,在 CIFAR-100 上达到 94.55%,
ViT结构如图1所示,
ViT过程如式1,2,3,4;MSA结构参考Transformer结构解读
ViT标准输入图片为
C
∗
H
∗
W
C*H*W
C∗H∗W,将其转化为二维向量
x
p
,
x
p
∈
N
×
(
P
2
∙
C
)
,
N
=
H
W
/
P
2
x_p,x_p\in N\times(P^2\bullet C),N = HW/P^2
xp,xp∈N×(P2∙C),N=HW/P2,每个Patch经过embedding矩阵 E 转化为
N
∗
D
N*D
N∗D,
x
c
l
a
s
s
x_{class}
xclass表示class token,用于图片分类,纬度为(1,D),
E
p
o
s
E_{pos}
Epos表示位置编码,防止patch顺序打乱输出结果相同,维度为(N+1,D),如式1,得到
z
0
∈
(
N
+
1
,
D
)
z_0\in(N+1,D)
z0∈(N+1,D);
式2、式3为Transformer结构中Multi-Head self-Attention模块及MLP模块,如图1右侧,得到
z
l
∈
(
N
+
1
,
D
)
z_l\in(N+1,D)
zl∈(N+1,D),L表示Layer数;
式4中LN为Linear层,将
x
L
0
x_L^0
xL0的D维向量映射为
N
c
l
a
s
s
N_{class}
Nclass维,表示总类别数,其输出为该图预测类别标签;
大分辨率finetune
当处理大分辨率图片时,若patch保持不变,序列长度将增加,预训练中位置编码Epos可能不再有意义,因此通过通过2D插值实现;
class token
为了尽可能接近原始Transformer模型,我们使用额外class token,作为图像表征;
作者比较GAP结果与class token结果,如图9,发现学习率设置合适,两结果差异不大。
位置编码
作者将输入视为二维的patch网格。 分别学习X方向及Y方向embedding ,每组的大小为 D/2。基于输入中路径上的坐标,我们连接 X 和 Y方向embedding以获得该patch的最终位置嵌入。
实验
ViT变体如表1
与SOTA比较
在JFT数据集预训练后,在分类数据集上性能如表2,
结论
作者将Transformer成功应用到视觉分类任务,且取得SOTA性能,
挑战:ViT应用于视觉检测、分割任务;