Vision Transformer
首先将图片分为一个个patches,然后通过Embedding层得到token,输入Transformer Encoder和MLP Head得到最终的输出。
对于标准的Transformer模块,要求输入的是token(向量)序列,即二维矩阵[num_token, token_dim]
在代码实现中,直接通过一个卷积层来实现以ViT-B/16为例,使用卷积核大小为16x16,stride为16,卷积核个数为768
[224, 224, 3]-> [14, 14, 768] -> [196, 768]
在输入Transformer Encoder之前需要加上[class]token以及Position Embedding,都是可训练参数
拼接[class]token: Cat([1, 768], [196, 768]) -> [197, 768]
叠加Position Embedding: [197, 768] -> [197, 768]
Transformer Encoder是将Encoder Block堆叠L次得到。
Swin Transformer
网络整体框架
与ViT的不同体现在Swin Transformer具有层次性。
Patch Merging
假设输入Patch Merging的是一个4x4大小的单通道特征图(feature map),Patch Merging会将每个2x2的相邻像素划分为一个patch,然后将每个patch中相同位置(同一颜色)像素给拼在一起就得到了4个feature map。接着将这四个feature map在深度方向进行concat拼接,然后在通过一个LayerNorm层。最后通过一个全连接层在feature map的深度方向做线性变化,将feature map的深度由C变成C/2。通过这个简单的例子可以看出,通过Patch Merging层后,feature map的高和宽会减半,深度会翻倍。
W_MSA
➢MSA模块计算量
4
h
w
C
2
+
2
(
h
w
)
2
C
4 h w C^{2}+2(\mathrm{hw})^{2} \mathrm{C}
4hwC2+2(hw)2C
➢W-MSA模块计算量
4
h
w
C
2
+
2
M
2
h
w
C
4 h w C^{2}+2 \mathrm{M}^{2} h w C
4hwC2+2M2hwC
Shifted Windows Multi-Head Self- Attention(SW_MSA)
目的:实现不同Window之间的信息交互。
Relative Position Bias
感想
经过暑假这一个多月的学习,我了解了深度学习的发展历程和许多主流框架,其中有一些比较复杂的网络原理或代码我理解的还不是很透彻,开学之后会更加努力地学习,理解各种网络结构的原理以及代码实现。