---
# System prepended metadata

title: '[CV] AN IMAGE IS WORTH 16X16 WORDS:TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE (2020)'
tags: [Paper]

---

###### tags: `Paper`

[CV] AN IMAGE IS WORTH 16X16 WORDS:TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE (2020)
===
https://arxiv.org/pdf/2010.11929.pdf
https://www.youtube.com/watch?v=TrdevFK_am4 
### Intro
- Inspired by NLP successes, multiple works try combining CNN-like architectures with self-attention, some replacing the convolutions entirely.
    - 後者仍無法使用在大量的資料上因為 transformer 使用上的改動, SOTA仍是 ResNet 家族
- Split an image into patches -> embedding -> each patch is treated as a token(word) to the Transformer
- 在 mid-size 資料上, 表現比 ResNet 差一點點, 作者認為是 Transformer 無 CNN 對於區域的資訊, 但當資料便非常多之後 (14M-300M), Transformer 表現就比 CNN 好

### Related Works
- 此前 Transformer 在圖片的應用多數都是 pixel-wise attention, 但運算量過大, 所以就有各種方法如: local attention, attension on single axis 等變體
- 目前並沒有人使用 global-attention 在整張圖片上

### Method (Vision Transformer, ViT)
![](https://i.imgur.com/4YTA9cN.png)
![](https://i.imgur.com/HYUCYhI.png)
- 每一張圖從 HxWxC 切成 Nx(P^2xC), where N is the sequence length of Transfomer input denoted as (HxW)/P^2
- **(1)** patch 中每個 pixel 被 embedd 成 D-dim vector 並外加一個 init class-vector
- **(2)、(3)** l 代表第幾個 Transformer (MSA: multi-head self-attention, LN: layer-norm)
- **(4)** 最後的 classification head 落在 z(0,L) 
- **Positional Embedding**: 實驗表示 2D embedding 沒有比 1D 好, 採用 1D
    - **方法: patch 為單位, 非 pixel**
        - 無 positional embedding
        - 1D (this paper)
        - 2D: X, Y 軸各學一個 embedding, 各自長度為 D/2, 使用時直接 concate
        - Relative positional embeddings: 將兩兩 patch 之間的距離定義出來, 並使用 1D attension 去學這個距離的 embedding
    - **使用方式:**
        - 進 Transformer 前就先加 (this paper)
        - 每一個 layer 的 input 都加一次並更新 embedding 參數
        - 只學一次但在每一個 layer input 都加入
    - 作者認為因為使用 patch 而非純粹 pixel, 所以空間的 embedding 沒有那麼重要, 尤其輸入比 pixel level 小 (14x14 v.s. 224x224), 所以空間關係應該學得到
    ![](https://i.imgur.com/EcohKBp.png)
- Hybrid Architecture: 把 embbeding 換成 ResNet 前幾層的 feature map (沒什麼用)

### Fine Tuning
- fine tune 使用更高解析度圖片, 保持 patch 內長度相同, 代表 patch 數量 (sequence 變長) 會變多, 而 Transformer 本身的 Wq, Wk 跟輸入 "長度" 無關 (embedding size 有關)
- 因為 seq 長度改變, 1D positional embedding 會失效, 使用 patch 在原圖中的位置使用 1D embedding 做 interpolation

### Result
![](https://i.imgur.com/ptZBrAd.png)
![](https://i.imgur.com/xkp8UrZ.png)
![](https://i.imgur.com/28MIzG1.png)
- Pre-train 資料數量越大越好
![](https://i.imgur.com/5rlQcJa.png)
- transformer 有能力在很淺層就看到很遠的 pixel (甚至大於 10 之後就能看到 global)
![](https://i.imgur.com/W3YGkqc.png)
### 結語
- CNN 強大的 inductive prior(bias) 為從 kernel 範圍去看鄰居再慢慢結合其他 kernel
- 當資料夠多的時候, inductive bias 反而會傷害表現 (transfomer are more general)
- **transfomer 中的 skip connection 可能是之後的重點**


    
