ViTとは
Vision Transformer / ビジョントランスフォーマー
画像をパッチの系列に分割してTransformerで処理する画像認識アーキテクチャ
ひとことで言うと
画像を小さなタイルに切り分けて「単語の列」のように扱い、文章用のTransformerで画像を認識する仕組み。
概要
ViT(Vision Transformer)とは、画像を小さなパッチの系列に分割し、Transformerで処理する画像認識アーキテクチャを指す。 画像を16×16ピクセル程度のパッチへ切り分けて各パッチをトークンとして扱い、言語向けに設計されたTransformerをほぼそのまま画像へ適用した。 大規模データでの事前学習を前提とすればCNNを上回る精度を達成できると示し、画像認識の主流アーキテクチャをCNNからTransformerへ転換させる契機になった。 CLIPの画像エンコーダやVLMの視覚部分など、マルチモーダルモデルの構成要素としても広く使われている。
歴史
2020年10月にGoogleの研究者ら(Dosovitskiyら)が論文「An Image is Worth 16x16 Words」で発表した。
アーキテクチャ
入力画像を16×16ピクセル等の固定サイズのパッチに分割し、各パッチを線形層でベクトルへ変換したうえで学習可能な位置埋め込みを加算する。分類トークン([CLS])を系列の先頭に追加し、標準的なTransformerエンコーダ(自己注意+フィードフォワード層)に通した後、[CLS]トークンの出力を分類ヘッドに入力する。
ワークフロー
画像をパッチに分割 → 各パッチを線形射影しトークン化 → 位置埋め込みを加算 → Transformerエンコーダで自己注意を適用 → [CLS]トークンの出力を分類ヘッドで処理 → クラス確率を出力する。
コード例
timmライブラリでの事前学習済みViTの利用
import timm
import torch
model = timm.create_model("vit_base_patch16_224", pretrained=True)
model.eval()
x = torch.randn(1, 3, 224, 224)
logits = model(x)利点
欠点
- CNNが持つ「近い画素は関連しやすい」という帰納バイアスを持たないため、比較的小規模なデータでの学習では性能が伸びにくい
- 画像の解像度が上がるほどパッチ数(系列長)が増え、自己注意の計算量が急増する
- 局所的な細部の特徴抽出では、畳み込みベースのモデルに劣る場合がある
比較
- CNN — CNNが畳み込みによる局所的な特徴抽出を積み重ねるのに対し、ViTは自己注意で画像全体のパッチ間の関係を直接捉える
関連用語
よくある質問
ViTは少量データでも使える?
ViT単体を少量データからゼロに学習すると精度が伸びにくいとされる。大規模データで事前学習済みのモデルをファインチューニングして使うのが一般的。
参考文献
- Research PaperAn Image is Worth 16x16 Words (arXiv)