摘要:本文提出了一種新型的視覺變換器,即Swin變換器,它可作為計算機(jī)視覺的通用骨干。將Transformer從NLP轉(zhuǎn)移到CV上,由于兩個領(lǐng)域的差異而存在著挑戰(zhàn),例如視覺實體的尺度變化較大,以及圖像相對于句子是個很長的序列。為了解決這些差異,我們提出了一種分層變換器,它的表示是用移位窗口來計算的。移位窗口將自注意力的計算限制在非重疊的局部窗口上,同時考慮了跨窗口連接,提高了效率。該層次結(jié)構(gòu)具有在不同尺度下建模的靈活性,并且具有與圖像大小相關(guān)的線性計算復(fù)雜度。Swin變換器的這些特性使其與廣泛的視覺任務(wù)兼容,包括圖像分類(ImageNet-1K上的86.4 top-1精度)和目標(biāo)檢測(COCO測試開發(fā)上的58.7boxAP和51.1maskAP)和語義分割(ADE20K val上的53.5 mIoU)等密集預(yù)測任務(wù)。其性能超過了以往的最新水平,COCO上的+2.7boxAP和+2.6maskAP和ADE20K上的+3.2MIou的大幅度提升,顯示了變換型作為視覺主干的潛力。代碼和模型在https://github.com/microsoft/Swin-Transformer
1. 引言
卷積神經(jīng)網(wǎng)絡(luò)(CNNs)一直是計算機(jī)視覺建模的主流。從AlexNet[38]及其在ImageNet圖像分類挑戰(zhàn)中的革命性表現(xiàn)開始,CNN架構(gòu)通過更大的規(guī)模[29,73]、更廣泛的連接[33]和更復(fù)雜的卷積形式[67,17,81]而變得越來越強(qiáng)大。由于CNNs作為各種視覺任務(wù)的骨干網(wǎng)絡(luò),這些體系結(jié)構(gòu)的進(jìn)步導(dǎo)致了性能的提高,從而廣泛提升了整個領(lǐng)域。
另一方面,自然語言處理(NLP)中網(wǎng)絡(luò)體系結(jié)構(gòu)的演變走了一條不同的道路,今天流行的體系結(jié)構(gòu)取而代之的是Transformer[61]。Transformer是為序列建模和轉(zhuǎn)換任務(wù)而設(shè)計的,因為它關(guān)注數(shù)據(jù)中的長期依賴性建模。它在語言領(lǐng)域的巨大成功促使研究人員研究它對計算機(jī)視覺的適應(yīng)性,最近它在某些任務(wù)上顯示了有希望的結(jié)果,特別是圖像分類[19]和聯(lián)合視覺語言建模[46]。
在本文中,我們試圖擴(kuò)展Transformer的適用性,使它可以像NLP和CNNs一樣作為計算機(jī)視覺的通用主干。我們觀察到,將其在語言領(lǐng)域的高性能轉(zhuǎn)移到視覺領(lǐng)域的重大挑戰(zhàn)可以解釋為兩種模式之間的差異。其中一個差異涉及尺度(scale)。與作為語言Transformer中處理的基本元素的單詞標(biāo)記不同,視覺元素在尺度上可能有很大的差異,這是一個在目標(biāo)檢測等任務(wù)中受到關(guān)注的問題[41,52,53]。在現(xiàn)有的基于Transformer的模型中[61,19],tokens都是固定尺度的,這種屬性不適合視覺些應(yīng)用。另一個區(qū)別是圖像中像素數(shù)比文本段落中的單詞數(shù)得多。存在許多視覺任務(wù),如語義分割,需要在像素級進(jìn)行密集的預(yù)測,這對于高分辨率圖像上的Transformer來說是很困難的,因為它自身注意力的計算復(fù)雜度是圖像大小的二次方。為了克服這些問題,我們提出了一種通用的變換器主干,稱為Swin-Transformer,它構(gòu)造了層次化的特征映射,并且計算復(fù)雜度與圖像大小成線性關(guān)系。如圖1(a)所示,Swin-Transformer通過從小尺寸(編者注:小尺寸應(yīng)該是相對于ViT中的14x14或16x16而言)的圖塊(用灰色表示)開始,并在更深的Transformer層中,逐漸合并相鄰圖塊來構(gòu)造層次表示。有了這些分層特征映射,Swin-Transformer模型可以方便地利用高級技術(shù)進(jìn)行密集預(yù)測,如特征金字塔網(wǎng)絡(luò)(FPN)[41]或U-Net[50]。線性計算復(fù)雜度是通過在分割圖像的非重疊窗口(紅色輪廓)內(nèi)局部計算自注意來實現(xiàn)的。每個窗口中的圖塊數(shù)是固定的,因此復(fù)雜度與圖像大小成線性關(guān)系。這些優(yōu)點(diǎn)使得Swin-Transformer適合作為各種視覺任務(wù)的通用主干,與以前基于Transformer的體系結(jié)構(gòu)形成對比[19],后者產(chǎn)生單一分辨率的特征圖,并且具有二次復(fù)雜性。

