Ultralytics YOLO27:
Get Started

SAM 2: Segment Anything Model 2#

SAMの進化

SAM 2は、動画セグメンテーション機能を備え、従来のSAMを発展させたモデルです。テキストや画像の例示プロンプトを使ったプロンプト可能な概念セグメンテーションについては、SAM 3をご覧ください。

Inference with Segment Anything 2 In Colab

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

Ultralytics PlatformでのSAM 2

SAM 2.1モデルは、Ultralytics Platformのスマートアノテーション機能を支えており、クリックベースのセグメンテーションでデータセットのラベル付けを効率化します。詳細については、アノテーションガイドをご覧ください。

SAM 2の使用例

主な機能#



視聴: Ultralytics で Meta の SAM2 を使って推論を実行する方法 | ステップごとのガイド 🎉

統一されたモデルアーキテクチャ#

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

リアルタイム性能#

このモデルは、毎秒約44フレームを処理するリアルタイムの推論速度を実現します。そのため、動画編集や拡張現実など、即時のフィードバックが求められる用途にSAM 2を活用できます。

ゼロショット汎化#

SAM 2は、これまで遭遇したことのないオブジェクトもセグメンテーションでき、優れたゼロショット汎化性能を示します。これは、事前定義されたカテゴリではあらゆるオブジェクトを網羅できない可能性がある、多様または変化し続ける視覚領域で特に有用です。

インタラクティブな調整#

ユーザーは追加のプロンプトを指定してセグメンテーション結果を繰り返し調整でき、出力を正確に制御できます。このインタラクティブ性は、動画アノテーションや医用画像などのアプリケーションで結果を微調整するために不可欠です。

視覚的な課題への高度な対応#

SAM 2には、オブジェクトのオクルージョンや再出現など、動画セグメンテーションでよくある課題に対処する仕組みが含まれています。高度なメモリ機構によってフレーム間でオブジェクトを追跡し、オブジェクトが一時的に隠れたり、シーンから退出して再び現れたりしても、追跡の連続性を維持します。

SAM 2のアーキテクチャと機能をより深く理解するには、SAM 2の研究論文をご覧ください。

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

SAM 2はこの分野で新たなベンチマークを確立し、さまざまな指標で従来のモデルを上回っています。

指標SAM 2従来の最高性能
インタラクティブ動画セグメンテーション最高-
必要な人間の操作3分の1に削減ベースライン
画像セグメンテーション精度向上SAM
推論速度6倍高速SAM

モデルアーキテクチャ#

主要コンポーネント#

  • 画像・動画エンコーダー: Transformerベースのアーキテクチャを使用し、画像と動画フレームの両方から高レベルの特徴を抽出します。このコンポーネントは、各タイムステップにおける視覚コンテンツの理解を担います。
  • プロンプトエンコーダー: ユーザーが指定したプロンプト(ポイント、ボックス、マスク)を処理し、セグメンテーションタスクを誘導します。これにより、SAM 2はユーザー入力に適応し、シーン内の特定のオブジェクトを対象にできます。
  • メモリ機構: メモリエンコーダー、メモリバンク、メモリアテンションモジュールで構成されます。これらのコンポーネントが連携して過去のフレームの情報を保存・活用し、時間の経過に伴う一貫したオブジェクト追跡を可能にします。
  • マスクデコーダー: エンコードされた画像特徴とプロンプトに基づいて、最終的なセグメンテーションマスクを生成します。動画ではメモリコンテキストも使用して、フレーム間の正確な追跡を実現します。

SAM 2のアーキテクチャ図

メモリ機構とオクルージョンへの対応#

メモリ機構により、SAM 2は動画データの時間的依存関係やオクルージョンに対応できます。オブジェクトの移動や相互作用に伴い、SAM 2はその特徴をメモリバンクに記録します。オブジェクトが隠れた場合、モデルはこのメモリを基に、再出現時の位置や外観を予測できます。オクルージョンヘッドは、オブジェクトが見えない状況に特化して対応し、オブジェクトが隠れている可能性を予測します。

複数マスクの曖昧さの解消#

曖昧さがある状況(例: オブジェクトの重なり)では、SAM 2は複数のマスク予測を生成できます。この機能は、単一のマスクではシーンの細部を十分に表現できない複雑なシーンを正確に表現するうえで重要です。

SA-Vデータセット#

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

  • 51,000本以上の動画: 47か国で撮影され、幅広い実世界のシナリオを含みます。
  • 600,000件以上のマスクアノテーション: 「masklet」と呼ばれる詳細な時空間マスクアノテーションで、オブジェクト全体とその部分を対象としています。
  • データセットの規模: これまでで最大だったデータセットと比べて動画数は4.5倍、アノテーション数は53倍で、これまでにない多様性と複雑さを備えています。

