Re Reference AI

アーキテクチャ

ViTとは

Vision Transformer / ビジョントランスフォーマー

画像をパッチの系列に分割して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より高い精度を達成できる
  • 自己注意により画像内の離れた領域間の関係を直接捉えられる
  • CLIPやVLMの画像エンコーダとして転用しやすく、マルチモーダルモデルの標準部品になっている

欠点

  • CNNが持つ「近い画素は関連しやすい」という帰納バイアスを持たないため、比較的小規模なデータでの学習では性能が伸びにくい
  • 画像の解像度が上がるほどパッチ数(系列長)が増え、自己注意の計算量が急増する
  • 局所的な細部の特徴抽出では、畳み込みベースのモデルに劣る場合がある

比較

  • CNNCNNが畳み込みによる局所的な特徴抽出を積み重ねるのに対し、ViTは自己注意で画像全体のパッチ間の関係を直接捉える

関連用語

TransformerCNNCLIPSelf-Attention

よくある質問

ViTは少量データでも使える?

ViT単体を少量データからゼロに学習すると精度が伸びにくいとされる。大規模データで事前学習済みのモデルをファインチューニングして使うのが一般的。

CNNとどちらを使うべき?

計算資源に乏しい場合や小規模データではCNNが有利なこともある一方、大規模データや事前学習済みモデルを利用できる場合はViT系が高精度になりやすい。用途とデータ量に応じて選択される。

参考文献

関連する年表

Transformerの歴史

自己注意機構(Self-Attention)のみで構成されるTransformerアーキテクチャが2017年に登場して以降、自然言語処理から画像・音声まで広がっていった変遷をたどる。

アーキテクチャ7件のイベント / 2017 - 2023

関連Zenn記事