Swin Transformer的一個關(guān)鍵設(shè)計元素是它在連續(xù)的自注意層之間的窗口分區(qū)的移動(its shift of the window partition between consecutive self-attention layers),如圖2所示。移動的窗口橋接了前一層的窗口(The shifted windows bridge the windows of the preceding layer),提供了它們之間的連接,顯著增強(qiáng)了建模能力(見表4)。這種策略對于真實世界場景的延遲也是高效的:一個窗口中的所有查詢圖塊都共享相同的鍵圖塊集(all query patches within a window share the same key set)(注釋:查詢和鍵是自注意層中的投影向量),這有助于硬件中的內(nèi)存訪問。相比之下,早期的基于滑動窗口的自注意方法[32,49]由于不同查詢像素的鍵集不同,在一般硬件上的延遲較低(注釋2:雖然有一些高效的方法可以在通用硬件上實現(xiàn)基于滑動窗口的卷積層,但這是因為卷積層在整個特征映射中共享內(nèi)核權(quán)重。而基于滑動窗口的自注意層在實踐中很難實現(xiàn)高效的內(nèi)存訪問)。我們的實驗表明,所提出的移位窗口方法比滑動窗口方法具有更低的延遲,但在建模能力方面相似(見表5和表6)。

所提出的Swin變換器在圖像分類、目標(biāo)檢測和語義分割等識別任務(wù)上取得了很好的效果。它在這三項任務(wù)顯著優(yōu)于ViT/DeiT[19,60]和ResNe(X)t模型[29,67]而具有相似的延遲。COCO test-dev上的58.7box-AP和51.1mask-AP超過了先前的最新結(jié)果,分別是+2.7box-AP(Copy-paste[25],無外部數(shù)據(jù))和+2.6mask-AP(DetectoRS[45])。在ADE20K語義分割上,它在val集合上獲得了53.5 mIoU,比以前的最新技術(shù)(SETR[78])提高了+3.2 mIoU。在ImageNet-1K圖像分類中,該算法的分類精度達(dá)到了86.4%。
我們相信,一個跨計算機(jī)視覺和自然語言處理的統(tǒng)一體系結(jié)構(gòu)可以使這兩個領(lǐng)域都受益,因為它將促進(jìn)視覺和文本信號的聯(lián)合建模,并且來自這兩個領(lǐng)域的建模知識可以更深入地共享。我們希望swin transformer在各種視覺問題上的出色表現(xiàn)能夠推動社區(qū)加深這種信念,并鼓勵視覺和語言信號的統(tǒng)一建模。
2.相關(guān)工作
CNN及其變體????CNNs作為計算機(jī)視覺的標(biāo)準(zhǔn)網(wǎng)絡(luò)模型。雖然CNN已經(jīng)存在了幾十年[39],但直到AlexNet的引入[38],CNN才開始發(fā)展并成為主流。從那時起,人們提出了更深入、更有效的卷積神經(jīng)結(jié)構(gòu),以進(jìn)一步推動計算機(jī)視覺中的深度學(xué)習(xí)浪潮,如VGG[51]、GoogleNet[56]、ResNet[29]、DenseNet[33]、HRNet[62]和EfficientNet[57]。除了這些架構(gòu)上的進(jìn)步,還有許多工作在改進(jìn)各個卷積層,例如深度卷積[67]和可變形卷積[17,81]。雖然CNN及其變體仍然是計算機(jī)視覺應(yīng)用的主要骨干架構(gòu),我們強(qiáng)調(diào)了在視覺和語言之間進(jìn)行統(tǒng)一建模的?transformer式體系結(jié)構(gòu)的強(qiáng)大潛力。我們的工作在一些基本的視覺識別任務(wù)上取得了很好的效果,我們希望這將有助于模型的轉(zhuǎn)變。
基于自注意力的主干體系結(jié)構(gòu)????同樣受到自然語言處理領(lǐng)域中自注意層和transformer結(jié)構(gòu)的成功啟發(fā),一些作品使用自注意層來代替流行ResNet中的部分或全部空間卷積層[32,49,77]。在這些工作中,在每個像素的局部窗口內(nèi)計算自注意以加速優(yōu)化[32],并且它們實現(xiàn)了比對應(yīng)的ResNet架構(gòu)稍好的精度/FLOPs權(quán)衡。然而,它們昂貴的內(nèi)存訪問導(dǎo)致它們的實際延遲明顯大于卷積網(wǎng)絡(luò)的延遲[32]。我們不使用滑動窗口,而是建議在連續(xù)層之間切換窗口,這樣可以在一般硬件中實現(xiàn)更高效的實現(xiàn)。
自注意/?transformer補(bǔ)充CNN????另一項工作是用自注意層或?transformer來增強(qiáng)標(biāo)準(zhǔn)的CNN架構(gòu)。自注意層可以補(bǔ)充主干網(wǎng)[64,6,68,22,71,54]或頭部網(wǎng)絡(luò)[31,26],通過提供編碼遠(yuǎn)程依賴或異構(gòu)交互的能力。最近,Transformer中的編解碼器設(shè)計已經(jīng)應(yīng)用于目標(biāo)檢測和實例分割任務(wù)[7,12,82,55]。我們的工作探索了transformer用于基本視覺特征的提取,是對這些工作的補(bǔ)充。
基于transformer的視覺主干????與我們的工作最相關(guān)的是視覺變壓器(ViT)[19]及其后續(xù)工作[60、69、14、27、63]。ViT的開創(chuàng)性工作是在不重疊的中等尺寸圖像塊上直接應(yīng)用一種變換器結(jié)構(gòu)進(jìn)行圖像分類。與卷積網(wǎng)絡(luò)相比,它在圖像分類上實現(xiàn)了令人印象深刻的速度-精度折衷。雖然ViT需要大規(guī)模的訓(xùn)練數(shù)據(jù)集(即JFT-300M)才能很好地執(zhí)行,但DeiT[60]引入了幾種訓(xùn)練策略,使ViT也能有效地使用較小的ImageNet-1K數(shù)據(jù)集。ViT在圖像分類方面的結(jié)果是令人鼓舞的,但由于其低分辨率的特征映射和復(fù)雜度隨圖像大小的二次增加,其結(jié)構(gòu)不適合作為密集視覺任務(wù)或輸入圖像分辨率較高時的通用骨干網(wǎng)絡(luò)。將ViT模型應(yīng)用于直接上采樣或反卷積的目標(biāo)檢測和語義分割等稠密視覺任務(wù)中的工作很少,但性能相對較低[2,78]。與我們的工作同時進(jìn)行的還有一些改進(jìn)ViT體系結(jié)構(gòu)[69,14,27],以獲得更好的圖像分類。根據(jù)經(jīng)驗,我們發(fā)現(xiàn)我們的Swin-Transformer架構(gòu)在這些圖像分類方法中實現(xiàn)了最佳的速度精度折衷,盡管我們的工作重點(diǎn)是通用性能,而不是專門針對分類。另一項并行工作[63,PVTv1]探索了一種類似的思路,即在變壓器上構(gòu)建多分辨率特征圖。它的復(fù)雜度仍然是圖像大小的二次方,而我們的算法是線性的,并且在局部操作,這在視覺信號的高相關(guān)性建模中被證明是有益的[35,24,40]。我們的方法既高效又有效,在COCO目標(biāo)檢測和ADE20K語義分割方面都達(dá)到了最先進(jìn)的精度。
3.方法
3.1. 總體架構(gòu)
圖3給出了Swin-Transformer體系結(jié)構(gòu)的概述,它演示了微型版本(tiny version,SwinT)。它首先通過像ViT一樣的分塊模塊將輸入的RGB圖像分成不重疊的圖塊。每個圖塊被視為一個token,其特征被設(shè)置為原始像素RGB值的拼接。在我們的實現(xiàn)中,我們使用的塊大小為4×4, 因此每個圖塊的特征維數(shù)為4×4×3=48。在該原始值特征上應(yīng)用線性嵌入層,將其投影到任意維(表示為)。

