重磅開源!屠榜各大CV任務(wù)的微軟Swin Transformer有多強(qiáng)?
Swin Transformer 可以理解為一個(gè)通用的視覺骨干網(wǎng)絡(luò),Swin Transformer 設(shè)計(jì)出了一種分層表示形式,首先由小的 PATCHES 開始,而后逐漸將相鄰的各 Patches 融合至一個(gè)更深的 Transformer 層當(dāng)中。通過這種分層結(jié)構(gòu),Swin Transformer 模型能夠使用 FPN 及 UNET 等高密度預(yù)測器實(shí)現(xiàn)技術(shù)升級(jí),通過限制非重疊窗口中的部分計(jì)算量降低計(jì)算強(qiáng)度。各窗口中的 PATCHES 數(shù)量是固定的,因此隨著圖像尺寸的增加,復(fù)雜性也將不斷增長。相比于 ViT,Swin Transfomer 計(jì)算復(fù)雜度大幅度降低,隨著輸入圖像大小線性計(jì)算復(fù)雜度。
Swin Transformer 的核心設(shè)計(jì)是將 Self-Attention 層劃分為 SHIFT,SHIFTED Window 接入上一層窗口,二者之間保持連接,由此顯著增強(qiáng)建模能力。這種策略還有助于有效降低延遲:所有 Query Patches 窗口共享同一 KEY 集,由此節(jié)約硬件內(nèi)存;以往的 Transformer 方法由于使用不同的 Query 像素,因此在實(shí)際硬件中往往具有較高延遲;論文實(shí)驗(yàn)證明,SHIFTED Window 方法帶來的延遲較傳統(tǒng)滑動(dòng)方法更低,且二者的建模能力基本相同。
基于此,Swin Transformer 在各類回歸任務(wù)、圖像分類、目標(biāo)檢測、語義分割等方面具有極強(qiáng)性能,其性能優(yōu)于 VIT/DEIT 與 RESNE (X) T。

GitHub 地址:https://github.com/microsoft/Swin-Transformer
原作者團(tuán)隊(duì)曹越在知乎上的回答:https://www.zhihu.com/question/437495132/answer/1800881612
論文地址:https://arxiv.org/pdf/2103.14030.pdf
Swin Transformer 的架構(gòu)如下圖所示。首先,它與 VIT 一樣將輸入的圖片劃分為多個(gè) Patches,作者使用 4 x 4 的 patch 大小;之后是嵌入層,最后則是作者設(shè)計(jì)的 Swin Transformer BLOCK。

Swin Transformer Block:此模塊是 Transformer 中使用 Shifted Window 的多 ATTENTION 模塊,具有一致性;Swin Transformer 模塊中包含一個(gè) MSA(多頭 Attention)模塊 SHIFTED WINDOW,之后是 2 層 MLP,接著將 Layernorm 層添加至各 MSA 模塊與各 MLP 層內(nèi),而后是剩余連接。

標(biāo)準(zhǔn) Transformer 使用全局 self-attention 以創(chuàng)建各令牌之間的關(guān)系,但這會(huì)令圖像大小增加 2 倍、導(dǎo)致復(fù)雜性隨之提升,因此不適用于處理高強(qiáng)度任務(wù)。為了提升建模效率,作者提出由“部分窗口計(jì)算 Self-Attention”,即假設(shè)各個(gè)窗口均包含 MXM Patches、全局 MSA 模塊與基于窗口的 MSA 模塊,并在 HXW Patches 的圖像之上進(jìn)行復(fù)雜度計(jì)算:

(1)的復(fù)雜度為 PATCH 數(shù)量 HW 的次生增長;(2)則為線性增長,其中 m 為固定值,但全局 self-attention 為大 HW,因此基于窗口的 Self-Attention 計(jì)算量不會(huì)很高。
基于 Windows 的 Self-Attention 雖然擁有線性增長的復(fù)雜度,但其缺少在各窗口之間的連接,因此限制了模型的建模能力。
為了在容器上引入連接以實(shí)現(xiàn)模型維護(hù),作者提出了 SHIFTED Window 分割的概念。第一個(gè)模塊使用中性窗口分割,并根據(jù)窗口大小的 M=4 放大得出一個(gè) 8 x 8 的特征圖。我們將此窗口劃分為 2 x 2 的形式,而后通過 Shifted Window 設(shè)置下一模塊,將其移動(dòng) M/2 個(gè)像素。
使用 SHIFTED 結(jié)構(gòu),Swin Transformer Blocks 的計(jì)算如下所示:

