1、motivation
CNN的优势是平移不变、尺度不变、层次感受野;
transformer应用到CV的优势全局的感受野(计算量很大),可实现平移不变,但无法做到尺度不变,猜测这也是DETR对小目标检测效果不太好的原因。
鉴于以上分析,Swin transformer (Shifted window transformer, 暂且简称SWTR)构造了层次结构网络、window multi-head self-attention,构造新的CV backbone。
SWTR与ViT的对比:
1、ViT是固定的感受野;SWTR构建层次结构,感受野逐层增大。
2、ViT是全局multi-head self-attention (MSA);SWTR是Windows内部的MSA。
2、网络结构
输入图像:[H, W, 3]
2.1 patch partition
将原始图像切分为4*4的patch,feature dimension变为4*4*3=48,得到feature size [H/4, W/4, 48]
实际代码中采用conv2d(kernal_size=4, stride=4)实现
将每个patch看作token,长度为H/4*W/4的patch序列即可作为经典transformer的标准输入
2.2 linear embedding
乘以嵌入矩阵后patch/token序列size变为[H/4*W/4, C]
2.3 Swin Transformer Block
Swin Transformer Block = Window MSA (W-MSA) + Shift Window MSA (SW-MSA) + LN + MLP + short-cut
整体结构基本和transformer encoder一致,MSA替换为W-MSA和SW-MSA
2.4 Deeper Stage = patch merging + Swin Transformer Block
作用和CNN的conv2d(stride=2)或pooling(stride=2)一致,完成feature的下采样,效果如图。
3、attention
3.1 Window Partition/Reverse
假设原始的feature size为[H1, W1, C1]
reshape分窗口后size为[H1*W1/(window_size*window_size), window_size, window_size, C1]
reverse即上述过程反向操作。
3.2 window attention
与标准transformer的self attention基本一致,区别是增加了相对位置编码B
3.3 shifted window
在均分2*2 window的基础上增加3*3 shift window,打破固定的感受野,每个block内实现感受野的交叉,提升信息交流融合。
但是3*3 shift window的size不一样大,无法batch并行处理,因此对3*3 shift window进行特征图位移cyclic shift,位移后3*3变为2*2大小,然后按照window attetion的计算方式,再执行特征图反向位移reverse cyclic shift,得到shift window attention结果。
3.4 SW-MSA计算细节
在3.3中,3*3的shift window特征图位移后变为2*2 window,但是实际计算还是希望3*3个窗口内执行的,即还是9个attention计算结果,计算中借助mask实现,过程如下:
4、计算复杂度
4.1 矩阵乘法的复杂度计算
矩阵A大小为[M, N],矩阵B大小为[N, K],则AB的计算复杂度为MNK
4.2 SWTR的复杂度计算
MSA计算包括:
KQV计算:3hwC^2
QK^T点积:(hw)^2*C
乘V点积:(hw)^2*C
多头合并变换:hwC^2
合并得4hwC^2 + 2(hw)^2C
W-MSA和MSA区别在于点积部分:
window size为M,则包含h/M*w/M个window,每个window的QK^T复杂度为(M^2)^2*C,总复杂度为M^2hwC,乘V点积一样是(M^2)hwC,合并KQV计算总复杂度为4hwC^2 + 2(M^2)hwC
5、总结
5.1 优势
1、将transformer从CV下游任务如分类(ViT)、检测(DETR)上升到了backbone。
2、多stage的shift window将CNN的层次结构、局部感受野引入transformer
3、局部attention解决transformer计算量太大的问题。
5.2 劣势
1、CNN的还有一个特性是参数共享,Swin transformer的各个窗口的参数还不是共享的。
2、CNN支持通过调整卷积核大小改变感受野大小,SWTR的window partition怎么分窗目前看起来还没有达到相同的灵活性。