AI・機械学習
初級

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

Vision Transformerは、人工知能・機械学習分野における重要な概念・技術です。

0 回閲覧
0 いいね
2026/4/25 更新
関連タグ
AI
機械学習
初心者向け

Vision Transformer(ViT)

概要

Vision Transformer(ViT、ビジョントランスフォーマー)は、2020 年に Google が発表した画像認識用のモデルアーキテクチャです。自然言語処理で大成功した Transformer を画像にそのまま適用するという革新的なアプローチで、畳み込みニューラルネットワーク(CNN)が長年支配していた画像認識分野に大きな変革をもたらしました。

基本的な仕組み

画像をトークン化

  1. パッチ分割: 画像を 16×16 等の固定サイズパッチに分割
  2. フラット化: 各パッチをベクトル化(16×16×3 = 768 次元)
  3. 線形埋め込み: 埋め込み次元に変換
  4. 位置エンコーディング: パッチの位置情報を付加

Transformer Encoder

  • Self-Attention: 全パッチ間の関係を計算
  • Feed-Forward: 非線形変換
  • Layer Normalization: 安定化
  • Residual Connection: 勾配伝播

分類ヘッド

  • CLS トークン: 分類用の特別なトークン
  • MLP: 最終的な分類器

CNN との違い

項目CNNViT
基本演算畳み込みSelf-Attention
受容野局所的(徐々に拡大)全体(最初から)
帰納的バイアス強(位置不変性)弱
データ要件中規模で OK大規模必須
計算量O(n)O(n²)
スケーラビリティ中非常に高い
パラメータ効率高中

モデルサイズ

モデルパッチレイヤー幅ヘッドパラメータ
ViT-Tiny161219235M
ViT-Small1612384622M
ViT-Base16127681286M
ViT-Large1624102416307M
ViT-Huge1432128016632M
ViT-G/1414481664161.8B

性能(ImageNet-1K)

モデルトップ 1 精度事前学習
ResNet-5076.0%ImageNet-1K
EfficientNet-B784.4%ImageNet-1K
ViT-Base/1677.9%ImageNet-1K
ViT-Base/1684.0%ImageNet-21K
ViT-Large/1687.8%ImageNet-21K
ViT-Huge/1488.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-Base8× V1002-3 日(ImageNet-1K)
ViT-Large16× A1003-5 日
ViT-Huge64× A1001-2 週間
ViT-G/141024× TPU v3数日

推論(自作 PC)

モデルGPU画像/秒
ViT-TinyRTX 40601000+
ViT-BaseRTX 4070300
ViT-LargeRTX 4090150
ViT-HugeRTX 409050

関連用語

  • Transformer、Self-Attention
  • CNN、ResNet、EfficientNet
  • Swin Transformer、DeiT
  • CLIP、DINOv2、MAE
  • SAM(Segment Anything)
この記事について
カテゴリーAI・機械学習
難易度初級
作成日2025/7/11