SAM 2: Segment Anything Model 2

SAMの進化

SAM 2は、オリジナルのSAMをベースに、動画セグメンテーション機能を拡張したモデルです。テキストや画像例示プロンプトによるプロンプト可能な概念セグメンテーション(Promptable Concept Segmentation)については、SAM 3を参照してください。

Inference with Segment Anything 2 In Colab

SAM 2は、MetaのSegment Anything Model (SAM)の後継であり、画像および動画の包括的なオブジェクトセグメンテーションを実現する最先端のツールです。リアルタイム処理とゼロショット汎化をサポートする統合されたプロンプト可能なモデルアーキテクチャにより、複雑な視覚データの処理に優れています。

Ultralytics PlatformでのSAM 2

SAM 2.1 models power the smart annotation feature on Ultralytics Platform, enabling click-based segmentation for fast dataset labeling. See the annotation guide for details.

SAM 2 Example Results

主な特徴



Watch: How to Run Inference with Meta's SAM2 using Ultralytics | Step-by-Step Guide 🎉

統合モデルアーキテクチャ

SAM 2は、画像および動画のセグメンテーション機能を単一のモデルに統合しています。この統合によりデプロイメントが簡素化され、さまざまなメディアタイプ間で一貫したパフォーマンスが可能になります。柔軟なプロンプトベースのインターフェースを活用しており、ユーザーはポイント、バウンディングボックス、マスクなどのさまざまなプロンプトタイプを通じて、対象のオブジェクトを指定できます。

リアルタイムパフォーマンス

このモデルはリアルタイム推論速度を達成しており、毎秒約44フレームを処理します。これにより、SAM 2は動画編集や拡張現実など、即時のフィードバックが必要なアプリケーションに適しています。

ゼロショット汎化

SAM 2は、これまでに遭遇したことのないオブジェクトでもセグメンテーションが可能であり、強力なゼロショット汎化性能を示します。これは、事前定義されたカテゴリではすべての可能性を網羅できないような、多様または進化する視覚ドメインにおいて特に有用です。

インタラクティブな改良

ユーザーは追加のプロンプトを提供することでセグメンテーション結果を繰り返し改良でき、出力結果を精密に制御できます。この双方向性は、動画アノテーションや医療画像診断などのアプリケーションで結果を微調整するために不可欠です。

視覚的課題に対する高度な処理

SAM 2には、オブジェクトのオクルージョン(遮蔽)や再出現といった、一般的な動画セグメンテーションの課題に対処するメカニズムが備わっています。洗練されたメモリメカニズムを使用してフレーム間でのオブジェクトを追跡し、オブジェクトが一時的に隠れたり、画面外に出たり入ったりする場合でも継続性を維持します。

SAM 2のアーキテクチャと機能の詳細については、SAM 2研究論文をご覧ください。

パフォーマンスと技術的な詳細

SAM 2は、さまざまな指標で以前のモデルを上回り、この分野で新たなベンチマークを打ち立てました。

指標SAM 2以前のSOTA
インタラクティブ動画セグメンテーションベスト-
必要な人間のインタラクション3倍少ないベースライン
Image Segmentation 精度向上SAM
推論速度6倍高速SAM

モデルアーキテクチャ

主要コンポーネント

  • 画像および動画エンコーダー: Transformerベースのアーキテクチャを利用して、画像と動画フレームの両方から高レベルのフィーチャを抽出します。このコンポーネントは、各タイムステップで視覚コンテンツを理解する役割を担います。
  • プロンプトエンコーダー: ユーザーが提供したプロンプト(ポイント、ボックス、マスク)を処理し、セグメンテーションタスクを誘導します。これにより、SAM 2はユーザーの入力に適応し、シーン内の特定のオブジェクトをターゲットにすることができます。
  • メモリメカニズム: メモリエコーダー、メモリバンク、およびメモリアテンションモジュールが含まれます。これらのコンポーネントは過去のフレームからの情報を総合的に蓄積・利用し、モデルが時間の経過とともに一貫したobject trackingを維持できるようにします。
  • マスクデコーダー: エンコードされた画像フィーチャとプロンプトに基づいて、最終的なセグメンテーションマスクを生成します。動画では、フレーム間での正確な追跡を確実にするためにメモリコンテキストも使用します。

