[徹底解説]SAM3ってなんだ?
TL;DR
「テキストで全インスタンスを検出・セグメント・追跡できるようになったSAM」
2025年11月19日、MetaがリリースしたSegment Anything Model 3(SAM 3)は、前作SAM 2の「クリックして1つのオブジェクトをセグメント」から、**「テキストで"赤い車"と言えば画像・動画内の全ての赤い車を自動検出・セグメント・追跡」**へと進化した基盤モデル。
SAM3とは
Promptable Concept Segmentation(PCS) を実現する統合基盤モデル。
【従来のSAM/SAM 2】Promptable Visual Segmentation(PVS)
ユーザー: 「ここをクリック」「この範囲をボックス指定」
モデル: その1つのオブジェクトをセグメント
【SAM 3】Promptable Concept Segmentation(PCS)
ユーザー: 「yellow school bus」(テキスト)
モデル: 画像・動画内の全てのスクールバスを検出→セグメント→追跡
SAM 2との違い
| 項目 |
SAM 2 |
SAM 3 |
| プロンプト |
ポイント、ボックス、マスク |
テキスト、画像例、ポイント、ボックス、マスク |
| 出力範囲 |
指定した1オブジェクト |
全マッチングインスタンス |
| タスク |
PVS(Visual Segmentation) |
PCS(Concept Segmentation)+ PVS |
| 語彙数 |
- |
270K評価済み、4M+学習済みコンセプト |
| パラメータ |
38M〜224M |
848M |
| アーキテクチャ |
Hiera + Memory |
Perception Encoder + DETR検出器 + SAM2トラッカー |
アーキテクチャ
┌─────────────────────────────────────────────────────────┐
│ Perception Encoder (PE) │
│ ・Vision + Text 統合バックボーン │
│ ・54億画像テキストペアで事前学習 │
└─────────────────────────────────────────────────────────┘
│
┌───────────┴───────────┐
▼ ▼
┌───────────────────┐ ┌───────────────────┐
│ DETR Detector │ │ SAM2 Tracker │
│ ・テキスト条件付け │ │ ・メモリバンク │
│ ・Presence Token │ │ ・時間追跡 │
│ ・オープン語彙検出 │ │ ・ID維持 │
└───────────────────┘ └───────────────────┘
│ │
▼ ▼
全インスタンス フレーム間
検出&セグメント 追跡&ID維持
Presence Token: SAM3の革新的な追加要素。「そのコンセプトが画像内に存在するか」を判定する専用トークン。「赤い服の選手」と「青い服の選手」のような類似プロンプトの混同を防ぐ。
性能ベンチマーク
SA-Co ベンチマーク(新規)
【SA-Co/Gold 画像検出 cgF1スコア】
SAM 3: 55.7 ← 圧倒的
OWLv2: 24.5
DINO-X: 22.5
Gemini 2.5: 14.4
→ SAM 3は競合の2倍以上の性能
人間との比較
・SA-Coベンチマーク(270K コンセプト)で人間性能の75-80%を達成
・既存ベンチマーク(LVIS等)の50倍以上のコンセプト数で評価
既存ベンチマークでの性能
| ベンチマーク |
指標 |
SAM 3 |
従来SOTA |
改善 |
| LVIS (Zero-shot) |
mAP |
48.8 |
38.5 |
+10.3 |
| MOSEv2 (VOS) |
J&F |
+6.5pt |
- |
SAM2超え |
| CountBench |
- |
SOTA |
- |
オブジェクトカウント |
動画ベンチマーク
| データセット |
cgF1 |
pHOTA |
| SA-V test |
30.3 |
58.0 |
| YT-Temporal-1B |
50.8 |
69.9 |
| SmartGlasses |
36.4 |
63.6 |
できること
1. テキストプロンプトによる全インスタンスセグメンテーション
from sam3.model_builder import build_sam3_image_model
from sam3.model.sam3_image_processor import Sam3Processor
model = build_sam3_image_model()
processor = Sam3Processor(model)
image = Image.open("parking_lot.jpg")
inference_state = processor.set_image(image)
# テキストで全ての車を検出
output = processor.set_text_prompt(
state=inference_state,
prompt="red sports car"
)
masks = output["masks"] # 全インスタンスのマスク
boxes = output["boxes"] # バウンディングボックス
scores = output["scores"] # 信頼度スコア
2. 動画内オブジェクト追跡
from sam3.model_builder import build_sam3_video_predictor
video_predictor = build_sam3_video_predictor()
video_path = "safari.mp4"
# テキストで全ての象を追跡
response = video_predictor.handle_request(
request=dict(
type="start_session",
video_path=video_path
)
)
# 自動的に全フレームで追跡・ID維持
3. 画像例(Exemplar)によるセグメンテーション
# ポジティブ例(これを探して)
results = model("image.jpg", bboxes=[100, 150, 300, 400], labels=[1])
# ネガティブ例(これは除外)
results = model(
"image.jpg",
bboxes=[[100, 150, 300, 400], [500, 200, 600, 350]],
labels=[1, 0] # 1=ポジティブ, 0=ネガティブ
)
4. SAM 3 Agent(MLLMとの連携)
複雑な質問をMLLM(Llama等)が解釈し、SAM 3に適切なプロンプトを送る。
質問: 「馬を制御するために使われている道具は?」
↓ MLLM が解釈
プロンプト: "bridle", "reins", "saddle"
↓ SAM 3 が各プロンプトでセグメント
結果: 手綱、鞍、くつわ等のマスク
必要なハードウェアスペック
最小要件
| 項目 |
要件 |
| GPU |
NVIDIA CUDA対応GPU(CUDA 12.6以上) |
| VRAM |
16GB+ |
| RAM |
32GB+ 推奨 |
| ストレージ |
モデルチェックポイント約3GB |
推奨環境
| 用途 |
GPU |
性能目安 |
| 画像推論(開発) |
RTX 4090 (24GB) |
1画像30-50ms |
| 画像推論(本番) |
H200 |
1画像30ms(100+オブジェクト) |
| 動画リアルタイム |
H200 x 2 |
30FPS、最大10オブジェクト |
| 動画リアルタイム |
H200 x 4 |
30FPS、最大28オブジェクト |
| 動画リアルタイム |
H200 x 8 |
30FPS、最大64オブジェクト |
注意点
⚠️ 現状CUDAのみサポート
・Apple Silicon (MPS) 非対応
・CPU推論 非対応
・コード内に.cuda()がハードコード
⚠️ 動画の推論コストはオブジェクト数に線形スケール
・1人追跡 = 高速
・50人追跡 = フレームレート激減
SAM 3 / SAM 2 / SAM 1 比較表
| 項目 |
SAM 1 |
SAM 2 |
SAM 3 |
| リリース |
2023年4月 |
2024年7月 |
2025年11月 |
| 対象 |
画像のみ |
画像 + 動画 |
画像 + 動画 |
| プロンプト |
ポイント/ボックス/マスク |
ポイント/ボックス/マスク |
テキスト/画像例/ポイント/ボックス/マスク |
| タスク |
PVS |
PVS |
PCS + PVS |
| 出力 |
1オブジェクト |
1オブジェクト |
全インスタンス |
| 追跡 |
✗ |
○(メモリベース) |
◎(検出器+トラッカー分離) |
| オープン語彙 |
✗ |
✗ |
◎(4M+コンセプト) |
| パラメータ |
636M (ViT-H) |
38M-224M |
848M |
| 学習データ |
SA-1B (11M画像) |
SA-V (50K動画) |
SA-Co (5.2M画像, 52.5K動画, 4M+コンセプト) |
主なユースケース
映像編集・クリエイティブ
・「person in red shirt」で特定人物にエフェクト適用
・モーショントレイル、スポットライト効果
・Meta Editsアプリへの統合予定
データラベリング・アノテーション
・テキストプロンプトで大量データを自動ラベリング
・SAM 3でラベル → 小型モデル(YOLO等)を学習
→ エッジデバイスにデプロイ
野生動物・環境モニタリング
・SA-FARI: 10,000+カメラトラップ動画
・全動物をフレームごとにセグメント
・FathomNet: 海洋生物のセグメンテーション
産業・ロボティクス
・特定部品の全数検出
・欠陥検査(「scratch」「dent」等)
・在庫カウント
制限事項
【曖昧性の問題】
・「bat」→ 野球のバット? コウモリ? 文脈依存
・「small window」「cozy room」など主観的コンセプトは苦手
【ドメイン外への汎化】
・熱画像、特殊産業画像等は学習データ外
・ファインチューニングが必要
【計算コスト】
・848Mパラメータ、高いGPU要求
・エッジデバイス直接実行は困難
→ EfficientSAM3等の蒸留モデル開発中
インストール・使い方
インストール
# 1. リポジトリクローン
git clone https://github.com/facebookresearch/sam3.git
cd sam3
# 2. インストール
pip install -e .
# Jupyter notebook用
pip install -e ".[notebooks]"
# 3. Hugging Faceでチェックポイントへのアクセス申請
# https://huggingface.co/facebook/sam3
# 4. 認証
huggingface-cli login
画像セグメンテーション
import torch
from PIL import Image
from sam3.model_builder import build_sam3_image_model
from sam3.model.sam3_image_processor import Sam3Processor
# モデルロード
model = build_sam3_image_model()
processor = Sam3Processor(model)
# 画像セット
image = Image.open("your_image.jpg")
inference_state = processor.set_image(image)
# テキストプロンプトでセグメント
output = processor.set_text_prompt(
state=inference_state,
prompt="dog"
)
# 結果取得
masks = output["masks"]
boxes = output["boxes"]
scores = output["scores"]
print(f"Found {len(masks)} dogs!")
関連リソース
まとめ
SAM 1: 「クリックしたところをセグメント」
SAM 2: 「動画でも追跡できるよ」
SAM 3: 「"赤い車"って言えば全部見つけるよ」
進化のポイント:
・PVS(Visual)→ PCS(Concept)へのパラダイムシフト
・テキスト/画像例によるオープン語彙セグメンテーション
・検出器とトラッカーの分離設計
・Presence Tokenによる誤検出抑制
・270K評価コンセプト、4M+学習コンセプトの巨大データセット
実用上は「SAM 3でラベリング → 軽量モデル(YOLO等)を学習」というワークフローが現実的。エッジ展開にはEfficientSAM3のような蒸留モデルを待つか、クラウドAPI経由で利用するのがベター。
参考文献