AI・機械学習
初級
Vision Transformer(ビジョントランスフォーマー)
Vision Transformerは、人工知能・機械学習分野における重要な概念・技術です。
0 回閲覧
0 いいね
2026/4/25 更新
関連タグ
AI
機械学習
初心者向け
Vision Transformer(ViT)
概要
Vision Transformer(ViT、ビジョントランスフォーマー)は、2020 年に Google が発表した画像認識用のモデルアーキテクチャです。自然言語処理で大成功した Transformer を画像にそのまま適用するという革新的なアプローチで、畳み込みニューラルネットワーク(CNN)が長年支配していた画像認識分野に大きな変革をもたらしました。
基本的な仕組み
画像をトークン化
- パッチ分割: 画像を 16×16 等の固定サイズパッチに分割
- フラット化: 各パッチをベクトル化(16×16×3 = 768 次元)
- 線形埋め込み: 埋め込み次元に変換
- 位置エンコーディング: パッチの位置情報を付加
Transformer Encoder
- Self-Attention: 全パッチ間の関係を計算
- Feed-Forward: 非線形変換
- Layer Normalization: 安定化
- Residual Connection: 勾配伝播
分類ヘッド
- CLS トークン: 分類用の特別なトークン
- MLP: 最終的な分類器
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 |
性能(ImageNet-1K)
| モデル | トップ 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 の派生モデル
DeiT(Data-efficient Image Transformers、Meta、2021)
- データ効率: ImageNet-1K のみで学習可能
- Distillation Token: 知識蒸留の追加トークン
- 結果: ViT-Base と同等性能
Swin Transformer(Microsoft、2021)
- 階層構造: ピラミッド型のマルチスケール
- Shifted Window: 局所 Attention の改善
- 物体検出・セグメンテーション: 強力
- 効率性: CNN に近い計算量
MAE(Masked Autoencoder、Meta、2021)
- 自己教師あり: マスクされたパッチを再構成
- データ効率: ラベルなしで学習
- ViT の事前学習手法として標準化
DINOv2(Meta、2023)
- 自己蒸留: Teacher-Student 構造
- 汎用特徴: 分類、セグメンテーション等で強力
- LVD-142M: 1.42 億枚で学習
CLIP(OpenAI、2021)
- マルチモーダル: 画像 + テキスト
- ViT ベース: ViT-L/14 が代表
- Zero-shot: 分類タスク
Attention の可視化
ViT の Attention Map は「モデルが画像のどこを見ているか」を可視化できる:
- 下位層: エッジ、テクスチャ
- 中位層: パーツ(目、耳)
- 上位層: オブジェクト全体、シーン
実装例(PyTorch / timm)
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()}")
応用分野
画像分類
- ImageNet: ベンチマーク記録更新
- 医療画像: 病変検出
- 衛星画像: 土地被覆分類
物体検出
- DETR: ViT ベース検出器
- Swin Transformer: 標準バックボーン
セグメンテーション
- SegFormer: 効率的なセグメンテーション
- SAM(Segment Anything Model): 汎用セグメンテーション
生成タスク
- ViT-VQGAN: 離散トークン化
- DiT(Diffusion Transformer): Sora、Stable Diffusion 3
計算リソース
学習に必要な GPU
| モデル | 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 | 数日 |
推論(自作 PC)
| モデル | GPU | 画像/秒 |
|---|---|---|
| ViT-Tiny | RTX 4060 | 1000+ |
| ViT-Base | RTX 4070 | 300 |
| ViT-Large | RTX 4090 | 150 |
| ViT-Huge | RTX 4090 | 50 |
関連用語
- Transformer、Self-Attention
- CNN、ResNet、EfficientNet
- Swin Transformer、DeiT
- CLIP、DINOv2、MAE
- SAM(Segment Anything)