在這些patch tokens上計算自注意力修改版本的一些transformer塊(Swin Transformer blocks)。這些transformer塊不改變tokens的數(shù)量,與線性嵌入層一起,被稱為階段1。
為了產(chǎn)生一個層次化的表示,tokens的數(shù)量會隨著網(wǎng)絡(luò)漸深,在patch merging layer層中被減少。第一個patch merging layer拼接每組2×2個相鄰圖塊的特征,并在拼接得到的維的特征上應(yīng)用線性層。這將使tokens的數(shù)量減少2×2=4倍(分辨率2×下采樣),輸出維度設(shè)置為
。然后應(yīng)用Swin Transformer塊進(jìn)行特征變換,分辨率保持在
。patch merging和特征變換的第一個塊被稱為階段2。這個過程被重復(fù)2次,分別是階段3和階段4,輸出分辨率分辨是
和
。這些階段共同產(chǎn)生一個層次表示,具有與典型卷積網(wǎng)絡(luò)相同的特征圖分辨率,例如VGG[51]和ResNet[29]。因此,所提出的架構(gòu)可以方便地取代現(xiàn)有方法中的主干網(wǎng)來執(zhí)行各種視覺任務(wù)。
Swin Transformer block????Swin-Transformer是通過將Transformer塊中的標(biāo)準(zhǔn)多頭自注意(MSA)模塊替換為基于移位窗口的模塊(如第3.2節(jié)所述)構(gòu)建的,其他層保持不變。如圖3(b)所示,Swin Transformer block由一個基于移位窗口的MSA模塊組成,接著是兩層MLP,兩層MLP之間是GELU非線性。在每個MSA模塊和每個MLP之前應(yīng)用LayerNorm(LN)層,在每個模塊之后應(yīng)用殘差連接。
3.2. 基于移位窗口的自注意
標(biāo)準(zhǔn)Transformer體系結(jié)構(gòu)[61]及其對圖像分類的適應(yīng)[19]都進(jìn)行全局自注意力,其中計算了一個token和所有其他tokens之間的關(guān)系。全局計算導(dǎo)致相對于token數(shù)量的二次復(fù)雜度,這使得它不適用于許多需要大量token進(jìn)行密集預(yù)測或表示高分辨率圖像的視覺問題。
非重疊窗口中的自注意????為了高效地建模,我們建議在局部窗口內(nèi)計算自注意。窗口被布置成以不重疊的方式均勻地分割圖像。假設(shè)每個窗口包含M× M個patches,對于一張包含個patches的圖像,全局自注意力(MSA)與基于窗口的自注意力的計算復(fù)雜度為:
? ??
? ??
注釋3:在分析復(fù)雜度時,我們省略掉softmax的計算。
其中,前者是patches的二次方,后者當(dāng)
為固定時(默認(rèn)設(shè)置為7)是線性的。當(dāng)
很大時,全局自注意力計算通常是難以承受的,而基于窗口的自注意力是可擴(kuò)展的。
連續(xù)塊的移位窗口劃分
基于窗口的自我注意力模塊缺乏跨窗口的連接,這限制了它的建模能力。為了在保持非重疊窗口計算效率的同時引入跨窗口連接,我們提出了一種移位窗口劃分方法,該方法在連續(xù)的Swin Transformer blocks中交替使用兩種劃分配置。
如圖2所示,第一個模塊使用一個常規(guī)的窗口分區(qū)策略,從左上角的像素開始,8×8的特征映射被平均劃分為2×2窗口,每個窗口的尺寸是是4×4(M=4)。下一個模塊采用的窗口配置與前一層不同,其相比規(guī)則劃分窗口,將窗口移位個像素。(Then, the next module adopts a windowing configuration that is shifted from that of the preceding layer, by displacing the windows by (?M/2?,?M/2?)?pixels from the regularly partitioned windows.)
利用移位窗口劃分方法,連續(xù)的swn變換塊被計算為:

