ViT打破了CV和NLP之間的壁壘,但是由於Transformer與CNN相比,少了一些歸納偏置,使得其在數據集較小的時候性能較差,另外由於其使用低分辨率特征映射且計算復雜度是圖像大小的二次方,其體系結構不適合用於密集視覺任務的通用主干網絡或輸入圖像分辨率較高時,Swin Transformer就是在ViT的基礎上將層次性、局部性和平移不變性等先驗引入Transformer網絡結構設計從而能在視覺任務中取得更好的性能,能適用於多種CV任務,且其復雜度相對圖片大小為線性相關,計算效率也十分不錯。
方法概要:1.在小窗口而不是整圖內算自注意力,減少序列的長度、降低計算復雜度,這其實也利用了局部性的先驗知識。2.通過在不同層合並窗口獲得多尺度特征。3.在不同層間移動窗口(向右下角的方向整體移了兩個 patch),使得每一個窗口間可以進行交互,否則每個patch就只能注意到它所在窗口patch的信息。
主要特點:將層次性、局部性和平移不變性等先驗引入Transformer網絡結構設計。
核心創新:移位窗口(shifted window)設計: 1)自注意的計算在局部的非重疊窗口內進行。這一設計有兩方面的好處,一是復雜度從此前的和圖像大小的平方關系變成了線性關系,也使得層次化的整體結構設計、局部先驗的引入成為可能,二是因為采用非重疊窗口,自注意計算時不同query會共享同樣的key集合,從而對硬件友好,更實用。 2)在前后兩層的Transformer模塊中,非重疊窗口的配置相比前一層做了半個窗口的移位,這樣使得上一層中不同窗口的信息進行了交換。 相比於卷積網絡以及先驅的自注意骨干網絡(Local Relation Net和SASA)中常見的滑動窗(Sliding window)設計,這一新的設計犧牲了部分平移不變性,但是實驗發現平移不變性的部分丟失不會降低准確率,甚至因為正則效應效果更好。同時,這一設計對硬件更友好,從而更實用而有希望成為主流。(摘自胡瀚老師在ReadPaper網站的回答)

Swin Transformer采用了分層結構,通過從小尺寸的patchs(以灰色勾勒)開始,並逐漸將相鄰patchs合並到更深的Transformer層中來構建層次表示。有了這些分層特征映射,Swin Transformer模型可以方便地利用先進技術進行密集預測,如特征金字塔網絡(FPN)或U-Net。線性計算復雜度是通過在分割圖像的非重疊窗口內局部計算自注意力來實現的(a)所提出的Swin Transformer通過在更深的層中合並圖像塊(以灰色顯示)來構建分層特征圖,並且由於僅在每個局部窗口(以紅色顯示)內計算自注意力,因此對於輸入圖像大小具有線性計算復雜度。因此,它可以作為圖像分類和密集識別任務的通用主干。(b)相比之下,以前的vision Transformer產生單一低分辨率的特征圖,並且由於全局計算自注意力,輸入圖像大小具有二次計算復雜性。

在所提出的Swin Transformer架構中,用於計算自注意力的移位窗口方法的示例。在層l(左),采用規則的窗口划分方案,並在每個窗口內計算自注意力。在下一層l+1(右)中,窗口分區被移動,從而產生新窗口。新窗口中的自注意力計算跨越層中以前窗口的邊界,提供它們之間的連接。
總體結構如下:

(a) Swin Transformer(Swin-T)的結構;(b)兩個連續的Swin Transformer塊。W-MSA和SW-MSA分別是具有規則和移位窗口配置的多頭自注意力模塊。

論文中提出了一種向左上方向循環移位的高效批處理計算移位配置方法,在該移位之后,批處理窗口可能由多個子窗口組成,這些子窗口在特征圖中不相鄰,因此采用mask機制將自注意力計算限制在每個子窗口內。使用循環移位,批處理窗口的數量與常規窗口分區的數量相同,因此也是有效的。
