这一总结主要是基于上一个对transformer的理解,对复旦大学这篇论文
https://arxiv.org/pdf/2012.15840.pdf
的个人解读。
1.segmentation transformer
整体结构:
图1:(a)首先将图像分割为固定尺寸的块(patches),对所有块进行线性标记,并加入位置标记,将其结果序列喂入标准的transformer编码器。为了进行逐像素的分割,我们介绍了不同的解码器设计:(b)渐进式上采样(SETR-PUP)©多级特征聚合(SETR-MLA)
将图像序列化:
如上图1所示,采用一维的feature embeddings序列 Z ∈ R L × C Z \in \mathbb{R}^{L \times C} Z∈RL×C作为输入。 L L L 代表序列的长度, C C C代表隐藏的通道尺寸。图像序列化任务就是将输入图像 x ∈ R H × W × 3 x \in \mathbb{R}^{H\times W \times 3} x∈RH×W×3 转换为 Z Z Z。最直接的方法就是将图像像素铺平为尺寸为3HW的1维向量。对于典型图像尺寸 480 ( H ) × 480 ( W ) × 3 480(H) \times 480(W) \times 3 480(H)×480(W)×3,其结果向量的尺寸为691200。但是,将每个像素标记为transformer的序列输入是不现实的,在计算时间和空间上都不允许。
典型的语义分割的编码设计将2D图像 x ∈ R H × W × C x \in \mathbb{R}^{{H}\times{W} \times C} x∈RH×W×C降采样为特征图 x f ∈ R H 16 × W 16 × C x_f \in\mathbb{R}^{\frac{H}{16} \times \frac {W}{16} \times C} xf∈R16H×16W×C,因此可以设置transformer的输入序列长度L为 H 16 × W 16 = H W 256 \frac{H}{16} \times \frac{W}{16} = \frac{HW}{256} 16H×16W=256HW。通过这种方法可以将transformer的输出序列变形为目标特征图 x f x_f xf。
为了获取 H W 256 \frac{HW}{256} 256HW长度的序列输入,我们将图像 x ∈ R H × W × 3 x \in \mathbb{R}^{H \times W \times 3} x∈RH×W×3按照 H 16 × W 16 \frac{H}{16} \times \frac {W}{16} 16H×16W进行划分,将划分的栅格平铺成一个序列。通过线性映射 f : p → e ∈ R C f: p \rightarrow e \in {\mathbb{R}^{C}} f:p→e∈RC将每一个向量化的块p映射为C维度的嵌入空间,所以对于一幅输入图像x我们可以获得一个1维的嵌入块序列。为了编码每一个图像块的空间信息,还需要一个特定的嵌入向量 p i p_i pi加入到 e i e_i ei组成最后的序列 E ∈ { e 1 + p 1 , e 2 + p 2 , . . . , e L + p L } E \in \{ e_1+p_1, e_2+p_2,...,e_L+p_L\} E∈{e1+p1,e2+p2,...,eL+pL}。通过这种方法,尽管transformer的自注意力是无序的,仍然可以保有其空间信息。
Transformer
给定1D的嵌入序列E作为输入,一个纯transformer的编码器被应用去学习特征表示。这意味这每一个transformer层有一个全局的感受野,解决了当前FCN编码器感受野有限的问题。transformer编码器包含
L
e
L_e
Le层,这些层包括多头的自注意力块multi-head self-attention(MSA)和多层感知机Multilayer Perception(MLP)。对于每一个层l,自注意力的输入是一个三元组(query, key, value),其通过输入
Z
l
−
1
∈
R
L
×
C
Z^{l-1} \in {\mathbb{R}^{L \times C}}
Zl−1∈RL×C进行计算:
q
u
e
r
y
=
Z
l
−
1
W
Q
,
k
e
y
=
Z
l
−
1
W
K
,
v
a
l
u
e
=
Z
l
−
1
W
V
query = Z^{l-1}{W_Q},key=Z^{l-1}{W_K},value=Z^{l-1}{W_V}
query=Zl−1WQ,key=Zl−1WK,value=Zl−1WV,
其中,
W
Q
/
W
K
/
W
V
∈
R
C
×
d
W_Q/W_K/W_V \in\mathbb{R}^{C \times d}
WQ/WK/WV∈RC×d是三个线性投射层的参数,d是(query,key,value)的维度。self-attention(SA) 表示为:
S
A
(
Z
l
−
1
)
=
Z
l
−
1
+
s
o
f
t
m
a
x
(
Z
l
−
1
W
Q
(
Z
W
K
)
T
d
)
(
Z
l
−
1
W
V
)
SA(Z^{l-1}) = Z^{l-1} + softmax(\frac{Z^{l-1}W_Q{(ZW_K)^T}}{\sqrt d})(Z^{l-1}W_V)
SA(Zl−1)=Zl−1+softmax(dZl−1WQ(ZWK)T)(Zl−1WV)
MSA是m个独立的SA操作的扩展并且将他们拼接的输出作为进行投射:
M
S
A
(
Z
l
−
1
)
=
[
S
A
1
(
Z
l
−
1
)
;
S
A
2
(
Z
l
−
1
)
;
.
.
.
;
S
A
m
(
Z
l
−
1
)
]
W
O
MSA(Z^{l-1} )= [SA_1(Z^{l-1}); SA_2(Z^{l-1}); ...;SA_m(Z^{l-1})]W_O
MSA(Zl−1)=[SA1(Zl−1);SA2(Zl−1);...;SAm(Zl−1)]WO,其中
W
O
∈
R
m
d
×
C
W_O \in {\mathbb{R}^{md \times C}}
WO∈Rmd×C。
其中,d被设置为
C
/
m
C /m
C/m。MSA的输出经过MLP块进行转换并通过参差进行连接。最后的输出为:
Z
l
=
M
S
A
(
Z
l
−
1
)
+
M
L
P
(
M
S
A
(
Z
l
−
1
)
)
∈
R
L
×
C
Z^{l}=MSA(Z^{l-1})+MLP(MSA(Z^{l-1})) \in \mathbb{R}^{L \times C}
Zl=MSA(Zl−1)+MLP(MSA(Zl−1))∈RL×C
注意,层的归一化在MSA和MLP块之前被应用。我们用
{
Z
1
,
Z
2
,
Z
3
,
.
.
.
,
Z
L
e
}
\{Z^1,Z^2,Z^3,...,Z^{L_e}\}
{Z1,Z2,Z3,...,ZLe}代表transformer层的特征。