使用動圖深入解釋微軟的Swin Transformer
來源:DeepHub IMBA
作者:James Loy
Swin Transformer(Liu et al。,2021)是一個(gè)基于Transformer的深度學(xué)習(xí)模型,在視覺任務(wù)中取得了最先進(jìn)的性能。與VIT不同Swin Transformer更加高效并且有更高的精度。由于Swin Transformer的一些特性,現(xiàn)在許多視覺的模型體系結(jié)構(gòu)中,Swin Transformers還是被用作模型的骨干。本文旨在使用插圖和動畫為Swin Transformers提供全面的指南,以幫助您更好地理解這些概念。
Swin Transformer 一個(gè)改進(jìn)的VIT
近年來,Transformer(Vaswani ,2017)在自然語言處理(NLP)任務(wù)中占據(jù)了深度學(xué)習(xí)體系結(jié)構(gòu)。Transformer在NLP中的巨大成功激發(fā)了研究它用于其他任務(wù)的研究。
2020年,將純粹的Transformer體系結(jié)構(gòu)應(yīng)用視覺任務(wù)的Vision Transformer(VIT)引起了AI社區(qū)的廣泛關(guān)注。盡管有希望,但VIT并不完美,還是包含了幾個(gè)缺點(diǎn)。這里面最嚴(yán)重的一個(gè)就是VIT和高分辨率圖像的兼容性,因?yàn)槠溆?jì)算會產(chǎn)生與圖像大小相關(guān)的二次復(fù)雜度。
VIT的一系列研究工作大多數(shù)是對標(biāo)準(zhǔn)Transformer體系結(jié)構(gòu)進(jìn)行了增強(qiáng)。2021年微軟研究人員發(fā)表了Swin Transformer(Liu,2021),這可以說是原始VIT后最令人興奮的研究之一。
Swin架構(gòu)和關(guān)鍵概念
Swin Transformer引入了兩個(gè)關(guān)鍵概念來解決原始ViT面臨的問題——層次化特征映射和窗口注意力轉(zhuǎn)換。事實(shí)上,Swin Transformer的名字來自于“Shifted window Transformer”。Swin Transformer的總體架構(gòu)如下所示。

Swin Transformer總體架,' patch partition '被用作第一個(gè)塊。為了簡單起見,我使用“patch merging’”作為圖中的第一個(gè)塊,因?yàn)樗鼈兊牟僮黝愃啤?/span>
正如我們所看到的,“patch merging”塊和“Swin Transformer塊”是Swin Transformer中的兩個(gè)關(guān)鍵構(gòu)建塊。在下一節(jié)中,我們將詳細(xì)介紹這兩個(gè)塊。
分層特征圖
VIT的第一個(gè)重大區(qū)別是是Swin Transformer構(gòu)建“分層特征圖”。讓我們將其分為兩個(gè)部分
首先,“特征圖”只是從每個(gè)連續(xù)層生成的中間張量。至于“分層”,在這里指的是特征映射從一層到另一層合并(下一節(jié)詳細(xì)介紹),有效地降低了從一層到另一層的特征映射的空間維數(shù)(即向下采樣)。

Swin Transformer中的分層特征映射。特征映射在每一層之后逐步合并和下采樣,創(chuàng)建具有層次結(jié)構(gòu)的特征映射。本圖為了簡單起見,省略了特性映射的深度。
可能會注意到,這些分層特征映射的空間分辨率與ResNet中的相同。因?yàn)檫@樣做是有意的,這樣Swin Transformer就可以方便地在現(xiàn)有的視覺任務(wù)方法中替換ResNet骨干網(wǎng)絡(luò)。
更重要的是,這些分層的特性映射允許Swin Transformer應(yīng)用于需要細(xì)粒度預(yù)測的領(lǐng)域,例如語義分割。而ViT在整個(gè)架構(gòu)中使用單一的、低分辨率的特性圖并不適應(yīng)這類的任務(wù)。
Patch Merging
在前一節(jié)中,我們已經(jīng)看到了如何通過逐步合并和降低特征圖的空間分辨率來構(gòu)建分層特征圖。在ResNet等卷積神經(jīng)網(wǎng)絡(luò)中,特征映射的下采樣是通過卷積操作完成的。那么在不使用卷積的情況下,我們?nèi)绾螌僒ransformer網(wǎng)絡(luò)中的特征映射進(jìn)行下采樣呢?
Swin Transformer中使用的無卷積下采樣技術(shù)被稱為Patch Merging。在這種情況下,“Patch ”指的是特征圖中的最小單位。換句話說,在一個(gè)14x14的feature map中,有14x14=196個(gè)Patch 。
為了對特征映射下采樣n倍,patch merge將每一組n × n個(gè)相鄰patch的特征連接起來。通過語言描述可能很難理解,所以我創(chuàng)建了一個(gè)動畫來更好地說明這一點(diǎn)。

