AI・機械学習
上級

SAM 2(サムツー)

Meta AIが2024年発表の画像・動画対応ユニバーサルセグメンテーションモデル。Memory Encoderによるストリーミング処理で動画リアルタイムセグメンテーションを実現。

0 回閲覧
0 いいね
2026/6/7 更新
関連タグ
セグメンテーション
動画理解
基盤モデル
Meta AI
インタラクティブ

SAM 2 とは

SAM 2(Segment Anything Model 2)は、Meta AIが2024年8月に公開したセグメンテーション基盤モデル。初代SAM(2023年4月)が静止画専用だったのに対し、動画にも対応した統合フレームワークとして設計されている。

初代SAMからの進化

特徴SAM(v1)SAM 2
対応入力静止画のみ静止画 + 動画
フレームコンテキストなしMemory Encoderで保持
処理速度N/A(単一フレーム)44fps(SAM 2 Large)
モデルサイズ93M/308M/636M39M/80M/224M
ライセンスApache 2.0Apache 2.0

アーキテクチャ

ストリーミングメモリ設計

SAM 2の核心はストリーミングメモリアーキテクチャ:

  1. Image Encoder: Hiera(階層型ViT)でフレーム特徴抽出
  2. Memory Encoder: 過去フレームのセグメントマスクと特徴を圧縮して記憶
  3. Memory Attention: 記憶情報を現在フレームの特徴にアテンション
  4. Prompt Encoder: クリック・ボックス・マスクプロンプトを処理
  5. Mask Decoder: セグメントマスク・オクルージョン予測を出力

オクルージョン対応

オブジェクトが遮蔽されてもオブジェクトIDを保持し、再出現後に自動追跡を再開。occlusion_scoreフラグで遮蔽状態を検知可能。

モデルバリアント

モデルパラメータVideo FPSSAVval J&F
SAM 2 Tiny39M~100fps75.0
SAM 2 Small46M~86fps76.4
SAM 2 Base+80M~53fps78.2
SAM 2 Large224M~44fps79.8

使用例

動画セグメンテーション

import torch
from sam2.build_sam import build_sam2_video_predictor

predictor = build_sam2_video_predictor(
    "sam2_hiera_large.yaml",
    "sam2_hiera_large.pt",
    device="cuda"
)

with torch.inference_mode():
    state = predictor.init_state(video_path="input.mp4")

    # フレーム0のクリック点でオブジェクト指定
    _, _, masks = predictor.add_new_points_or_box(
        inference_state=state,
        frame_idx=0,
        obj_id=1,
        points=[[500, 300]],  # [x, y]
        labels=[1],           # 1=正, 0=負
    )

    # 全フレームを伝播
    for frame_idx, obj_ids, mask_logits in predictor.propagate_in_video(state):
        masks = (mask_logits > 0).cpu().numpy()

SA-V データセット

SAM 2のトレーニングに使用されたSA-V(Segment Anything Video)データセット:

  • 51,000本の動画、600,000個のアノテーション済みマスクレット
  • 既存動画セグメンテーションデータセットの53倍の規模
  • 屋内・屋外・自然・都市など多様なシーン

活用分野

  • 映像制作: 背景除去・オブジェクト分離の自動化
  • 医療映像: 内視鏡・手術動画での組織追跡
  • スポーツ分析: 選手・ボールのリアルタイム追跡
  • 自動運転: 歩行者・車両の精密セグメント
  • AR/VR: リアルタイムオブジェクトセグメンテーション

HuggingFace利用

from transformers import pipeline
# HF Transformers統合(v4.45+)
pipe = pipeline("image-segmentation", model="facebook/sam2-hiera-large")
result = pipe(image, points_input=[[x, y]], labels_input=[1])
この記事について
カテゴリーAI・機械学習
難易度上級
作成日2026/6/7