前言
本文解讀的論文是ICCV2021中的最佳論文,在短短幾個月內,google scholar上有388引用次數,github上有6.1k star。
本文來自公眾號CV技術指南的
關注公眾號CV技術指南 ,專注於計算機視覺的技術總結、最新技術跟蹤、經典論文解讀。
論文: Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
代碼:https://github. com/microsoft/Swin-Transformer
Motivation
論文試圖擴展Transformer的適用性,使其可以作為計算機視覺的通用主干,就像它在NLP中所做的那樣,也可以像CNNs在視覺中所做的那樣。
論文提到,將其在語言領域的高性能轉換到視覺領域的重大挑戰可以用這兩種模式之間的差異來解釋。這些不同之處之一涉及到規模。
與作為語言transformer中處理的基本元素的單詞tokens不同,視覺元素在尺度上可以有很大的變化,這是一個在諸如目標檢測之類的任務中受到關注的問題。在現有的基於transformer的模型中,tokens都是固定比例的,這一特性不適合這些視覺應用。
另一個不同之處在於,與文本段落中的文字相比,圖像中像素的分辨率要高得多。存在許多視覺任務,如語義分割,需要在像素級別進行密集預測,這對於高分辨率圖像上的Transformer來說是很困難的,因為它的self-attention的計算復雜度是圖像大小的二次方。
創新思路
為了克服這些問題,論文提出了一種通用的Transformer骨干網,稱為Swin Transformer,它構造了分層的特征映射,並且計算復雜度與圖像大小成線性關系。
如圖1(A)所示,Swin Transformer通過從小塊(灰色輪廓)開始,逐漸合並更深的Transformer層中的相鄰塊來構建分層表示。
有了這些分層的特征圖,Swin Transformer模型可以方便地利用先進的技術進行密集預測,如特征金字塔網絡(FPN)或U-Net。線性計算復雜度是通過在分割圖像(紅色輪廓)的非重疊窗口內局部計算self-attention來實現的。每個窗口中的patches數量是固定的,因此復雜度與圖像大小成線性關系。
這些優點使得Swin Transformer適合作為各種視覺任務的通用主干,而不是以前基於Transformer的架構,后者生成單一分辨率的特征地圖,並且具有二次方復雜性。
Swin Transformer的一個關鍵設計元素是窗口分區在連續的self-attention層之間的移動,如圖2所示。移動的窗口橋接了前一層的窗口,提供了它們之間的連接,顯著增強了建模能力。
這種策略在實際延遲方面也是有效的:一個窗口內的所有query patch都共享相同的key集,這便於硬件中的內存訪問。相反,較早的基於滑動窗口的self-attention方法由於不同query像素的不同key集而在一般硬件上受到低延遲的影響。
實驗表明,所提出的移位窗口方法比滑動窗口方法具有更低的延遲,但在建模能力上是相似的。事實證明,移位窗口方法對於全MLP體系結構也是有益的。
Methods
Overall Architecture
Swin Transformer架構的概述如圖3所示,它展示了tiny版本(Swin-T)。
圖3.(a)Swin Transformer(Swin-T)的架構;(b)兩個連續的Swin Transformer塊(用公式表示(3))。W-MSA和SW-MSA分別是具有規則和移位窗口配置的多頭自注意模塊。
它首先通過patch分割模塊(如ViT)將輸入的RGB圖像分割成不重疊的patch。每個patch都被視為一個“token”,其特征被設置為原始像素RGB值的串聯。在實現中,論文使用了4×4的塊大小,因此每個塊的特征維度是4×4×3=48。將線性嵌入層應用於該原始值特征以將其投影到任意維度(表示為C)。
在這些patch tokens上應用了幾個帶有修改的self-attention計算的transformer block (Swin Transformer block)。transformer塊保持tokens數(H/4×W/4),與線性嵌入一起稱為“Stage1”。
為了產生分層表示,隨着網絡的深入,通過patch合並層來減少tokens的數量。第一個patch合並層將每組2×2相鄰patch的特征進行拼接,並在4C維拼接的特征上應用線性層。這將tokens的數量減少了2×2=4的倍數(2倍下采樣),並且輸出維度被設置為2C。然后應用Swin Transformer塊進行特征變換,分辨率保持為H/8×W/8。這第一個塊的拼接和特征變換稱為“Stage2”。重復“Stage3”和“Stage4”兩次,輸出分辨率分別為H/16×W/16和H/32×W/32。
這些Stage共同產生具有與典型卷積網絡(如VGG和ResNet)相同的特征映射分辨率的分層表示。因此,該體系結構可以方便地取代現有方法中的骨干網絡,用於各種視覺任務。
Swin Transformer Block: Swin Transformer通過將transformer塊中的標准多頭self-attention(MSA)模塊替換為基於移位窗口的模塊,在保持其他層不變的情況下構建Swin Transformer。
如圖3(b)所示,Swin Transformer模塊由一個基於移位窗口的MSA模塊和一個中間帶有GELU非線性的兩層MLP組成。在每個MSA模塊和每個MLP之前應用LayerNorm(LN)層,並且在每個模塊之后應用殘差連接。
基於移位窗口的self-attention
非重疊窗口中的self-attention: 為有效建模,論文提出在局部窗口中計算self-attention。窗口被布置成以不重疊的方式均勻地分割圖像。假設每個窗口包含M×M個patch,全局MSA模塊和基於h×w patch圖像的窗口的計算復雜度分別為
其中,前者與patch數HW為平方關系,后者在M固定時是線性的(缺省情況下設置為7)。全局self-attention計算對於大型硬件來說通常是負擔不起的,而基於窗口的self-attention是可伸縮的。
在連續塊中移動窗口分區: 基於窗口的self-attention模塊缺少跨窗口的連接,這限制了其建模能力。為了在保持非重疊窗口計算效率的同時引入跨窗口連接,論文提出了一種移位窗口划分方法,該方法在連續Swin Transformer塊中的兩種划分配置之間交替。
在Swin Transformer架構中計算self-attentioin的移位窗口方法的圖示。在Layer1(左)中,采用規則的窗口划分方案,並在每個窗口內計算自我關注。在下一層l+1(右)中,窗口分區被移位,從而產生新窗口。新窗口中的self-attention計算跨越了層l中先前窗口的邊界,提供了它們之間的連接。
如圖所示,第一個模塊使用從左上角像素開始的規則窗口划分策略,將8×8特征圖均勻划分為大小為4×4(M=4)的2×2個窗口。然后,下一模塊通過將窗口從規則划分的窗口移位(M/2,M/2)(向下取整)像素來采用從前一層的窗口移位的窗口配置。使用移位窗口分區方法,連續的Swin Transformer塊計算為
其中,ˆzl和zl分別表示塊1的(S)WMSA模塊和MLP模塊的輸出特征;W-MSA和SW-MSA分別表示使用規則和移位窗口分區配置的基於窗口的多頭self-attention。
移位窗口划分方法引入了前一層相鄰非重疊窗口之間的連接,在圖像分類、目標檢測和語義分割中被發現是有效的。
移位的高效批處理計算:移位窗口分區的一個問題是,它將在移位中產生更多窗口,從h/M x w/M(向上取整)到(h/M + 1) x (w/M+1)(向上取整),並且一些窗口將比MxM更小。一個原始的解決方案是將較小的窗口填充到M×M的大小,並在計算注意力時屏蔽填充的值。當規則分區中的窗口數量較小時,例如2×2,使用這種朴素的解決方案增加的計算量是相當可觀的(2×2→3×3,是2.25倍)。
在這里,論文提出了更有效的批處理計算方法,即向左上角方向循環移動,如圖所示。在這種轉移之后,批處理窗口可能由特征圖中不相鄰的幾個子窗口組成,因此采用mask機制將self-attention計算限制在每個子窗口內。在循環移位的情況下,批處理窗口的數量與常規窗口划分的數量相同,因此也是有效的。
相對位置偏差:在計算self-attention時,在計算相似度時將每個頭部的相對位置偏差B(大小為M^2×M^2)包括在內:
其中Q,K,V大小為M^2 x d;d的大小為query/key,M^2是一個窗口中的patches數量。由於沿每個軸的相對位置在[−M+1,M−1]范圍內,將較小尺寸的偏置矩陣ˆB(大小為(2M−1)×(2M−1))參數化,並且B中的值取自ˆB。
如表所示,論文提到,與沒有這種bias項或使用絕對位置嵌入的同行相比,有顯著的改進。進一步向輸入添加絕對位置嵌入會略微降低性能,因此在論文的實現中不采用它。在預訓練中學習到的相對位置偏差還可以用於通過雙三次插值來初始化具有不同窗口大小的微調模型。
Architecture Variants
論文構建了名為Swin-B的基本模型,其模型大小和計算復雜度與ViTB/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。對於所有實驗,每個頭的query維度為D=32,每個MLP的擴展層為α=4。這些模型變體的體系結構超參數包括:
Conclusion
論文提出的Swin Transformer在圖像分類、目標檢測和語義分割等識別任務中取得了較好的性能。它在三個任務上的延遲與Vit/Deit和ResNe(X)t模型相比要高得多。
1. 不同骨干網在ImageNet-1K分類上的比較。
2. 其在COCO測試開發集上的58.7box AP和51.1mask AP超過了之前SOTA結果+2.7box AP(無外部數據的復制-粘貼)和+2.6mask AP(DetectoRS)。
3.在ADE20K語義分割上,它在Val集合上獲得了53.5mIoU,比之前的SOTA(SETR])提高了+3.2mIoU。在ImageNet-1K圖像分類上達到了87.3%的TOP-1正確率。
4. 不同的self-attention計算方法和實現在V100 GPU上的真實速度。
歡迎關注公眾號 CV技術指南 ,專注於計算機視覺的技術總結、最新技術跟蹤、經典論文解讀。
在公眾號中回復關鍵字 “入門指南“可獲取計算機視覺入門所有必備資料。
其它文章