Vision Transformerは、人工知能・機械学習分野における重要な概念・技術です。
Vision Transformer(ViT、ビジョントランスフォーマー)は、2020 年に Google が発表した画像認識用のモデルアーキテクチャです。自然言語処理で大成功した Transformer を画像にそのまま適用するという革新的なアプローチで、畳み込みニューラルネットワーク(CNN)が長年支配していた画像認識分野に大きな変革をもたらしました。
| 項目 | CNN | ViT |
|---|---|---|
| 基本演算 | 畳み込み | Self-Attention |
| 受容野 |
| 局所的(徐々に拡大) |
| 全体(最初から) |
| 帰納的バイアス | 強(位置不変性) | 弱 |
| データ要件 | 中規模で OK | 大規模必須 |
| 計算量 | O(n) | O(n²) |
| スケーラビリティ | 中 | 非常に高い |
| パラメータ効率 | 高 | 中 |
| モデル | パッチ | レイヤー | 幅 | ヘッド | パラメータ |
|---|---|---|---|---|---|
| ViT-Tiny | 16 | 12 | 192 | 3 | 5M |
| ViT-Small | 16 | 12 | 384 | 6 | 22M |
| ViT-Base | 16 | 12 | 768 | 12 | 86M |
| ViT-Large | 16 | 24 | 1024 | 16 | 307M |
| ViT-Huge | 14 | 32 | 1280 | 16 | 632M |
| ViT-G/14 | 14 | 48 | 1664 | 16 | 1.8B |
| モデル | トップ 1 精度 | 事前学習 |
|---|---|---|
| ResNet-50 | 76.0% | ImageNet-1K |
| EfficientNet-B7 | 84.4% | ImageNet-1K |
| ViT-Base/16 | 77.9% | ImageNet-1K |
| ViT-Base/16 | 84.0% | ImageNet-21K |
| ViT-Large/16 | 87.8% | ImageNet-21K |
| ViT-Huge/14 | 88.6% | JFT-300M |
重要: ViT は大規模データでの事前学習が必須。ImageNet-1K のみでは CNN に劣る。
ViT の Attention Map は「モデルが画像のどこを見ているか」を可視化できる:
import torch
import timm
# 事前学習済み ViT をロード
model = timm.create_model('vit_base_patch16_224', pretrained=True)
model.eval()
# 推論
from PIL import Image
from torchvision import transforms
transform = transforms.Compose([
transforms.Resize(224),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
img = Image.open('cat.jpg')
input_tensor = transform(img).unsqueeze(0)
with torch.no_grad():
output = model(input_tensor)
pred = output.argmax(dim=1)
print(f"Predicted class: {pred.item()}")
| モデル | GPU | 学習時間 |
|---|---|---|
| ViT-Base | 8× V100 | 2-3 日(ImageNet-1K) |
| ViT-Large | 16× A100 | 3-5 日 |
| ViT-Huge | 64× A100 | 1-2 週間 |
| ViT-G/14 | 1024× TPU v3 | 数日 |
| モデル | GPU | 画像/秒 |
|---|---|---|
| ViT-Tiny | RTX 4060 | 1000+ |
| ViT-Base | RTX 4070 | 300 |
| ViT-Large | RTX 4090 | 150 |
| ViT-Huge | RTX 4090 | 50 |