摘要
提出新的視覺transformer,稱之為Swin transformer,能作為視覺任務的通用backbone。 tranformer從語言到視覺的挑戰源於這兩個域的不同,如與文本中的字相比,視覺實體的變化范圍很大,有高分辨率的像素。為處理這些不同,提出了一個層級的transformer,采用移動的窗口計算表征。移動窗口方案可以帶來更高的效率,通過限制非重疊局部窗口的自注意力計算,同時允許跨窗口連接實現。 這種層次結構具有在不同尺度上建模的靈活性,並具有與圖像大小相關的線性計算復雜度。
Swin Transformer能夠兼容廣泛的視覺任務,包括圖像分類(在ImageNet-1K的最高准確率86.4)和高密度預測任務,如目標檢測(在COCO test-dev數據上58.7 box AP和51.1 mask AP)和語義分割(在ADE20K val上53.5 mIoU)。它在coco數據上,比之前的sota模型多2.7個box ap,2.6個mask ap,在ADE20K上,比之前sota多3.2個mIoU。 代碼:https://github.com/microsoft/Swin-Transformer
方法
整體結構
- 圖3為小版本(Swin - T)
- 先將輸入的RGB圖像切分成不重疊的patch,每個patch當作token,其特征設置為原始rgb像素值的concate。實驗中,使用大小為4x4的patch,因此每個patch的特征維度是4x4x3=48,應用線性嵌入層投影至任意維度(表示為C)。
- swin transformer 塊應用到patch的token上,保持tokens的數量(H/4xW/4),與線性嵌入一起稱之為stage 1.
- 為產生具有層次的表征,隨着網絡加深,token的數量通過patch合並層 縮減,第一個patch合並層將相鄰2 × 2的每一組patch的特征拼接起來,並在4c維的拼接特征上應用一個線性層
- 這將token的數量縮減了4倍(分辨率2倍下采樣),輸出維度設為2C,隨后應用Swin transformer塊進行特征變換,分辨率保持在H/8xH/8。第一個塊的patch合並和特征轉換表示為stage 2,這個步驟重復兩次,分別為stage 3和stage 4,輸出分辨率分別為H/16xH/16和H/32xH/32,與經典CNN網絡有相同的分辨率(如 vgg和ResNet),因此,提出的結構能方便的替換現有方法在各任務上的backbone。
- swin transformer 塊
基於移動窗口,通過替換transformer中標准的多頭自注意力模塊構建,其它層相同。 如圖3(b),swin transformer由基於MSA的移動窗口,后跟一個2層的MLP(之間采用GELU非線性)組成。每個MSA模塊和MLP之前采用層歸一化,每個模塊后采用殘差連接。
- 基於自注意力的移動窗口
全局計算的復雜度是關於token數量的二次方,當需要大量的token集合用於稠密預測或者表示一個高分辨率圖片時,這並不適合。 非重疊窗口的自注意力機制 為了高效建模,我們提出在局部窗口內計算自注意。窗口被安排以不重疊的方式均勻地分割圖像。假設每個窗口包含MxM個patch,全局MSA和基於窗口的MSA的計算復雜度為(M默認為7):
對於大的hw,全局注意力計算通常負擔不起,而窗口的自注意力是可縮放的
- 在連續塊中移動的窗口分區
各基於窗口的自注意力模塊機制缺乏窗口間連接,限制了模型能力。為引入跨窗口連接,同時保持不重疊窗口的有效計算,提出了一個移動的窗口分割方法,如圖2.
第一個模塊采用常規窗口分割策略,從左上像素開始,8X8的特征圖平均分割到4個窗口,大小為4x4(M=4),然后,下一個模塊采用一個窗口配置,即從上一層的窗口配置移動,即從常規窗口中,替換的像素。 通過偏移的窗口分割方法,連續的Swin Transformer塊采用以下方式計算:
引入了前一層相鄰非重疊窗口之間的連接,被發現是有效的,如表4.
- 用於偏移配置的有效batch計算
采用偏移的窗口分割的問題是,會導致更多窗口,一些窗口可能比MxM小,一個解決辦法是將小於MxM的小窗口填充,計算注意力時,將pad的值遮蓋掉。
當常規分割的窗口數量小時,如2x2,采用這個方法增加的計算量是相當大的(2x2->3x3,變大2.25倍)
我們提出一個更有效的批量計算的方法,即向着左上角方向循環移動,如圖4所示。在此次移動之后,一個批處理窗口可能由幾個(在特征圖上不相鄰的)子窗口組成,因此采用掩蔽機制將自注意計算限制在每個子窗口內。
使用循環移位,批處理窗口的數量與常規窗口分區的數量相同,因此也是高效的。這種方法的低延遲如表5所示
- 相對位置偏差
計算自注意力過程中,在計算相似度時,我們包含一個相對的位置偏差到每個頭上
由於沿着每個軸的相對位置在范圍[-M+1,M-1],我們參數化一個小的偏差矩陣,B的值來自該矩陣
進一步增加絕對位置嵌入到輸入,性能輕微降低。
在預訓練學習到的相對位置偏差還可以通過雙三次插值來初始化模型,用於不同窗口大小的微調
結構變量
構建我們的基礎模型,稱之為Swin-B,與ViT-B/DeiT-B有相似的模型大小和計算復雜度,同時介紹Swin-T,Swin-S和Swin-L,對應0.25,0.5和2倍的模型大小和計算復雜度
Swin-T和Swin-S分別與ResNet-50(DeiT-S)和ResNet-101有相似的復雜度。窗口大小設置為M=7,每個頭的查詢維度為d=32,每個MLP擴展層的α=4,這些模型變種的超參數為:
實驗