其中和
分別表示塊
的(S)W-MSA模塊和MLP模塊的輸出特征;W-MSA和SW-MSA分別表示使用規(guī)則和移位窗口劃分配置的基于窗口的多頭部自注意。
移位窗口分割方法引入了前一層中相鄰非重疊窗口之間的連接,在圖像分類、目標(biāo)檢測和語義分割方面都是有效的,如表4所示。
移位的高效批量計算????移位窗口分區(qū)的一個問題是,它將導(dǎo)致更多的窗口,從變?yōu)?img class="math-inline" src="https://math.jianshu.com/math?formula=(%E2%8C%88%5Cfrac%7Bh%7D%7BM%7D%20%20%E2%8C%89%2B1)%5Ctimes%20(%E2%8C%88%5Cfrac%7Bw%7D%7BM%7D%20%20%E2%8C%89%2B1)" alt="(?\frac{h}{M} ?+1)\times (?\frac{w}{M} ?+1)" mathimg="1">,并且一些窗口將小于
(注釋4:為了使窗口大小(M,M)可以被特征映射(h,w)整除,需要的話在特征映射上使用右邊和底部的padding)。一個簡單的解決方案是將較小的窗口填充到M×M大小,計算注意力時,將填充的值屏蔽掉。當(dāng)常規(guī)分區(qū)中的窗口數(shù)較少時,例如2× 2,用這種樸素解增加的計算量是相當(dāng)可觀的(2×2.→ 3×3,大2.25倍)。在這里,我們提出了一種更高效的批量計算方法,通過循環(huán)向左上方向移動,如圖4所示。在這個移動之后,一個批量窗口可能由幾個在特征圖中不相鄰的子窗口組成,因此,采用掩蔽機(jī)制將自注意計算限制在每個子窗口內(nèi)。通過循環(huán)移位,批量處理窗口的數(shù)量與常規(guī)窗口分區(qū)的數(shù)量相同,因此也是高效的。這種方法的低延遲如表5所示。