SAM 2 Architecture Diagram

メモリメカニズムとオクルージョン処理

メモリメカニズムにより、SAM 2は動画データにおける時間的依存関係やオクルージョンを処理できます。オブジェクトが移動や相互作用を行う際、SAM 2はそのフィーチャをメモリバンクに記録します。オブジェクトが隠れた場合、モデルはこのメモリを頼りに、再出現した際の位置や外観を予測できます。オクルージョンヘッドは特にオブジェクトが見えない状況を処理し、オブジェクトが隠れている可能性を予測します。

マルチマスク曖昧性解消

曖昧さ(例:重なり合うオブジェクト)がある状況では、SAM 2は複数のマスク予測を生成できます。この機能は、単一のマスクではシーンのニュアンスを十分に記述できないような複雑なシーンを正確に表現するために不可欠です。

SA-Vデータセット

SAM 2のトレーニングのために開発されたSA-Vデータセットは、利用可能な動画セグメンテーションデータセットの中で最大かつ最も多様なものの一つです。以下が含まれます:

  • 51,000本以上の動画: 47か国で撮影されており、幅広い現実世界のシナリオを提供します。
  • 600,000個以上のマスクアノテーション: 「マスクレット」と呼ばれる詳細な時空間マスクアノテーションで、オブジェクト全体と部品をカバーしています。
  • データセット規模: 以前の最大データセットと比較して4.5倍多くの動画と53倍多くの注釈を特徴としており、前例のない多様性と複雑さを提供しています。

ベンチマーク

動画オブジェクトセグメンテーション

SAM 2は、主要な動画セグメンテーションベンチマーク全体で優れたパフォーマンスを示しています:

データセットJ&FJF
DAVIS 201782.579.885.2
YouTube-VOS81.278.983.5

インタラクティブセグメンテーション

インタラクティブなセグメンテーションタスクにおいて、SAM 2は高い効率と精度を示しています:

データセットNoC@90AUC
DAVIS Interactive1.540.872

インストール

SAM 2をインストールするには、次のコマンドを使用します。すべてのSAM 2モデルは、初回使用時に自動的にダウンロードされます。

pip install ultralytics

SAM 2の活用方法:画像および動画セグメンテーションにおける汎用性

以下の表では、利用可能なSAM 2モデル、その事前学習済み重み、サポートされているタスク、およびInferenceValidationTrainingExportなどの異なる動作モードとの互換性について詳しく説明しています。

SAM 2予測例

SAM 2は、リアルタイム動画編集、医療画像診断、自律システムなど、幅広いタスクで活用できます。静的および動的な視覚データの両方をセグメント化する能力により、研究者や開発者にとって多目的なツールとなっています。

プロンプトによるセグメンテーション

プロンプトによるセグメンテーション

プロンプトを使用して、画像や動画内の特定のオブジェクトをセグメント化します。

from ultralytics import SAM

# Load a model
model = SAM("sam2.1_b.pt")

# Display model information (optional)
model.info()

# Run inference with bboxes prompt
results = model("path/to/image.jpg", bboxes=[100, 100, 200, 200])

# Run inference with single point
results = model(points=[900, 370], labels=[1])

# Run inference with multiple points
results = model(points=[[400, 370], [900, 370]], labels=[1, 1])

# Run inference with multiple points prompt per object
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 1]])

# Run inference with negative points prompt
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

すべてをセグメント化

すべてをセグメント化

特定のプロンプトなしで、画像または動画コンテンツ全体をセグメント化します。

from ultralytics import SAM

# Load a model
model = SAM("sam2.1_b.pt")

# Display model information (optional)
model.info()

# Run inference
model("path/to/video.mp4")

動画のセグメンテーションとオブジェクトの追跡

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

