魚羊 發自 凹非寺
量子位 報道 | 公眾號 QbitAI
談到Transformer,你可能會想到一眾NLP模型。
但現在,Transformer其實還能替CNN把活給干了,并且干得還不賴。
比如微軟亞研院最新提出的Swin Transformer,就在COCO數據集的分割檢測任務上來了個跨領域超車,一舉達到SOTA。
那么,問題來了。
關注NLP的盆友想必就會問,用Transformer做CV任務,這個想法早已有之,也沒見對CNN的地位有什么動搖,Swin Transformer又有何不同?
這就涉及到Transformer的CV應用存在的兩個主要問題:
首先,基于Transformer的模型,token的長度是固定的。這對于NLP里的單詞當然沒有什么問題,但到了CV領域,視覺元素的比例各異,比如同一個場景中會存在大小不同的物體。
其次,圖像中的像素與文本中的文字相比,對分辨率的要求更高。而常規的自注意力的計算復雜度,是圖像大小的平方,這就導致其在像素級別進行密集預測時會出現問題。
而Swin Transformer,就旨在解決這些NLP和CV之間差異帶來的問題。
通過移動窗口計算的分層Transformer
Swin Transformer的訣竅,核心是兩板斧:
基于分層特征圖,利用特征金字塔網絡(FPN)或U-Net等技術進行密集預測
將自注意力計算限制在不重疊的局部窗口中,同時允許跨窗口連接,從而帶來更高的效率。
這第二板斧,也就是基于移動窗口的自注意力:
如上圖所示,在l層,采用常規的窗口分區方案,在每個窗口內計算自注意力。
在下一層l+1,窗口分區會被移動,產生新的窗口。新窗口中的自注意力計算跨越了l層中窗口的邊界,提供了新的關聯信息。
具體而言,Swin Transformer的整體架構是醬嬸的:
將RGB圖像分割成不重疊的圖像塊(token);
應用MLP(多層感知機)將原始特征轉化為任意維度;
應用多個修改了自注意力計算的Swin Transformer塊,并保持token的數量;
下采樣層:通過合并2×2窗口中的相鄰圖像塊來減少token的數量,并將特征深度增加一倍。
實驗結果
研究人員讓Swin Transformer分別挑戰了ImageNet-1K、COCO和ADE20K上的圖像分類、對象檢測和語義分割任務。
其中,用于預訓練的是ImageNet-22K數據集,ImageNet-1K數據集則用于微調。
結果顯示,在COCO的分割和檢測任務,以及ADE20K的語義分割任務上,Swin Transformer都超越了CNN,達到了SOTA。
而在ImageNet-1K的分類任務上,雖然沒能超越EfficientNet,但效果相當且速度更快。