画像認識向けTransformerを振り返る

この頃、バカンスシーズンなのか、ネタ切れなのか、画像向けTransformer論文が一息ついているので、ここでちょっと振り返ってみる。

**2017年：　そもそもの始まり**
[Attention Is All You Need](https://arxiv.org/pdf/1706.03762.pdf)
自然言語向けに2017年に出たこのGoogle論文で、Attention構造が自然言語の方であっという間に広がる。
当然ながら、この流れで、計算量がかかるAttention部分がどんどんと違う手法で置き換えられた論文が増えてくる。

**2019年：　画像認識にうっすらと浸透**
[画像認識でもConvolutionの代わりにAttentionが使われ始めたので、論文まとめ](https://qiita.com/TeamN/items/d4287e15f40ced670b6a)
この記事で書いたように、ConvolutionをAttentionに変えようという論文が2019年からチラホラと出てくる。
この頃は、まだおっかなびっくりAttention構造に取り換えてもいけるぞ、とか、精度変わらず計算量少なくぞ、とかそんな感じで、まだまだ流行るかどうかという感じ。

**2020年夏：　ViTとDETRで世界が変わる**
[画像認識屋さんのための「はじめてのTransformer」](https://qiita.com/TeamN/items/12f73dbf8ebedfb1edd7)
この記事で書いたように、Transformerがそのまま画像認識に導入されて、人気に火がついた。ViTは9月Googleから、DETRはFAIRから5月。
特にViTの人気がすさまじく、これを調整したSOTA大会開幕。

**2021年5月：　ViTチームがMLP-mixerを発表**
[MLP-Mixer: An all-MLP Architecture for Vision](https://arxiv.org/abs/2105.01601)
ViTで世界を変えたGoogleのチームがそもそもAttentionなんかいらなくて、MLPで行けるんじゃないか説を唱えてちゃぶ台返し。この段階では、まだSOTAというわけではなくとも、計算のシンプルな感じは尋常じゃなく、後追い論文が大量発生中。
(2021/10/12 追記:　で、実際後追いされまくっているので、[同時期に出たMLP系の論文構造をまとめる記事](https://qiita.com/TeamN/items/4135f9a8971d5185ea74)を追加した。)

**2021年6月以降**
毎週のように、全然違うネットワークが出てくるのを細かく追いかけていたので、以下にまとめる。（注意：　2020年夏から2021年夏の間も恐ろしい数の論文が出ているが以下に含んでいない。）
現状、何を指してAttentionかという哲学論争になりそうなほど、いろんな種類のAttentionが提案されている。計算量が大きいため、別のに置き換えるという研究がNLPにおいても多くなされているが、画像の方では、変えたところで、なんら精度が悪くなるわけでもないようなので、じゃあ、そもそもこいつはなんなんだと。そこに来てMLP-mixerが出てきたので、そろそろオリジナルのAttention構造は画像認識からはいなくなるんじゃなかろうか。

# ViT系論文

### とりまConvと混ぜとくか系
[CoAtNet: Marrying Convolution and Attention for All Data Sizes](https://arxiv.org/pdf/2106.04803.pdf)
Google論文。ConvとAttentionのHybridネットワークCoAtNet（コートネットと呼ぶ）を作成。ImageNetで、他のデータなし86.9% top-1、もっとデータを足すと89.8%でSOTA。

[CMT: Convolutional Neural Networks Meet Vision Transformers](https://arxiv.org/pdf/2107.06263.pdf)
CNNとTransformerのHybrid。かなり小さくてSOTA。

[Early Convolutions Help Transformers See Better](https://arxiv.org/pdf/2106.14881.pdf)
FAIR論文。ViTで、最初からPatchにするんじゃなくて、そこを普通のConvに変える（Transformer1個分と同じサイズ分。なので、Transformerのブロックは一つ減らす）と、精度良くなったし、学習速くなったし、安定するし良いこといっぱい。

### Self-supervisedに導入系
[DETReg: Unsupervised Pretraining with Region Priors for Object Detection](https://arxiv.org/pdf/2106.04550.pdf)
self-supervised pretraining + DETR

[BEIT: BERT Pre-Training of Image Transformers](https://arxiv.org/pdf/2106.08254.pdf)
Microsoft論文。Self-supervisedの手法で、ViTを良くする。

[Efficient Self-supervised Vision Transformers for Representation Learning](https://arxiv.org/pdf/2106.09785.pdf)
Transformerを使ったself-supervised learningのEsViTを開発。DINOとかMoCo-v3に似てる。

[Self-Supervised Learning with Swin Transformers](https://arxiv.org/pdf/2105.04553v2.pdf)
マイクロソフト論文。Self-supervised learningのMoCo V2とBYOLにTransformerのバックボーンを入れたMoBYをTuning。MoCo V3とDINO（バックボーンがDeiT)よりちょっと良い。

[Multi-Stream Transformers](https://arxiv.org/pdf/2107.10342.pdf)
TransformerベースのEncorder-Decorderで、Encorderに分岐を入れると良い。

### スケールアップしたらどうなるか系
[Scaling Vision Transformers](https://arxiv.org/pdf/2106.04560.pdf)
Google論文。モデルの規模、学習データ数、学習時間を大きくして、どうなるか調査。パラメータ数20億でImageNetのTop1：90.45％達成。

[Understanding Robustness of Transformers for Image Classification](https://arxiv.org/pdf/2103.14586.pdf)
Google論文。入力を変えてどれだけRobustかをメインにResNetとViTを比較。大量のデータで学習するとモデルサイズが大きくなればなるほど、ViTはResNetより精度が上がる。中規模データだと変わらない。

How to train your ViT? Data, Augmentation, and Regularization in Vision Transformers
Google論文。ViTのTrainingにはCNNよりもきついRegularization、多くのAugmentationが必要。いろんなセッティングで学習させた50000個のViTモデルを公開。

### いろいろ細かくチューニングをかけて精度上げたぜ系
[Shuffle Transformer: Rethinking Spatial Shuffle for Vision Transformer](https://arxiv.org/pdf/2106.03650.pdf)
Tencentの論文。Tokenの中身を途中でShuffleして精度を上げるTransformer。そのうちCodeを公開。

[VOLO: Vision Outlooker for Visual Recognition](https://arxiv.org/pdf/2106.13112.pdf)
ViTで、パッチを取らないでLocal WindowをつかったOutlook Attentionというのを提案して、追加データなしでSOTA達成。

[PVTv2: Improved Baselines with Pyramid Vision Transformer](https://arxiv.org/pdf/2106.13797v2.pdf)
[Pyramid vision transformer](https://export.arxiv.org/abs/2102.12122)のVersion 2.いろいろConvとか混ぜて、更に良くなった。

[Augmented Shortcuts for Vision Transformers](https://arxiv.org/pdf/2106.15941.pdf)
ViTにaugmented shortcutsというのを入れてfeature collapseを止めてSOTA。

[RAMS-Trans: Recurrent Attention Multi-scale Transformer for Fine-grained Image Recognition](https://arxiv.org/pdf/2107.08192.pdf)
ViTでパッチサイズをDynamicに選ぶことで、だんだんと細かいところを見ていく。

[Refiner: Refining Self-attention for Vision Transformers](https://arxiv.org/pdf/2106.03714.pdf)
head変えて、Conv入れてSOTA。

[Go Wider Instead of Deeper](https://arxiv.org/pdf/2107.11817.pdf)
ViTのFFNレイヤーを変更して、学習可能なパラメータ数を増やすことで、WideNetの学習を良くした。

### ViTはパッチで見るので、細かいところまで見るのが苦手。それをなんとかしたぜ系

##### 細かくみるぜ系
[RegionViT: Regional-to-Local Attention for Vision Transformers](https://arxiv.org/pdf/2106.02689.pdf)
細かく見るTokenと大まかに見るTokenを組み合わせる。いろんなデータセットで試したら、ViT系のSOTAと同じか更に良い結果になった。

[Not All Images are Worth 16x16 Words: Dynamic Vision Transformers with Adaptive Sequence Length](https://arxiv.org/pdf/2105.15075.pdf)
Huaweiと精華大学の論文。ViTは16x16でパッチを作るけど、簡単に出来るやつはもっと大きくて良いし、難しいのはもっと細かく切った方がいいから、Dynamic Vision Transformers (DVT)っていう大きいのから順にわかるまでやって行くのを考えた。ざっくりやるときのパラメータをReuseするから、小さくて精度が良くなるっぽい。

[Transformer in Convolutional Neural Networks](https://arxiv.org/pdf/2106.03180v1.pdf)
TokenをGridに分けて、その中でAttentionを計算し、じわじわとくっつけて行くことで、ネットワークを小さくして、精度を良くする。

[Focal Self-attention for Local-Global Interactions in Vision Transformers](https://arxiv.org/pdf/2107.00641.pdf)
ViTで、近くは細かく見て、遠くはざっくり見ることにしてSOTA。

[CSWin Transformer: A General Vision Transformer Backbone with Cross-Shaped Windows](https://arxiv.org/pdf/2107.00652.pdf)
ViTで、縦方向と横方向のウィンドウを並列で見ることでSOTA。

[Local-to-Global Self-Attention in Vision Transformers](https://arxiv.org/pdf/2107.04735.pdf)
ViTの同じLayer内で、近くを細かく見て、遠くをざっくり見る。

##### 通常のCNNみたいにPyramid化して順番に見ていくぜ系

[ResT: An Efficient Transformer for Visual Recognition](https://arxiv.org/pdf/2105.13677.pdf)
ViTのAttentionの部分をちょっと変えて、BackboneをResNetチックにDownsampleするようにして全体の計算量減らした。

[P2T: Pyramid Pooling Transformer for Scene Understanding](https://arxiv.org/pdf/2106.12011.pdf)
PoolingとDownsamplingを含めたViTで、Classification以外にも強い。このバックボーンでいろんなタスクでSOTA。

[What Makes for Hierarchical Vision Transformer?](https://arxiv.org/pdf/2107.02174.pdf)
ViTからの[Swin transformer](https://arxiv.org/abs/2103.14030)のMHSAブロックを交換。

### ViTの圧縮系
##### 見る範囲減らす系
[DynamicViT: Efficient Vision Transformers with Dynamic Token Sparsification](https://arxiv.org/pdf/2106.02034.pdf)
精華大学とUCLAの論文。重要じゃないTokenを落としながらInferenceを速くするネットワーク。

[Chasing Sparsity in Vision Transformers: An End-to-End Exploration](https://arxiv.org/pdf/2106.04533.pdf)
ViTのSparsityを使った圧縮。

[CAT: Cross Attention in Vision Transformer](https://arxiv.org/pdf/2106.05786.pdf)
ViTでLocalityとPyramid構造を使った圧縮。

[Scaling Vision with Sparse Mixture of Experts](https://arxiv.org/pdf/2106.05974.pdf)
Google論文。ViTでSparsityを使って、必要のないTokenの計算をしないで圧縮。

[Vision Transformer Pruning](https://arxiv.org/pdf/2104.08500.pdf)
ViTで重要ではないFeatureをPruneする。

##### 計算小さくする系
[A Survey of Transformers](https://arxiv.org/pdf/2106.04554.pdf)
TransformerのSurvey。Transformer圧縮向けx-former系の分類。

[XCiT: Cross-Covariance Image Transformers](https://arxiv.org/pdf/2106.09681.pdf)
QとKのinteractionをtransposeすることで、quadraticのattention構造をlinearにした論文

[VISION XFORMERS: EFFICIENT ATTENTION FOR IMAGE CLASSIFICATION](https://arxiv.org/pdf/2107.02239.pdf)
NLPでTransformerを速くしたいろんな手法をViTに導入して速くした。

[Contextual Transformer Networks for Visual Recognition](https://arxiv.org/pdf/2107.12292.pdf)
Attentionの構造をシンプルにした。
##### NAS使うよ系
[AutoFormer: Searching Transformers for Visual Recognition](https://arxiv.org/pdf/2107.00651.pdf)
ViT向け、One-ShotのNASで圧縮。

[GLiT: Neural Architecture Search for Global and Local Image Transformer](https://arxiv.org/pdf/2107.02960.pdf)
ViT用のNAS。

##### Distillation
[Efficient Vision Transformers via Fine-Grained Manifold Distillation](https://arxiv.org/pdf/2107.01378.pdf)
ViTのDistillationをイメージレベルじゃなくて、パッチレベルでやって小さくする。

### Theoretical系
[When Vision Transformers Outperform ResNets without Pretraining or Strong Data Augmentations](https://arxiv.org/pdf/2106.01548.pdf)
GoogleとUCLAの論文。ViTとMLP-mixerはsharp local minimaに落ち込むので、SAM(sharpness-aware optimizer)を使ってLandscapeをスムーズにすると更にうまく行く。

[Vision Transformers with Patch Diversification](https://arxiv.org/pdf/2104.12753.pdf)
ViTの学習が不安定なのをモデルを変えず、Loss関数を変えて解消。

### Object detectionとかSemantic Segmentationとか別の問題にも使えるよ系
[You Only Look at One Sequence: Rethinking Transformer in Vision through Object Detection](https://arxiv.org/pdf/2106.00666.pdf)
YOLO+ViT。DETRに似てるけどちょっと違う。小さいモデルだとDETRより良い。

[Fully Transformer Networks for Semantic Image Segmentation](https://arxiv.org/pdf/2106.04108.pdf)
Semantic segmentationをTransformerのみ（Conv層を混ぜない）で行う。Pyramid構造ありのEncoder-Decoder構造。

[Per-Pixel Classification is Not All You Need for Semantic Segmentation](https://arxiv.org/pdf/2107.06278.pdf)
FAIR論文。SSもinstance segmentationのmask classificationと考えることができる。新しくDETRっぽいMaskFormerと言うのを考えた。SSとpanoptic segmentationでSOTA。

[CBNetV2: A Composite Backbone Network Architecture for Object Detection](https://arxiv.org/pdf/2107.00420v5.pdf)
Object detection向けのBackboneの形。細かいのとざっくりしたのを両方見られる。

# MLP-mixer系論文
[Pay Attention to MLPs](https://arxiv.org/pdf/2105.08050.pdf)
MLP-mixerと同時期に出たこれまたGoogle論文。NLPでもVisionでもTransformer並みに良い。

[ResMLP: Feedforward networks for image classification with data-efficient training](https://arxiv.org/pdf/2105.03404.pdf)
これまたMLP-mixerと同時期に出たFAIR論文。

[S2-MLP: Spatial-Shift MLP Architecture for Vision](https://arxiv.org/pdf/2106.07477v1.pdf)
Baidu論文。MLP-mixerを良くしたよ。channel mixingのみですごくシンプル。

[Vision Permutator: A Permutable MLP-Like Architecture for Visual Recognition](https://arxiv.org/pdf/2106.12368.pdf)
ViTのAttentionパーツをPermute-MLPに変換。MLP-mixerと違って、パッチをTokenとして行列化させずに絵の場所情報は取っておく。追加データなしで学習出来て、他のよりかなり良い。

[AS-MLP: AN AXIAL SHIFTED MLP ARCHITECTURE FOR VISION](https://arxiv.org/pdf/2107.08391.pdf)
MLP系でSOTA。Axialごとにシフトしてそれを混ぜる。S2-MLPに似てる？

[CycleMLP: A MLP-like Architecture for Dense Prediction](https://arxiv.org/pdf/2107.10224.pdf)
今までのMLPと違って、local windowを導入することで学習をLinearにして、SSとかObject detectionとかにも使いやすくした。

# Vit vs MLP-mixer vs NEW

[Exploring Corruption Robustness: Inductive Biases in Vision Transformers and MLP-Mixers](https://arxiv.org/pdf/2106.13122.pdf)
ViTはMLP-mixer、ResNet-50よりもCorruptionにRobust。

[Global Filter Networks for Image Classification](https://arxiv.org/pdf/2107.00645.pdf)
精華大学論文。ViTのAttentionをFFTでfrequency domainでやる。ViTやMLP-mixerに比べて効率的。

[Rethinking Token-Mixing MLP for MLP-based Vision Backbone](https://arxiv.org/pdf/2106.14882v1.pdf)
百度論文。spatial invariantなToken mixingを考えた。FFTを使う。