特定のプロンプトを使用して動画コンテンツ全体をセグメント化し、オブジェクトを追跡します。

from ultralytics.models.sam import SAM2VideoPredictor

# Create SAM2VideoPredictor
overrides = dict(conf=0.25, task="segment", mode="predict", imgsz=1024, model="sam2_b.pt")
predictor = SAM2VideoPredictor(overrides=overrides)

# Run inference with single point
results = predictor(source="test.mp4", points=[920, 470], labels=[1])

# Run inference with multiple points
results = predictor(source="test.mp4", points=[[920, 470], [909, 138]], labels=[1, 1])

# Run inference with multiple points prompt per object
results = predictor(source="test.mp4", points=[[[920, 470], [909, 138]]], labels=[[1, 1]])

# Run inference with negative points prompt
results = predictor(source="test.mp4", points=[[[920, 470], [909, 138]]], labels=[[1, 0]])
  • この例では、プロンプト(bbox/ポイント/マスク)が提供されない場合に、SAM 2を使用して画像や動画のすべてのコンテンツをセグメント化する方法を示しています。

動的でインタラクティブなセグメントと追跡

SAM2DynamicInteractivePredictorは、SAM2の高度なトレーニング不要の拡張機能であり、複数のフレームとの動的なインタラクションと継続的な学習機能を実現します。この予測器は、画像シーケンス全体での追跡パフォーマンスを向上させるために、リアルタイムのプロンプト更新とメモリ管理をサポートしています。元のSAM2と比較して、SAM2DynamicInteractivePredictorは推論フローを再構築し、追加のトレーニングを必要とせずに学習済みのSAM2モデルを最大限に活用します。

SAM 2 Example Results

主な特徴

3つの重要な機能強化を提供します:

  1. Dynamic Interactive: ビデオ処理中のいつでも、後続のフレームでマージや未追跡の新しいインスタンスを追加するための新しいプロンプトを追加できます。
  2. Continual Learning: 既存のインスタンスに対して新しいプロンプトを追加し、時間の経過とともにモデルのパフォーマンスを向上させることができます。
  3. Independent Multi-Image Support: メモリ共有と画像間オブジェクト追跡を使用して、複数の独立した画像(ビデオシーケンスである必要はありません)を処理します。

コア機能

  • Prompt Flexibility: BBox、ポイント、マスクをプロンプトとして受け入れます。
  • Memory Bank Management: 動的なメモリバンクを維持し、フレーム間でオブジェクトの状態を保存します。
  • Multi-Object Tracking: 個別のオブジェクトIDを使用して、複数のオブジェクトを同時に追跡することをサポートします。
  • Real-Time Updates: 前のフレームを再処理することなく、推論中に新しいプロンプトを追加できます。
  • Independent Image Processing: 共有メモリコンテキストを使用してスタンドアロン画像を処理し、画像間でのオブジェクトの一貫性を保ちます。
動的なオブジェクト追加
from ultralytics.models.sam import SAM2DynamicInteractivePredictor

# Create SAM2DynamicInteractivePredictor
overrides = dict(conf=0.01, task="segment", mode="predict", imgsz=1024, model="sam2_t.pt", save=False)
predictor = SAM2DynamicInteractivePredictor(overrides=overrides, max_obj_num=10)

# Define a category by box prompt
predictor(source="image1.jpg", bboxes=[[100, 100, 200, 200]], obj_ids=[0], update_memory=True)

# Detect this particular object in a new image
results = predictor(source="image2.jpg")

# Add new category with a new object ID
results = predictor(
    source="image4.jpg",
    bboxes=[[300, 300, 400, 400]],  # New object
    obj_ids=[1],  # New object ID
    update_memory=True,  # Add to memory
)
# Perform inference
results = predictor(source="image5.jpg")

# Add refinement prompts to the same category to boost performance
# This helps when object appearance changes significantly
results = predictor(
    source="image6.jpg",
    points=[[150, 150]],  # Refinement point
    labels=[1],  # Positive point
    obj_ids=[1],  # Same object ID
    update_memory=True,  # Update memory with new information
)
# Perform inference on new image
results = predictor(source="image7.jpg")
注意