相對位置偏置????在計算自注意力時,我們遵循[48,1,31,32],在每個頭計算相似性時,包含一個相對位置偏置:
,????
其中是查詢、鍵、值項矩陣,其中
是查詢和鍵的維度,
是一個窗口內(nèi)的圖塊數(shù)。由于沿每個軸的相對位置位于范圍[?M+1;M?1]內(nèi),我們參數(shù)化一個較小尺寸的偏置矩陣
,
中的值取自
。
如表4所示,我們觀察到,相比不使用偏置項或使用絕對位置嵌入,使用該項可以帶來顯著改進(jìn)。如[19]所示,進(jìn)一步向輸入中添加絕對位置嵌入會略微降低性能,因此在我們的實現(xiàn)中沒有采用。
預(yù)訓(xùn)練中學(xué)習(xí)到的相對位置偏差也可用于初始化模型,當(dāng)在下游任務(wù)的窗口大小不同時,使用bi-cubic插值[19, 60]。
3.3. 體系結(jié)構(gòu)變體
我們建立了我們的基礎(chǔ)模型Swin-B,它的模型大小和計算復(fù)雜度與ViTB/DeiT-B相似。我們還介紹了Swin-T、Swin-S和Swin-L,它們的模型大小和計算復(fù)雜度大約是0.25×、0.5×和2×。
請注意,Swin-T和Swin-S的復(fù)雜度分別與ResNet-50(DeiT-S)和ResNet-101相似。默認(rèn)情況下,窗口大小設(shè)置為M=7。所有實驗中,每個頭部的查詢維度為d=32,每個MLP的擴(kuò)展層為α = 4。這些模型變體的體系結(jié)構(gòu)參數(shù)包括:
?????Swin-T:????C=96,層數(shù)={2,2,6,2}
?????Swin-S:????C=96,層數(shù)={2,2,18,2}
?????Swin-B:????C=128,層數(shù)={2,2,18,2}
?????Swin-L:????C=192,層數(shù)={2,2,18,2}
其中C是第一階段中隱藏層的通道數(shù)。模型大小、理論計算復(fù)雜度(FLOPs)和ImageNet圖像分類吞吐量如表1所示。
4.實驗
我們在ImageNet-1K圖像分類[18]、COCO目標(biāo)檢測[42]和ADE20K語義分割[80]上進(jìn)行了實驗。在下面,我們首先將所提出的Swin變壓器架構(gòu)與之前在這三項任務(wù)上的最新技術(shù)進(jìn)行比較。然后,分析了Swin變壓器的重要設(shè)計要素。
4.1. 基于ImageNet-1K的圖像分類
設(shè)置? ? 對于圖像分類,我們在ImageNet-1K[18]上對所提出的Swin變換器進(jìn)行了測試,其中包含1.28M個訓(xùn)練圖像和來自1000個類的50K個驗證圖像。報告了單個裁剪的最高精度。我們考慮兩種訓(xùn)練設(shè)置:
?????常規(guī)ImageNet-1K訓(xùn)練。此設(shè)置主要遵循[60](編者注:在arxiv不同版本中,引用索引號會發(fā)生變化,這里指的是DeiT)。我們使用了一個AdamW[36]優(yōu)化器,用于300個階段,使用余弦衰減學(xué)習(xí)率調(diào)度器和20個階段的線性預(yù)熱。批量大小為1024,初始學(xué)習(xí)率為0.001,權(quán)重衰減為0.05。我們將[60]中的大部分增強(qiáng)和正則化策略都包括在訓(xùn)練中,除了repeated augmentation [30]和EMA[44],它們不能提高性能。請注意,這與[60]相反,在[60]中,repeated augmentation 對于穩(wěn)定ViT訓(xùn)練至關(guān)重要。
?????ImageNet-22K預(yù)訓(xùn)練和ImageNet-1K微調(diào)。我們還對較大的ImageNet-22K數(shù)據(jù)集進(jìn)行了預(yù)訓(xùn)練,該數(shù)據(jù)集包含1420萬張圖像和22K個類。我們采用一個AdamW優(yōu)化器,使用線性衰減學(xué)習(xí)率調(diào)度器訓(xùn)練60個epoch,使用5個epoch的線性預(yù)熱。批量大小為4096,初始學(xué)習(xí)率為0.001,權(quán)重衰減為0.01。在ImageNet-1K微調(diào)中,我們訓(xùn)練了30個階段的模型,批大小為1024,恒定學(xué)習(xí)率為10e?5,重量衰減10e?8。
常規(guī)ImageNet-1K訓(xùn)練的結(jié)果????表1(a) 給出了與其它主干網(wǎng)絡(luò)的比較(包括基于Transformer和基于卷積網(wǎng)絡(luò)的),使用常規(guī)ImageNet-1K訓(xùn)練。
與之前最先進(jìn)的基于Transformer的架構(gòu)(即DeiT[60])相比,Swin Transformers明顯超過了具有類似復(fù)雜度的對應(yīng)DeiT架構(gòu):使用224×224輸入時,Swin-T(81.3%)比DeiT-S(79.8%)高出1.5%,使用224×224/384×384輸入時,Swin-B(83.3%/84.2%)比DeiT-B(81.8%/83.1%)分別高出1.5%/1%。
與最先進(jìn)的卷積網(wǎng)絡(luò)(即RegNet[47]和EfficientNet[57])相比,Swin Transformers實現(xiàn)了稍微好一點(diǎn)的速度精度折衷。注意到,雖然RegNet[47]和EfficientNet[57]是通過徹底的架構(gòu)搜索獲得的,所提出的Swin Transformer是從標(biāo)準(zhǔn)Transformer適配而來的,具有很強(qiáng)的進(jìn)一步改進(jìn)潛力。
ImageNet-22K預(yù)訓(xùn)練結(jié)果????我們還在ImageNet22K上預(yù)訓(xùn)練了更大容量的Swin-B和Swin-L。在ImageNet-1K圖像分類上微調(diào)的結(jié)果如表1(b)所示。對于Swin-B,ImageNet22K預(yù)訓(xùn)練相比在ImageNet-1K從頭訓(xùn)練,能帶來大約1.8%到1.9%的提升。與之前ImageNet-22K預(yù)訓(xùn)練的最佳結(jié)果相比,我們的模型實現(xiàn)了顯著更好的速度-精度折衷:Swin-B獲得86.0%的top-1精度,比ViT高2.0%,具有相似的推理吞吐量(84.7 vs.85.9圖像/秒)和略低的FLOPs(47.0G vs.55.4G)。更大的Swin-L模型達(dá)到86.4%的top-1精度,略好于Swin-B模型。


