站在CNN肩膀上的巨大騰飛,Swin Transformer:實現(xiàn)對各類SOTA的降維打擊

極市導(dǎo)讀
本文介紹了一種稱為Swin Transformer的新型transformer,通過引入CNN中常用的層次化構(gòu)建方式構(gòu)建層次化Transformer以及引入locality思想解決transformer遷移至CV上的scale和分辨率的問題。該方法屠榜各大CV任務(wù),代碼已公布。 >>加入極市CV技術(shù)交流群,走在計算機(jī)視覺的最前沿
最近Transformer的文章眼花繚亂,但是精度和速度相較于CNN而言還是差點意思,直到Swin Transformer的出現(xiàn),讓人感覺到了一絲絲激動,Swin Transformer可能是CNN的完美替代方案。
作者分析表明,Transformer從NLP遷移到CV上沒有大放異彩主要有兩點原因:1. 兩個領(lǐng)域涉及的scale不同,NLP的scale是標(biāo)準(zhǔn)固定的,而CV的scale變化范圍非常大。2. CV比起NLP需要更大的分辨率,而且CV中使用Transformer的計算復(fù)雜度是圖像尺度的平方,這會導(dǎo)致計算量過于龐大。為了解決這兩個問題,Swin Transformer相比之前的ViT做了兩個改進(jìn):1.引入CNN中常用的層次化構(gòu)建方式構(gòu)建層次化Transformer 2.引入locality思想,對無重合的window區(qū)域內(nèi)進(jìn)行self-attention計算。

相比于ViT,Swin Transfomer計算復(fù)雜度大幅度降低,具有輸入圖像大小線性計算復(fù)雜度。Swin Transformer隨著深度加深,逐漸合并圖像塊來構(gòu)建層次化Transformer,可以作為通用的視覺骨干網(wǎng)絡(luò),應(yīng)用于圖像分類、目標(biāo)檢測和語義分割等任務(wù)。
Swin Transformer

整個Swin Transformer架構(gòu),和CNN架構(gòu)非常相似,構(gòu)建了4個stage,每個stage中都是類似的重復(fù)單元。和ViT類似,通過patch partition將輸入圖片HxWx3劃分為不重合的patch集合,其中每個patch尺寸為4x4,那么每個patch的特征維度為4x4x3=48,patch塊的數(shù)量為H/4 x W/4;stage1部分,先通過一個linear embedding將輸劃分后的patch特征維度變成C,然后送入Swin Transformer Block;stage2-stage4操作相同,先通過一個patch merging,將輸入按照2x2的相鄰patches合并,這樣子patch塊的數(shù)量就變成了H/8 x W/8,特征維度就變成了4C,這個地方文章寫的不清楚,猜測是跟stage1一樣使用linear embedding將4C壓縮成2C,然后送入Swin Transformer Block。
另外有一個細(xì)節(jié),Swin Transformer和ViT劃分patch的方式略有不同,ViT是先確定patch的數(shù)量,然后計算確定每個patch的尺寸,而Swin Transformer是先確定每個patch的大小,然后計算確定patch數(shù)量。這個設(shè)計猜測是為了方便Swin Transformer的層級構(gòu)建。

上圖是兩個連續(xù)的Swin Transformer Block。一個Swin Transformer Block由一個帶兩層MLP的shifted window based MSA組成。在每個MSA模塊和每個MLP之前使用LayerNorm(LN)層,并在每個MSA和MLP之后使用殘差連接。
Shifted Window based MSA

上圖中紅色區(qū)域是window,灰色區(qū)域是patch。W-MSA將輸入圖片劃分成不重合的windows,然后在不同的window內(nèi)進(jìn)行self-attention計算。假設(shè)一個圖片有hxw的patches,每個window包含MxM個patches,那么MSA和W-MSA的計算復(fù)雜度分別為:
由于window的patch數(shù)量遠(yuǎn)小于圖片patch數(shù)量,W-MSA的計算復(fù)雜度和圖像尺寸呈線性關(guān)系。
另外W-MSA雖然降低了計算復(fù)雜度,但是不重合的window之間缺乏信息交流,于是作者進(jìn)一步引入shifted window partition來解決不同window的信息交流問題,在兩個連續(xù)的Swin Transformer Block中交替使用W-MSA和SW-MSA。以上圖為例,將前一層Swin Transformer Block的8x8尺寸feature map劃分成2x2個patch,每個patch尺寸為4x4,然后將下一層Swin Transformer Block的window位置進(jìn)行移動,得到3x3個不重合的patch。移動window的劃分方式使上一層相鄰的不重合window之間引入連接,大大的增加了感受野。

但是shifted window劃分方式還引入了另外一個問題,就是會產(chǎn)生更多的windows,并且其中一部分window小于普通的window,比如2x2個patch -> 3x3個patch,windows數(shù)量增加了一倍多。于是作者提出了通過沿著左上方向cyclic shift的方式來解決這個問題,移動后,一個batched window由幾個特征不相鄰的sub-windows組成,因此使用masking mechanism來限制self-attention在sub-window內(nèi)進(jìn)行計算。cyclic shift之后,batched window和regular window數(shù)量保持一致,極大提高了Swin Transformer的計算效率。這一部分比較抽象復(fù)雜,不好理解,等代碼開源了再補(bǔ)上。
實驗結(jié)果
放一些實驗結(jié)果,感受一下Swin Transformer對之前SOTA的降維打擊。

圖像分類碾壓

目標(biāo)檢測碾壓

語義分割碾壓
目標(biāo)檢測在COCO上刷到58.7 AP(目前第一)
實例分割在COCO上刷到51.1 Mask AP(目前第一)
語義分割在ADE20K上刷到53.5 mIoU(目前第一)
paper: Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
https://arxiv.org/abs/2103.14030
code: https://github.com/microsoft/Swin-Transformer
一作解讀: 如何看待Transformer在CV上的應(yīng)用前景,未來有可能替代CNN嗎?
https://www.zhihu.com/question/437495132/answer/1800881612
總結(jié)
陀飛輪:網(wǎng)絡(luò)架構(gòu)設(shè)計:CNN based和Transformer based
https://zhuanlan.zhihu.com/p/348403926
上一篇文章討論了一下網(wǎng)絡(luò)架構(gòu)設(shè)計是以CNN為主好還是Transformer為主好的問題,Swin Transformer給出了答案。Swin Transformer 吸收了CNN的locality、translation invariance和hierarchical等優(yōu)點,形成了對CNN的降維打擊。
Swin Transformer改進(jìn)思路還是源于CNN,Transformer站在巨人的肩膀上又迎來了一次巨大的飛躍,未來Transformer會接過CNN手中的接力棒,把locality、translation invariance和hierarchical等思想繼續(xù)發(fā)揚光大。
推薦閱讀
2021-03-23
2021-03-15
2021-03-11

# CV技術(shù)社群邀請函 #
備注:姓名-學(xué)校/公司-研究方向-城市(如:小極-北大-目標(biāo)檢測-深圳)
即可申請加入極市目標(biāo)檢測/圖像分割/工業(yè)檢測/人臉/醫(yī)學(xué)影像/3D/SLAM/自動駕駛/超分辨率/姿態(tài)估計/ReID/GAN/圖像增強(qiáng)/OCR/視頻理解等技術(shù)交流群
每月大咖直播分享、真實項目需求對接、求職內(nèi)推、算法競賽、干貨資訊匯總、與 10000+來自港科大、北大、清華、中科院、CMU、騰訊、百度等名校名企視覺開發(fā)者互動交流~