W-MSA 與 SW-MSA 分別表示使用整齊分割與 SHIFTED SELF-ATTENTION。
Shifted Window 可以跨越多個(gè)窗口向模型添加連接,并保持模型的良好運(yùn)行效率。

SHIFTED WINDOW 也有自己的問題,即導(dǎo)致窗口數(shù)量增加——由原本的 (h / m xw / m) 個(gè)增加到 ((h / m + 1) x (W / m + 1)) 個(gè),而且其中某些窗口要小于 MXM。這種方法會(huì)將較小的窗口填充為 MXM,并計(jì)算 attention 值以掩蔽填充操作;當(dāng)窗口數(shù)量較少、但大于 2 x 2 時(shí),由此帶來的額外計(jì)算量將相當(dāng)可觀(由 2 x 2 到 3 x 3,計(jì)算量增加達(dá) 2.25 倍)。
因此,作者提出了一種更為高效的 BATCH 計(jì)算方法,即沿左上角執(zhí)行 Cyclic Shift。在完成這項(xiàng)位移之后,Batch WINDOW 將擁有一張由非相鄰子窗口組成的特征圖,這相當(dāng)于是使用 Cyclic-Shift、Batch-Windows 與整齊窗口分割限制子窗口內(nèi)的 Self-Attention 數(shù)量,從而極大提高了計(jì)算效率。
相對(duì)位置偏移:
作者介紹了 Self-Attention 中各頭的相對(duì)位置。偏移 B:

其中:


這將顯著提高性能表現(xiàn)。
作者根據(jù)大小與計(jì)算復(fù)雜度建立起一套基本模型,名為 SWIN-B;同時(shí)引入了 SWIN-T、SWIN-S 與 SWIN-L,其模型大小與復(fù)雜度分別為 0.25 倍、0.5 倍與 2 倍。
當(dāng)我們將窗口大小 M 設(shè)定為 7 時(shí),各頭部查詢 D 為 32,各擴(kuò)展層的 mlp α為 4。

其中 C 為初始階段隱藏層的通道數(shù)量。
表 1A,從零開始在 ImgeNet-1K 上進(jìn)行訓(xùn)練:

表 1B,在 ImageNet-22k 上進(jìn)行首輪訓(xùn)練,之后遷移至 ImageNet-1K:

表 2A,在不同模型幀上使用 Swin Transformer 替代 BackBone:

表 2C,與 SOTA 的比較結(jié)果:

表 3,對(duì)于較小模型,可提供比先前 SOTA SETR 更高的 MIOU:

表 4,Shifted Window 在相對(duì)位置偏移中的性能改進(jìn):

表 5,SHIFTED WINDOW 與 CYCLIC 高效執(zhí)行:

表 6,不同 Self-Attentions 的比較:

ViT 的出現(xiàn)擴(kuò)大了 Transformer 的使用范圍,這也讓 AI 領(lǐng)域的從業(yè)者開始關(guān)注 Transformer 與 CNN 的關(guān)系。在知乎上,一位用戶提問稱:
目前已經(jīng)有基于 Transformer 在三大圖像問題上的應(yīng)用:分類(ViT),檢測(DETR)和分割(SETR),并且都取得了不錯(cuò)的效果。那么未來,Transformer 有可能替換 CNN 嗎,Transformer 會(huì)不會(huì)如同在 NLP 領(lǐng)域的應(yīng)用一樣革新 CV 領(lǐng)域?后面的研究思路可能會(huì)有哪些呢?
關(guān)于這個(gè)問題,很多知乎答主已經(jīng)給出了自己的答案,包括浙江大學(xué)控制科學(xué)與工程博士、復(fù)旦大學(xué)微電子學(xué)院碩士、阿里巴巴高級(jí)算法專家等,大體總結(jié)為未來是否會(huì)形成完全替代尚不好預(yù)測, 但對(duì) CNN 的降維打擊已經(jīng)形成。
感興趣的用戶可以到知乎閱讀各位答友的完整回答:https://www.zhihu.com/question/437495132/answer/1800881612
參考鏈接:https://www.programmersought.com/article/61847904617/
往期精彩:
【原創(chuàng)首發(fā)】機(jī)器學(xué)習(xí)公式推導(dǎo)與代碼實(shí)現(xiàn)30講.pdf
【原創(chuàng)首發(fā)】深度學(xué)習(xí)語義分割理論與實(shí)戰(zhàn)指南.pdf
算法工程師的日常,一定不能脫離產(chǎn)業(yè)實(shí)踐
求個(gè)在看
