SAM 2.1
より正確なSAM2.1モデルのサポートを追加しました。ぜひお試しください!
SAM 2: セグメント何でもモデル2
SAM 2は、MetaのSegment Anything Model (SAM) の後継で、画像と動画の両方で包括的なオブジェクトセグメンテーションのために設計された最先端のツールです。リアルタイム処理とゼロショット汎化をサポートする、統一されたプロンプト可能なモデルアーキテクチャにより、複雑な視覚データの処理に優れています。
主な特徴
見るんだ: Ultralytics |ステップバイステップガイド🎉を使用してメタのSAM2 |推論を実行する方法
統一モデル・アーキテクチャ
SAM 2は、画像とビデオのセグメンテーション機能を1つのモデルに統合している。この単一化により、導入が簡素化され、異なるメディアタイプ間で一貫したパフォーマンスが実現します。柔軟なプロンプトベースのインターフェイスを活用し、ユーザーは、ポイント、バウンディングボックス、マスクなど、さまざまなプロンプトタイプで関心のあるオブジェクトを指定できます。
リアルタイム・パフォーマンス
このモデルはリアルタイム推論速度を達成し、1秒間に約44フレームを処理する。このため、SAM 2は、ビデオ編集や拡張現実などの即時フィードバックを必要とするアプリケーションに適している。
ゼロショット一般化
SAM 2 は、これまでに遭遇したことのないオブジェクトをセグメンテーションすることができ、強力なゼロショット汎化を示す。これは、あらかじめ定義されたカテゴリがすべての可能なオブジェクトをカバーしていない可能性がある、多様な視覚領域や進化する視覚領域で特に有用である。
インタラクティブなリファインメント
ユーザーは、追加のプロンプトを提供することによって、セグメンテーション結果を反復的に改良することができ、出力を正確に制御することができる。このインタラクティブ性は、ビデオ注釈や医療画像のようなアプリケーションで結果を微調整するために不可欠です。
視覚的課題への高度な対応
SAM 2 には、オブジェクトのオクルージョンや再出現など、一般的なビデオセグメンテーションの課題を管理するメカニズムが含まれています。洗練されたメモリメカニズムを使用して、フレーム間でオブジェクトを追跡し、オブジェクトが一時的に見えなくなったり、シーンから出たり入ったりした場合でも、連続性を確保する。
SAM 2のアーキテクチャーと機能をより深く理解するには、SAM 2のリサーチペーパーをご覧ください。
性能と技術的詳細
SAM 2は、この分野における新たなベンチマークを設定し、さまざまな指標で従来のモデルを凌駕している:
メートル | SAM 2 | 前回のSOTA |
---|---|---|
インタラクティブ・ビデオ・セグメンテーション | ベスト | - |
人的交流が必要 | 3倍減 | ベースライン |
画像分割精度 | 改善された | SAM |
推論スピード | 6倍速 | SAM |
モデル建築
コア・コンポーネント
- 画像およびビデオエンコーダ:変換器ベースのアーキテクチャを利用して、画像とビデオフレームの両方から高レベルの特徴を抽出する。このコンポーネントは、各タイムステップにおけるビジュアルコンテンツの理解を担当する。
- プロンプトエンコーダー:ユーザーから提供されたプロンプト(ポイント、ボックス、マスク)を処理して、セグメンテーション タスクをガイドする。これにより、SAM 2 はユーザー入力に適応し、シーン内の特定のオブジェクトをターゲットにすることができる。
- メモリーメカニズム:メモリーエンコーダ、メモリーバンク、メモリーアテンションモジュールを含む。これらのコンポーネントは、過去のフレームからの情報をまとめて保存・利用することで、時間経過に伴う一貫した物体追跡を可能にする。
- マスクデコーダー:エンコードされた画像の特徴とプロンプトに基づいて、最終的なセグメンテーションマスクを生成する。ビデオでは、フレーム間の正確なトラッキングを保証するためにメモリコンテキストも使用する。
メモリの仕組みとオクルージョンの処理
このメモリ・メカニズムにより、SAM 2 はビデオ・データの時間的依存性やオクルージョンを扱うことができる。オブジェクトが移動したり相互作用したりすると、SAM 2 はその特徴をメモリバンクに記録する。オブジェクトがオクルージョンになると、モデルはこのメモリーを頼りに、再び現れたときの位置と外観を予測することができる。オクルージョンヘッドは、オブジェクトが見えないシナリオを特に処理し、オブジェクトがオクルージョンされる可能性を予測する。
マルチマスク曖昧さ解決
曖昧さのある状況(例えば、重なり合うオブジェクト)では、SAM 2 は複数のマスク予測を生成することができる。この機能は、単一のマスクではシーンのニュアンスを十分に表現できないような複雑なシーンを正確に表現するために極めて重要である。
SA-Vデータセット
SA-V データセットは、SAM 2 のトレーニング用に開発されたもので、利用可能な最大かつ最も多様なビデオセグメンテーションデータセットの一つである。これには以下が含まれる:
- 51,000本以上のビデオ:世界47カ国で撮影され、幅広い実戦シナリオを提供。
- 60万以上のマスク注釈:時空間的な詳細なマスクアノテーションは「マスクレット」と呼ばれ、オブジェクト全体とパーツをカバーします。
- データセットの規模:これまでの最大規模のデータセットに比べ、4.5倍のビデオと53倍のアノテーションを収録しており、これまでにない多様性と複雑性を実現している。
ベンチマーク
ビデオオブジェクトのセグメンテーション
SAM 2は、主要なビデオセグメンテーションベンチマークで優れた性能を実証している:
データ集合 | J&F | J | F |
---|---|---|---|
デイビス2017 | 82.5 | 79.8 | 85.2 |
ユーチューブ-VOS | 81.2 | 78.9 | 83.5 |
インタラクティブ・セグメンテーション
対話型セグメンテーションのタスクでは、SAM 2 が大きな効率と精度を示している:
データ集合 | NoC@90 | AUC |
---|---|---|
デイヴィス・インタラクティブ | 1.54 | 0.872 |
インストール
SAM 2をインストールするには、以下のコマンドを使用します。すべてのSAM 2モデルは、初回使用時に自動的にダウンロードされます。
SAM 2: 画像とビデオのセグメンテーションにおける多様性
次の表は、利用可能なSAM 2 モデル、その事前訓練された重み、サポートされるタスク、および推論、検証、訓練、エクスポートなどのさまざまな操作モードとの互換性の詳細です。
モデルタイプ | 事前に訓練されたウェイト | 対応タスク | 推論 | バリデーション | トレーニング | 輸出 |
---|---|---|---|---|---|---|
SAM 2 小さな | サム2_t.pt | インスタンスのセグメンテーション | ✅ | ❌ | ❌ | ❌ |
SAM 小2 | サム2_s.pt | インスタンスのセグメンテーション | ✅ | ❌ | ❌ | ❌ |
SAM 2ベース | サム2_b.pt | インスタンスのセグメンテーション | ✅ | ❌ | ❌ | ❌ |
SAM 大型2台 | sam2_l.pt | インスタンスのセグメンテーション | ✅ | ❌ | ❌ | ❌ |
SAM 2.1 極小 | サム2.1_t.pt | インスタンスのセグメンテーション | ✅ | ❌ | ❌ | ❌ |
SAM 2.1 小型 | サム2.1_s.pt | インスタンスのセグメンテーション | ✅ | ❌ | ❌ | ❌ |
SAM 2.1 ベース | サム2.1_b.pt | インスタンスのセグメンテーション | ✅ | ❌ | ❌ | ❌ |
SAM 2.1 大型 | サム2.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.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 を使用して、画像またはビデオのコンテンツ全体をセグメント化する方法を示します。
SAM 2とYOLO比較
ここでは、最小のSAM2含むMetaのSAM 2モデルと、Ultralytics 最小セグメンテーションモデルYOLO11n-segを比較する:
モデル | サイズ (MB) |
パラメータ (M) |
スピード (CPU) (ms/im) |
---|---|---|---|
メタSAM-b | 375 | 93.7 | 49401 |
メタSAM2-b | 162 | 80.8 | 31901 |
メタSAM2-t | 78.1 | 38.9 | 25997 |
MobileSAM | 40.7 | 10.1 | 25381 |
YOLOv8 バックボーンのFastSAM | 23.7 | 11.8 | 55.9 |
Ultralytics YOLOv8n-セグ | 6.7(11.7倍小さい) | 3.4倍(11.4倍減) | 24.5(1061倍速) |
Ultralytics YOLO11n-seg | 5.9(13.2倍小さい) | 2.9(13.4倍減) | 30.1(864倍速) |
この比較は、SAM 亜種とYOLO セグメンテーションモデルとの間に、モデルのサイズと速度に大きな違いがあることを示している。SAM ユニークな自動セグメンテーション機能を提供するが、YOLO モデル、特にYOLOv8nYOLO11n-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 の強力な機能であり、ユーザーは事前に訓練されたモデルを活用することで、セグメンテーションデータセットを迅速かつ正確に生成することができる。この機能は、大規模で高品質なデータセットを手作業で作成する場合に特に役立ちます。
SAM 2で自動注釈を付ける方法
見るんだ: Ultralytics |データラベリングを用いたメタのセグメント何でも2モデルによる自動アノテーション
SAM 2を使用してデータセットを自動注釈付けするには、次の例に従ってください:
自動注釈の例
議論 | タイプ | デフォルト | 説明 |
---|---|---|---|
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 |
重複するボックスをフィルタリングするための非最大抑制の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とは何ですか?また、オリジナルのセグメント・エニシング・モデル(SAM)をどのように改良したのですか?
SAM 2は、MetaのSegment Anything Model (SAM) の後継で、画像と動画の両方で包括的なオブジェクトセグメンテーションのために設計された最先端のツールです。リアルタイム処理とゼロショット汎化をサポートする、統一されたプロンプト可能なモデルアーキテクチャにより、複雑な視覚データの処理に優れています。SAM 2 は、オリジナルのSAM に比べて、以下のようないくつかの改良が施されている:
- 統一モデルアーキテクチャ:画像とビデオのセグメンテーション機能を1つのモデルに統合。
- リアルタイム性能: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])
より包括的な使用方法については、「SAM 2 の使用方法」を参照してください。
SAM 2の訓練にはどのようなデータセットが使われ、どのようにその性能を高めているのか?
SAM 2は、利用可能な最大かつ最も多様なビデオセグメンテーションデータセットの1つであるSA-Vデータセットで学習される。SA-Vデータセットには以下が含まれる:
- 51,000本以上のビデオ:世界47カ国で撮影され、幅広い実戦シナリオを提供。
- 60万以上のマスク注釈:時空間的な詳細なマスクアノテーションは「マスクレット」と呼ばれ、オブジェクト全体とパーツをカバーします。
- データセットの規模:これまでの最大規模のデータセットと比較して、4.5倍のビデオと53倍のアノテーションを備え、これまでにない多様性と複雑性を提供。
この広範なデータセットにより、SAM 2 は、主要なビデオセグメンテーションベンチマークで優れた性能を達成し、ゼロショット汎化機能を強化することができます。詳細については、「SA-V データセット」のセクションを参照してください。
SAM 2は、映像のセグメンテーションにおいて、オクルージョンやオブジェクトの再出現をどのように扱うのか?
SAM 2には、ビデオデータの時間依存性とオクルージョンを管理するための高度なメモリメカニズムが含まれている。このメモリメカニズムは以下のように構成されている:
- メモリーエンコーダとメモリーバンク:過去のフレームの特徴を保存する。
- 記憶注意モジュール:記憶された情報を活用し、時間の経過とともに一貫した物体追跡を維持する。
- オクルージョンヘッド:オブジェクトが見えないシナリオに特化し、オブジェクトがオクルージョンされる可能性を予測する。
このメカニズムにより、オブジェクトが一時的に見えなくなったり、シーンから出たり入ったりしても、連続性が保たれる。詳しくは、メモリーメカニズムとオクルージョン処理のセクションを参照してください。
SAM 2はYOLO11ような他のセグメンテーションモデルと比較してどうですか?
Meta社のSAM2 SAM2ようなSAM 2モデルは、強力なゼロショットセグメンテーション機能を提供するが、YOLO11 モデルに比べてかなり大きく、遅い。例えば、YOLO11n-segは、SAM2 約13倍小さく、860倍以上速い。SAM 2が多用途、プロンプトベース、ゼロショットセグメンテーションシナリオに優れているのに対し、YOLO11 スピード、効率、リアルタイムアプリケーションに最適化されているため、リソースに制約のある環境での展開に適している。