ベンチマーク#

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

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

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

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

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

データセットNoC@90AUC
DAVISインタラクティブ1.540.872

インストール#

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

pip install ultralytics

SAM 2の使い方: 画像と動画のセグメンテーションにおける汎用性#

次の表では、利用可能なSAM 2モデル、事前学習済みウェイト、対応タスク、および推論、検証、トレーニング、エクスポートなど、さまざまな実行モードとの互換性について詳しく説明します。

モデルタイプ事前学習済み重みサポートされるタスクトレーニング検証推論エクスポート
SAM 2 tinysam2_t.ptインスタンスセグメンテーション❌❌✅❌
SAM 2 smallsam2_s.ptインスタンスセグメンテーション❌❌✅❌
SAM 2 basesam2_b.ptインスタンスセグメンテーション❌❌✅❌
SAM 2 largesam2_l.ptインスタンスセグメンテーション❌❌✅❌
SAM 2.1 tinysam2.1_t.ptインスタンスセグメンテーション❌❌✅❌
SAM 2.1 smallsam2.1_s.ptインスタンスセグメンテーション❌❌✅❌
SAM 2.1 basesam2.1_b.ptインスタンスセグメンテーション❌❌✅❌
SAM 2.1 largesam2.1_l.ptインスタンスセグメンテーション❌❌✅❌

SAM 2の予測例#

SAM 2は、リアルタイム動画編集、医用画像、自律システムなど、幅広いタスクに活用できます。静的・動的な視覚データの両方をセグメンテーションできるため、研究者や開発者にとって汎用性の高いツールです。

プロンプトを使用したセグメンテーション#

プロンプトを使用したセグメンテーション

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

from ultralytics import SAM

# モデルを読み込む
model = SAM("sam2.1_b.pt")

# モデル情報を表示(任意)
model.info()

# bboxesプロンプトを使用して推論を実行
results = model("path/to/image.jpg", bboxes=[100, 100, 200, 200])

# 単一ポイントを使用して推論を実行
results = model(points=[900, 370], labels=[1])

# 複数のポイントを使用して推論を実行
results = model(points=[[400, 370], [900, 370]], labels=[1, 1])

# オブジェクトごとに複数のポイントプロンプトを使用して推論を実行
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 1]])

# ネガティブポイントプロンプトを使用して推論を実行
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

すべてをセグメンテーション#

すべてをセグメンテーション

特定のプロンプトを指定せずに、画像または動画のコンテンツ全体をセグメンテーションします。

from ultralytics import SAM

# モデルを読み込む
model = SAM("sam2.1_b.pt")

# モデル情報を表示(任意)
model.info()

# 推論を実行
model("path/to/video.mp4")
  • この例では、プロンプト(bboxes/ポイント/マスク)を指定しない場合に、SAM 2を使用して画像または動画のコンテンツ全体をセグメンテーションする方法を示します。

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

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

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

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)

# 単一ポイントを使用して推論を実行
results = predictor(source="test.mp4", points=[920, 470], labels=[1])

# 複数のポイントを使用して推論を実行
results = predictor(source="test.mp4", points=[[920, 470], [909, 138]], labels=[1, 1])

# オブジェクトごとに複数のポイントプロンプトを使用して推論を実行
results = predictor(source="test.mp4", points=[[[920, 470], [909, 138]]], labels=[[1, 1]])

# ネガティブポイントプロンプトを使用して推論を実行
results = predictor(source="test.mp4", points=[[[920, 470], [909, 138]]], labels=[[1, 0]])

動的なインタラクティブセグメンテーションと追跡#

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

SAM 2の使用例

主な機能#

次の3つの重要な改善点があります。

  1. 動的なインタラクション: 動画処理中いつでも、後続フレームで統合するインスタンスや、まだ追跡されていない新しいインスタンスに対して、新しいプロンプトを追加できます。
  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)

# ボックスプロンプトでカテゴリを定義
predictor(source="image1.jpg", bboxes=[[100, 100, 200, 200]], obj_ids=[0], update_memory=True)

# 新しい画像でこの特定のオブジェクトを検出
results = predictor(source="image2.jpg")

# 新しいオブジェクトIDでカテゴリを追加
results = predictor(
    source="image4.jpg",
    bboxes=[[300, 300, 400, 400]],  # 新しいオブジェクト
    obj_ids=[1],  # 新しいオブジェクトID
    update_memory=True,  # メモリに追加
)
# 推論を実行
results = predictor(source="image5.jpg")

