# AN IMAGE IS WORTH 16x16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE
**Anonymous authors**
Under review as a conference paper at ICLR 2021
## ABSTRACT
* 在 NLP 領域上,Transformer architecture 是一個很重要的架構,但不常使用在 vision
* attention 常和 cnn 結合
* 這篇文章要直接應用 transformation , 且證明可以表現得很好
* 可以用更少的資源,且訓練得跟 SOTA 一樣好
## INTRODUCTION
* 由於 self-attention 在 NLP 上的成功,有人他用來取代 CNN(Ramachandran et al., 2019; Wang et al., 2020a),但只有理論上的有效率,而由於他是用特別的 attention patterns ,因此在大型資料集上的 image recognition 還是 classic ResNet-like architecture 比較好
* 因為 NLP 處理的資料是序列化的,而 cv 處理的資料是三維的,長寬和channels,所以將影響分割成 patchs ,並將 patches 變成依序列線性嵌入,當成 transformer 的輸入。
## METHOD
使用很接近 original Transformer(Vaswani et al., 2017)
,這樣有意的設計是為了有 scalable NLP Transformer architectures 的優勢,還有有效率的實作,希望可以超越最好的 CNN
### 3.1 VISION TRANSFORMER

**a. 將圖片序列化**
首先將圖像分割成 patchs ,然後將每個 patch 重塑成一個向量,得到 flattened patch。
如果圖片是 `H x W x C` 用 `P x P` 大小的 patch 去分割圖片得到 N 個 patch ,那每個 patch 的 shape 是 `P x P x C` ,轉成向量會是 $P^2C$ 維的向量,將 N 個 patch reshape 的向量 concat 在一起得到, $N x (P^2C)$ 的 2D vector , 和 NLP輸入 transformer 的詞向量相同。
**b. Position embedding**
因為 transformer 本身沒有位置訊息,我們要用 position embedding 將位置訊息加到模型。
如上圖,編號 0-9 的紫色框表示各個位置的 positon embedding ,而紫框旁邊的粉色框是經過 linear projection 之後的 flattened patch 向量。 使用將 position embedding 和 patch embedding 相加的方式結合 position 訊息。
**c. Learnable embedding**
上圖帶星號的粉色框不是通過某個 patch 產生的,他是一個 learnable embedding(既做 $X_{class}$),其作用類似於 BERT中的 [class] token。
在 BERT 中。[class] token 經過 encoder 後對應的結果作為整個句子的表示; 類似地,這裡 $X_{class}$ 經過 encoder 後的對應的結果也最為整個圖的表示。
為什麼 BERT 或者這篇文章的 ViT 要多加一個 token 呢?因為如果人為指定一個 embedding ,經過 encoder 得到的結果作為整體的表示,則不可避免會使得整體表示偏向於這個指定 embedding 的訊息,而這個新增的 token 沒有語意訊息,與圖像的任何 patch 無關,所以可以公平的反應全圖的資訊。
**d. Transformer encoder
---
4.5 INSPECTING VISION TRANSFORMER

在中等規模的數據集上(例如ImageNet),transformer 模型的表現不如ResNets; 而當數據及的規模擴大, transformer 模型的效果接近或是超過目前的一些 SOTA。
## 補充




**Transformer**

## Reference
https://arxiv.org/abs/2010.11929
https://zhuanlan.zhihu.com/p/266311690
###### tags: `uscc論文`