SAM2DynamicInteractivePredictorはSAM2モデルで動作するように設計されており、SAM2がネイティブでサポートするすべてのbox/point/mask promptsによるカテゴリの追加や調整をサポートします。これは、ビデオアノテーションやインタラクティブな編集タスクなど、オブジェクトが表示されたり時間とともに変化したりするシナリオで特に役立ちます。

引数

名前デフォルト値データ型説明
max_obj_num3intプリセットされたカテゴリの最大数
update_memoryFalsebool新しいプロンプトでメモリを更新するかどうか
obj_idsNoneList[int]プロンプトに対応するオブジェクトIDのリスト

ユースケース

SAM2DynamicInteractivePredictorは以下に最適です:

  • シーケンス中に新しいオブジェクトが出現するビデオアノテーションワークフロー
  • リアルタイムでのオブジェクト追加と調整が必要なインタラクティブビデオ編集
  • 動的なオブジェクト追跡ニーズがある監視アプリケーション
  • 時系列で解剖学的構造を追跡するための医用画像処理
  • 適応的なオブジェクト検出と追跡を必要とする自律システム
  • 独立した画像間で一貫したオブジェクトセグメンテーションを行うためのマルチ画像データセット
  • 異なるシーン間でオブジェクトを追跡する必要がある画像コレクション分析
  • 多様な画像コンテキストからのメモリを活用するクロスドメインセグメンテーション
  • 最小限の手動介入で効率的なデータセット作成を行う半自動アノテーション

SAMとYOLOの比較

ここでは、最小のSAM2-tバリアントを含むMetaのSAM 2モデルと、YOLO26n-segを含むUltralyticsセグメンテーションモデルを比較します:

モデルサイズ
(MB)
パラメータ
(M)
速度 (CPU)
(ms/im)
Meta SAM-b37593.741703
Meta SAM2-b16280.828867
Meta SAM2-t78.138.923430
MobileSAM40.710.123802
FastSAM-s with YOLOv8 backbone23.911.858.0
Ultralytics YOLOv8n-seg7.1 (11.0倍小さい)3.4 (11.4倍少ない)24.8 (945倍高速)
Ultralytics YOLO11n-seg6.2 (12.6倍小さい)2.9 (13.4倍少ない)24.3 (964倍高速)
Ultralytics YOLO26n-seg6.7 (11.7倍小さい)2.7 (14.4倍少ない)25.2 (930倍高速)

この比較は、SAMバリアントとYOLOセグメンテーションモデル間のモデルサイズと速度の大きな違いを示しています。SAMは独自の自動セグメンテーション機能を提供しますが、YOLOモデル、特にYOLOv8n-seg、YOLO11n-seg、およびYOLO26n-segは、大幅に小さく、高速で、計算効率に優れています。

SAMの速度はPyTorchで、YOLOの速度はONNX Runtimeで測定されました。テストは、2025年版Apple M4 Air(RAM 16GB)を使用し、torch==2.10.0ultralytics==8.4.31onnxruntime==1.24.4環境で実行されました。このテストを再現するには:

from ultralytics import ASSETS, SAM, YOLO, FastSAM

# Profile SAM2-t, SAM2-b, SAM-b, MobileSAM
for file in ["sam_b.pt", "sam2_b.pt", "sam2_t.pt", "mobile_sam.pt"]:
    model = SAM(file)
    model.info()
    model(ASSETS)

# Profile FastSAM-s
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)

# Profile YOLO models (ONNX)
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt", "yolo26n-seg.pt"]:
    model = YOLO(file_name)
    model.info()
    onnx_path = model.export(format="onnx", dynamic=True)
    model = YOLO(onnx_path)
    model(ASSETS)

自動アノテーション:効率的なデータセット作成

自動アノテーションはSAM 2の強力な機能であり、学習済みモデルを活用することで、ユーザーが迅速かつ正確にセグメンテーションデータセットを生成できるようにします。この機能は、大規模で高品質なデータセットを膨大な手作業なしで作成するのに特に役立ちます。