4.2. COCO的目標(biāo)檢測
設(shè)置對象檢測和實例分割實驗在COCO2017上進(jìn)行,包括118K訓(xùn)練、5K驗證和20K test-dev圖像。使用驗證集進(jìn)行消融研究,并在test-dev上報告系統(tǒng)級比較。對于消融研究,我們考慮了四種典型的目標(biāo)檢測框架:mmdetection [9]中的Cascade Mask R-CNN[28,5]、ATSS[76]、RepPoints v2[11]和Sparse RCNN[55]。對于這四個框架,我們使用了相同的設(shè)置:多尺度訓(xùn)練[7,55](調(diào)整輸入大小,使短邊在480到800之間,而長邊最多為1333),AdamW[43]優(yōu)化器(初始學(xué)習(xí)率為0.0001,權(quán)重衰減為0.05,批大小為16),以及3倍計劃(36個周期)。對于系統(tǒng)級比較,我們采用改進(jìn)的HTC[8](表示為HTC++),使用instaboost[21],更強(qiáng)的多尺度訓(xùn)練[6],6×調(diào)度也即72個epoch,軟NMS[4],以及ImageNet-22K預(yù)訓(xùn)練模型作為初始化。
我們將我們的Swin變壓器與標(biāo)準(zhǔn)卷積網(wǎng)絡(luò)(也即ResNe(X)t)和之前的Transformer網(wǎng)絡(luò)(DeiT)進(jìn)行比較。比較是通過在其他設(shè)置不變的情況下僅更改主干來進(jìn)行的。請注意,盡管Swin-Transformer和ResNe(X)t由于其層次化特征映射而直接適用于上述所有框架,但DeiT只產(chǎn)生單一分辨率的特征映射,不能直接應(yīng)用。為了公平比較,我們按照[78]的方法,使用反卷積層構(gòu)造DeiT的層次特征映射。
與ResNe(X)t的比較????表2(a)列出了Swin-T和ResNet-50在四種目標(biāo)檢測框架上的結(jié)果。我們的Swin-T架構(gòu)相比ResNet-50帶來了一致的提升,+3.4~4.2box-AP,模型大小、FLOPs和延遲也略微大些。
表2(b)使用Cascade Mask R-CNN比較了不同模型容量下的Swin Transformer和ResNe(X)t。Swin-Transformer實現(xiàn)了51.9box-AP和45.0mask-AP的高檢測精度,與ResNeXt101-64x4d相比,有+3.6box-AP和+3.3mask-AP的顯著增益,模型大小、FLOPs和延遲相似。在使用改進(jìn)的HTC框架的52.3 box AP和46.0 mask AP的更高基線上,Swin Transformer的增益也較高,分別為+4.1 boxAP和+3.1 mask AP(見表2(c))。關(guān)于推理速度,雖然ResNe(X)t是由高度優(yōu)化的Cudnn函數(shù)構(gòu)建的,而我們的體系結(jié)構(gòu)是由內(nèi)置的PyTorch函數(shù)實現(xiàn)的,這些函數(shù)并沒有得到很好的優(yōu)化。徹底的核優(yōu)化超出了本文的范圍。
與DeiT比較????使用Cascade Mask R-CNN框架的DeiT-S的性能如表2(b)所示。Swin-T的結(jié)果是+2.5box-AP和+2.3mask-AP,高于DeiT-S,模型尺寸相似(86M對80M),推理速度顯著提高(15.3fps對10.4fps)。DeiT的推理速度較低的主要原因是其對輸入圖像大小的二次復(fù)雜度。
與以前最先進(jìn)技術(shù)的比較????表2(c)將我們的最佳結(jié)果與以前最先進(jìn)的模型進(jìn)行了比較。我們的最佳模型在COCO test dev上實現(xiàn)了58.7 box AP和51.1 mask AP,超過了之前的最佳結(jié)果+2.7 box AP(Copy-paste[25],無外部數(shù)據(jù))和+2.6 mask AP(DetectoRS[45])。


4.3. 基于ADE20K的語義分割
設(shè)置? ? ADE20K[80]是一個應(yīng)用廣泛的語義切分?jǐn)?shù)據(jù)集,涵蓋了150個語義類別。它總共有25K個圖像,其中20K用于訓(xùn)練,2K用于驗證,另外3K用于測試。我們利用mmseg[15]中的UperNet[66]作為我們的基礎(chǔ)框架,因為它很高效。更多細(xì)節(jié)見附錄。
結(jié)果? ? 表3列出了不同方法/主干對的mIoU、模型大?。?param)、FLOPs和FPS。從這些結(jié)果可以看出,在計算量相似的情況下,Swin-S比DeiT-S高出5.3 mIoU(49.3比44.0)。它也比ResNet-101高出+4.4 mIoU比ResNeSt-101高出+2.4 mIoU[75]。我們的帶有ImageNet-22K預(yù)訓(xùn)練的Swin-L模型在val集上實現(xiàn)了53.5 mIoU,超過了之前的最佳模型+3.2 mIoU(SETR[78]提供了50.3 mIoU,其模型更大)。

4.4. 燒蝕研究
在本節(jié)中,我們使用ImageNet-1K圖像分類、COCO目標(biāo)檢測的Cascade Mask R-CNN和ADE20K語義分割的UperNet來燒蝕所提出的Swin Transformer中的重要設(shè)計元素。
移位窗口????移位窗口的消融在這三項任務(wù)中如表4所示。在每個階段移位窗口劃分的Swin-T的性能都優(yōu)于基于單個窗口劃分的Swin-T,在ImageNet-1K上的精度為+1.1%,在COCO上的精度為+2.8 boxAP/+2.2 maskAP,在ADE20K上的精度為+2.8 mIoU。結(jié)果表明,使用移動窗口在前一層窗口之間建立連接是有效的。移位窗口的延遲開銷也很小,如表5所示。
相對位置偏置????表4顯示了不同位置嵌入方法的比較。相對位置偏差的Swin-T在ImageNet-1K上的準(zhǔn)確率為+1.2%/+0.8%,在COCO上的準(zhǔn)確率為+1.3/+1.5,在mask上的準(zhǔn)確率為+1.1/+1.3,在ADE20K上的準(zhǔn)確率為+2.3/+2.9miou,這表明相對位置偏差的有效性。另外請注意,雖然包含絕對位置嵌入提高了圖像分類精度(+0.4%),但它損害了目標(biāo)檢測和語義分割(COCO上為-0.2 box/mask AP,ADE20K上為-0.6 mIoU)。
雖然最近的ViT/DeiT模型放棄了圖像分類中的平移不變性,盡管它長期以來被證明對視覺建模至關(guān)重要,但我們發(fā)現(xiàn),鼓勵某些平移不變性的歸納偏置對于通用視覺建模仍然是可取的,特別是對于密集預(yù)測任務(wù)的目標(biāo)檢測和語義分割。

