SAM 2.1
より正確なSAM2.1モデルのサポートを追加しました。ぜひお試しください!
SAM2: Segment Anything Model 2
MetaのSegment Anything Model (SAM)の後継であるSAM2は、画像と動画の両方で包括的なオブジェクトセグメンテーションを行うために設計された最先端のツールです。リアルタイム処理とゼロショット汎化をサポートする統一されたプロンプト可能なモデルアーキテクチャにより、複雑な視覚データの処理に優れています。
主な特徴
見る: Ultralyticsを使用してMetaのSAM2で推論を実行する方法 | ステップごとのガイド 🎉
統合モデルアーキテクチャ
SAM 2は、画像およびビデオセグメンテーションの機能を単一のモデルに統合します。この統合により、デプロイメントが簡素化され、異なるメディアタイプ間で一貫したパフォーマンスが可能になります。柔軟なプロンプトベースのインターフェースを活用して、ポイント、バウンディングボックス、マスクなど、さまざまなプロンプトタイプを介して関心のあるオブジェクトを指定できます。
リアルタイムパフォーマンス
このモデルは、約 44 フレーム/秒のリアルタイム推論速度を実現します。これにより、SAM 2 は、ビデオ編集や拡張現実など、即時のフィードバックを必要とするアプリケーションに適しています。
ゼロショット汎化
SAM 2は、これまで遭遇したことのないオブジェクトをセグメント化でき、強力なゼロショット汎化を示します。これは、事前定義されたカテゴリがすべての可能なオブジェクトを網羅していない可能性のある、多様なまたは進化する視覚ドメインで特に役立ちます。
インタラクティブな改良
ユーザーは、追加のプロンプトを提供することで、セグメンテーション結果を繰り返し調整し、出力を正確に制御できます。このインタラクティブ性は、ビデオアノテーションや医療画像処理などのアプリケーションで結果を微調整するために不可欠です。
視覚的な課題の高度な処理
SAM 2には、オブジェクトのオクルージョンや再出現など、一般的なビデオセグメンテーションの課題を管理するメカニズムが含まれています。高度なメモリメカニズムを使用して、フレーム間のオブジェクトを追跡し、オブジェクトが一時的に隠されたり、シーンから出入りしたりする場合でも、連続性を確保します。
SAM 2のアーキテクチャと機能の詳細については、SAM 2の研究論文をご覧ください。
パフォーマンスと技術詳細
SAM2 は、さまざまな指標において以前のモデルを凌駕し、この分野で新たなベンチマークを打ち立てます。
メトリック | SAM 2 | 以前のSOTA |
---|---|---|
インタラクティブなビデオセグメンテーション | 最適 | - |
人的相互作用が必要 | 3分の1 | ベースライン |
画像セグメンテーションの精度 | 改善されました | SAM |
推論速度 | 6倍高速 | SAM |
モデルアーキテクチャ
コアコンポーネント
- 画像およびビデオエンコーダ: Transformerベースのアーキテクチャを利用して、画像とビデオフレームの両方から高レベルの特徴を抽出します。このコンポーネントは、各タイムステップで視覚的なコンテンツを理解する役割を担います。
- プロンプトエンコーダー: ユーザーが提供するプロンプト(ポイント、ボックス、マスク)を処理して、セグメンテーションタスクをガイドします。これにより、SAM 2 はユーザーの入力に適応し、シーン内の特定のオブジェクトをターゲットにすることができます。
- メモリメカニズム: メモリエンコーダ、メモリバンク、メモリアテンションモジュールが含まれています。これらのコンポーネントは、過去のフレームからの情報をまとめて保存および利用し、モデルが時間の経過とともに一貫したオブジェクト追跡を維持できるようにします。
- マスクデコーダー: エンコードされた画像特徴とプロンプトに基づいて、最終的なセグメンテーションマスクを生成します。動画では、フレーム間の正確なトラッキングを保証するために、メモリコンテキストも使用します。
メモリメカニズムとオクルージョン処理
このメモリメカニズムにより、SAM 2 はビデオデータ内の時間的依存関係とオクルージョンを処理できます。オブジェクトが移動して相互作用すると、SAM 2 はそれらの特徴をメモリバンクに記録します。オブジェクトがオクルージョンされると、モデルはこのメモリに依存して、オブジェクトが再表示されたときの位置と外観を予測できます。オクルージョンヘッドは、オブジェクトが表示されないシナリオを特に処理し、オブジェクトがオクルージョンされる可能性を予測します。
Multi-Mask Ambiguity Resolution
曖昧さがある状況(例えば、オブジェクトの重複)では、SAM 2は複数のマスク予測を生成できます。この機能は、単一のマスクではシーンのニュアンスを十分に表現できない複雑なシーンを正確に表現するために重要です。
SA-Vデータセット
SAM 2のトレーニング用に開発されたSA-Vデータセットは、利用可能なビデオセグメンテーションデータセットの中で最大かつ最も多様なものの1つです。以下が含まれています。
- 51,000件以上の動画: 47か国でキャプチャされ、幅広い現実世界のシナリオを提供。
- 600,000件以上のマスクアノテーション: オブジェクト全体とその一部をカバーする、詳細な時空間マスクアノテーション(「マスクレット」と呼ばれる)。
- データセットの規模: 以前の最大のデータセットより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 ultralytics
SAM 2の使い方:画像と動画のセグメンテーションにおける多様性
以下の表は、利用可能な SAM 2 モデル、その事前学習済みウェイト、サポートされているタスク、および 推論、検証、トレーニング、エクスポート などのさまざまな動作モードとの互換性について詳しく説明しています。
モデルの種類 | 事前学習済み重み | サポートされているタスク | 推論 | 検証 | 学習 | エクスポート |
---|---|---|---|---|---|---|
SAM2 tiny | sam2_t.pt | インスタンスセグメンテーション | ✅ | ❌ | ❌ | ❌ |
SAM2 small | sam2_s.pt | インスタンスセグメンテーション | ✅ | ❌ | ❌ | ❌ |
SAM 2ベース | sam2_b.pt | インスタンスセグメンテーション | ✅ | ❌ | ❌ | ❌ |
SAM2 large | sam2_l.pt | インスタンスセグメンテーション | ✅ | ❌ | ❌ | ❌ |
SAM2.1 tiny | sam2.1_t.pt | インスタンスセグメンテーション | ✅ | ❌ | ❌ | ❌ |
SAM2.1 small | sam2.1_s.pt | インスタンスセグメンテーション | ✅ | ❌ | ❌ | ❌ |
SAM2.1 base | sam2.1_b.pt | インスタンスセグメンテーション | ✅ | ❌ | ❌ | ❌ |
SAM2.1 large | sam2.1_l.pt | インスタンスセグメンテーション | ✅ | ❌ | ❌ | ❌ |
SAM2 の予測例
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")
# Run inference with a SAM 2 model
yolo predict model=sam2.1_b.pt source=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]])
- この例では、プロンプト(bboxes/points/masks)が提供されない場合に、SAM 2を使用して画像またはビデオのコンテンツ全体をセグメント化する方法を示します。
ダイナミック・インタラクティブ・セグメント&トラック
SAM2DynamicInteractivePredictor は、SAM2 の高度なトレーニングフリー拡張機能であり、複数のフレームとのダイナミックな相互作用と継続的な学習機能を可能にします。このプレディクターは、リアルタイムのプロンプト更新とメモリ管理をサポートし、一連の画像におけるトラッキングパフォーマンスを向上させます。オリジナルのSAM22と比較して、SAM2DynamicInteractivePredictorは、追加のトレーニングを必要とすることなく、事前にトレーニングされたSAM2 モデルを最大限に活用する推論フローを再構築します。
主な特徴
3つの重要な強化点がある:
- ダイナミック・インタラクティブ:ビデオ処理中にいつでも次のフレームで新しいインスタンスをマージ/トラッキング解除するための新しいプロンプトを追加する。
- 継続的な学習:既存のインスタンスに新しいプロンプトを追加し、時間の経過とともにモデルのパフォーマンスを向上させる。
- 独立した複数画像のサポート:メモリ共有とクロスイメージオブジェクトトラッキングにより、複数の独立した画像(ビデオシーケンスからとは限りません)を処理します。
コア能力
- プロンプトの柔軟性:バウンディングボックス、ポイント、マスクをプロンプトとして使用可能
- メモリーバンク管理:フレームにまたがってオブジェクトの状態を保存する動的メモリバンクを維持する。
- マルチオブジェクトトラッキング:個々のオブジェクトIDを持つ複数のオブジェクトの同時トラッキングをサポート
- リアルタイム更新:推論中に以前のフレームを再処理することなく新しいプロンプトを追加可能
- 独立した画像処理:画像間のオブジェクト一貫性を保つため、共有メモリコンテキストでスタンドアロン画像を処理
ダイナミック・オブジェクトの追加
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.inference(img="image1.jpg", bboxes=[[100, 100, 200, 200]], obj_ids=[1], 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=[2], # New object ID
update_memory=True, # Add to memory
)
# Perform inference
results = predictor.inference(img="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=[2], # Same object ID
update_memory=True, # Update memory with new information
)
# Perform inference on new image
results = predictor(source="image7.jpg")
注
The SAM2DynamicInteractivePredictor
は、SAM2 モデルで動作するように設計されており、すべての ボックス/ポイント/マスクのプロンプト SAM2 ネイティブにサポートしています。これは、ビデオ注釈やインタラクティブな編集作業など、オブジェクトが時間の経過とともに現れたり変化したりするシナリオで特に役立ちます。
引数
名前 | デフォルト値 | データ型 | 説明 |
---|---|---|---|
max_obj_num |
3 |
str |
カテゴリの最大数 |
update_memory |
False |
bool |
新しいプロンプトでメモリを更新するかどうか |
obj_ids |
None |
List[int] |
プロンプトに対応するオブジェクトIDのリスト |
ユースケース
SAM2DynamicInteractivePredictor
に最適である:
- シーケンス中に新しいオブジェクトが現れるビデオ注釈ワークフロー
- リアルタイムのオブジェクト追加と洗練を必要とするインタラクティブなビデオ編集
- 動体追跡が必要な監視アプリケーション
- 時系列で解剖学的構造を追跡する医療用画像処理
- 適応的な物体検出と追跡を必要とする自律システム
- 独立した画像間で一貫したオブジェクトセグメンテーションを行うための複数画像データセット
- さまざまなシーンで物体を追跡する必要がある画像収集分析
- 多様な画像コンテクストの記憶を活用したクロスドメインセグメンテーション
- 最小限の手作業で効率的にデータセットを作成するための半自動アノテーション
SAM 2とYOLOの比較
ここでは、MetaのSAM2モデル(最小のSAM2-tバリアントを含む)と、Ultralyticsの最小セグメンテーションモデルであるYOLO11n-segを比較します。
モデル | サイズ (MB) |
パラメータ (M) |
速度 (CPU) (ms/im) |
---|---|---|---|
Meta SAM-b | 375 | 93.7 | 49401 |
Meta SAM2-b | 162 | 80.8 | 31901 |
Meta SAM2-t | 78.1 | 38.9 | 25997 |
MobileSAM | 40.7 | 10.1 | 25381 |
YOLOv8 バックボーンを備えたFastSAM-s | 23.7 | 11.8 | 55.9 |
Ultralytics YOLOv8n-seg | 6.7 (11.7分の1) | 3.4 (11.4分の1) | 24.5 (1061倍高速) |
Ultralytics YOLO11n-seg | 5.9 (13.2倍小さい) | 2.9 (13.4倍少ない) | 30.1 (864倍高速) |
この比較は、SAMバリアントとYOLOセグメンテーションモデル間のモデルサイズと速度の大きな違いを示しています。SAMは独自の自動セグメンテーション機能を提供しますが、YOLOモデル、特にYOLOv8n-segとYOLO11n-segは、大幅に小型、高速、かつ計算効率が高くなっています。
24GBのRAMを搭載した2025 Apple M4 Proで実行されたテスト。使用 torch==2.6.0
および ultralytics==8.3.90
。このテストを再現するには:
例
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
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt"]:
model = YOLO(file_name)
model.info()
model(ASSETS)
自動アノテーション:効率的なデータセット作成
自動アノテーションは、SAM 2の強力な機能であり、事前学習済みのモデルを活用して、セグメンテーションデータセットを迅速かつ正確に生成できます。この機能は、大規模で高品質なデータセットを手作業による多大な労力をかけずに作成する場合に特に役立ちます。
SAM2 を使用して自動アノテーションを行う方法
見る: Ultralyticsを使用したMetaのSegment Anything 2モデルによる自動アノテーション | データラベリング
SAM 2を使用してデータセットを自動アノテーションするには、次の例に従ってください。
自動アノテーションの例
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="sam2_b.pt")
引数 | 種類 | デフォルト | 説明 |
---|---|---|---|
data |
str |
必須 | アノテーションまたはセグメンテーションの対象となる画像を含むディレクトリへのパス。 |
det_model |
str |
'yolo11x.pt' |
初期オブジェクト検出のための YOLO 検出モデルのパス。 |
sam_model |
str |
'sam_b.pt' |
セグメンテーション用のSAMモデルパス(SAM、SAM2バリアント、およびmobile_samモデルをサポート)。 |
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 |
検出するクラスインデックスのリスト(例: [0, 1] 人および自転車用)。 |
output_dir |
str |
None |
アノテーションの保存先ディレクトリ(デフォルトはデータパスに対する相対パスで'./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に感謝の意を表します。
よくある質問
SAM 2とは何ですか?また、オリジナルのSegment Anything Model (SAM) からどのように改善されていますか?
MetaのSegment Anything Model (SAM)の後継であるSAM2は、画像と動画の両方で包括的なオブジェクトセグメンテーションを行うために設計された最先端のツールです。リアルタイム処理とゼロショット汎化をサポートする統一されたプロンプト可能なモデルアーキテクチャにより、複雑な視覚データの処理に優れています。SAM2 は、オリジナルの SAM からいくつかの点が改善されています。以下はその例です。
- Unified Model Architecture: 単一のモデルで画像およびビデオのセグメンテーション機能を組み合わせます。
- リアルタイム性能: 約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のトレーニングにはどのようなデータセットが使用され、それらはどのようにパフォーマンスを向上させますか?
SAM2 は、利用可能な最大かつ最も多様なビデオセグメンテーションデータセットの1つである SA-V データセットでトレーニングされています。SA-V データセットの内容:
- 51,000件以上の動画: 47か国でキャプチャされ、幅広い現実世界のシナリオを提供。
- 600,000件以上のマスクアノテーション: オブジェクト全体とその一部をカバーする、詳細な時空間マスクアノテーション(「マスクレット」と呼ばれる)。
- データセットの規模: 以前の最大のデータセットより4.5倍多い動画と53倍多いアノテーションを備えており、前例のない多様性と複雑さを提供します。
この大規模なデータセットにより、SAM 2は主要なビデオセグメンテーションベンチマークで優れたパフォーマンスを達成し、ゼロショット汎化機能を強化できます。詳細については、SA-V Datasetセクションを参照してください。
SAM 2は、ビデオセグメンテーションにおけるオクルージョンやオブジェクトの再出現をどのように処理しますか?
SAM 2には、ビデオデータ内の時間的依存関係とオクルージョンを管理するための高度なメモリメカニズムが含まれています。メモリメカニズムは以下で構成されます:
- メモリエンコーダーとメモリバンク: 過去のフレームからの特徴を保存します。
- メモリアテンションモジュール: 保存された情報を利用して、時間経過とともに一貫したオブジェクト追跡を維持します。
- Occlusion Head: オブジェクトが可視でないシナリオに特化したもので、オブジェクトが遮蔽されている可能性を予測します。
このメカニズムにより、オブジェクトが一時的に遮られたり、シーンから出入りしたりする場合でも、継続性が確保されます。詳細については、メモリメカニズムとオクルージョン処理のセクションを参照してください。
SAM 2はYOLO11のような他のセグメンテーションモデルと比べてどうですか?
MetaのSAM2-tやSAM2-bなどのSAM 2モデルは、強力なゼロショットセグメンテーション機能を提供しますが、YOLO11モデルと比較して大幅に大きく、低速です。たとえば、YOLO11n-segはSAM2-bよりも約13倍小さく、860倍以上高速です。SAM 2は、汎用性、プロンプトベース、およびゼロショットのセグメンテーションシナリオに優れていますが、YOLO11は速度、効率、およびリアルタイムアプリケーション向けに最適化されており、リソースが限られた環境でのデプロイに適しています。