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 のトレーニング用に開発されたもので、利用可能な最大かつ最も多様なビデオセグメンテーションデータセットの1つである。これには以下が含まれる:
- 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]])
セグメント・エブリシング
セグメント・エブリシング
特定のプロンプトなしで、画像やビデオのコンテンツ全体をセグメント化します。
- この例では、プロンプト(bboxes/points/masks)が提供されていない場合に、SAM 2 を使用して、画像またはビデオのコンテンツ全体をセグメント化する方法を示します。
SAM 2 比較YOLOv8
ここでは、Metaの最小のSAM 2モデル、SAM2-tと、Ultralytics 最小のセグメンテーションモデル、YOLOv8n-segを比較する:
モデル | サイズ (MB) | パラメータ (M) | スピード (CPU) (ms/im) |
---|---|---|---|
メタSAM-b | 375 | 93.7 | 161440 |
メタSAM2-b | 162 | 80.8 | 121923 |
メタSAM2-t | 78.1 | 38.9 | 85155 |
MobileSAM | 40.7 | 10.1 | 98543 |
FastSAM YOLOv8 バックボーン付き | 23.7 | 11.8 | 140 |
Ultralytics YOLOv8n-セグ | 6.7(11.7倍小さい) | 3.4倍(11.4倍減) | 79.5(1071倍速) |
この比較は、モデル間のモデルサイズと速度の桁違いを示している。SAM 、自動セグメンテーションのためのユニークな機能を備えているが、YOLOv8 、より小型で高速、効率的なセグメントモデルと直接競合するものではない。
テストは、16GBのRAMを搭載した2023年製Apple M2 Macbookで実施した。 torch==2.3.1
そして ultralytics==8.3.82
.このテストを再現する:
例
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 YOLOv8n-seg
model = YOLO("yolov8n-seg.pt")
model.info()
model(ASSETS)
オートアノテーション効率的なデータセット作成
オートアノテーションは、SAM 2 の強力な機能であり、ユーザーは事前に訓練されたモデルを活用することで、セグメンテーションデータセットを迅速かつ正確に生成することができる。この機能は、大規模で高品質なデータセットを手作業で作成する場合に特に役立ちます。
SAM 2で自動注釈を付ける方法
SAM 2を使用してデータセットを自動注釈付けするには、次の例に従ってください:
自動注釈の例
議論 | タイプ | 説明 | デフォルト |
---|---|---|---|
data | str | 注釈を付ける画像を含むフォルダへのパス。 | |
det_model | str 任意 | 事前にトレーニングされたYOLO 検出モデル。デフォルトは 'yolo11x.pt' です。 | 'yolo11x.pt' |
sam_model | str 任意 | 事前にトレーニングされたSAM 2 セグメンテーションモデル。デフォルトは'sam2_b.pt'。 | 'sam2_b.pt' |
device | str 任意 | モデルを実行するデバイス。デフォルトは空の文字列(CPU またはGPU 、利用可能な場合)。 | |
conf | float 任意 | デフォルトは0.25。 | 0.25 |
iou | float 任意 | 検出結果の重複ボックスをフィルタリングするためのIoUしきい値。デフォルトは0.45。 | 0.45 |
imgsz | int 任意 | 入力画像のリサイズ寸法。デフォルトは640。 | 640 |
max_det | int 任意 | 密なシーンでの出力を制御するために、画像ごとの検出を制限する。 | 300 |
classes | list 任意 | 指定されたクラス ID に予測をフィルタリングし、関連する検出のみを返します。 | None |
output_dir | str , None 任意 | 注釈付き結果を保存するディレクトリ。デフォルトは'data'と同じディレクトリの'labels'フォルダ。 | None |
この機能により、高品質なセグメンテーションデータセットの迅速な作成が可能になり、プロジェクトの迅速化を目指す研究者や開発者に最適です。
制限事項
その長所にもかかわらず、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は、YOLOv8 のような他のセグメンテーションモデルと比較してどうですか?
SAM 2 とUltralytics YOLOv8 は、それぞれ異なる目的で使用され、異なる分野で優れている。SAM 2 がゼロショット汎化やリアルタイム性能などの高度な機能を備えた包括的なオブジェクトセグメンテーション用に設計されているのに対し、YOLOv8 はオブジェクト検出とセグメンテーションタスクの速度と効率に最適化されています。以下はその比較である:
モデル | サイズ (MB) | パラメータ (M) | スピード (CPU) (ms/im) |
---|---|---|---|
メタSAM-b | 375 | 93.7 | 161440 |
メタSAM2-b | 162 | 80.8 | 121923 |
メタSAM2-t | 78.1 | 38.9 | 85155 |
MobileSAM | 40.7 | 10.1 | 98543 |
FastSAM YOLOv8 バックボーン付き | 23.7 | 11.8 | 140 |
Ultralytics YOLOv8n-セグ | 6.7(11.7倍小さい) | 3.4倍(11.4倍減) | 79.5(1071倍速) |
詳しくは、SAM 2とYOLOv8の比較をご覧ください。