1. 程式人生 > 實用技巧 >告別CNN?一張圖等於16x16個字,計算機視覺也用上Transformer了

告別CNN?一張圖等於16x16個字,計算機視覺也用上Transformer了

編譯 |凱隱

出品 | AI科技大本營(ID:rgznai100)

Transformer是由谷歌於2017年提出的具有里程碑意義的模型,同時也是語言AI革命的關鍵技術。在此之前的SOTA模型都是以迴圈神經網路為基礎(RNN, LSTM等)。

從本質上來講,RNN是以序列的方式來處理資料,對應到NLP任務上,即按照句中詞語的先後順序,每一個時間步處理一個詞語。

相較於這種序列模式,Transformer的巨大創新便在於並行化的語言處理:文字中的所有詞語都可以在同一時間進行分析,而不是按照序列先後順序。為了支援這種並行化的處理方式,Transformer依賴於注意力機制。

注意力機制可以讓模型考慮任意兩個詞語之間的相互關係,且不受它們在文字序列中位置的影響。通過分析詞語之間的兩兩相互關係,來決定應該對哪些詞或短語賦予更多的注意力。

相較於RNN必須按時間順序進行計算,Transformer並行處理機制的顯著好處便在於更高的計算效率,可以通過平行計算來大大加快訓練速度,從而能在更大的資料集上進行訓練。

例如GPT-3(Transformer的第三代)的訓練資料集大約包含5000億個詞語,並且模型引數量達到1750億,遠遠超越了現有的任何基於RNN的模型。

現有的各種基於Transformer的模型基本只是與NLP任務有關,這得益於GPT-3等衍生模型的成功。

然而,最近ICLR 2021的一篇投稿文章開創性地將Transformer模型跨領域地引用到了計算機視覺任務中,並取得了不錯地成果。這也被許多AI學者認為是開創了CV領域的新時代,甚至可能完全取代傳統的卷積操作。

論文連結:

https://openreview.net/pdf?id=YicbFdNTTy

其中,Google的Deepmind 研究科學家Oriol Vinyals的看法很直接:告別卷積。

以下為該論文的詳細工作:

基本內容

Transformer的核心原理是注意力機制,注意力機制在具體實現時主要以矩陣乘法計算為基礎,這意味著可以通過並行化來加快計算速度,相較於只能按時間順序進行序列計算的RNN模型而言,大大提高了訓練速度,從而能夠在更大的資料集上進行訓練。

此外,Transformer模型還具有良好的可擴充套件性和伸縮性,在面對具體的任務時,常用的做法是先在大型資料集上進行訓練,然後在指定任務資料集上進行微調。並且隨著模型大小和資料集的增長,模型本身的效能也會跟著提升,目前為止還沒有一個明顯的效能天花板。

Transformer的這兩個特性不僅讓其在NLP領域大獲成功,也提供了將其遷移到其他任務上的潛力。此前已經有文章嘗試將注意力機制應用到影象識別任務上,但他們要麼是沒有脫離CNN的框架,要麼是對注意力機制進行了修改,導致計算效率低,不能很好地實現平行計算加速。因此在大規模圖片分類任務中,以ResNet為基本結構的模型依然是主流。

這篇文章首先嚐試在幾乎不做改動的情況下將Transformer模型應用到影象分類任務中,在 ImageNet 得到的結果相較於 ResNet 較差,這是因為Transformer模型缺乏歸納偏置能力,例如並不具備CNN那樣的平移不變性和區域性性,因此在資料不足時不能很好的泛化到該任務上。

然而,當訓練資料量得到提升時,歸納偏置的問題便能得到緩解,即如果在足夠大的資料集上進行與訓練,便能很好地遷移到小規模資料集上。

在此基礎上,作者提出了Vision Transformer模型。下面將介紹模型原理。

模型原理

該研究提出了一種稱為Vision Transformer(ViT)的模型,在設計上是儘可能遵循原版Transformer結構,這也是為了儘可能保持原版的效能。

雖然可以並行處理,但Transformer依然是以一維序列作為輸入,然而圖片資料都是二維的,因此首先要解決的問題是如何將圖片以合適的方式輸入到模型中。本文采用的是切塊 + embedding的方法,如下圖:

首先將原始圖片劃分為多個子圖(patch),每個子圖相當於一個word,這個過程也可以表示為:

其中x是輸入圖片,xp則是處理後的子圖序列,P2則是子圖的解析度,N則是切分後的子圖數量(即序列長度),顯然有。由於Transformer只接受1D序列作為輸入,因此還需要對每個patch進行embedding,通過一個線性變換層將二維的patch嵌入表示為長度為D的一維向量,得到的輸出被稱為patch嵌入。

類似於BERT模型的[class] token機制,對每一個patch嵌入,都會額外預測一個可學習的嵌入表示,然後將這個嵌入表示在encoder中的最終輸出()作為對應patch的表示。在預訓練和微調階段,分類頭都依賴於

