重读经典:《An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale》
ViT論文逐段精讀【論文精讀】
這次李沐博士邀請了亞馬遜計算機視覺專家朱毅博士來精讀 Vision Transformer(ViT),強烈推薦大家去看本次的論文精讀視頻。朱毅博士講解的很詳細,幾乎是逐詞逐句地講解,在講解時把 ViT 相關領域的研究也都介紹了,聽完之后收獲滿滿。
ViT 應該是過去一年計算機視覺領域影響力最大的一個工作。ViT 挑戰了卷積神經網絡在計算機視覺領域的絕對統治地位。ViT證明如果能在足夠大的數據集上去訓練,那么就可以不需要卷積神經網絡,直接使用標準的 Transformer 也能把視覺問題解決好。ViT 不僅在計算機視覺領域挖了一個大坑;同是它也打破了 CV 和 NLP 之間的壁壘,在多模態領域也挖了一個大坑。可以說,ViT 開啟了計算機視覺新時代。
ViT 論文鏈接: https://arxiv.org/abs/2010.11929
1. 標題、摘要、引言、結論
首先是論文標題,論文標題的意思是:一張圖片等價于很多 16×1616\times1616×16 的單詞,Transformer 用于大規模圖像識別 。16×1616\times1616×16 是指將一張圖片劃分成若干個 塊(patch),每一個 patch 大小為 16×1616\times1616×16。這樣一張圖片就可以看作是若干個 patch 組成。這篇論文的作者還是蠻多的,有12個作者,可以看出這篇論文工作量確實很大,論文作者全部來自于 Google。
下面是論文摘要,摘要寫的很簡潔,總共只有4句話。
- 盡管 Transformer 已經成為自然語言處理任務事實上的一種標準,但是在計算機視覺上的應用還是非常有限。
- 在計算機視覺領域,注意力機制要么和卷積神經網絡一起使用,要么在保持原有網絡結構不變的情況下替換局部的卷積運算(例如 ResNet-50 中把其中每某一個殘差塊使用注意力機制替代)。
- 本文證明對卷積神經網絡的依賴不是必要的,原始的 Transformer 可以直接應用在一系列小塊圖片上并在分類任務上可以取得很好的效果。
- 在大的數據集上預訓練的模型遷移到中小型圖片數據集上 (ImageNet, CIFAR-100, VTAB等),與目前最好的卷積神經網絡相比,ViT 可以取得非常優秀的結果并且需要更少的訓練資源。
(但是仍然需要2500天 TPUv3 訓練天數,目前的深度學習真的是進入到了大力出奇跡的時刻,在計算資源上學術界很難能比過工業界。)
在介紹引言之前,朱毅博士首先介紹了 Transformer 用在計算機視覺上的一些難處。主要是如何將2D圖片數據轉換成 1D數據?目前 BERT 能夠處理的序列長度是512,如果直接將圖像像素轉換成 1D。即使是 224×224224\times224224×224 大小的圖片,其序列長度也有5萬多,計算復雜度將是 BERT 的100倍,如果是檢測或分割任務,那計算復雜度就更大了。
引言前兩段主要是交代故事背景,在自然語言處理任務上,通常會在大的訓練集上去訓練 Transformer,然后在小的特定任務數據集上去微調。目前可以訓練含有上千億參數的 Transformer 模型,且隨著模型和數據集的增加,并沒有出現飽和現象。 在計算機視覺領域,卷積神經網絡仍然占據主導。最近一些新的研究,有的將自注意力機制和卷積神經網絡結合起來訓練(即在較小的特征圖上使用自注意力機制),這是一種減少序列長度的方法;還有的是使用局部圖片作為輸入,然后使用 Transformer,也有論文研究分別在圖像高度或寬度上使用 Transformer,這些都是為了減少序列長度。但以上方法都存在不足,都是針對特定任務來使用,在大規模圖像識別數據集, 像 ResNet 這樣的網絡仍然是主流。
下面作者介紹如何將 Transformer 用在計算機視覺。首先將圖像劃分為一個個 patch,然后使用全連接網絡進行線性變換,這樣就得到了 patch 線性變換序列,最后將 patch 輸入到 Transformer,這里可以將 patch 看成是一個個單詞。舉個例子,假設圖像大小是 224×224224 \times 224224×224,劃分成 16×1616\times1616×16 的 patch, 則最終會有196個 patch。可以看到,整篇論文處理流程還是很簡潔的,基本上沒有什么技術難點。
緊接著作者指出,Transformer 與卷積神經網絡相比缺少 歸納偏置,例如相關性(locality)和平移不變性(translation equivariance)。因此為了得到更好的結果,需要有足夠多的訓練數據,最后一段就是介紹模型效果,果然效果拔群。
下面是論文結論部分。第一段總結本文做的工作,圖片處理成 patch 序列,然后使用 Transformer 去處理,取得了接近或超過卷積神經網絡的結果,同時訓練起來也更便宜。第二段是未來展望:
- 一是和目標檢測和分割結合起來,ICCV 2021 最佳論文 Swin Transformer 就證明了 Transformer 在檢測和分割任務也能取得很好的效果;
- 另一個是自監督預訓練,因為本文是有監督預訓練,自監督和有監督預訓練還存在著很大的差距,最近何愷明博士的新論文 MAE 就研究了這個問題;
- 最后是更大規模的 ViT,半年之后作者團隊就提出了 ViT-G。
2. 相關工作
下面是相關工作,總共有6段。第1段說2017年 Transformer 被提出來以后,已經成為許多 NLP 任務最先進的方法,代表性的工作有 BERT(完形填空去預測缺少的詞)和 GPT(語言模型,預測下一個詞)。第2段是說,將自注意力用于圖像處理,需要每個像素和每個像素兩兩交互,復雜度與像素數量平方成正比。因此在圖像處理中使用 Transformer 需要做一些近似處理,包括在局部圖像塊用自注意力、使用稀疏的 Transformer 以及在軸上使用注意力,這些方法都取得了很好的效果,但是需要復雜的工程能力去實現硬件加速。
接著作者介紹和本文最接近的相關工作,ICLR 2020 的這篇論文使用的 patch 大小是 2×22\times22×2,處理的數據集是 CIFAR-10 數據集,和 ViT 很接近,也是從頭到尾使用注意力機制來處理。和這篇論文不同之處是我們的工作顯示更大規模的預訓練可以使得 Transformer 能取得比 CNN 更好的效果;同時我們使用了更大的 patch ,我們的模型可以處理中等尺度的圖片。下面是自注意力機制和 CNN 結合的一些工作,包括圖片分類、物體檢測、視頻處理、文本視頻任務等。
另一個最近的工作是 iGPT, 將 Transformer 用于生成式模型,在 ImageNet 上可以取得 72%的準確率。我們的工作研究了更大規模的數據集,主要是 ImageNet-21k 和 JFT-300M 。
3. ViT模型、實驗
下面是 ViT模型介紹,模型總覽圖如下圖所示。輸入為一張圖片,將圖片劃分成9個 patch,劃分后的 patch 序列經過線性投射層變換得到 patch embedding ,與此同時對這些 patch 還添加了 position embedding,這樣每一個 token 既包括圖像信息又包括了位置信息。這里作者還借鑒了 BERT ,添加了 class embedding ,也包括位置信息,最終將這些 token 輸入到 Transformer,最后 class embedding 對應的輸出經過 MLP Head 進行類別判斷,整個模型包括 LLL 個 Transformer。
下面是具體實現,假設圖像大小是 224×224×3224 \times 224 \times 3224×224×3,劃分成 16×16×316\times16\times316×16×3 的 patch, 則最終會有196個 patch。將每一個 patch 拉平,則每一個 patch 維度變為 768。線性投射層使用 E\mathbf{E}E 表示,維度為 768×768(D)768 \times 768(\mathbf{D})768×768(D),D\mathbf{D}D 是參數。則經過線性變換后輸出為: XE=196×768×768×768=196×768\mathbf{X}\mathbf{E}=196\times768\times768\times768=196\times768XE=196×768×768×768=196×768,輸出為196個 token,每個 token 維度為768。因為還有一個 class token,位置編碼維度為 1×7681\times7681×768,和 patch embedding直接相加(sum),則最終輸入維度為 197×768197\times768197×768。
下面是論文原文介紹,首先是 patch embedding 的處理,然后是 class embedding 的處理,最后是 position embedding 的處理。 在附錄里作者比較了各種 position embedding 的實驗結果,以及 class token 的使用對最終分類結果的影響。為了減少對 Transformer 的改動,作者這里還是使用了 class token 和 1D position embedding。
下面是公式描述,xp1\mathrm{x}_{p}^1xp1? 是原始圖像塊,E\mathrm{E}E 是線性投射層,Epos\mathrm{E}_{pos}Epos? 是位置編碼,xclass\mathrm{x}_{class}xclass? 是類別塊,經過 LLL 個 Transformer 處理后,最后根據 zL0\mathbf{z}_L^0zL0? 去做類別判斷。
z0=[xclass?;xp1E;xp2E;?;xpNE]+Epos?,E∈R(P2?C)×D,Epos∈R(N+1)×Dz?′=MSA?(LN?(z??1))+z??1,?=1…Lz?=MLP?(LN?(z?′))+z?′,?=1…Ly=LN?(zL0)\begin{aligned} \mathrm{z}_{0} &=\left[\mathrm{x}_{\text {class }} ; \mathrm{x}_{p}^{1} \mathrm{E} ; \mathrm{x}_{p}^{2} \mathrm{E} ; \cdots ; \mathrm{x}_{p}^{N} \mathrm{E}\right]+\mathrm{E}_{\text {pos }}, & \mathbf{E} \in \mathbb{R}^{\left(P^{2} \cdot C\right) \times D}, \mathbf{E}_{p o s} \in \mathbb{R}^{(N+1) \times D} & \\ \mathrm{z}_{\ell}^{\prime} &=\operatorname{MSA}\left(\operatorname{LN}\left(\mathrm{z}_{\ell-1}\right)\right)+\mathrm{z}_{\ell-1}, & & \ell=1 \ldots L \\ \mathrm{z}_{\ell} &=\operatorname{MLP}\left(\operatorname{LN}\left(\mathbf{z}_{\ell}^{\prime}\right)\right)+\mathbf{z}_{\ell}^{\prime}, & & \ell=1 \ldots L \\ \mathrm{y} &=\operatorname{LN}\left(\mathbf{z}_{L}^{0}\right) & & \end{aligned} z0?z?′?z??y?=[xclass??;xp1?E;xp2?E;?;xpN?E]+Epos??,=MSA(LN(z??1?))+z??1?,=MLP(LN(z?′?))+z?′?,=LN(zL0?)?E∈R(P2?C)×D,Epos?∈R(N+1)×D??=1…L?=1…L?
下面是歸納偏置介紹,主要是所有 patch 的空間關系都需要從頭去學;另一個是將注意力機制和 CNN 特征圖結合起來一起使用,構建混合模型,最后是微調模型以及對大尺度圖片的處理。
下面是論文實驗部分。這里作者主要設計了三種不同大小的 ViT 模型,如下表所示。
第一個實驗結果是作者分別將ViT 模型在不同的數據集上去預訓練,然后在基準數據集上去比較,雖然從表中看到 ViT-H/14 比卷積模型 BiT-L 準確率高得并不多,但是從訓練天數可以看到,ViT-H/14 需要的訓練天數是 BiTL-L 的 14\frac{1}{4}41? 左右,訓練代價更小。
圖3、4 表明隨著預訓練數據集的增大,Transformer 的效果會漸漸好于 ResNet,這表明 Transformer 有很好的可擴展性。圖5表示,在同樣運算能力下,Transformer 的效果也是好于 ResNet。
下面是一些可視化結果,中間這張圖可以看到雖然本文使用的是 1D 的位置編碼,但是網絡仍然能學到不同 patch 位置間關系;右邊這張圖則表示 Transformer 學習能力,可以看到隨著網絡越深,獲取全局信息能力越強。
最后作者也做了一個小的自監督實驗,證明了 Transformer 是優于卷積神經網絡,最近大火的 MAE 也證明了這一點。
最后簡單總結下,本文寫作簡潔明了,實驗也是很詳盡的,在計算機視覺領域挖了一個大坑;當然朱毅博士這次的講解也是酣暢淋漓,思路很清晰,看下來受益匪淺。
總結
以上是生活随笔為你收集整理的重读经典:《An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale》的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kenproxy.exe是什么进程 有什
- 下一篇: Intel 13代酷睿旗舰i9-1390