An image is worth 16x16 words-transformers for image recognition at scale
论文题目:An image is worth 16x16 words-transformers for image recognition at scale
单位:Google Research, Brain Team
贡献
1.是将Transformer应用到Image classification任务的第一篇研究工作;
2.当前CV这块,CNN架构是主流, 这篇文章所提出的Vision Transformer (ViT)在Image classification任务上取得了很好效果, 证明了CNN并不是CV任务所必须的;
Vision Transformer
如图展示的是将Transformer应用于image任务上的一个示意图,
由于Transformer最早是在NLP领域中被提出的,其输入为向量序列, 即Sequence of tokens/vectors, 为了把Transformer用到CV中,肯定要先对Image做一些处理,使其与Transformer的输入格式相匹配。怎么做呢?
首先通过网格化把image转化为固定大小的patches (即得到sequence of patches), 然后把每个patch拉成一个向量,再经过Linear projection (实际上就是通过矩阵乘法来改变token的维度), 最终得到Sequence of Vectors/Tokens。
上述过程的形式化定义如下:
假设输入
X
∈
R
H
x
W
x
C
X \in R^{H {\rm x} W {\rm x} C}
X∈RHxWxC,
X
^
=
R
e
s
h
a
p
e
(
X
,
P
)
\hat{X}=Reshape(X, P)
X^=Reshape(X,P),
X
^
∈
R
H
W
P
2
x
P
x
P
x
C
\hat{X} \in R^{\frac{HW}{P^{2}} {\rm x} P {\rm x} P {\rm x} C }
X^∈RP2HWxPxPxC,
P
P
P为每个Patch的大小, 每个Patch 的size为
R
P
x
P
x
C
R^{P {\rm x} P {\rm x} C}
RPxPxC.
X
^
f
l
=
F
l
a
t
t
e
n
(
X
^
)
\hat{X}_{fl}=Flatten(\hat{X})
X^fl=Flatten(X^),
X
^
f
l
∈
R
H
W
P
2
x
(
P
2
C
)
\hat{X}_{fl} \in R^{\frac{HW}{P^{2}} {\rm x} (P^{2}C) }
X^fl∈RP2HWx(P2C)
X
e
m
b
e
d
=
L
P
(
X
^
f
l
,
D
)
X_{embed}=LP(\hat{X}_{fl}, D)
Xembed=LP(X^fl,D),
X
e
m
b
e
d
∈
R
H
W
P
2
x
D
X_{embed} \in R^{\frac{HW}{P^{2}} {\rm x} D}
Xembed∈RP2HWxD
最终得到的 X e m b e d X_{embed} Xembed每一行即为一个token,对应一个Patch, Patches的总数为 H W P 2 \frac{HW}{P^{2}} P2HW.
Transformer在CV中应用 (即Vision Transformer) 具体过程:
假设一个Figure经过网格化以及投影最终的尺寸为: [L,
D
e
m
d
D_{emd}
Demd], 其中L为Patches的数量,实际上就等于
H
W
P
2
\frac{HW}{P^{2}}
P2HW, D_{emd}为每个Patch嵌入的维度,即上面的
D
D
D.
由于MHA输入输出尺寸相同, 因此,每个Self-Attention输出的尺寸为:[ L L L, D h D_{h} Dh], D e m d = D h ⋅ N h D_{emd} = D_{h} \cdot N_{h} Demd=Dh⋅Nh, N h N_{h} Nh为heads的数量, 对于每个head, 通过Linear projection把X映射到 D h D_{h} Dh维的空间,得到 Q h , K h , V h Q^{h}, K^{h}, V^{h} Qh,Kh,Vh, 然后基于 Q Q Q和 K K K来计算patches投影子空间的相似度,然后对依据该相似度对 V V V进行加权得到第 h h h个head的输出, 尺寸为:[ L L L, D h D_{h} Dh], 把 N h N_{h} Nh个这样的输出聚合, 尺寸为:[ L L L, D e m d D_{emd} Demd], 然后在经过Linear projection得到最终输出: [ L L L, D e m d D_{emd} Demd],
所谓的网格化Patches仅仅是为了得到sequence of tokens以匹配MHA的输入个数
。
上述Patch Embedding存在的一个问题是:在将image转化为Patches的过程中,丢失了Patches之间的位置信息
, 为了保持输入中缺失的信息,作者提出所谓的Positing Embedding, 即对Patches间的相对位置进行编码,然后将其加到
X
e
m
b
e
d
X_{embed}
Xembed中, 最终就得到带有位置信息的Sequence of tokens.
接下来将其Feed进Transformer, Transformer的介绍请参见, 最终Transformer的输出尺寸不变,依然为 R H W P 2 x D R^{\frac{HW}{P^{2}} {\rm x} D} RP2HWxD,
后面可以连接具体的任务网络执行具体的任务。
点评
这篇论文并没有提出新的模型, 新的优化算法, 只是将NLP中的Transformer应用到了CV中一个新的的任务场景:image classification, 实际上是拓展了Transformer的应用范围。
总结
Reference
1.ICLR,2021-An image is worth 16x16 words-transformers for image recognition at scale