不同的自注意方法????表5比較了不同的自注意計算方法和實現(xiàn)的實際速度。我們的循環(huán)實現(xiàn)比單純填充(naive padding)更具硬件效率,特別是對于更深層的階段??偟膩碚f,它對Swin-T,Swin-S和Swin-B分別帶來了13%,18%和18%的加速。
在網(wǎng)絡(luò)的4個階段,使用我們提出的基于移位窗口的自注意力,要比那些基于滑動窗口的naive/kernel implementations,要分別更高效40.8×/2.5×, 20.2×/2.5×,? 9.3×/2.1×, 和7.6×/1.8×??偟膩碚f,構(gòu)建在移動窗口上的Swin-Transformer架構(gòu)分別比構(gòu)建在滑動窗口上的Swin-T、Swin-S和Swin-B快4.1/1.5、4.0/1.5和3.6/1.5倍。表6比較了他們在這三項任務(wù)上的準(zhǔn)確度,表明他們在視覺建模上的準(zhǔn)確度相似。
與Performer[13]相比,Performer[13]是速度最快的Transformer體系結(jié)構(gòu)之一(見[59]),基于移位窗口的自注意計算和整體Swin-Transformer體系結(jié)構(gòu)稍快(見表5),同時與使用Swin-T的ImageNet-1K上的Performer相比,實現(xiàn)了+2.3%的top-1精度(見表6)。

5.結(jié)論
本文提出了一種新的視覺變換器Swin-Transformer,它產(chǎn)生了一種層次化的特征表示,其計算復(fù)雜度與輸入圖像的大小成線性關(guān)系。Swin-Transformer在COCO目標(biāo)檢測和ADE20K語義分割方面達(dá)到了最先進(jìn)的性能,大大超過了以前最好的方法。我們希望Swin-Transformer在各種視覺問題上的強(qiáng)大性能將促進(jìn)視覺和語言信號的統(tǒng)一建模。
作為Swin-Transformer的一個關(guān)鍵元素,基于移位窗口的自注意被證明是解決視覺問題的有效方法,我們也期待著研究它在自然語言處理中的應(yīng)用。
A1????詳細(xì)的體系結(jié)構(gòu)
詳細(xì)的架構(gòu)規(guī)范如表7所示,其中所有架構(gòu)的輸入圖像大小都假定為224×224。”Concat n×n”表示在1個patch中n×n個相鄰特征的拼接。此操作導(dǎo)致特征圖下采樣n倍。96-d表示輸出為96維的線性層。win.sz.7×7表示窗口大小為7×7的多頭自注意力。

