【画像解析】Segment Anything 2 (SAM2)の使い方|Pythonで画像・動画を自動セグメントする手順まとめ【コード例付き】

こんにちは、ゆずかきです。

以前、Segment Anything Model(SAM)の入門向け解説記事を書きました。

yuzukaki-chemical.hateblo.jp

本記事では、「Segment Anything Model 2(SAM 2)」 という、画像・動画の両方で使える最新のセグメンテーション基盤モデルについてじっくり解説してみたいと思います。

動画でも物体を" 塗れる "AIモデル

「背景を消すだけならフォトレタッチツールで十分かもだけど、動画で動き回る対象物を“自動で追跡しながら切り抜き”できるってすごくない?」

――そうなんです、このSAM 2は、クリック(あるいはバウンディングボックスやマスク)といったプロンプトを入力するだけで、画像や動画上の任意のオブジェクトを自動でセグメンテーションし、しかも動画なら時系列で追跡(トラッキング)までしてくれるんです。

「Segment Anything」という言葉を初耳の方も、また“前作”であるSAM(Segment Anything Model 1)をご存知の方も、きっと今回のSAM 2は興味深い存在だと思います。では、一緒に踏み込んでみましょう!

※中盤からコード書く人向けの実装パートがあります!SAM2の概要をフワッと知りたい方は、前半までご覧ください。

※記事中では論文「SAM 2: Segment Anything in Images and Videos (arXiv:2408.00714)」より図や説明を引用しています。


§本記事の構成

  1. はじめに: Segment Anything Model 2(SAM 2)とは?
  2. 導入事例:画像編集から動画追跡まで
  3. SAM 2のアーキテクチャ:ストリーミングメモリが鍵?
  4. データセット: SA-V Datasetの圧倒的スケール
  5. インストール~基本の使い方:画像編・動画編
  6. 従来版SAMとの比較、どこが進化?
  7. よくある疑問Q&A・実運用上の注意点
  8. 今後の展望

それでは、一つずつ順を追って見ていきましょう。


§0. 画像セグメンテーションとは?

本題に入る前に、画像処理について専門家じゃない方に向けて、そもそもセグメンテーションとかマスクって何?という基礎を、直感的に説明しますね。

「画像セグメンテーション」という言葉を聞いても、ピンとこない人も多いかもしれません。
これは簡単に言えば 「画像の中の特定の部分を切り取る技術」 です。

たとえば、スマホの写真編集アプリで「背景をぼかす」機能を使ったことはありませんか?
あれは、人の部分を 「前景」、その他の部分を 「背景」 に分けることで実現されています。

もう少し具体的に見てみましょう。


画像セグメンテーションのイメージ

👇 下の画像を見てください。

左側 :元の写真(白い花が背景の前にある)
右側 :花の部分だけを白く、それ以外を黒くした「セグメンテーションマスク」

セグメンテーションマスクとは?

  • 白い部分 → 「切り取りたい対象」(この場合は花)
  • 黒い部分 → 「それ以外の背景」

こうすることで、たとえば「花だけを抜き出して背景を透明にする」といった画像編集ができるわけです。

マスクの役割とは?

  • Photoshopなどで「レイヤーマスク」を使ったことがある人は、それと同じイメージ。
  • マスク = どの部分を使うか / どの部分を無視するか を指定するフィルターのようなもの
  • 背景を削除する、特定の物体だけ色を変える、AIに「この部分を編集して!」と指示する… などに使える

セグメンテーションと物体検出の違い
よく「物体検出」と「セグメンテーション」は混同されがちですが、ざっくりいうとこんな違いがあります。

技術名 何をする? 出力例
物体検出 (Object Detection) 画像内の特定の物体に「四角い枠(バウンディングボックス)」をつける 🟥 物体が四角で囲まれる
セグメンテーション (Segmentation) 物体の形状にピッタリ沿ったマスクを作る 🌿 物体の輪郭が正確に切り取られる

 
たとえば、👆の猫の画像なら…
(左)物体検出 → 「この四角の中に猫がいるよ!」
(右)セグメンテーション → 「この猫の形にぴったり沿って切り取るよ!」

画像セグメンテーションは、物体検出よりも 「より細かく形状を捉えられる」 のがポイントです。


Segment Anything Model2 (SAM2) が凄い理由

従来、セグメンテーションには「この物体は何?」というカテゴリ(例:犬、猫、車)を学習させる必要がありました。
でもSAM2は違います。

「どんな画像でも、どんなオブジェクトでも、自動でマスクを作れる!」
つまり、事前に学習されていないモノ(たとえば「初めて見る変わった形の花」)でも、形状に沿ってセグメンテーションできる。
しかも、ワンクリックや矩形選択など「超簡単な指示」だけで動く!

これが、SAM2が「Segment Anything(何でも切り取れる)」と言われる理由です。


このあとは、Segment Anything Model2 (SAM2) がどのようにして 「あらゆる画像を簡単にセグメンテーションできるのか?」 を掘り下げていきます。

「セグメンテーションって何?」という疑問がスッキリしたところで、次のセクションへ進んでみましょう! 🌸


§1 はじめに: Segment Anything Model 2(SAM 2)とは?

SAM 2は、Meta(旧Facebook)の研究チームが提案した「プロンプト可能なビジュアルセグメンテーション」を実現するための最新モデルです。前作であるSAM(Segment Anything Model)は、

という点で大きな注目を集めました。

しかし、実際の映像データの多くは「動画」ですよね。
そこで「画像だけでなく、動画でもどんなオブジェクトでも切り抜けたら便利!」という発想から生まれたのがSAM 2です。
論文では、「Promptable Visual Segmentation (PVS)」 というタスクを定義し、画像だけでなく時系列で動くオブジェクトにも対応しようという試みが報告されています。

さらに今回、大規模な動画データセット「SA-V」約50.9K本の動画35.5M(3,550万)ものマスク)を収集・学習に使ったことで、幅広い物体や背景に対して頑丈な性能を発揮できるようになっています。


§2 導入事例:画像編集から動画追跡まで

ここで少し直感的なイメージをつかむため、具体例を見てみましょう。

  • 画像編集の例

    たとえば、静止画像の中で「この花を切り抜いて背景を黒くしたい」「ペットのワンちゃんを画像から取り出したい」といった用途。
    前作SAMでは、ポイント(クリック)や矩形で対象物を指定するだけで、すぐに高精度のマスクを得られました。
    SAM 2でも、画像は1フレームの動画と見なして動作するため、同じようにクリックだけでパッとセグメンテーションが可能。

  • 動画編集の例

    たとえば、SNSに投稿する短いムービーで「特定の人だけ明るくして背景を暗くしたい」「犬の舌の部分だけ色を変えたい」といった要望があった場合に、動画でのオブジェクト追跡が必要ですよね。
    SAM 2では、動画のあるフレームをクリックし、そこから得たマスクを時系列全体に伝搬(プロパゲーション)してくれます。
    途中でマスクがズレても、別のフレームで1クリックほど修正してあげれば、“記憶(メモリ)”を活かして全フレームを補正してくれる仕組みです。

例えば、犬🐕の舌の位置を追跡可能

こうした例からも分かるように、「動画で動く物体も、数クリックでスパッと切り抜ける」って、なかなかインパクトが大きいですよね。


§3 SAM 2のアーキテクチャ:ストリーミングメモリが鍵?

SAM 2の論文では、以下のような構成が提案されています。

SAM 2アーキテクチャ

  • Image Encoder

    • 従来のSAM同様、MAEで事前学習された「Hiera」エンコーダを採用

    • 画像をトークン化し、高次元特徴ベクトルを出力

  • Memory Attention

    • ポイント:動画処理を想定し、“ストリーミングメモリ” という概念を追加

    • これまでのフレームで得たマスク情報やプロンプト情報を「FIFOキュー」に格納し、後続のフレーム処理で参照できる

    • 時系列でフレームを1つずつ読み込むたびに、過去メモリとクロスアテンションを行いながら対象物を追跡

  • Prompt Encoder

    • クリック、バウンディングボックス、マスクなどのプロンプトをエンコードし、「このフレームでどの物体が欲しいのか」をモデルに指示
  • Mask Decoder

    • 最終的に、現在のフレームにおける対象物のマスクを出力(多重マスクの場合もあり)

    • また「オブジェクトがフレーム内に存在しない」(例えば完全に画面外・オクルージョンなど)の判定も担う

要は「SAMの推論プロセスを、動画の連続フレーム全体へ拡張」したような構成で、その際に過去フレーム情報を記憶するモジュールが追加されているのが特徴です。


§4 データセット: SA-V Datasetの圧倒的スケール

