Swin Transformer阅读笔记
1.通过一个Patch splitting Module将输入的RGB图像分割成不重叠的patch。像ViT一样。每一个patch被视为一个‘’token’’,并且它的特征被设置为原始像素值的连接。在实施过程中,patch size为4x4,所以每个patch的特征维度是4x4x3=48。
2.随后通过一个Linear Embedding层将原始像素值投射到一个任意的维度
3.接着多个Swin Transformer Block应用于这些patch。这个Transformer Block和Linear Embedding层共同构成了Stage1
为了产生层次性的表达,随着网络的变深,token的数量通过Patch Merging层进行减少
Swin Transformer Block是在Transformer的基础上将Transformer的多头注意力机制替换为一个基于移动窗口(shifted windows)的模块,其他保持不变。
将Transformer和Swin Transformer进行对比,可以清楚地看到将多头注意力机制替换为了基于MSA Module的Shifted Windows,同时跟随一个2层的MLP。同时在每一个MSA和每一个MLP结构之前都添加一个LayerNorm层。
标准的Transformer结构和它应用于图像分类的情况都需要计算全局的注意力,即需要计算一个token和其他所有token之间的关系。对于具有大量token的任务不太适用。
MSA(Multi-Head Self-Attention)和W-MSA(Window based MSA)的计算复杂度如下:
基于窗口的注意力机制缺乏窗口之间的联系。为了保证窗口之间的联系并且保持计算的高效性,提出Shifted窗口注意力模块。
W-MSA和SW-MSA代表着使用regular windows和shifted windows的注意力机制(上图中左侧是regular windows,右侧是shifted windows),shifted windows能够使前一层的相邻的Windows之间联系起来,这对图像分类、目标检测和语义分割都非常有用。
Swin Transformer Blocks的计算如下:
Shifted windows 带来的问题就是它会生成更多的窗口,会造成计算量的增加。于是提出一个更高效的批量计算方法——朝向左上方向的环形变换。
通过这种转换,一批窗口会有一些更小的窗口组成,因此一个掩膜(masking)机制应用于这些小窗口上来限制自注意力机制的计算量。通过cyclic-shift,batched window的数量与regular windows的数量相同,因此同样高效。
在计算head的相似性时,添加一个相对位置偏差
Q,K,V分别是query,key,value matrices(即查询矩阵,键矩阵,值矩阵)。d 是query/key 的维度
如图表所示,可以看到在添加ViT中绝对位置插值、相对位置偏差带来的增益。
基本的架构是Swin-B。变体有Swin-T、Swin-S和Swin-L分别是SwIn-B模型大小和计算复杂度的0.25、0.5、2倍,Swin-T和Swin-S的复杂度分别与ResNet50(DeiT-S)和ResNet101相似。
C是first stage中隐藏层的通道数。具体的模型大小,理论模型复杂度(FLOPS)等如下表所示: