SAM 2: セグメント・エニシング・モデル 2#
Metaのセグメント・エニシング・モデル (SAM)の後継であるSAM 2は、画像と動画の両方で包括的なオブジェクトセグメンテーションを実現するために設計された最先端のツールです。リアルタイム処理とゼロショット汎化をサポートする、統合されたプロンプト対応モデルアーキテクチャにより、複雑なビジュアルデータを効果的に処理します。
SAM 2.1モデルは、Ultralytics Platformのスマートアノテーション機能を支え、クリックベースのセグメンテーションによる高速なデータセットラベリングを可能にします。詳細については、アノテーションガイドをご覧ください。

主な特徴#
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 | 従来のSOTA |
|---|---|---|
| インタラクティブ動画セグメンテーション | 最高 | - |
| 必要な人間による操作 | 3分の1以下 | ベースライン |
| 画像セグメンテーションの精度 | 改善 | SAM |
| 推論速度 | 6倍高速 | SAM |
モデルアーキテクチャ#
主要コンポーネント#
- 画像・動画エンコーダー: transformerベースのアーキテクチャを利用して、画像と動画フレームの両方から高レベルの特徴を抽出します。このコンポーネントは、各タイムステップでビジュアルコンテンツを理解します。
- プロンプトエンコーダー: ユーザーが指定したプロンプト(ポイント、ボックス、マスク)を処理し、セグメンテーションタスクを誘導します。これにより、SAM 2はユーザー入力に適応し、シーン内の特定のオブジェクトを対象にできます。
- メモリメカニズム: メモリエンコーダー、メモリバンク、メモリアテンションモジュールで構成されます。これらのコンポーネントが過去のフレームの情報をまとめて保存・利用し、時間経過に伴う一貫したオブジェクトトラッキングを可能にします。
- マスクデコーダー: エンコードされた画像特徴とプロンプトに基づいて、最終的なセグメンテーションマスクを生成します。動画ではメモリコンテキストも使用し、フレーム間で正確なトラッキングを実現します。

メモリメカニズムと遮蔽への対応#
メモリメカニズムにより、SAM 2は動画データの時間的依存関係と遮蔽に対応できます。オブジェクトが移動・相互作用すると、SAM 2はその特徴をメモリバンクに記録します。オブジェクトが遮蔽されると、モデルはこのメモリを利用して、再出現時の位置と外観を予測できます。遮蔽ヘッドは、オブジェクトが見えない状況を具体的に処理し、オブジェクトが遮蔽されている可能性を予測します。
複数マスクの曖昧性解消#
曖昧性がある状況(例:オブジェクトが重なっている場合)では、SAM 2は複数のマスク予測を生成できます。この機能は、単一のマスクではシーンの細部を十分に表現できない複雑なシーンを正確に表現するうえで重要です。
SA-Vデータセット#
SAM 2のトレーニング用に開発されたSA-Vデータセットは、現在利用可能な最大級かつ最も多様な動画セグメンテーションデータセットの1つです。次の内容が含まれています。
- 51,000本以上の動画: 47か国で撮影され、現実世界の幅広いシナリオを提供します。
- 600,000件以上のマスクアノテーション: 「masklets」と呼ばれる詳細な時空間マスクアノテーションで、オブジェクト全体とその一部を対象としています。
- データセット規模: これまで最大だったデータセットと比較して、動画数が4.5倍、アノテーション数が53倍多く、かつてない多様性と複雑性を提供します。
ベンチマーク#
動画オブジェクトセグメンテーション#
SAM 2は、主要な動画セグメンテーションベンチマーク全体で優れた性能を示しています。
| データセット | J&F | J | F |
|---|---|---|---|
| DAVIS 2017 | 82.5 | 79.8 | 85.2 |
| YouTube-VOS | 81.2 | 78.9 | 83.5 |
インタラクティブセグメンテーション#
インタラクティブセグメンテーションタスクで、SAM 2は優れた効率と精度を示します。
| データセット | NoC@90 | AUC |
|---|---|---|
| DAVIS Interactive | 1.54 | 0.872 |
インストール#
SAM 2をインストールするには、次のコマンドを使用します。すべてのSAM 2モデルは初回使用時に自動的にダウンロードされます。
pip install ultralyticsSAM 2の使用方法: 画像と動画のセグメンテーションにおける汎用性#
次の表では、利用可能なSAM 2モデル、事前学習済みウェイト、対応タスク、および推論、検証、トレーニング、エクスポートなどの各種動作モードとの互換性について詳しく説明します。
| モデルタイプ | 事前学習済み重み | サポートされているタスク | トレーニング | 検証 | 推論 | エクスポート |
|---|---|---|---|---|---|---|
| SAM 2 tiny | sam2_t.pt | インスタンスセグメンテーション | ❌ | ❌ | ✅ | ❌ |
| SAM 2 small | sam2_s.pt | インスタンスセグメンテーション | ❌ | ❌ | ✅ | ❌ |
| SAM 2 base | sam2_b.pt | インスタンスセグメンテーション | ❌ | ❌ | ✅ | ❌ |
| SAM 2 large | sam2_l.pt | インスタンスセグメンテーション | ❌ | ❌ | ✅ | ❌ |
| SAM 2.1 tiny | sam2.1_t.pt | インスタンスセグメンテーション | ❌ | ❌ | ✅ | ❌ |
| SAM 2.1 small | sam2.1_s.pt | インスタンスセグメンテーション | ❌ | ❌ | ✅ | ❌ |
| SAM 2.1 base | sam2.1_b.pt | インスタンスセグメンテーション | ❌ | ❌ | ✅ | ❌ |
| SAM 2.1 large | sam2.1_l.pt | インスタンスセグメンテーション | ❌ | ❌ | ✅ | ❌ |
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 = {"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]])- この例では、プロンプト(bboxes/points/masks)が指定されていない場合に、SAM 2を使用して画像または動画の全コンテンツをセグメンテーションする方法を示します。
動的インタラクティブセグメンテーションとトラッキング#
SAM2DynamicInteractivePredictorは、SAM 2の高度なトレーニング不要の拡張機能であり、複数フレームとの動的インタラクションと継続的学習機能を可能にします。この予測器は、一連の画像にわたるトラッキング性能を向上させるため、リアルタイムのプロンプト更新とメモリ管理をサポートします。元のSAM 2と比較して、SAM2DynamicInteractivePredictorは推論フローを再構築し、追加のトレーニングを必要とせずに事前トレーニング済みのSAM 2モデルを最大限に活用できるようにします。

主な特徴#
次の3つの重要な拡張機能を提供します。
- 動的インタラクション: 動画処理中の任意のタイミングで、後続フレームにおけるマージ対象または未追跡の新しいインスタンス用のプロンプトを追加します
- 継続学習: 既存のインスタンスに新しいプロンプトを追加し、時間の経過に伴ってモデル性能を向上させます
- 独立した複数画像のサポート: メモリ共有と画像間オブジェクトトラッキングにより、複数の独立した画像(必ずしも動画シーケンス由来である必要はありません)を処理します
主要機能#
- プロンプトの柔軟性: バウンディングボックス、ポイント、マスクをプロンプトとして受け付けます
- メモリバンク管理: フレーム間のオブジェクト状態を保存する動的なメモリバンクを維持します
- マルチオブジェクトトラッキング: 個別のオブジェクトIDを使用して、複数のオブジェクトを同時にトラッキングできます
- リアルタイム更新: 推論中に、以前のフレームを再処理せずに新しいプロンプトを追加できます
- 独立画像処理: 共有メモリコンテキストを使用して、画像間でオブジェクトの一貫性を保ちながら、個別の画像を処理します
from ultralytics.models.sam import SAM2DynamicInteractivePredictor
# Create SAM2DynamicInteractivePredictor
overrides = {"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はSAM 2モデルと連携するように設計されており、SAM 2がネイティブでサポートするすべてのbox, point, and mask promptsによるカテゴリの追加と細分化をサポートします。これは、ビデオアノテーションやインタラクティブな編集タスクなど、オブジェクトが時間とともに現れたり変化したりするシナリオで特に役立ちます。
引数#
| 名前 | デフォルト値 | データ型 | 説明 |
|---|---|---|---|
max_obj_num | 3 | int | プリセットされたカテゴリーの最大数 |
update_memory | False | bool | 新しいプロンプトでメモリを更新するかどうか |
obj_ids | None | List[int] | プロンプトに対応するオブジェクト ID のリスト |
ユースケース#
SAM2DynamicInteractivePredictor は、次の用途に適しています:
- シーケンス中に新しいオブジェクトが出現する動画アノテーションワークフロー
- リアルタイムのオブジェクト追加と調整が必要なインタラクティブ動画編集
- 動的なオブジェクト追跡が必要な監視アプリケーション
- 時系列データ全体で解剖学的構造を追跡する医療画像処理
- 適応型のオブジェクト検出と追跡が必要な自律システム
- 独立した画像間で一貫したオブジェクトセグメンテーションを行う複数画像データセット
- 異なるシーン間でオブジェクトを追跡する必要がある画像コレクション分析
- 多様な画像コンテキストのメモリを活用するドメイン横断セグメンテーション
- 最小限の手動作業で効率的にデータセットを作成する半自動アノテーション
SAM と YOLO の比較#
ここでは、最小の SAM2-t バリアントを含む Meta の SAM 2 モデルと、YOLO26n-seg を含む Ultralytics のセグメンテーションモデルを比較します:
| モデル | サイズ (MB) | パラメーター数 (M) | 速度 (CPU) (ms/im) |
|---|---|---|---|
| Meta SAM-b | 375 | 93.7 | 41703 |
| Meta SAM2-b | 162 | 80.8 | 28867 |
| Meta SAM2-t | 78.1 | 38.9 | 23430 |
| MobileSAM | 40.7 | 10.1 | 23802 |
| YOLOv8 バックボーンを使用した FastSAM-s | 23.9 | 11.8 | 58.0 |
| Ultralytics YOLOv8n-seg | 7.1(11.0倍小型化) | 3.4(11.4倍削減) | 24.8(945倍高速化) |
| Ultralytics YOLO11n-seg | 6.2 (12.6倍小型) | 2.9(13.4倍削減) | 24.3 (964倍高速) |
| Ultralytics YOLO26n-seg | 6.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 で測定しました。テストは、torch==2.10.0、ultralytics==8.4.31、onnxruntime==1.24.4 を使用し、16GB の RAM を搭載した 2025 Apple M4 Air 上で実行しました。このテストを再現するには、次の手順を実行します:
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, nms=False) # YOLO26 NMS-free head; no-op for YOLOv8/YOLO11
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")| 引数 | 型 | デフォルト | 説明 |
|---|---|---|---|
data | str | 必須 | アノテーションまたはセグメンテーションの対象画像を含むディレクトリへのパスです。 |
det_model | str | 'yolo26x.pt' | 初期オブジェクト検出に使用する YOLO 検出モデルのパスです。 |
sam_model | str | 'sam_b.pt' | セグメンテーションに使用する SAM モデルのパスです(SAM、SAM 2、MobileSAM、SAM 3 の重みをサポートします)。 |
device | str | '' | 計算デバイスです(例: 'cuda:0'、'cpu'、または自動デバイス検出の場合は '')。 |
conf | float | 0.25 | 弱い検出結果を除外するための YOLO 検出信頼度しきい値です。 |
iou | float | 0.45 | 重複するボックスを除外するための Non-Maximum Suppression の IoU しきい値です。 |
imgsz | int | 640 | 画像のリサイズに使用する入力サイズです(32 の倍数である必要があります)。 |
max_det | int | 300 | メモリ効率を高めるための、画像ごとの検出数の最大値です。 |
classes | list[int] | None | 検出するクラスインデックスのリストです(例: person と bicycle の場合は [0, 1])。 |
output_dir | str | None | アノテーションの保存先ディレクトリです(デフォルト: <data>_auto_annotate_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 は、Meta の セグメント・エニシング・モデル (SAM) の後継モデルであり、画像と動画の両方で包括的なオブジェクトセグメンテーションを実現する最先端のツールです。リアルタイム処理とゼロショット汎化をサポートする、統一されたプロンプト可能なモデルアーキテクチャにより、複雑な視覚データの処理に優れています。SAM 2 では、元の SAM に対して次のような改良が加えられています:
- 統合モデルアーキテクチャ: 画像と動画のセグメンテーション機能を単一のモデルに統合します。
- リアルタイム性能: 約 44 フレーム/秒で処理するため、即時のフィードバックが必要なアプリケーションに適しています。
- ゼロショット汎化: これまでに遭遇したことのないオブジェクトをセグメンテーションでき、多様な視覚ドメインで役立ちます。
- インタラクティブな調整: 追加のプロンプトを入力することで、ユーザーがセグメンテーション結果を反復的に調整できます。
- 視覚的な課題への高度な対応: オブジェクトの遮蔽や再出現など、動画セグメンテーションにおける一般的な課題に対応します。
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])より詳しい使用方法については、SAM 2 の使用方法セクションを参照してください。
SAM 2 は、利用可能な動画セグメンテーションデータセットの中でも最大かつ最も多様なものの 1 つである SA-V データセットでトレーニングされています。SA-V データセットには次の内容が含まれます:
- 51,000本以上の動画: 47か国で撮影され、現実世界の幅広いシナリオを提供します。
- 600,000件以上のマスクアノテーション: 「masklets」と呼ばれる詳細な時空間マスクアノテーションで、オブジェクト全体とその一部を対象としています。
- データセット規模: これまでで最大のデータセットと比較して、動画数が 4.5 倍、アノテーション数が 53 倍多く、かつてない多様性と複雑性を提供します。
この大規模なデータセットにより、SAM 2 は主要な動画セグメンテーションベンチマーク全体で優れた性能を達成し、ゼロショット汎化能力を高めています。詳細については、SA-V データセットセクションをご覧ください。
SAM 2 には、動画データの時間的依存関係と遮蔽を管理する高度なメモリ機構が組み込まれています。メモリ機構は次の要素で構成されます:
- メモリエンコーダーとメモリーバンク: 過去のフレームから特徴量を保存します。
- メモリーアテンションモジュール: 保存された情報を利用して、時間経過に伴う一貫したオブジェクト追跡を維持します。
- 遮蔽ヘッド: オブジェクトが見えないシナリオに特化して対応し、オブジェクトが遮蔽されている可能性を予測します。
この機構により、オブジェクトが一時的に遮られたり、シーンから退出して再び現れたりする場合でも、連続性が保たれます。詳細については、メモリ機構と遮蔽への対応セクションを参照してください。
Meta の SAM2-t や SAM2-b などの SAM 2 モデルは、強力なゼロショットセグメンテーション機能を提供しますが、YOLO モデルと比較すると大幅に大きく、低速です。例えば、YOLO26n-seg は、CPU 上で SAM2-b より約 24 倍小型で、1145 倍以上高速です。SAM 2 は汎用的でプロンプトベースのゼロショットセグメンテーションシナリオに優れています。一方、YOLO26 は NMS を使用しないエンドツーエンド推論により、速度、効率、リアルタイムアプリケーション向けに最適化されているため、リソースに制約のある環境へのデプロイに適しています。