patch merge操作通過對nxn patch進(jìn)行分組并按深度拼接,對輸入的數(shù)據(jù)進(jìn)行n倍的采樣。
正如我們從上面的動畫中看到的,補(bǔ)丁合并將每個(gè)nxn個(gè)相鄰的patch分組,并將它們深度級聯(lián)。這有效地對輸入進(jìn)行n倍的下采樣,將輸入從H x W x C的形狀轉(zhuǎn)換為(H/n) x (W/n) x (2nC),其中H、W和C分別表示高度、寬度和通道深度。
Swin transformer塊
Swin transformer中使用的塊用Window MSA (W-MSA)和shift Window MSA (SW-MSA)模塊取代了ViT中使用的標(biāo)準(zhǔn)多頭自注意力(MSA)模塊。Swin Transformer模塊如下圖所示。

Swin transformer塊有兩個(gè)子單元。第一個(gè)單元使用W-MSA,第二個(gè)單元使用SW-MSA。每個(gè)子單元由一個(gè)規(guī)一化層、一個(gè)注意力模塊、另一個(gè)規(guī)范化層和一個(gè)MLP層組成。第一個(gè)子單元使用Window MSA (W-MSA)模塊,而第二個(gè)子單元使用移位Window MSA (SW-MSA)模塊。
窗口級別的自注意力
ViT中使用的標(biāo)準(zhǔn)MSA執(zhí)行全局自注意力,每個(gè)Patch之間的關(guān)系是根據(jù)所有其他Patch計(jì)算的。這會產(chǎn)生與Patch數(shù)量相關(guān)的二次復(fù)雜度,使它不適合高分辨率的圖像。

ViT中使用的標(biāo)準(zhǔn)MSA計(jì)算
為了解決這個(gè)問題,Swin Transformer使用了基于窗口的MSA方法。窗口只是Patch的集合,注意力只在每個(gè)窗口內(nèi)計(jì)算。例如下圖使用的窗口大小為2 × 2 patch,基于窗口的MSA只計(jì)算每個(gè)窗口內(nèi)的注意力。

Swin Transformer中使用的窗口MSA只在每個(gè)窗口內(nèi)計(jì)算注意力。
由于窗口大小在整個(gè)網(wǎng)絡(luò)中是固定的,因此基于窗口的MSA的復(fù)雜度相對于patch的數(shù)量(即圖像的大小)是線性的,相對于標(biāo)準(zhǔn)MSA的二次復(fù)雜度有了很大的提高。
移動窗口Self-Attention
基于窗口的MSA的一個(gè)明顯缺點(diǎn)是,將注意力限制在每個(gè)窗口,限制了網(wǎng)絡(luò)的建模能力。為了解決這個(gè)問題,Swin Transformer在W-MSA模塊之后使用了移位窗口MSA (SW-MSA)模塊。

為了引入跨窗口連接,移位窗口MSA將窗口向右下角移動M/2,其中M是窗口大小(上面動畫中的第1步)。
這種轉(zhuǎn)變會導(dǎo)致不屬于任何窗口的“孤立”patch,以及patch不完整的窗口。Swin Transformer應(yīng)用了“循環(huán)移位”技術(shù)(上面動畫中的第2步),它將“孤立的”patch移動到帶有不完整patch的窗口中。在這次移位之后,一個(gè)窗口可能會由原始feature map中不相鄰的patch組成,因此在計(jì)算過程中應(yīng)用了一個(gè)mask,將自注意力限制在相鄰的patch上。
這種移動窗口的方法引入了重要的窗口之間的交叉連接,可以提高網(wǎng)絡(luò)的性能。

總結(jié)
Swin Transformer可能是繼最初的Vision Transformer之后最令人興奮的一項(xiàng)研究。Swin Transformer使用分層特征映射和移位窗口MSA解決了困擾原始ViT的問題。Swin Transformer在包括圖像分類和目標(biāo)檢測在內(nèi)的廣泛視覺任務(wù)中通常被用作骨干架構(gòu)。
——The End——
分享
收藏
點(diǎn)贊
在看


