屠榜CV还不是这篇论文的终极目标,它更大的目标其实是……
文 | 魏旭
編 | 橙橙子,小戲
當 BERT 模型出來之后,Transformer 架構基本成為 NLP 任務的底色。諸如 Roberta、XLNet、ELECTRA、GPT3 等刷榜各類 NLP 任務的模型,無一不是基于 Transformer 框架。
無疑,Transformer 開啟了 NLP 的統(tǒng)治時代,或者說,Transformer 已經成為 NLP 的 Back-bone Networks (基石網絡)。
但是,隔壁的 CV 界的 Back-bone 卻仍然保留著 CNNs ?框架,這個統(tǒng)治了 CV 界 20 多年的王者依舊穩(wěn)如泰山,對比NLP領域 Transformer 的崛起,不禁讓人浮想聯(lián)翩,是否真正存在一種框架,能夠做到橫跨兩界,千秋萬載,一統(tǒng)江湖?
最近,MSRA 的一篇論文《Swin Transformer: Hierarchical Vision Transformer using Shifted Windows》帶來了好消息,論文所提出的 Swin Transformer 霸榜 CV 各大榜單,頗有當年 BERT 一刀斬群雄的氣派。如果 Transformer 果真能成為 CV 任務的 Back-bone,那么距離 CV、NLP 大一統(tǒng)時代是否更進一步呢?
這里,本文將通過對比 NLP 和 CV 在 Transformer 框架上的使用異同,來理解在 CV 領域是如何使用 Transformer 結構的。
論文題目:
Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
論文鏈接:
https://arxiv.org/abs/2103.14030
原文代碼:
https://github.com/microsoft/Swin-Transformer
Arxiv訪問慢的小伙伴也可以在 【夕小瑤的賣萌屋】訂閱號后臺回復關鍵詞 【0517】 下載論文PDF~
1 背景概述
在討論論文細節(jié)之前,讓我們先來了解一下背景知識,好好扒一扒 CV 和 NLP 的歷史發(fā)展,看看到底為什么 CV 遲遲沒有用上 Transformer 。
CV vs NLP,AI 時代兩朵鮮花的恩怨情仇
根據(jù)歷史經驗,我們知道,在社會主義(人工智能)的初級階段,往往是那些簡單的,易于理解的模式占領上風,走在前列。而當社會主義(人工智能)發(fā)展到了中后期,那些簡單且易于理解的模式又會因為過于簡單而成為其進一步發(fā)展的阻礙。
在 2012 年那會兒(國內可能要到 2015 年),人工智能剛剛展露頭角的時候, CV( Computer Vision )產業(yè)一時風頭無量——圖片分類、人臉識別、物體檢測等等任務紛紛落地,而相比之下,NLP 的發(fā)展就要緩慢的多。究其原因,其主要原因還是在于任務編碼輸入的差異。
我們知道,圖片天然由像素組成,而像素的存儲天然是數(shù)字( 0-255 ),這也就意味著計算機可以毫不費力的去讀取一張圖片。而隨后在 Embedding 之后接入的一系列 DNN 算法,使得計算機就能輕松的從讀取圖片變?yōu)樽x懂圖片。這也正是 CV 在這波人工智能浪潮中能走在前列的一個主要原因。
而此時的 NLP 呢?科學家們還在費勁心思的用各種方法將字符形式的文字轉化為計算機可編碼的數(shù)字符號,NLPer 嘗試過用 ASCII 編碼,字母編碼映射,最終卻選擇了丑陋的one-hot,縱然它是稀疏矩陣,縱然它限制了詞表大小,縱然它有 OOV ( Out Of Vocabulary )問題,縱然它丑陋無比,但 NLPers 別無選擇。
與此同時,另一個使得 CV 能夠表現(xiàn)卓著的原因應該歸功于 CNN 的發(fā)展。由于 CV 天然的空間特性(對應的 NLP 有很好的序列特性,可以被狹義的認為是時間特性),讓 CNN 架構在 CV 上大放異彩。當然,后期針對于 NLP 的這種序列特性, NLPer 也開發(fā)了 RNN 系列,算是和CNN分庭抗禮吧!但哪怕在 RNN 出現(xiàn)后, NLP 的時代還遠沒有到來,最多算作從備受擠壓到平分秋色。
2017 年,Transformer 框架被《 Attention Is All You Need 》提出[1]。2018年,BERT 模型問世 《 BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 》[2]。可以這么說,BERT模型的出現(xiàn),對于 NLP 來說是一個里程碑式的節(jié)點,它為以后的各類 NLP 任務畫定了一個框架,即一個 PLM + fine-tune 的框架,而以后基本所有的 PLM 都是基于 Transformer 框架。是的,一個嶄新的時代到來了,一個屬于NLP的時代,它,來臨了!
Transformer 適用于 NLP,確不適合 CV
CNN 本身極其擅長于解讀圖像的信息,通過卷積核和卷積核的移動可以捕捉到圖像的各個方位的信息,同時將信息映射到更低維的空間中,達到提取空間特征的作用。而且因為其輕量級的架構特征,使得它能高效的抽取 CV 這類高分辨率輸入,所以 CNN 一經提出就在 CV 任務上大方光彩,到如今依然久久不息。
但 CNN 也有自己一直被詬病的問題,那就是 CNN 算子的感受野比較局限,即使通過卷積核移動能夠獲得全局的特征,但往往需要后面連接 RNN 或 Transformer 層來進一步處理全局的信息。
此外,雖然 CNN 模型極其適用于圖像結構,但是對于文本、語音等信息的處理能力確偏弱(其實是相對于 Transformer 偏弱),雖然 Kim 在 2014 年提出了 TextCNN [3],但與 CV 處理的兼容性仍然不高。因此 CNN 對于多模態(tài)學習來說,并非是完美的 Back-Bone 對象。因此,CV 同志們一直在探索如何將 Transformer 架構完美落地于 CV 任務,達到真正的 CV + NLP 的大一統(tǒng)。
Transformer 落地于 CV 的第一個問題就是圖片輸入的高分辨率會導致超大的計算量。我們先看一下對于一個文本輸入,Transformer 是如何通過注意力機制完成語義理解的。
對于一個長度是 H 的句子,做一次 Attention 計算,需要進行H*H 次注意力計算。而同樣輸入一張分辨率為 H*H 的圖片,做一次 Attention 計算,需要進行 (H*H)^2 次注意力計算。
此外,512 的文本長度已經可以滿足大多數(shù) NLP 任務的需求,但 768*768 分辨率的圖片對于 CV 任務確是常見至極。如此高的計算損耗,就意味著 Transformer 難以在 CV 中大展手腳,這也就是為什么目前的 CV 還是 CNN 統(tǒng)治下的天下。
另一個問題就是 CV 任務與 NLP 任務相比在處理粒度( Scaled )上有很大差異。對于 NLP 問題,任務的處理粒度往往是 Token 級別或者大于 Token 級別,而對于圖片分類,會有像素級別、物體級別、圖片級別甚至視頻級別,粒度跨度非常大。這意味著如果 CV 需要使用統(tǒng)一的預訓練模型,需要在不同 Scale 任務上都有很好的效果,也就是說CV的預訓練模型需要同時理解圖片在不同 Scale 上的語義差異。
2 論文主體
因為圖片有高分辨率、任務 Scale 差異大的特征,導致 Transformer 結構在 CV 的落地一直是一個難題。之前 Transformer 在 CV 上的主要功能是對 CNN 之后特征進行查漏補全(特征進一步提取、注意力權重計算等),通常提取之后的特征數(shù)量遠小于像素數(shù)量,所以計算量還是可以接受的。
但是 Swin Transformer 則使用另一種方法,試圖開創(chuàng)一種將 Transformer 作為 CV 任務 Back-Bone 的框架結構,解決 CV 高分辨率帶來高計算量的問題。那么 Swin Transformer 是如何做到的呢?
圖片切分:Patches and Windows
首先,我們先接觸兩個 Swin transformer 中的術語, Patches 和 Windows。比如下圖中一張 16*16 的圖片,我們通過無覆蓋的劃分方法將其分割為 64 個小的方格,這里每一個 2*2 的方格就是一個 Patch 。我們再將 4*4 個 Patch 進行聯(lián)合,就形成了一個 Window 。如下面動圖的 Layer l 就是由 64 個 Patches 和 4 個同等大小的 Windows 組成。對應到 NLP ,一個 Patch 等效于一個單詞,一個 Window 等效于一個句子,而一張圖片則是一個 Document。這樣,Transformer 好像可以在 CV 上開始落地了!
其實,使用這種 Patch 的方法并不是 Swin Transformer ?首創(chuàng)(DETR,Vision Transformer-ViT 等也使用過)。當 CVer 發(fā)現(xiàn)像素等效于NLP中的一個字母,那么我們把相鄰的多個像素進行連接,這是不是就是一個單詞了?這就是 Patch 的思想。但其中難點在于:
如何確定一個 Patch 的 Size?Patch 太小,那么計算量仍然會很大。Patch 太大,那么信息損失又會很嚴重。
一個 Patch 沒有通用意義。區(qū)別于 NLP,“ hello ”就是“你好”的意思,表示“打招呼”的一種方法,這是高級信息表征帶來的天然優(yōu)勢。但一張圖片中位置為[0:3,0:3] 這 9 個像素點組成的 Patch 不是每次都有通用意義的,這對于訓練 CV 的預訓練模型是十分大的挑戰(zhàn)。
SW-MSA:特殊的 Attention 計算方法
在 Swin 中,Attention 的計算也稍有不同,這里總結為“一同兩異”。在 NLP 中,我們針對于每個單詞進行 Attention 計算;而 Swin 中,我們針對于每個 Patch 進行 Attention 計算,這是“一同”。
但是 NLP 中,我們對整個 Document 進行長程( long-range )的 Attention 計算,而 Swin 中的 Attention ,只針對于一個 Window 之內的計算(相當于 NLP 中只對一個句子進行了 Attention 計算),這是“一異”。
在 NLP 中,Attention 只被計算一次;在 Swin Transformer 中,Attention 會被計算兩次,通過 W - MSA + SW - MSA 分步驟獲取 Window 內部和相鄰 Windows 之間的 Attention 權重,這是“另一異”。
從上面的“一同兩異”,我們基本可以看出 Swin Transformer 的主要創(chuàng)新點。它將 CV 問題通過 Patch ?和 Window 的模式轉化為了 NLP 問題,這樣,理論上在 NLP 中很好用的 Transformer 框架就可以在 CV 上落地了。同時,針對CV中的一些特殊性,Swin Transformer 使用了獨特的 Attention 方法。
獨特性一:只對 Window 內的 Patch 進行 Attention 計算,而不是在所有的Patches之間進行,否則 Attention 的計算量還是太大。那么對于一張像素為 H*H*3 的圖片,我們以 n*n 劃分為一個 Patch ,然后將 m*m 個相鄰 Patch 作為一個 Window ,可以得到 個 Window 。那么對于一張圖片的 Attention 計算次數(shù) 。此時與圖片像素成平方的復雜度,同NLP中 Attention 計算和句子長度成平方的復雜度相一致。
獨特性二:如果只進行 Window 內部的 Attention 計算,那么只是 Local Attention 。對于兩個不同 Windows 之間的像素點,就沒法獲得他們之間的關聯(lián)性了(也就是缺乏 Global Attention 的能力)。Swin 這里使用了迂回的方法,它仍然基于一個假設,那就是越靠近的像素點之間越需要計算注意力,彼此關聯(lián)更緊密。所以,Swin 在進行 Attention 計算的時候,除了我們見到的那種方方正正的 Window 結構(用 W-MSA, Windows-based Multi Self-Attention 計算),還設計了一種叫做 Shift Window Partitioning 的方法,將相鄰的 Windows 進行 Merge ,計算 SW-MSA( Shift Windows-based Multi Self-Attention )。通過這種 Cross-Windows 的關系計算,盡量保證更多的像素之間能計算出彼此的相關性,從而代替獲得 Global Attention 。實驗結果表明,增加了 SW-MSA 之后,結果能有很大的提升。
其實,SW-MSA 也是通過近似的方式去獲取 Global Attention ,它假設“越靠近的像素點之間關系越緊密”,如同 NLP 問題中假設單詞與單詞位置越靠近,語義影響越大一樣。
但實際的圖片任務中,仍然存在像素和像素有長程依賴性,而 SW-MSA 是無法解決的。不過即便如此,加入了 SW-MSA 的 Swin Transformer 仍然能大大刷新 CV 任務榜單,因此,期待在未來出現(xiàn)更優(yōu)美的 Attention 計算方法。
3 算法框架
接下來,我們看看 Swin Transformer 的模型框架圖,下圖是 Swin-T( Swin Transformer Tiny 版)的架構圖。左邊圖(a)是整個模型的框架圖,右邊彩色的圖(b)是單個 Swin Transformer Block 的解析圖。
如圖所示,我們把整個模型框架看成一張圖片從輸入模型到最后輸出模型的過程,論文將其分為4個 Stage (我自己補上了一個 Stage0 ,主要是對圖片進行 Patch 切分)。
Stage0:這個相當于數(shù)據(jù)處理,按照 Patch 的處理方法 ,將一張圖片切分為一個個的 Patch。
Stage 1:Linear Embedding 進行特征映射,然后過 兩遍Swin Transformer block(就是上面講的適用于圖片的 Transformer 訓練方法,你可以理解為 BERT 12層中的一層)。如圖b,對于一個 Swin Transformer Block ,先經過一個 LN + W - MSA ,然后接上一個殘差網絡;再接上 LN + MLP ,再接殘差網絡,獲得高維空間的表征映射;最后將 W-MSA 替換為 SW-MSA ,重復上面的步驟。
Stage 2:將相鄰的兩個 Patch 進行融合,稱為 Patch Merging ,然后再過兩遍 Swin Transformer Block 。用作者的話說,Patch Merging 的目的是為了讓模型隨著訓練程度的加深,能夠獲取更高層的意義表征。
Stage 3:將相鄰的兩個 Patch 進行融合,然后再過 6 遍 Swin Transformer Block 。
Stage 4:將相鄰的兩個 Patch 進行融合,然后再過 2 遍 Swin Transformer Block。
在這里, Stage 1-4 可以認為是一種訓練的重復,就如同 BERT 中 12 層的重復結構,每一層的基礎單元是 Swin Transformer Block 。通過和 NLP 中 BERT 的訓練框架對比可以看出,模型符合我們常規(guī)認知的 Transformer 的框架訓練。
選取一個訓練基元 Swin Transformer Block,然后不斷重復疊加,最終獲得一個深層的隱藏層表征,后面接各類下游任務進行 Fine-tune 。同樣,在 BERT 中,我們通常認為淺層網絡更注重于一些語法結構的信息,深層網絡則更注重于語義的信息。而 Swin Transformer 通過不斷進行 Patch 融合,然后再將維度從 C -> 2C -> 4C -> 8C, 從而獲得更深維度的圖像意義表征,也有種逐步加深對圖片表征理解的感覺。
4 模型結果
兩個字,“屠榜”!
用一句話表述,那就是同等量級的模型,無論是在框架,還是實際系統(tǒng)落地后,基本都有 2-4 個點的提升,這在 CV 任務中已經是一個重大的 Improvement 。
5 結論總結
Swin Transformer , 這篇文章號稱開啟了 CV 領域的新時代,用 Transformer 構建 CV 任務的時代。文章一直提到一個關鍵詞—— Back-Bone Architectures 。所以,文章的目的不是在于對于某個任務獲得了更好的算法結果,而是要為所有的 CV 任務制定一種使用 Transformer 的框架結構。從算法結果(屠榜二字)來看,似乎做到了。而且代碼開源一天,就有上千的 Star ,其威力可見一斑。
總結一下文章的 Key-Point ,主要有以下幾點:
使用 Patch + Window 的圖片處理方法。Patch 的劃分方法,將圖片劃分為一個個的 “Token”,將多個 Patch 組合成一個 Window ,相當于多個 “Token” 構建為一個句子,完美的與 NLP 任務對應,為 Transformer 在 CV + NLP 上的大一統(tǒng)邁出重要一步。
混合使用 W-MSA + SW-MSA 獲得全局的 Attention。在 Window 內部計算 W-MSA ,實現(xiàn) Local Attention ,縮小復雜度;使用 Shift Window 的方法部分實現(xiàn) Global Attention ,擴展特征視野。這種計算方法,將圖片的計算復雜度統(tǒng)一到 的量級,讓 Transformer 落地于 CV 成為可能。
多層的 Swin Transformer Block 進行疊加訓練,不斷優(yōu)化特征提取的結果。這也是對標 BERT 預訓練的操作,逐步獲取更深層次的圖片內容表征,讓 CV 和 NLP 任務在訓練模式上統(tǒng)一。
這里,小編的思考,論文使用的 Shift Window 的方法,其實比較簡單,后續(xù)我想應該會有其他優(yōu)化方法來獲得更好的結果。就如同當時的 BERT ,以及各類接踵而來的 BERT++ 。
比如說,如果以 Windows 作為基元,獲取 Windows 之間的相關性,來代替 Global Attention ,是否能更好的表征圖片之間的長程依賴?或者根據(jù) Attention 的結果,動態(tài)獲取新的 Windows 劃分(對應于 NLP 中的分句),這樣是否可以獲得超過 SW-MSA 的結果?
總之,無論如何,從實驗結果來看,Swin Transformer 非常有可能完成自己對 Back Bone 的定義,開啟一個嶄新的 CV 使用 Transformer 的時代!!!
尋求報道、約稿、文案投放:
添加微信xixiaoyao-1,備注“商務合作”
后臺回復關鍵詞【入群】
加入賣萌屋NLP/IR/Rec與求職討論群
后臺回復關鍵詞【頂會】
獲取ACL、CIKM等各大頂會論文集!
?
[1].Attention is all need. ?https://jalammar.github.io/illustrated-transformer/
[2].BERT:https://arxiv.org/abs/1810.04805
[3].TextCNN:https://www.aclweb.org/anthology/D14-1181.pdf
[4].Swin Transformer 原論文. ?https://arxiv.org/abs/2103.14030
[5].Swin Transformer 原作者解析. https://pub.towardsai.net/will-transformers-replace-cnns-in-computer-vision-55657a196833
[6].Vision transformer. https://github.com/lucidrains/vit-pytorch
總結
以上是生活随笔為你收集整理的屠榜CV还不是这篇论文的终极目标,它更大的目标其实是……的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度解析LSTM神经网络的设计原理
- 下一篇: 重要的,是那些训练中被多次遗忘的样本