SAM 2で自動アノテーションを行う方法



Watch: Auto Annotation with Meta's Segment Anything 2 Model using Ultralytics | Data Labeling

SAM 2を使用してデータセットを自動アノテーションするには、この例に従ってください:

自動アノテーションの例
from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam2_b.pt")
引数タイプデフォルト説明
datastr必須アノテーションまたはセグメンテーションの対象となる画像を含むディレクトリへのパス。
det_modelstr'yolo26x.pt'最初のオブジェクト検出のためのYOLO検出モデルのパス。
sam_modelstr'sam_b.pt'セグメンテーションのためのSAMモデルのパス(SAM、SAM2バリアント、およびMobileSAMモデルをサポート)。
devicestr''計算デバイス(例:'cuda:0'、'cpu'、または自動デバイス検出の場合は空文字列)。
conffloat0.25弱い検出をフィルタリングするためのYOLO検出信頼度しきい値。
ioufloat0.45重なり合うボックスをフィルタリングするためのNon-Maximum SuppressionのIoUしきい値。
imgszint640画像のサイズ変更のための入力サイズ(32の倍数である必要があります)。
max_detint300メモリ効率のための画像あたりの最大検出数。
classeslist[int]None検出するクラスインデックスのリスト(例:人&自転車の場合は[0, 1])。
output_dirstrNoneアノテーションの保存ディレクトリ(データパスからの相対でデフォルトは'./labels')。

この関数は高品質なセグメンテーションデータセットの迅速な作成を促進し、プロジェクトを加速させたい研究者や開発者に最適です。

制限事項

その強みにもかかわらず、SAM 2にはいくつかの制限があります:

  • 追跡の安定性: SAM 2は、長いシーケンスや大幅な視点の変化中にオブジェクトの追跡を見失う可能性があります。
  • オブジェクトの混同: このモデルは、混雑したシーンなどで、見た目が似ているオブジェクトを時折混同することがあります。
  • 複数のオブジェクトの効率: オブジェクト間の通信が不足しているため、複数のオブジェクトを同時に処理するとセグメンテーションの効率が低下します。
  • 詳細の精度: 特に動きの速いオブジェクトでは、細かい詳細を見逃す可能性があります。追加のプロンプトで部分的に対処できますが、時間的な滑らかさは保証されません。

引用と謝辞

SAM 2が研究や開発作業の重要な部分である場合は、次の参考文献を使用して引用してください:

