跳轉到

7.4 Vision Transformer

範例程式:Open In Colab

Vision Transformer 的核心想法,是把圖片切成一塊一塊 patch,再把每個 patch 當成序列中的 token。這樣影像分類就可以使用 Transformer encoder 處理。本篇使用小型合成圖形資料示範 ViT 的基本流程。

1. 學習目標

本篇聚焦 ViT 如何把影像轉成 Transformer 可處理的序列。CNN 用卷積掃圖片;ViT 則把圖片切成 patches,將每個 patch 投影成 embedding,再加上位置資訊後送進 Transformer encoder。

2. Image Patch 的直覺

若圖片大小是 32x32,patch size 是 4x4,就會得到 (32 / 4) * (32 / 4) = 64 個 patches。每個 patch 會被展平成向量,再經過 Dense layer 轉成 patch embedding。

3. 實作流程

Notebook 會產生三類 32x32 RGB 圖片:vertical、horizontal、diagonal。接著建立 patch layer、patch encoder、Transformer encoder block 與分類頭,完成小型 ViT 影像分類模型。

4. 如何套用自己的圖片?

換成自己的圖片時,要確認圖片大小可以被 patch size 整除,並依類別數調整最後一層輸出。資料量不大時,ViT 容易不如 CNN 或 transfer learning 穩定,因此建議先把本篇當成架構理解範例,再和 CNN baseline 比較。

5. 小結

Vision Transformer 把影像任務轉成序列任務。理解 patch embedding 與 position embedding 後,就能看懂 ViT 如何把 Transformer 從文字延伸到影像。