Vision Transformerのモデル構造



# 最新版を更新しました
https://qiita.com/wakayama_90b/items/32fb39e0d609148478c1






**原論文**
- An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale
https://openreview.net/forum?id=YicbFdNTTy


**関連研究**

CNN+ViTモデルの傾向【サーベイ】
https://qiita.com/wakayama_90b/items/96bf5d32b09cb0041c39




# 概要
画像認識分野においてConvolutional Neural Network (CNN)が多く用いられていたが，自然言語処理のTransformer以降にAttention機構を用いて画像認識分野に応用したVision Transformer（ViT)が発表された．VITは，畳み込み処理を使用しないモデルである．Transformerを使用することにより，CNNベースであるBiTと比較して計算効率向上と大量のデータを用いた学習が可能となり，CNNモデルより優れた結果を達成した．
　CNNではカーネルを考慮して特徴を抽出しているため，受容野が局所的になり，離れた画素同士の関係を捉えることが困難である．一方で，ViTは画像をパッチ分割し，Self-Attention (SA) でパッチ間の関係を捉えることが可能である．
ViTは画像を複数のパッチ (小領域画像) に分割し，パッチを単語 (Token) のように扱うことによりTransformerの処理を実現する．
　まず，パッチ分割した画像をそれぞれの特徴ベクトルに置き換える．次に，学習可能なClass TokenをTokenの特徴ベクトルの先頭に追加する．Class Tokenは学習後のクラス識別の入力として使用される．Class Tokenを含めた特徴ベクトルをTransformer Encoderに入力し，Class Tokenを使用してクラス識別を行う．また，Class Tokenと入力画像に対する正解ラベルとの損失計算をクロスエントロピー損失を用いて計算することで，クラス分類タスクにおいて精度向上を達成している．

# ViTのモデル構造

これからViTの各モジュールについて説明する．



![スクリーンショット 2023-05-27 16.28.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457775/bac3086e-abb4-5fbd-3205-68e8cadbd87b.png)


## 入力画像




![スクリーンショット 2023-05-27 18.07.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457775/e2993299-4f4e-9255-c804-0c0f8f739214.png)

自然言語分野のTransformerを使用して処理を行うため，画像を変換する必要がある．
ViTのはじめに行う処理として，入力画像を固定のサイズにパッチ（小領域）分割する．この1つのパッチを単語のように扱うことによって，Transformerの処理を実現する．
Transformerは単語をベクトルに変換し，単語ベクトル同士の類似度計算を行う処理をするため，各パッチはベクトルに変換するためにFlatten（1次元化）と低次元空間に学習する線形射影を行う．その出力をパッチ特徴量（Patch Embedding）と呼ぶ．
次に，学習可能なClass TokenをTokenの特徴ベクトルの先頭に追加する．Class Tokenは学習後のクラス識別の入力として使用される．

### 線形射影の可視化
線形射影で学習したフィルタを示す．各パッチの特徴を低次元で表現するためにCNNの低次元層のフィルタのようなものが学習される．


![スクリーンショット 2023-05-27 18.02.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457775/5c1f0ae1-c692-99be-5887-294ccd6b971f.png)



## Position Embedding

Position Embedding（PE）はClass Tokenを含めた特徴ベクトルに位置情報を付与する役割を持つ．
ViTはパッチを並列に処理するため，位置を保存できない．そのため，ViTでは学習可能なパラメータであるPEを付与することにより，位置情報を考慮する．


~~~math
PE_{(pos,2i)} = \sin(pos/10000^{2i/d_{model}})\\

PE_{(pos,2i+1)} = \cos(pos/10000^{2i/d_{model}})
~~~

ここで，$pos$は系列データの位置，$i$はPEの次元，$d_{model}$はPEの次元数を示す．偶数番目に上段の式，奇数番目に下段の式を使用する．


### Position Embeddingの可視化
あるPEと他のPEとの類似度を可視化したもので，近い位置のPE同士は似たような値（似た模様）になるように学習される．
例えば,左上に黄色を示す(1,1)と比較して(1,2)や(2,1)などは距離が近いため，可視化したPEが似た値を示す．反対に，(7,7)と比較すると，右下に黄色を示して，PEの値が類似していないことがわかる．
また，学習によってPEが計算されるため，ハイパーパラメータやデータセットの影響を受けてPEは変化する．


![スクリーンショット 2023-05-27 18.02.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457775/9a745d91-db11-f43e-fc7e-97328c25a68d.png)




## Transformer Encorder
Transformer Encoderとは入力されたパッチの関係性を考慮する処理を行う機構である．
Multi-Head AttentionはTransformerのScaled Dot-Product Attention（self-attention）を複数重ねることにより，Head毎に異なる特徴が得られるため，アンサンブルのような効果による精度向上が見込める．
（アンサンブルとはそれぞれで色んな認識やってどんな特徴があったかあとで共有しよう！ってやること）
Transformer EncorderはMulti-Head Attention（空間の認識）とMLP（チャンネル方向の認識），Norm，その処理を行わないスキップ接続で構成されている．それぞれの仕組みを説明する．