引用
@article{ravi2024sam2,
  title={SAM 2: Segment Anything in Images and Videos},
  author={Ravi, Nikhila and Gabeur, Valentin and Hu, Yuan-Ting and Hu, Ronghang and Ryali, Chaitanya and Ma, Tengyu and Khedr, Haitham and R{\"a}dle, Roman and Rolland, Chloe and Gustafson, Laura and Mintun, Eric and Pan, Junting and Alwala, Kalyan Vasudev and Carion, Nicolas and Wu, Chao-Yuan and Girshick, Ross and Doll{\'a}r, Piotr and Feichtenhofer, Christoph},
  journal={arXiv preprint},
  year={2024}
}

この画期的なモデルとデータセットでAIコミュニティに貢献してくれたMeta AIに感謝の意を表します。

FAQ

SAM 2とは何ですか?また、元のSegment Anything Model (SAM)からどのように改善されていますか?

SAM 2は、MetaのSegment Anything Model (SAM)の後継であり、画像とビデオの両方で包括的なオブジェクトセグメンテーションを行うために設計された最先端のツールです。リアルタイム処理とゼロショット一般化をサポートする統合されたプロンプト可能なモデルアーキテクチャを通じて、複雑な視覚データの処理に優れています。SAM 2は元のSAMに比べていくつかの改善点を提供します:

  • 統合モデルアーキテクチャ: 画像セグメンテーションとビデオセグメンテーションの機能を単一のモデルに統合しました。
  • リアルタイムパフォーマンス: 1秒間に約44フレームを処理し、即時のフィードバックが必要なアプリケーションに適しています。
  • ゼロショット一般化: これまで一度も見たことのないオブジェクトをセグメント化でき、多様な視覚ドメインで役立ちます。
  • インタラクティブな調整: ユーザーが追加のプロンプトを提供することで、セグメンテーション結果を繰り返し調整できます。
  • 視覚的課題への高度な対応: オブジェクトの遮蔽や再出現など、一般的なビデオセグメンテーションの課題を管理します。

SAM 2のアーキテクチャと機能の詳細については、SAM 2研究論文をご覧ください。

リアルタイムビデオセグメンテーションにSAM 2をどのように使用できますか?

SAM 2は、そのプロンプト可能なインターフェースとリアルタイム推論機能を活用することで、リアルタイムビデオセグメンテーションに使用できます。基本的な例は以下の通りです:

プロンプトによるセグメンテーション

プロンプトを使用して、画像や動画内の特定のオブジェクトをセグメント化します。

from ultralytics import SAM

# Load a model
model = SAM("sam2_b.pt")

# Display model information (optional)
model.info()

# Segment with bounding box prompt
results = model("path/to/image.jpg", bboxes=[100, 100, 200, 200])

# Segment with point prompt
results = model("path/to/image.jpg", points=[150, 150], labels=[1])

より包括的な使用法については、How to Use SAM 2セクションを参照してください。

SAM 2の学習にはどのようなデータセットが使用されていますか?また、それらはどのようにパフォーマンスを向上させていますか?

SAM 2は、利用可能な最大かつ最も多様なビデオセグメンテーションデータセットの一つであるSA-Vデータセットで学習されています。SA-Vデータセットには以下が含まれます:

  • 51,000本以上の動画: 47か国で撮影されており、幅広い現実世界のシナリオを提供します。
  • 600,000個以上のマスクアノテーション: 「マスクレット」と呼ばれる詳細な時空間マスクアノテーションで、オブジェクト全体と部品をカバーしています。
  • データセットの規模: 以前の最大データセットと比較して4.5倍のビデオと53倍のアノテーションを特徴としており、前例のない多様性と複雑さを提供します。

この広範なデータセットにより、SAM 2は主要なビデオセグメンテーションベンチマーク全体で優れたパフォーマンスを達成し、ゼロショット一般化能力が向上しています。詳細については、SA-V Datasetセクションを参照してください。

SAM 2はビデオセグメンテーションにおける遮蔽やオブジェクトの再出現をどのように処理しますか?

SAM 2には、ビデオデータにおける時間的な依存関係と遮蔽を管理するための高度なメモリメカニズムが含まれています。メモリメカニズムは以下で構成されています:

  • メモリエンコーダーとメモリバンク: 過去のフレームからの特徴を保存します。
  • メモリ注意モジュール: 保存された情報を活用して、時間経過に伴う一貫したオブジェクト追跡を維持します。
  • オクルージョンヘッド: オブジェクトが見えないシナリオを具体的に処理し、オブジェクトが遮蔽されている可能性を予測します。

このメカニズムは、オブジェクトが一時的に見えなくなったり、シーンから出入りしたりする場合でも継続性を保証します。詳細については、Memory Mechanism and Occlusion Handlingセクションを参照してください。

SAM 2はYOLO26のような他のセグメンテーションモデルとどのように比較されますか?

MetaのSAM2-tやSAM2-bのようなSAM 2モデルは強力なゼロショットセグメンテーション能力を提供しますが、YOLOモデルと比較して大幅に大きく低速です。例えば、YOLO26n-segは、CPU上でSAM2-bと比較して約24倍小さく1145倍以上高速です。SAM 2は多用途でプロンプトベース、かつゼロショットセグメンテーションのシナリオで優れていますが、YOLO26は速度、効率、およびNMS不要のエンドツーエンド推論を備えたリアルタイムアプリケーション向けに最適化されており、リソースが制限された環境でのデプロイに適しています。

コメント