【速報】Meta「SAM 2」が動画セグメンテーションを再定義!リアルタイム追跡の実装コード付き解説

AIニュース

こんにちは。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は以下の分野で特に強力な「実利」を生むと考えられます。

  1. アニメ・映像制作のDX化

    日本が誇るアニメ産業やテレビ制作において、ロトスコープ(実写映像から人物などを切り抜く作業)は莫大な工数を要します。SAM 2の精度であれば、ラフな切り抜きを完全に自動化でき、クリエイターは仕上げ作業に集中できます。

  2. 製造業・建設業の安全監視

    工場内や建設現場での「特定の作業員」や「特定の重機」の動線分析において、専用モデルを学習させるコストが障壁でした。SAM 2なら、学習なし(ゼロショット)で現場の映像から即座に追跡を開始でき、危険エリアへの侵入検知などを安価に実装可能です。

  3. 医療画像の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の威力を体感してください。

コメント

タイトルとURLをコピーしました