こんにちは。AIテックメディア編集部です。
「動画内の特定の人物だけを切り抜きたい」「移動する車をフレーム単位で正確に追いたい」。これまで、これらを自動化するには膨大なアノテーションコストか、精度の低いトラッキングモデルに妥協する必要がありました。
しかし、Metaが2024年7月末に公開した「Segment Anything Model 2 (SAM 2)」が、その常識を過去のものにしました。SAM 2は、画像と動画を単一のモデルで扱う「ユニファイドモデル」であり、驚異的なのはそのリアルタイム性とゼロショット性能です。
本記事では、SAM 2の技術的革新性だけでなく、実務でどう「爆速」活用できるか、Pythonコードを交えて解説します。
SAM 2は何が革命的なのか?:画像と動画の壁を破壊
初代SAM(Segment Anything Model)は静止画の切り抜きにおいて圧倒的な汎用性を見せましたが、動画への適用にはフレームごとの処理が必要で、一貫性や処理速度に課題がありました。SAM 2はこの課題を「メモリメカニズム」の導入により解決しています。
「記憶」を持つAIアーキテクチャ
SAM 2の最大の特徴は、動画処理において過去のフレーム情報を記憶し、未来のフレーム予測に活用する点です。
- プロンプトの受付: クリック、ボックス、マスクで対象を指定(SAM 1同様)。
- メモリエンコーダ: 過去のフレームの特徴や予測結果を記憶。
- オクルージョン対応: 対象物が一時的に隠れても、再び現れた際に「同じ物体」として再認識・追跡が可能。
【比較表】SAM 1 vs SAM 2 vs 従来の動画モデル
実務選定において重要なのは「精度」と「速度」です。以下に主な違いをまとめました。
| 特徴 | SAM (初代) | 従来の動画特化モデル | SAM 2 |
|---|---|---|---|
| 対象データ | 画像のみ | 動画のみ | 画像 & 動画 (ネイティブ) |
| 処理速度 | 画像ごとに推論 (動画は遅い) | モデルによるが精度とトレードオフ | リアルタイム (約44fps) |
| アノテーション | ゼロショット対応 | 特定クラスの学習が必要な場合が多い | 動画でもゼロショット対応 |
| 一貫性 | フレーム間でIDが飛びやすい | 比較的高い | メモリ機構により極めて高い |
実務での「爆速」活用シナリオとPython実装
ここでは、具体的にGoogle Colabやローカル環境(要GPU)でSAM 2を動かし、動画内のオブジェクトを追跡するコード例を紹介します。映像編集の自動化や、製造ラインでの異常検知の前処理として即戦力になります。
事前準備
まず、公式リポジトリからインストールし、事前学習済みモデル(チェックポイント)をダウンロードします。
# 必要なライブラリのインストール
pip install git+https://github.com/facebookresearch/segment-anything-2.git
# チェックポイントのダウンロード (例: Hiera-Largeモデル)
wget https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_large.pt
【実装】動画からオブジェクトを指定して追跡する
最初のフレームで「ここを追跡せよ」と座標(クリック)を与え、残りのフレームを推論させる基本的なフローです。
import torch
from sam2.build_sam import build_sam2_video_predictor
# デバイス設定
device = "cuda" if torch.cuda.is_available() else "cpu"
if device == "cpu":
print("警告: GPUが検出されませんでした。処理が遅くなる可能性があります。")
# モデルのロード
checkpoint = "./sam2_hiera_large.pt"
model_cfg = "sam2_hiera_l.yaml" # 設定ファイルはrepo内のconfigsを参照
predictor = build_sam2_video_predictor(model_cfg, checkpoint, device=device)
# 動画の読み込み(フレームごとにJPEG化されたディレクトリを指定する場合が多い)
video_dir = "./my_video_frames"
inference_state = predictor.init_state(video_path=video_dir)
# 1. 最初のフレームで追跡対象をクリック(座標)で指定
# 例: 座標 (x=200, y=300) をポジティブ(1)として指定
prompt_frame_index = 0
points = np.array([[200, 300]], dtype=np.float32)
labels = np.array([1], dtype=np.int32)
_, out_obj_ids, out_mask_logits = predictor.add_new_points(
inference_state=inference_state,
frame_idx=prompt_frame_index,
obj_id=1,
points=points,
labels=labels,
)
# 2. 動画全体へ伝播(プロパゲーション)
video_segments = {} # 結果を格納する辞書
for out_frame_idx, out_obj_ids, out_mask_logits in predictor.propagate_in_video(inference_state):
video_segments[out_frame_idx] = {
out_obj_ids[i]: (out_mask_logits[i] > 0.0).cpu().numpy()
for i in range(len(out_obj_ids))
}
print("追跡完了!セグメンテーション結果がvideo_segmentsに格納されました。")
ポイント: propagate_in_video メソッドを呼ぶだけで、AIが時間軸に沿って対象を追跡します。途中で対象が見切れても、再度フレームインした際に再検出する精度が非常に高いのがSAM 2の強みです。
日本市場へのインパクトと独自の分析
日本の産業構造において、SAM 2は以下の分野で特に強力な「実利」を生むと考えられます。
- アニメ・映像制作のDX化
日本が誇るアニメ産業やテレビ制作において、ロトスコープ(実写映像から人物などを切り抜く作業)は莫大な工数を要します。SAM 2の精度であれば、ラフな切り抜きを完全に自動化でき、クリエイターは仕上げ作業に集中できます。
- 製造業・建設業の安全監視
工場内や建設現場での「特定の作業員」や「特定の重機」の動線分析において、専用モデルを学習させるコストが障壁でした。SAM 2なら、学習なし(ゼロショット)で現場の映像から即座に追跡を開始でき、危険エリアへの侵入検知などを安価に実装可能です。
- 医療画像の3D解析
CTやMRIのスキャンデータ(実質的な動画/スライス画像)において、臓器や腫瘍の立体的なセグメンテーションを、数点のクリックだけで行えるようになります。診断支援AIの開発スピードが劇的に向上するでしょう。
よくある質問 (FAQ)
- Q1: SAM 2は商用利用可能ですか?
- A: MetaはSAM 2をApache 2.0ライセンスで公開しています。したがって、商用利用も可能です。ただし、同時に公開されたデータセット(SA-V dataset)はCC BY 4.0ライセンス等、条件が異なる場合があるため確認が必要です。
- Q2: 推論にはどれくらいのGPUスペックが必要ですか?
- A: リアルタイム性能(~44fps)を出すには、A100やH100などのハイエンドGPUが推奨されますが、T4やRTX 30/40シリーズでも動作します。軽量モデル(Hiera-Tinyなど)を選べば、より低いスペックでも実用的な速度が出ます。
- Q3: 動画ファイル(mp4など)を直接読み込めますか?
- A: 現在の公式実装では、動画を一度フレーム画像(JPEG等)の連番ファイルに展開してから読み込む形式が推奨されています。FFmpegなどで事前に展開する処理を挟むのが一般的です。
まとめ
SAM 2は、単なる「動画版SAM」ではなく、時間的整合性を持った「視覚的記憶」への第一歩です。静止画と動画の境界線がなくなり、あらゆる映像データがリアルタイムで構造化データとして扱えるようになります。
エンジニアやクリエイターは、もはや「切り抜き」に時間を割く必要はありません。その時間を「どう活用するか」に充てるべきです。ぜひ上記のコードを参考に、ご自身のプロジェクトでSAM 2の威力を体感してください。


コメント