Vision-Transformer 資料&コードまとめ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1005959/0e953497-04c0-0a13-0b57-6af1f672bb04.png)
# はじめに
最近Vision-Transformer(ViT)について実験を始めたumeboshiです! ViTとは2020年にAlexey Dosovitskiyらによって発表された,Transformerを用いることでで畳み込み構造を完全に排除したモデルのことです。ImageNet/CIFAR-100/VTABなどのタスクでSoTAモデルのCNNを同程度または上回る性能を達成しており、SoTAモデルであるBiTやNoisyStudentと比べて計算コストも1/15程度まで削減されています。  
この記事ではViTについて 理解を深めたい/とりあえず実験をしたい という方を対象に,読むべき論文/解説記事とおすすめの学習用コードのリンクをまとめています。
# 論文まとめ  
-  [AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE](https://openreview.net/pdf?id=YicbFdNTTy)
    -  全ての始まりVision-Transformerの原著
-  [Training data-efficient image transformers & distillation through attention](https://arxiv.org/pdf/2012.12877.pdf)
    -  教師モデルを蒸留することにより,少量のデータ量で効率的に学習出来るDeiTを提案
-  [Can Vision Transformers Learn without Natural Images?](https://arxiv.org/pdf/2103.13023.pdf)
    -  数式ドリブンデータセット「FractalDB」をVision-Transformer(DeiT)の事前学習に利用
-  [Do Vision Transformers See Like Convolutional Neural Networks?](https://arxiv.org/pdf/2108.08810.pdf)
    -  CNNとViTの内部表現構造の違いを分析
-  [How to train your ViT? Data, Augmentation, and Regularization in Vision Transformers](https://arxiv.org/pdf/2106.10270.pdf)
    -  ViTの容量/事前学習に用いるデータセットにより,データ拡張/正則化の有効性が変化

# Vision-Transformer解説まとめ
- [Transformerメタサーベイ](https://www.slideshare.net/cvpaperchallenge/transformer-247407256)
    - positional encoding(位置情報の付与)の解説
    - Transformerブロックの中身について解説　　
        - Multi-head attention
        - 残差接続(Residual Connection)
        - Layer Normalizationによる正規化
        - Position-wise feed forward networks(2層のMLP)
        - DropOut  
- [画像認識の大革命。AI界で話題爆発中の「Vision Transformer」を解説！](https://qiita.com/omiita/items/0049ade809c4817670d7)
    - ViT原著の日本語解説記事
-  [ビジョン・トランスフォーマーはなぜCNNより強い？その仕組みを解明【論文速報】](https://ja.stateofaiguides.com/20211011-vision-transformers-vs-convnet/)
    -  Do Vision Transformers See Like Convolutional Neural Networks?の解説記事
     
# Attention解説記事まとめ  
- [End-to-End Object Detection with Transformers](https://speakerdeck.com/yushiku/end-to-end-object-detection-with-transformers)
    - 牛久先生によるVision-TransformerのAttention構造についての解説
- [論文解説 Attention Is All You Need (Transformer)](https://deeplearning.hatenablog.com/entry/transformer)
    - Attention Is All You Need論文の日本語解説。 図が分かりやすい。
- [図で理解するTransformer](https://qiita.com/birdwatcher/items/b3e4428f63f708db37b7)
    - これも図が分かりやすいAttentionの解説
- [作って理解する Transformer / Attention](https://qiita.com/halhorn/items/c91497522be27bde17ce)
    - pythonでコーディングしながらTransformer/Attentionを解説
 
# Transformerの改善/派生モデル
- [Rethinking Positional Encoding in Language Pre-training](https://openreview.net/pdf?id=09-528y2Fgf)
    - positional encodingの改善。Attentionに足す 
- [Are Sixteen Heads Really Better than One?](https://arxiv.org/pdf/1905.10650.pdf)
    - Multi-head attentionの改善。冗長なheadを取り除くことでテスト時の性能を維持しつつ計算コスト削減
- [Multi-Head Attention with Diversity for Learning Grounded Multilingual Multimodal Representations](https://aclanthology.org/D19-1154.pdf)
    - Multi-Head Attentionの改善。Attention head間の多様性を上げる正則化項を導入
- [Longformer: The Long-Document Transformer](https://arxiv.org/pdf/2004.05150.pdf)
    - Attentionの計算範囲を工夫することで計算量削減
- [REFORMER: THE EFFICIENT TRANSFORMER](https://arxiv.org/pdf/2001.04451.pdf)
    - Attention層での内積計算を効率化・メモリ使用量削減
- [DPT: Deformable Patch-based Transformer for Visual Recognition](https://arxiv.org/pdf/2107.14467.pdf)
    - パッチサンプリングの工夫。固定サイズのパッチを用いず,変換可能なパッチモジュールを使用
- [Vision Transformer with Progressive Sampling](https://arxiv.org/pdf/2108.01684.pdf)
    - パッチサンプリングの工夫。パッチの位置を動的に変化させることで,物体の重要部分が境界で分かれることを防ぐ
- [Focal Self-attention for Local-Global Interactions in Vision Transformers](https://arxiv.org/pdf/2107.00641.pdf)
    - パッチサンプリングの工夫。近くのパッチは細かく,遠くのパッチは大きく区切ることで全体のパッチ数を減らし計算量削減
- [Conformer: Local Features Coupling Global Representations for Visual Recognition](https://arxiv.org/pdf/2105.03889.pdf)
    - globalな特徴を捉えられるTransformer+localな特徴強を捉えられるCNNの融合モデル。ConformerはCNNとTransformerを並列させたtwo-streamモデル
- [Visual Transformers: Token-based Image Representation and Processing for　Computer Vision](https://arxiv.org/pdf/2006.03677.pdf)
    - 浅い層の処理をCNNで置き換えて計算効率を上げたVision-Transformer
- [CvT: Introducing Convolutions to Vision Transformers](https://arxiv.org/pdf/2103.15808.pdf)
    - Positional embeddingの代わりに畳み込み使用
    - Attention時のQuery,Key,Valueの変換を線形変換の代わりに畳み込み使用
    
# サーベイ論文  
- [A Survey on Vision Transformer](https://arxiv.org/pdf/2012.12556.pdf)
    - 2020/12/23
- [Transformers in Vision: A Survey](https://arxiv.org/pdf/2101.01169.pdf)
    - 2021/01/04
- [Perspectives and Prospects on Transformer Architecture for Cross-Modal Tasks with Language and Vision](https://arxiv.org/pdf/2103.04037.pdf)
    - 2021/03/06
- [A Survey of Visual Transformers](https://arxiv.org/pdf/2111.06091.pdf)
    - 2021/11/11


# github Repository  
- [jeonsworld/ViT-pytorch](https://github.com/jeonsworld/ViT-pytorch)
    - Vision-Transformerモデルの事前学習,Finetuneが出来る。AttentionMapの可視化コード付き

:::note warn 
このリポジトリのtrain.pyはTrainAccを計算していません。ValidAccと同じように出力したい場合は注意が必要です。  
Validデータセットに適用する画像前処理と比べ, Trainデータセットに適用する前処理はより複雑で,画像分類の問題設定を難しくしています。ですので,このままのTrainデータセットに対してTrainAccを出力しようとするとValidAccより低い値が出力されます。
:::
:::note info
学習用に使用するTrain画像とは別に用意した, Validデータセット用の画像前処理を適用したTrainデータセットに対してTrainAccを計算しましょう。
:::
- [lucidrains/vit-pytorch](https://github.com/lucidrains/vit-pytorch)
    - 10種を超える様々なVision-Transformerを使用可能
- [nakashima-kodai/FractalDB-Pretrained-ViT-PyTorch](https://github.com/nakashima-kodai/FractalDB-Pretrained-ViT-PyTorch)
    - FractalDBを使用してVision-Transformer(DeiT)モデルを事前学習出来る。
- [facebookresearch/deit](https://github.com/facebookresearch/deit)
    - timmを利用して複数のDeiTモデルを事前学習,Ｆinetune可能