Swin Transformer

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

patch merging

作用和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结果。

cyclic shift通过torch.roll来实现

cyclic shift示意图

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怎么分窗目前看起来还没有达到相同的灵活性。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容