![スクリーンショット 2023-05-27 18.18.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457775/06fb9c61-6427-4de8-6d2e-5a1369196eb5.png)


### Multi-Head Attention
Multi-Head Attentionとは，Transformerの主となるアテンション機構である．そのAttentiton機構をScaled Dot-Product Attention（self-attention）と呼び，その名の通り，内積 (Dot-Product) を次元数の平方根で割る (Scaled) 処理を行う．

~~~math
Attention(Q,K,V)=\mathrm{softmax} \left( \frac{Q K^\mathrm{T}}{\sqrt{d}} \right) V
~~~

ここで，$d$は次元数，$Q=W_qx$，$K=W_kx$，$V=W_vx$を示す．self-attentionは主にトークンベクトルの類似度計算を行なっている．
Q（クエリ），K（キー），V（バリュー）は元は同じ特徴マップxが入力される．元が同じのQ，K，Vでは類似度計算が成り立たないため，それぞれの行列$W_qx$，$W_kx$，$W_v$で線形変換する．


初めに，Queryと転置したKeyを内積する．ベクトルの内積はベクトルの向きが同じであれば，高い値，ベクトルの向きが違う方向の場合に低い値を出力するため．内積で高い値が出力することは行列内にあるベクトルの特徴が似ていることを意味する．そのため，QueryとKeyの内積は類似度の計算を行なっていることになる．
図の左に一例を示し，関係の深いパッチ同士は高い値を示す．パッチ間の関係性を全てのパッチの組み合わせで行うため，遠い画素同士の関係を捉えることが可能になる．

次に，内積計算の次に出力の値を$[0,1]$にするsoftmax関数を適用する．その際に，QueryとKeyの内積により1つ高い値を出力した場合，他の値がほとんど0に近い値に調整されてしまうことを防ぐために次元数の平方根で割る処理を行う．

最後に，これらの処理をした値にValueをかけて出力とする．このように，画像全体を並列に計算することにより，遠い画素同士の関係を捉えるが可能なモデルになる．



### Multi layer perceptron (MLP) 
Multi layer perceptron (MLP) とはFeed Forward Network (FFN) とも呼び，GELU関数を1回使用した2層のネットワークを使用している．Multi-Head Attentionは空間方向を混ぜる変換を行うのに対して，MLPは次元方向に混ぜる変換を行う．GELU関数はReLU関数より滑らかな関数である．


### Layer Normalization（Norm）
Layer Normalizationとは，各サンプルの値を平均0，分散1で正規化することで，学習の高速化を実現する処理である．ResNetに使用されたBatch Normと比較してバッチサイズに依存しない．したがってバッチサイズの異なる場合でも正規化可能である．


## 学習方法
クラス識別する際はClass Tokenを使用してMLPを行いクラス確率とする．正解ラベルと誤差計算を行い重みパラメータを更新する．





# 実験結果
## クラス分類タスクとデータセット
ViTは大規模データセットにおいて精度向上を達成した．
左の図はImageNet、ImageNet-21k、JFT300Mそれぞれの精度を示す．ImageNetではCNNベースモデルであるBiTと比較してViTの精度は低下する．JFT300MではViTモデルが精度向上する結果となる．右の図ではJFT300Mの画像使用枚数を横軸として，右にいくにつれて使用する画像枚数が増加する．
**このことからViTは小規模なデータセット（ImageNet-1k）では実力が発揮できずに大規模データセットが必要であることがわかる．**

![スクリーンショット 2023-05-27 18.43.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457775/3e3c8e20-ef83-f042-5bf0-4552897bbb1b.png)


## ViTの受容野
ViTはCNNと比較して画像全体を並列に処理するため受容野が広い利点がある（画像で遠くにある情報も取り入れて認識するよ．反対にCNNはカーネルの範囲でしか認識ができない）．
self-attentionで類似度計算して関係を強く示した位置の平均を図に示す．縦軸は受容野の広さ（上にいくほど広い受容野）を示し，横軸に層の深さ（右にいくほど深い層）を示す．
**浅い層では局所的な認識と大局的な認識の両方を行う傾向にあり，深い層では大局的な認識を行う傾向にある．*

![スクリーンショット 2023-05-27 18.02.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457775/c827fe89-5ac5-50d2-8b87-7f62f829cdbb.png)







# まとめ
Vision Transformerは画像認識分野にTransformerのAttention機構を取り入れたモデルであり，大規模なデータセットでCNNベースモデルを上回る精度を達成した．
しかし，ViTにも問題点は様々あり，正解ラベルが付与されたJFT300M（3億枚のデータセット）は用意するのにコストが高すぎる．ImageNetでも精度を向上できるようなViTの派生モデルは現在多く発表されている．また，クラス分類タスク以外に，物体検出，セグメンテーションに特化したViTモデルも発表されており，ViTの今後の活躍に期待したい．

# 参考資料

https://www.docswell.com/s/k_fujita/K8GWD9-2023-08-01-220755#p20