SAM 2の開発にあたり、著者たちは「SA-V(Segment Anything Video)Dataset」を構築しました。

  • 50.9K(約5万本)の動画

  • 計35.5M(3,550万)以上のマスク

  • 屋外・屋内、ペット、乗り物、雑貨、人体、果物、家具…ありとあらゆる対象をカバー

このデータセットは、「何でもアノテーションする」というSegment Anythingコンセプトを動画でも実践したもの。
しかも、SAM 2をアノテーション支援ツールとして使う「人間との対話型データ収集」(Data Engine)を行い、どんどんカバレッジを広げたとのことです。

SA-V Datasetの例

また、SA-V には自動生成マスクも含まれますが、それらは人間が検証し、失敗したマスクは追加で修正するという洗練プロセスを経ています。
結果として、既存の動画セグメンテーション・データセットYouTube-VOSなど)をはるかに超える量のマスクが得られたとのこと。


§5 インストール~基本の使い方:画像編・動画編

では、ここからは実際にSAM 2を使う方法について、GitHubのREADMEに沿った形でまとめていきます。

5.1 セットアップ

Python環境】

  •  Pythonバージョン:>=3.10

  • PyTorchバージョン:>=2.5.1

  • CUDA対応のGPU環境が望ましい

git clone https://github.com/facebookresearch/sam2.git
cd sam2
pip install -e .

上記コマンドで、SAM 2をインストールできます。
WindowsならWSL推奨、CUDAツールキットを別途入れておくと良いです)

【チェックポイントのダウンロード】

モデルの重み(SAM 2.1版など)を使うには、以下のようにチェックポイントをダウンロードします。

cd checkpoints
./download_ckpts.sh
cd ..

個別に .pt ファイルを落としてもOKです。


5.2 画像に対して使う(SAM 2はそのままSAMとして機能)

画像セグメンテーションのデモ図

import torch
from sam2.build_sam import build_sam2
from sam2.sam2_image_predictor import SAM2ImagePredictor

checkpoint = "./checkpoints/sam2.1_hiera_large.pt"
model_cfg = "configs/sam2.1/sam2.1_hiera_l.yaml"
predictor = SAM2ImagePredictor(build_sam2(model_cfg, checkpoint))

with torch.inference_mode(), torch.autocast("cuda", dtype=torch.bfloat16):
    predictor.set_image(<your_image>)      # 画像をセット
    masks, scores, logits = predictor.predict(<input_prompts>)
  • <input_prompts>には、クリックやバウンディングボックス、マスクなどを指定

  • masksがセグメンテーション結果で、いくつかの候補マスク(複数)やスコアが返ってきます

「Automatic Mask Generation」 も可能で、画像内にあるオブジェクトを一斉に推定するモードがあります。


5.3 動画に対して使う(SAM 2最大の特徴)

動画セグメンテーションのUI例

import torch
from sam2.build_sam import build_sam2_video_predictor

checkpoint = "./checkpoints/sam2.1_hiera_large.pt"
model_cfg = "configs/sam2.1/sam2.1_hiera_l.yaml"
predictor = build_sam2_video_predictor(model_cfg, checkpoint)

with torch.inference_mode(), torch.autocast("cuda", dtype=torch.bfloat16):
    # 1) stateを初期化(動画を読み込む)
    state = predictor.init_state(<your_video>)

    # 2) あるフレームでクリックやボックス入力などのプロンプト
    frame_idx, object_ids, masks = predictor.add_new_points_or_box(
        state, <your_prompts>)

    # 3) 全フレームにマスクを伝搬
    for frame_idx, object_ids, masks in predictor.propagate_in_video(state):
        # フレームごとにmaskが取れる
        pass
  1. init_state() で動画をセットし、初期化

  2. add_new_points_or_box() で指定フレームのオブジェクトをクリックやボックスで指定

  3. すると、そのフレームのマスクが即時取得され、それを元にpropagate_in_video()で全フレームを自動追跡

途中でマスクがズレてきたら、また別フレームでadd_new_points_or_box()を呼び、誤った部分に正解を指示して再伝搬。これを繰り返して最終的に全フレームの高精度マスクを得られる仕組みです。


§6 従来版SAMとの比較、どこが進化?