此外還加入了位置嵌入資訊(圖中的0,1,2,3…),因為序列化的patch丟失了他們在圖片中的位置資訊。作者嘗試了各種不同的2D嵌入方法,但是相較於一般的1D嵌入並沒有任何顯著的效能提升,因此最終使用聯合嵌入作為輸入。

模型結構與標準的Transformer相同(如上圖右側),即由多個互動層多頭注意力(MSA)和多層感知器(MLP)構成。在每個模組前使用LayerNorm,在模組後使用殘差連線。使用GELU作為MLP的啟用函式。整個模型的更新公式如下:

其中(1)代表了嵌入層的更新,公式(2)和(3)則代表了MSA和MLP的前向傳播。

此外本文還提出了一種直接採用ResNet中間層輸出作為圖片嵌入表示的方法,可以作為上述基於patch分割方法的替代。

模型訓練和解析度調整

和之前常用的做法一樣,在針對具體任務時,先在大規模資料集上訓練,然後根據具體的任務需求進行微調。這裡主要是更換最後的分類頭,按照分類數來設定分類頭的引數形狀。

此外作者還發現在更高的解析度進行微調往往能取得更好的效果,因為在保持patch解析度不變的情況下,原始影象解析度越高,得到的patch數越大,因此得到的有效序列也就越長。

對比實驗

4.1 實驗設定

首先作者設計了多個不同大小的ViT變體,分別對應不同的複雜度。

資料集主要使用ILSVRC-2012,ImageNet-21K,以及JFT資料集。

4.2 與SOTA模型的效能對比

首先是和ResNet以及efficientNet的對比,這兩個模型都是比較有代表的基於CNN的模型。

其中ViT模型都是在JFT-300M資料集上進行了預訓練。從上表可以看出,複雜度較低,規模較小的ViT-L在各個資料集上都超過了ResNet,並且其所需的算力也要少十多倍。

ViT-H規模更大,但效能也有進一步提升,在ImageNet, CIFAR,Oxford-IIIT, VTAB等資料集上超過了SOTA,且有大幅提升。

作者進一步將VTAB的任務分為多組,並對比了ViT和其他幾個SOTA模型的效能:

可以看到除了在Natrual任務中ViT略低於BiT外,在其他三個任務中都達到了SOTA,這再次證明了ViT的效能強大。

4.3 不同預訓練資料集對效能的影響

預訓練對於該模型而言是一個非常重要的環節,預訓練所用資料集的規模將影響模型的歸納偏置能力,因此作者進一步探究了不同規模的預訓練資料集對效能的影響:

上圖展示了不同規模的預訓練資料集(橫軸)對不同大小的模型的效能影響,注意微調時的資料集固定為ImageNet。可以看到對大部分模型而言,預訓練資料集規模越大,最終的效能越好。

並且隨著資料集的增大,較大的ViT模型(ViT-H/14)要由於較小的ViT模型(ViT-L)。

此外,作者還在不同大小的JFT資料集的子集上進行了模型訓練:

可以發現ViT-L對應的兩個模型在資料集規模增大時有非常明顯的提升,而ResNet則幾乎沒有變化。這裡可以得出兩個結論,一是ViT模型本身的效能上限要優於ResNet,這可以理解為注意力機制的上限高於CNN。

二是在資料集非常大的情況下,ViT模型效能大幅超越ResNet, 這說明在資料足夠的情況下,注意力機制完全可以代替CNN,而在資料集較小的情況下(10M),卷積則更為有效。

除了以上實驗,作者還探究了ViT模型的遷移效能,實驗結果表明不論是效能還是算力需求,ViT模型在進行遷移時都優於ResNet。

視覺化分析

視覺化分析可以幫助我們瞭解ViT的特徵學習過程。顯然,ViT模型的注意力一定是放在了與分類有關的區域:

總結

本文提出的基於patch分割的影象解釋策略,在結合Transformer的情況下取得了非常好的效果,這為CV領域的其他研究提供了一個很好的思路。

此外,接下來應該會出現許多基於這篇工作的研究,進一步將這一劃時代的模型應用到更多的任務上,例如目標檢測、例項分割、行為識別等等。此外,也會出現針對patch分割策略的改進,來進一步提高模型效能。

相關連結:

https://www.forbes.com/sites/robtoews/2020/10/12/the-next-generation-of-artificial-intelligence/#de89ca259eb1

備註:CV

計算機視覺交流群

更多最新CV學習技術資訊,

若已為CV君其他賬號好友請直接私信。

OpenCV中文網

微訊號 :iopencv

QQ群:805388940

微博/知乎:@我愛計算機視覺

投稿:[email protected]

網站:www.52cv.net

在看,讓更多人看到