用 Vision Transformer 進行影象分類

Transformer 問世後被廣泛地用在 NLP 的各種任務中,但是卻很少出現在計算機視覺領域中。目前計算機視覺主流的模型依然是 CNN,各種 attention 操作也是在 CNN 結構上進行。本文介紹 Vision Transformer (ViT),把圖片的區塊序列傳入 Transformer 進行預測。ViT 首先在大規模的圖片資料集上進行預訓練,然後再遷移到目標資料集上,得到的分類效果可以和當前最好的 CNN 模型相媲美,但是所需的計算資源大大減少。

1.概述

Transformer 是 2017 年提出的模型,主要基於 Self-Attention 結構,對 Transformer 不熟悉的童鞋可以參考一下之前的文章《Transformer 模型詳解》。Transformer 具有較高的計算效率和很好的擴充套件性,可以支援訓練超過 100B 引數的模型。

目前 Transformer 已成為 NLP 領域的主流,衍生出了 BERT、GPT 等模型,但是在計算機視覺領域,Transformer 的應用卻很少。本文介紹 Google 在 2020 年的一篇論文《An Image is Worth 16*16 Words: Transformers for Image Recognition at Scale》,論文中提出了 Vision Transformer (ViT),能直接利用 Transformer 對影象進行分類,而不需要卷積網路。為了讓 ViT 模型可以處理圖片,首先要把圖片劃分為很多個區塊 (類似 NLP 中的 token),然後把區塊序列傳入 ViT。

論文地址:https://arxiv。org/pdf/2010。11929。pdf

程式碼地址:https://github。com/google-research/vision_transformer

實驗發現,在中等大小的資料集 (如 ImageNet) 上訓練得到的 ViT 模型準確率比 SOTA 模型 ResNet (CNN 模型) 低了幾個百分點。論文作者認為這是因為 CNN 模型具有平移不變性和區域性性等歸納偏好 (inductive biases),而 Transformer 並沒有這種歸納偏好,因此在資料量不足的時候準確率不如 CNN 模型。但是如果在大規模的影象資料集 (14M-300M 圖片) 上預訓練 ViT 再遷移到小規模資料,則 ViT 可以取得非常好的效果,甚至可以超過當前圖片識別的最好結果。

2.Vision Transformer

用 Vision Transformer 進行影象分類

ViT 模型結構圖

2.1 ViT 模型

上圖是 ViT 的結構,傳統的 Transformer 輸入時一維的 token embedding 序列,為了處理二維的影象,需要把影象分為幾個區塊 (patch)。給定一個 H×W×C 的影象以及區塊大小 P,可以把影象劃分為 N 個 P×P×C 的區塊,N=H×W/(P×P)。得到區塊後要使用線性變換轉為 D 維特徵向量,再加上位置編碼向量即可。和 BERT 類似,ViT 在序列之前也加入了一個分類標誌位 [class]。ViT 輸入序列

z

如下面的公式所示,其中

x

表示一個影象區塊。

用 Vision Transformer 進行影象分類

輸入序列 z 計算公式

ViT 模型和 Transformer 基本一樣,輸入序列傳入 ViT,然後利用 [class] 標誌位的最終輸出特徵進行分類。ViT 主要由 MSA (多頭自注意力) 和 MLP (兩層使用 GELU 啟用函式的全連線網路) 組成,在 MSA 和 MLP 之前加上 LayerNorm 和殘差連線。ViT 的公式如下:

用 Vision Transformer 進行影象分類

ViT 公式

2.2 ViT 和 CNN 混合結構

可以使用 CNN 輸出的 feature map 代替原始圖片的區塊序列,將 feature map 劃分為多個區塊,然後用線性對映矩陣

E

進行對映。甚至可以把 feature map 劃分為多個 1×1 的區塊,這相當於直接把 feature map 展開,然後再對映。

2.3 微調和高解析度

ViT 通常在大資料集上預訓練,然後再使用目標資料集微調。因為預訓練資料集和目標資料集類別個數不同,因此需要把最後一層預測層移除,換為初始值為 0 的 D×K 全連線層,K 是目標資料集的類別個數。

在微調階段資料集解析度比預訓練時高通常有比較好的效果。當微調時傳入高解析度的圖片,需要保持區塊 (patch) 的大小不變,此時序列長度會變長,這會導致預訓練得到的 Position Embedding 失去意義。為了解決這個問題,作者採用了插值的方法,根據影象的位置,在預訓練得到的 Position Embedding 中插值。插值過程如下圖所示。

用 Vision Transformer 進行影象分類

插值過程示意圖

3。實驗效果

作者使用了三種規模的 ViT 模型,分別是 Base、Large、Huge,引數量如下表所示。用 ViT-L/16 表示 ViT Large 模型,圖片區塊 (patch) 大小時 16×16。

用 Vision Transformer 進行影象分類

三種規模的 ViT

作者對比了 ViT 和 SOTA 模型 (ResNet) 的分類效果,結果如下表所示,表中 ViT-H/14 使用 JFT-300M 預訓練,ViT-L/16 使用 JFT-300M 和 ImageNet-21K 分別進行預訓練,ResNet 使用 JFT-300M 預訓練。可以看到用 JFT 預訓練的 ViT-L/16 在後續所有分類資料集上的效能都可以與 ResNet 媲美,有些甚至超越了 ResNet,並且 ViT-L 的計算效率遠遠高於 ResNet。

用 Vision Transformer 進行影象分類

和 SOTA 模型比較實驗

作者進行實驗測試預訓練資料量對 ViT 效能的影響,結果如下圖所示。使用了三種不同大小的資料集進行預訓練,資料集從小到大排列為 ImageNet、ImageNet-21k、JFT-300M。灰色的部分是不同規模的 BiT (ResNet) 模型所得到的效能區間。可以看到在預訓練資料集比較小的時候,BiT 比 ViT 更好,但是隨著預訓練資料集變大,ViT 模型會超過 BiT 模型。

用 Vision Transformer 進行影象分類

預訓練資料量對模型效能的影響

作者還對比了預訓練計算量對遷移效果的影響,結果如下圖所示。Hybrid 指 ViT 和 ResNet 的混合模型。在算力和效能對比中發現 ViT 明顯優於 ResNet,可以用更少的算力得到媲美 ResNet 的效能。在算力較小時 Hybrid 模型優於 ViT,但是隨著算力增大,這一現象會消失。

用 Vision Transformer 進行影象分類

預訓練計算量對遷移效果的影響

檢視 ViT 的 Attention,可以發現 ViT 能夠很好地關注與分類相關的區域,如下圖所示。

用 Vision Transformer 進行影象分類

ViT 模型的 Attention

4。參考文獻

An Image is Worth 16*16 Words: Transformers for Image Recognition at Scale