前述の通り、SAM 2は「動画対応」が一番の目玉です。具体的に進化した点としては:

  1. 動画の連続フレームにまたがる「ストリーミングメモリ」

    • これにより、1度取得したオブジェクト情報を次フレームにも活かす

    • 逆に、別フレームでの修正クリックが過去のマスクとも整合性をとりつつ、最小限の操作で誤りを一気に補正

  2. 圧倒的に大規模な動画データ(SA-V)の学習

    • 実際の性能向上は「データ」がモノをいう、というのは前作SAMのSA-1Bデータセットと同様
  3. 処理速度の向上

    • メモリを利用しながらも、リアルタイム近い速度(推論時30~60FPS程度を達成する実装もあり)

    • 画像単体でも6倍近く高速化(特にHiera-B+モデル)という報告


§7 よくある疑問Q&A・実運用上の注意点

Q1: どんな動画でも完全にセグメンテーションできる?
A1: 万能ではありません。被写体が激しく動き過ぎる場合や、ほぼ同一の外観のモノが複数ある場合には混同リスクがあります。オクルージョン(重なり)やカメラのパン・ズームが大きいケースでは、追加フレームでの修正クリックが必須になることも多いです。

Q2: 複数オブジェクトを同時に追跡できる?
A2: できます。ただし、現状の仕組みでは1オブジェクトずつ処理を回す形が基本です(ただし背後でフレーム埋め込みは共有可能)。複数オブジェクトを一気に自動生成する手法もありますが、高精度化には要検討とされています。

Q3: 学習済みチェックポイントだけで十分? 自前データで再学習できる?
A3: 公式GitHubにはレーニング用コードも公開されています(training/README.md参照)。自前の特殊な動画データがあるなら、部分的にfine-tuningしてみるのもアリでしょう。ただし、学習コストはかなり大きいので要GPUです。


§8 今後の展望

SAM 2は、画像・動画のあらゆる対象をインタラクティブかつ高速にセグメンテーションできるという点で、大いに期待が高まっています。今後、考えられる発展としては:

  1. さらなるスケーラビリティ

    • より大型モデルや更なる大規模ビデオデータ(ビリオン級?)で、「より精細な動画編集」「更なる汎用性」が期待
  2. LLMとの統合

    • 自然言語で“この映像の中でスポーツカーだけ切り抜いて”と言う」といったマルチモーダル統合
  3. 産業用途(医療・監視・自動運転など)

    • 医療映像や、店舗監視映像、自動運転システムでのリアルタイム物体追跡など幅広い応用が見込まれる
  4. 動画生成モデルと組み合わせ

    • セグメンテーション後の領域をGANやDiffusionモデルで置き換える、あるいは動的に編集する――夢が広がりますよね。

現状では、「物体が一瞬フレーム外に消え、再び出現したときの追跡」など、課題もいくつか指摘されていますが、わずかな追加クリックで補正できる設計は非常に実用的です。

「1~2クリックだけで動画編集のハードルを一気に下げる技術」として、今後さらに注目度が高まるだろうと感じます。


まとめ&おわりに

今回は、「Segment Anything Model 2 (SAM 2)」を大ボリュームで紹介しました。

  • 画像・動画両対応のプロンプト可能セグメンテーション

  • “ストリーミングメモリ” を用いて、いったん得たオブジェクト情報を時系列伝搬できる

  • 一度ずれたマスクも、別フレームで1クリック修正するだけで動画全体を再補正可能

  • SA-V Dataset(約3,550万マスク!)での大規模学習により、多種多様なオブジェクトに強い

  • 従来SAMとの比較で、動画編集がかなり楽になっただけでなく、画像でも速度面で進化

例えば、「ペットの動画で猫だけ切り抜く」「スポーツ映像でボールの動きだけ着色する」など、動画編集をグッと容易化できる技術ではないでしょうか。

最後までお読みいただき、ありがとうございました。ぜひ公式GiuHub(GitHubリポジトリ)やデモも覗いてみてくださいね。


§参考リンク

以下より、写真や図、文章を引用


🔑この記事のポイントまとめ
1. 動画セグメンテーションが超手軽に:数クリックでトラッキング付きマスクが出る
2. メモリ機構を活かした少ない操作量:修正クリックが全フレームに即時反映
3. SA-V Datasetの圧倒的規模:扱えるオブジェクトの幅が格段に広い
4. 画像だけでも高速&高精度:前作SAMより6倍速になる事例も
5. 応用範囲:AR/VR、動画編集、医療、監視、ロボティクスなど多岐にわたる可能性


ライセンス表記:
本記事におけるスクリーンショットはMetaの公開論文からの引用です。
Courtesy of Meta AI (CC-BY-4.0)