A2????詳細(xì)的實驗設(shè)置
A2.1????基于ImageNet-1K的圖像分類
在最后一階段的輸出特征圖上應(yīng)用全局平均池化層,然后使用線性分類器進(jìn)行圖像分類。我們發(fā)現(xiàn)這種策略與使用ViT[19]和DeiT[60]中的額外類標(biāo)記(class token )一樣精確。在評估中,報告了使用單個裁剪的top-1精度。
常規(guī)ImageNet-1K培訓(xùn)????培訓(xùn)設(shè)置主要遵循[60]。對于所有型號的變體,我們采用默認(rèn)的輸入圖像分辨率224×224。對于384×384這樣的其他分辨率,我們對在224×224下訓(xùn)練的模型進(jìn)行微調(diào),而不是從頭開始訓(xùn)練,以減少GPU的消耗。
當(dāng)使用224×224輸入從頭開始訓(xùn)練時,我們使用一個AdamW[36]優(yōu)化器,用于300個epoch,使用一個具有20個線性預(yù)熱歷元的余弦衰減學(xué)習(xí)率調(diào)度器。批大小為1024,初始學(xué)習(xí)率為0.001,權(quán)重衰減為0.05,使用最大范數(shù)為1的梯度剪裁。我們在訓(xùn)練中包括了[60]中的大部分增強(qiáng)和正則化策略,包括RandAugment[16]、Mixup[74]、Cutmix[72]、隨機(jī)擦除[79]和隨機(jī)深度[34],但沒有重復(fù)增強(qiáng)[30]和指數(shù)移動平均(EMA)[44],它們不能提高性能。請注意,這與[60]相反,在[60]中,反復(fù)增強(qiáng)對于穩(wěn)定ViT訓(xùn)練至關(guān)重要。對于更大的模型,隨機(jī)深度增加的程度越來越大,即Swin-T、Swin-S和Swin-B分別為0.2、0.3和0.5。
為了以更高的分辨率對輸入進(jìn)行微調(diào),我們采用了一個adamW[36]優(yōu)化器,用于30個周期,恒定的學(xué)習(xí)率為10?5,重量衰減10?8,除將隨機(jī)深度比設(shè)置為0.1外,數(shù)據(jù)增強(qiáng)和正則化與第一階段相同。
ImageNet-22K預(yù)訓(xùn)練? ? ????我們還對較大的ImageNet-22K數(shù)據(jù)集進(jìn)行了預(yù)訓(xùn)練,該數(shù)據(jù)集包含1420萬張圖像和22K個類。訓(xùn)練分兩個階段進(jìn)行。對于輸入為224×224的第一階段,我們使用一個線性衰減學(xué)習(xí)率調(diào)度器和一個5歷元線性預(yù)熱,使用一個60歷元的AdamW優(yōu)化器。批量大小為4096,初始學(xué)習(xí)率為0.001,權(quán)重衰減為0.01。在ImageNet-1K精調(diào)的第二階段,輸入224×224/384×384,我們訓(xùn)練了30個時期的模型,批量大小為1024,恒定學(xué)習(xí)率為10?5,重量衰減10?8。
A2.2????COCO的目標(biāo)檢測
對于消融研究,我們考慮四個典型的對象檢測框架:Cascade Mask R-CNN〔28, 5〕、ATSS〔76〕、RepPoints v2〔11〕和Sparse RCNN〔55〕。對于這四個框架,我們使用相同的設(shè)置:多尺度訓(xùn)練[7,55](調(diào)整輸入大小,使短邊在480到800之間,而長邊最多為1333),AdamW[43]優(yōu)化器(初始學(xué)習(xí)率為0.0001,權(quán)重衰減為0.05,批大小為16),3倍的時間表(36個時期,學(xué)習(xí)率下降10%× 在第27和33時代)。
對于系統(tǒng)級比較,我們采用改進(jìn)的HTC[8](表示為HTC++)和instaboost[21],更強(qiáng)的多尺度訓(xùn)練[6](調(diào)整輸入大小,使短邊在400到1400之間,而長邊最多為1600),6x時間表(72個時段,學(xué)習(xí)率在63和69個時段衰減系數(shù)為0.1),SoftNMS[4],并在最后階段的輸出中附加一個額外的全局自關(guān)注層,ImageNet-22K預(yù)訓(xùn)練模型作為初始化。所有Swin變壓器模型均采用0.2的隨機(jī)深度比。
A2.3????基于ADE20K的語義分割
ADE20K[80]是一個應(yīng)用廣泛的語義切分?jǐn)?shù)據(jù)集,涵蓋了150個語義類別。它總共有25K個圖像,其中20K用于訓(xùn)練,2K用于驗證,另外3K用于測試。我們利用mmsegmentation[15]中的UperNet[66]作為其高效性的基礎(chǔ)框架。
在培訓(xùn)中,我們采用了AdamW[43]優(yōu)化器,初始學(xué)習(xí)率為6× 10e?5,權(quán)重衰減為0.01,調(diào)度器使用線性學(xué)習(xí)率衰減,線性預(yù)熱為1500次迭代。模型在8個GPU上訓(xùn)練,每個GPU 2個圖像,迭代160K次。對于增強(qiáng),我們采用mmsegmentation中的默認(rèn)設(shè)置:隨機(jī)水平翻轉(zhuǎn)、比率范圍[0.5,2.0]內(nèi)的隨機(jī)重縮放和隨機(jī)光度失真。所有Swin變壓器模型均采用了比值為0.2的隨機(jī)深度。Swin-T、Swin-S與前面的方法一樣接受標(biāo)準(zhǔn)設(shè)置方面的訓(xùn)練,輸入值為512×512.帶?的Swin-B和Swin-L表示這兩個模型是在ImageNet-22K上預(yù)先訓(xùn)練的,輸入640×640。
在推理中,使用分辨率為[0.5,0.75,1.0,1.25,1.5,1.75]×?的多尺度測試,這個縮放比例的一部分是在訓(xùn)練中被使用的。在報告測試分?jǐn)?shù)時,訓(xùn)練圖像和驗證圖像都用于訓(xùn)練,遵循常規(guī)做法[68]。
A3????更多的實驗
A3.1????不同輸入大小的圖像分類
表8列出了在224×224到384×384之間具有不同輸入圖像大小的Swin變壓器的性能。一般來說,輸入分辨率越大,top-1的精度越好,但推理速度越慢。

A3.2????COCO上ResNe(X)t的不同優(yōu)化器
表9比較了ResNe(X)t主干網(wǎng)的AdamW和SGD優(yōu)化器對COCO目標(biāo)檢測的影響。比較中使用了Cascade Mask R-CNN框架。雖然SGD被用作級Cascade Mask R-CNN框架的默認(rèn)優(yōu)化器,但我們通常通過用AdamW優(yōu)化器替換它來提高精度,特別是對于較小的主干網(wǎng)。因此,我們將AdamW用于ResNe(X)t主干網(wǎng),與所提出的Swin變壓器結(jié)構(gòu)進(jìn)行比較。

移植踩坑記:
torch.roll在onnx中是找不到的,到底是支持還是不支持:https://hub.fastgit.org/onnx/onnx/blob/master/docs/Operators.md
在PyTorch的issue中查找:https://github.com/pytorch/pytorch/issues?q=is%3Aissue+is%3Aopen+onnx+roll+

其中,這個,說支持:https://github.com/pytorch/pytorch/issues/56355

https://github.com/pytorch/pytorch/blob/d39790340db916e128b2b637cd12f4616fddb87d/torch/onnx/symbolic_opset9.py#L3261
