什麼是 視覺變換器(Vision Transformer)?

Vision Transformer (ViT) 是一種將 Transformer 架構應用於圖像識別的深度學習模型,它將圖像分割成小塊,並將其視為序列進行處理。

核心概念

Vision Transformer (ViT) 的核心概念是將 Transformer 架構從自然語言處理 (NLP) 領域應用到電腦視覺 (CV) 領域。傳統上,卷積神經網路 (CNN) 是電腦視覺任務的主流方法,但 ViT 證明了 Transformer 在圖像識別方面也能取得出色的表現。

  • 圖像塊 (Patches): ViT 首先將輸入圖像分割成一系列大小相等的圖像塊。例如,一個 224x224 的圖像可以被分割成 16x16 的圖像塊,得到 196 個圖像塊。每個圖像塊都被視為一個 token,類似於 NLP 中的單詞。
  • 線性嵌入 (Linear Embedding): 每個圖像塊都被線性投影到一個高維空間中,形成圖像塊嵌入 (patch embedding)。這個線性嵌入層的作用是將圖像塊轉換成 Transformer 可以處理的向量表示。
  • 位置編碼 (Positional Encoding): 由於 Transformer 本身不具有位置感知能力,因此需要添加位置編碼來告知模型每個圖像塊的位置資訊。位置編碼可以是學習到的,也可以是固定的 (例如,正弦和餘弦函數)。
  • Transformer 編碼器 (Transformer Encoder): ViT 使用標準的 Transformer 編碼器來處理圖像塊序列。Transformer 編碼器由多個自注意力 (Self-Attention) 層和前饋神經網路 (Feed-Forward Network) 層組成。
  • 分類頭 (Classification Head): 在 Transformer 編碼器的輸出端,添加一個分類頭來進行圖像分類。分類頭通常是一個多層感知器 (MLP),用於將 Transformer 編碼器的輸出映射到類別標籤。

運作原理

ViT 的運作原理可以概括為以下幾個步驟:

  1. 圖像分割: 將輸入圖像分割成一系列圖像塊。
  2. 線性嵌入: 將每個圖像塊線性投影到一個高維空間中,形成圖像塊嵌入。
  3. 位置編碼: 添加位置編碼來告知模型每個圖像塊的位置資訊。
  4. Transformer 編碼器: 使用 Transformer 編碼器處理圖像塊序列,提取圖像的特徵。
  5. 分類頭: 使用分類頭將 Transformer 編碼器的輸出映射到類別標籤。

更詳細的解釋如下:

  • 圖像塊的生成: 假設輸入圖像的尺寸為 H x W x C,其中 H 是圖像的高度,W 是圖像的寬度,C 是圖像的通道數。將圖像分割成 N 個圖像塊,每個圖像塊的尺寸為 P x P x C,其中 P 是圖像塊的大小。因此,N = (H/P) x (W/P)。
  • 線性嵌入的計算: 將每個圖像塊展平成一個向量,然後使用一個線性層將其投影到一個高維空間中。線性層的權重矩陣的尺寸為 (P x P x C) x D,其中 D 是嵌入的維度。因此,每個圖像塊嵌入的尺寸為 D。
  • 位置編碼的添加: 將位置編碼添加到每個圖像塊嵌入中。位置編碼的尺寸也為 D。位置編碼可以是學習到的,也可以是固定的。常用的固定位置編碼是正弦和餘弦函數。
  • Transformer 編碼器的處理: 將圖像塊嵌入序列輸入到 Transformer 編碼器中。Transformer 編碼器由多個自注意力層和前饋神經網路層組成。自注意力層用於計算每個圖像塊與其他圖像塊之間的相關性。前饋神經網路層用於對每個圖像塊進行非線性變換。
  • 分類頭的應用: 將 Transformer 編碼器的輸出輸入到分類頭中。分類頭通常是一個多層感知器,用於將 Transformer 編碼器的輸出映射到類別標籤。分類頭的輸出是一個向量,其長度等於類別的數量。使用 Softmax 函數將分類頭的輸出轉換成概率分佈。

ViT 的成功證明了 Transformer 架構在電腦視覺領域的潛力。與 CNN 相比,ViT 具有以下優點:

  • 全局感受野: Transformer 的自注意力機制可以捕捉圖像中任意兩個圖像塊之間的關係,從而具有全局感受野。而 CNN 的感受野通常是局部的。
  • 可擴展性: Transformer 的計算複雜度與輸入序列的長度成平方關係,因此 ViT 可以很容易地擴展到更大的圖像和更高的解析度。
  • 並行計算: Transformer 的自注意力機制可以並行計算,因此 ViT 可以充分利用 GPU 的並行計算能力。

實際應用

Vision Transformer (ViT) 在許多電腦視覺任務中都取得了出色的表現,包括:

  • 圖像分類: ViT 在 ImageNet 等圖像分類數據集上取得了與最先進的 CNN 相當甚至更好的結果。
  • 物體檢測: ViT 可以作為物體檢測模型的骨幹網路,例如 DETR (Detection Transformer)。
  • 語義分割: ViT 可以用於語義分割任務,例如分割圖像中的不同物體。
  • 圖像生成: ViT 可以用於圖像生成任務,例如生成逼真的人臉圖像。
  • 影片理解: ViT 可以用於影片理解任務,例如識別影片中的動作和事件。

常見誤區

  • 誤區 1: ViT 比 CNN 更好。 ViT 和 CNN 各有優缺點。ViT 具有全局感受野和可擴展性,但計算複雜度較高。CNN 具有局部感受野和較低的計算複雜度,但難以捕捉圖像中遠距離的關係。在實際應用中,需要根據具體的任務和數據集選擇合適的模型。
  • 誤區 2: ViT 不需要大量的訓練數據。 ViT 通常需要大量的訓練數據才能取得良好的表現。這是因為 Transformer 的參數數量較多,需要大量的數據才能充分訓練。如果訓練數據不足,ViT 容易過擬合。
  • 誤區 3: ViT 的訓練很困難。 ViT 的訓練與傳統 CNN 類似,可以使用標準的訓練方法和優化器。然而,由於 ViT 的模型結構較為複雜,可能需要使用更大的批量大小和更長的訓練時間,以達到最佳的準確度。
  • 誤區 4: ViT 只能用於圖像相關的任務。 雖然 ViT 最初是為圖像分類設計的,但它也可以用於其他任務,例如自然語言處理和語音辨識。通過將 ViT 與其他模型結合,可以解決更複雜的問題。
  • 誤區 5: ViT 的可解釋性很差。 雖然 Transformer 的自注意力機制可以提供一定的可解釋性,但 ViT 的可解釋性仍然是一個研究熱點。研究人員正在努力開發新的方法來理解 ViT 的決策過程。

相關術語

常見問題

← 回到 視覺變換器 快查頁

延伸學習

想看 視覺變換器 的完整影片教學?前往 美第奇 AI 學院