1、motivation
CNN的優(yōu)勢是平移不變、尺度不變、層次感受野;
transformer應用到CV的優(yōu)勢全局的感受野(計算量很大),可實現(xiàn)平移不變,但無法做到尺度不變,猜測這也是DETR對小目標檢測效果不太好的原因。
鑒于以上分析,Swin transformer (Shifted window transformer, 暫且簡稱SWTR)構造了層次結構網(wǎng)絡、window multi-head self-attention,構造新的CV backbone。
SWTR與ViT的對比:
1、ViT是固定的感受野;SWTR構建層次結構,感受野逐層增大。
2、ViT是全局multi-head self-attention (MSA);SWTR是Windows內(nèi)部的MSA。

2、網(wǎng)絡結構

輸入圖像:[H, W, 3]
2.1 patch partition
將原始圖像切分為4*4的patch,feature dimension變?yōu)?*4*3=48,得到feature size [H/4, W/4, 48]
實際代碼中采用conv2d(kernal_size=4, stride=4)實現(xiàn)
將每個patch看作token,長度為H/4*W/4的patch序列即可作為經(jīng)典transformer的標準輸入
2.2 linear embedding
乘以嵌入矩陣后patch/token序列size變?yōu)?b>[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基本一致,區(qū)別是增加了相對位置編碼B

3.3 shifted window
在均分2*2 window的基礎上增加3*3 shift window,打破固定的感受野,每個block內(nèi)實現(xiàn)感受野的交叉,提升信息交流融合。

但是3*3 shift window的size不一樣大,無法batch并行處理,因此對3*3 shift window進行特征圖位移cyclic shift,位移后3*3變?yōu)?*2大小,然后按照window attetion的計算方式,再執(zhí)行特征圖反向位移reverse cyclic shift,得到shift window attention結果。

cyclic shift通過torch.roll來實現(xiàn)


3.4?SW-MSA計算細節(jié)
在3.3中,3*3的shift window特征圖位移后變?yōu)?*2 window,但是實際計算還是希望3*3個窗口內(nèi)執(zhí)行的,即還是9個attention計算結果,計算中借助mask實現(xiàn),過程如下:

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區(qū)別在于點積部分:
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 優(yōu)勢
1、將transformer從CV下游任務如分類(ViT)、檢測(DETR)上升到了backbone。
2、多stage的shift window將CNN的層次結構、局部感受野引入transformer
3、局部attention解決transformer計算量太大的問題。
5.2 劣勢
1、CNN的還有一個特性是參數(shù)共享,Swin transformer的各個窗口的參數(shù)還不是共享的。?
2、CNN支持通過調(diào)整卷積核大小改變感受野大小,SWTR的window partition怎么分窗目前看起來還沒有達到相同的靈活性。