# パフォーマンスを向上させるため、同じカテゴリに絞り込みプロンプトを追加
# これは、オブジェクトの外観が大きく変化する場合に役立ちます
results = predictor(
    source="image6.jpg",
    points=[[150, 150]],  # 絞り込みポイント
    labels=[1],  # ポジティブポイント
    obj_ids=[1],  # 同じオブジェクトID
    update_memory=True,  # 新しい情報でメモリを更新
)
# 新しい画像で推論を実行
results = predictor(source="image7.jpg")
注

SAM2DynamicInteractivePredictorはSAM 2モデルで動作するように設計されており、SAM 2がネイティブでサポートするすべてのボックス、ポイント、マスクのプロンプトを使用して、カテゴリを追加および絞り込むことができます。動画アノテーションやインタラクティブ編集タスクなど、オブジェクトが時間とともに出現したり変化したりするシナリオで特に役立ちます。

引数#

名前デフォルト値データ型説明
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とYOLOv8のバックボーン23.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で測定しました。テストは16GBのRAMを搭載した2025年製Apple M4 Airで、torch==2.10.0、ultralytics==8.4.31、onnxruntime==1.24.4を使用して実施しました。このテストを再現するには、次の手順を実行してください。

例
from ultralytics import ASSETS, SAM, YOLO, FastSAM

# 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)

# FastSAM-sのプロファイルを取得
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)

# YOLOモデル(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フリーヘッド。YOLOv8/YOLO11では何もしません
    model = YOLO(onnx_path)
    model(ASSETS)

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

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

SAM 2による自動アノテーションの方法#



視聴: Ultralytics で Meta の Segment Anything 2 モデルを使った自動アノテーション | データラベリング

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、SAM 2、MobileSAM、SAM 3の重みに対応)。
devicestr''計算デバイス(例:'cuda:0'、'cpu'、またはデバイスを自動検出する場合は'')。
conffloat0.25信頼度の低い検出結果を除外するためのYOLO検出信頼度しきい値。
ioufloat0.45重複するボックスを除外するための非最大値抑制のIoUしきい値。
imgszint640画像のリサイズに使用する入力サイズ(必要に応じて32の倍数に切り上げられます)。
max_detint300メモリ効率を高めるための、画像ごとの検出数の最大値。
classeslist[int]None検出するクラスインデックスのリスト(例:人物と自転車の場合は[0, 1])。
output_dirstrNoneアノテーションの保存ディレクトリ(デフォルト:兄弟ディレクトリの<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に、心より感謝いたします。

よくある質問#

  • MetaのSegment Anything Model(SAM)の後継であるSAM 2は、画像と動画の両方で包括的なオブジェクトセグメンテーションを実現するために設計された最先端のツールです。リアルタイム処理とゼロショット汎化に対応した、統合型のプロンプト可能なモデルアーキテクチャにより、複雑な視覚データの処理に優れています。SAM 2では、オリジナルのSAMから次のような点が改善されています。

    • 統合モデルアーキテクチャ:画像と動画のセグメンテーション機能を単一のモデルに統合しています。
    • リアルタイム性能:毎秒約44フレームを処理できるため、即時のフィードバックが求められるアプリケーションに適しています。
    • ゼロショット汎化:これまで見たことのないオブジェクトもセグメント化でき、多様な視覚領域で役立ちます。
    • インタラクティブな絞り込み:追加のプロンプトを入力することで、セグメンテーション結果を繰り返し絞り込めます。
    • 視覚的な課題への高度な対応:オブジェクトの遮蔽や再出現など、動画セグメンテーションでよくある課題に対応します。

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

  • プロンプト可能なインターフェースとリアルタイム推論機能を活用すると、SAM 2をリアルタイム動画セグメンテーションに利用できます。基本的な例を示します。

    プロンプトを使用したセグメンテーション

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

    from ultralytics import SAM
    
    # モデルを読み込む
    model = SAM("sam2_b.pt")
    
    # モデル情報を表示(任意)
    model.info()
    
    # バウンディングボックスのプロンプトでセグメント化
    results = model("path/to/image.jpg", bboxes=[100, 100, 200, 200])
    
    # ポイントのプロンプトでセグメント化
    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件以上のマスクアノテーション: 「masklet」と呼ばれる詳細な時空間マスクアノテーションで、オブジェクト全体とその部分を対象としています。
    • データセットの規模:従来最大のデータセットと比べて動画数が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を使用しないエンドツーエンド推論により、速度、効率、リアルタイムアプリケーション向けに最適化されているため、リソースが限られた環境へのデプロイに適しています。

コメント