コンテンツにスキップ

Segment Anything Model (SAM)

SAMの進化

これはMetaが提供するオリジナルのSAMモデルです。機能強化については、ビデオsegmentation用のSAM 2、またはテキストおよび画像例示プロンプトによるPromptable Concept Segmentation用のSAM 3を参照してください。

Segment AnythingをColabで使用する方法

Segment Anything Model、略して SAM による画像セグメンテーションの最前線へようこそ。この革新的なモデルは、リアルタイムパフォーマンスでプロンプト可能な画像セグメンテーションを導入し、この分野に新たな基準を打ち立てることで、ゲームを変えました。

SAM(Segment Anything Model)入門

Segment Anything Model(SAM)は、プロンプト可能なセグメンテーションを可能にする最先端の画像セグメンテーションモデルであり、画像分析タスクにおいて比類のない汎用性を提供します。SAMは、画像セグメンテーションのための新しいモデル、タスク、およびデータセットを紹介する画期的なプロジェクトであるSegment Anythingイニシアチブの中核をなしています。

SAMの高度な設計により、事前の知識なしに新しい画像分布やタスクに適応できます。これはゼロショット転移として知られる機能です。1100万枚の厳選された画像に10億を超えるマスクを含む広範なSA-1BデータセットでトレーニングされたSAMは、多くの場合、以前の完全教師ありの結果を上回る、印象的なゼロショット性能を示しています。

SA-1Bデータセットサンプル(自動セグメンテーションマスク付き)SA-1Bのサンプル画像。 新しく導入されたSA-1Bデータセットからオーバーレイされたマスクのデータセット画像。SA-1Bには、1100万の多様な高解像度、ライセンス供与された、プライバシー保護された画像と、11億の高品質セグメンテーションマスクが含まれています。これらのマスクはSAMによって完全に自動的にアノテーションされ、人間の評価と多数の実験によって検証されているように、高品質で多様性があります。画像は、視覚化のために画像あたりのマスク数でグループ化されています(平均して画像あたり約100個のマスクがあります)。

Segment Anything Model (SAM) の主な特徴

  • プロンプト可能なセグメンテーションタスク: SAMは、プロンプト可能なセグメンテーションタスクを念頭に置いて設計されており、オブジェクトを識別する空間的またはテキストの手がかりなど、与えられたプロンプトから有効なセグメンテーションマスクを生成できます。
  • 高度なアーキテクチャ: Segment Anything Modelは、強力な画像エンコーダ、プロンプトエンコーダ、および軽量マスクデコーダを採用しています。この独自のアーキテクチャにより、柔軟なプロンプト、リアルタイムのマスク計算、およびセグメンテーションタスクにおける曖昧さの認識が可能になります。
  • The SA-1B Dataset: Segment Anythingプロジェクトによって導入されたSA-1Bデータセットは、1100万枚の画像に10億を超えるマスクを備えています。現在最大のセグメンテーションデータセットとして、SAMに多様で大規模なトレーニングデータソースを提供します。
  • ゼロショット性能: SAMは、さまざまなセグメンテーションタスクにおいて、優れたゼロショット性能を発揮し、プロンプトエンジニアリングの必要性を最小限に抑え、多様なアプリケーションに対応できるすぐに使えるツールとなっています。

Segment AnythingモデルとSA-1Bデータセットの詳細については、Segment Anything GitHubにアクセスし、研究論文Segment Anythingをご確認ください。

利用可能なモデル、サポートされているタスク、および動作モード

この表は、利用可能なモデルと、それらの特定の事前学習済み重み、サポートするタスク、および推論検証学習エクスポートといった異なる動作モードとの互換性を示しています。サポートされるモードは✅絵文字、サポートされないモードは❌絵文字で示されます。

モデルの種類事前学習済み重みサポートされているタスク推論検証学習エクスポート
SAMベースsam_b.ptインスタンスセグメンテーション
SAM largesam_l.ptインスタンスセグメンテーション

SAMの使用方法:画像セグメンテーションにおける多様性とパワー

Segment Anything Modelは、トレーニングデータを超えた多数のダウンストリームタスクに利用できます。これには、エッジ検出、オブジェクト提案の生成、インスタンスセグメンテーション、および予備的なテキストからマスクへの予測が含まれます。プロンプトエンジニアリングを使用すると、SAMはゼロショットで新しいタスクやデータ分布に迅速に適応でき、すべての画像セグメンテーションニーズに対応する汎用性と強力なツールとしての地位を確立します。

SAM予測の例

プロンプトを使ったセグメント化

指定されたプロンプトで画像をセグメント化します。

from ultralytics import SAM

# Load a model
model = SAM("sam_b.pt")

# Display model information (optional)
model.info()

# Run inference with bboxes prompt
results = model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])

# 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("sam_b.pt")

# Display model information (optional)
model.info()

# Run inference
model("path/to/image.jpg")
# Run inference with a SAM model
yolo predict model=sam_b.pt source=path/to/image.jpg
  • プロンプト(bboxes/ポイント/マスク)を渡さない場合、画像全体をsegmentするのがここでのロジックです。

SAMPredictorの例

この方法では、画像を一度設定し、イメージエンコーダーを複数回実行せずに、プロンプト推論を複数回実行できます。

from ultralytics.models.sam import Predictor as SAMPredictor

# Create SAMPredictor
overrides = dict(conf=0.25, task="segment", mode="predict", imgsz=1024, model="mobile_sam.pt")
predictor = SAMPredictor(overrides=overrides)

# Set image
predictor.set_image("ultralytics/assets/zidane.jpg")  # set with image file
predictor.set_image(cv2.imread("ultralytics/assets/zidane.jpg"))  # set with np.ndarray
results = predictor(bboxes=[439, 437, 524, 709])

# Run inference with single point prompt
results = predictor(points=[900, 370], labels=[1])

# Run inference with multiple points prompt
results = predictor(points=[[400, 370], [900, 370]], labels=[1, 1])

# Run inference with negative points prompt
results = predictor(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

# Reset image
predictor.reset_image()

追加の引数を使用してすべてをセグメント化します。

from ultralytics.models.sam import Predictor as SAMPredictor

# Create SAMPredictor
overrides = dict(conf=0.25, task="segment", mode="predict", imgsz=1024, model="mobile_sam.pt")
predictor = SAMPredictor(overrides=overrides)

# Segment with additional args
results = predictor(source="ultralytics/assets/zidane.jpg", crop_n_layers=1, points_stride=64)

返されたすべて results 上記の例では 結果 予測マスクとソース画像へのアクセスを容易にするオブジェクト。

SAMとYOLOの比較

ここでは、MetaのSAMモデルと、YOLO26n-segを含むUltralytics モデルを比較します:

モデルサイズ
(MB)
パラメータ
(M)
速度 (CPU)
(ms/im)
Meta SAM-b37593.741703
MobileSAM40.710.123802
YOLOv8 バックボーンを備えたFastSAM-s23.911.858.0
Ultralytics YOLOv8n-seg7.1(52.8分の1)3.4(27.6倍少ない)24.8倍(1682倍速い)
Ultralytics YOLO11n-seg6.2(60.5分の1)2.9(32.3分の1)24.3(1716倍速い)
Ultralytics YOLO26n-seg6.7(56.0分の1)2.7(34.7分の1)25.2(1655倍速い)

この比較は、SAM YOLO モデルの間で、モデルサイズと処理速度に大きな差異があることを示している。SAM 独自の自動セグメンテーションSAM 一方で、YOLO 、YOLOv8n、YOLO11n-seg、YOLO26n-segは、大幅に小型化され、高速化され、計算効率が向上している。

SAM PyTorchで、YOLO ONNX で測定しました。テストは、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

# Profile SAM-b, MobileSAM
for file in ["sam_b.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)
    model = YOLO(onnx_path)
    model(ASSETS)

自動アノテーション:セグメンテーションデータセットへの迅速な道

自動アノテーションはSAMの主要な機能であり、事前学習済みdetectionモデルを使用してsegmentationデータセットを生成できます。この機能により、多数の画像を迅速かつ正確にアノテーションでき、時間のかかる手動ラベリングの必要がなくなります。

検出モデルを使用してセグメンテーションデータセットを生成する

Ultralyticsフレームワークでデータセットを自動アノテーションするには、以下を使用します。 auto_annotate 以下に示すように機能します:

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")
引数種類デフォルト説明
datastr必須アノテーションまたはセグメンテーションの対象となる画像を含むディレクトリへのパス。
det_modelstr'yolo26x.pt'初期オブジェクト検出のための YOLO 検出モデルのパス。
sam_modelstr'sam_b.pt'セグメンテーション用のSAMモデルパス (SAM、SAM2バリアント、およびMobileSAMモデルをサポート)。
devicestr''計算デバイス(例:'cuda:0'、'cpu'、または自動デバイス検出の場合は'')。
conffloat0.25YOLO 検出における、弱い検出を除外するための信頼度閾値。
ioufloat0.45重複するボックスをフィルタリングするためのNon-Maximum SuppressionのIoU閾値。
imgszint640画像リサイズ時の入力サイズ(32の倍数にする必要があります)。
max_detint300メモリ効率のための画像あたりの最大検出数。
classeslist[int]None検出するクラスインデックスのリスト (例: [0, 1] 人および自転車用)。
output_dirstrNoneアノテーションの保存先ディレクトリ(デフォルトはデータパスに対する相対パスで'./labels')。

The auto_annotate この関数は、画像へのパスと、事前学習済みdetectionモデルおよびSAM segmentationモデル、モデルを実行するデバイス、アノテーション結果を保存するための出力ディレクトリを指定するためのオプション引数を取ります。

事前学習済みモデルによる自動アノテーションは、高品質なsegmentationデータセットの作成に必要な時間と労力を劇的に削減できます。この機能は、大量の画像コレクションを扱う研究者や開発者にとって特に有益であり、手動アノテーションではなくモデル開発と評価に集中できるようになります。

引用と謝辞

研究または開発作業でSAMが役立つと思われる場合は、私たちの論文を引用することを検討してください。

@misc{kirillov2023segment,
      title={Segment Anything},
      author={Alexander Kirillov and Eric Mintun and Nikhila Ravi and Hanzi Mao and Chloe Rolland and Laura Gustafson and Tete Xiao and Spencer Whitehead and Alexander C. Berg and Wan-Yen Lo and Piotr Dollár and Ross Girshick},
      year={2023},
      eprint={2304.02643},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

コンピュータビジョンコミュニティにとって、この貴重なリソースを作成し、維持管理されている Meta AI に感謝いたします。

よくある質問

UltralyticsによるSegment Anything Model(SAM)とは何ですか?

UltralyticsのSegment Anything Model(SAM)は、プロンプト可能なセグメンテーションタスクのために設計された革新的な画像セグメンテーションモデルです。画像エンコーダとプロンプトエンコーダ、そして軽量マスクデコーダを組み合わせた高度なアーキテクチャを活用し、空間的またはテキストによる手がかりなどのさまざまなプロンプトから高品質のセグメンテーションマスクを生成します。広範なSA-1BデータセットでトレーニングされたSAMは、ゼロショットパフォーマンスに優れており、事前の知識なしに新しい画像分布やタスクに適応します。

画像セグメンテーションに Segment Anything Model (SAM) を使用するにはどうすればよいですか?

Segment Anything Model(SAM)を使用して、バウンディングボックスやポイントなどのさまざまなプロンプトで推論を実行することにより、画像をセグメント化できます。Pythonを使用した例を次に示します。

from ultralytics import SAM

# Load a model
model = SAM("sam_b.pt")

# Segment with bounding box prompt
model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])

# Segment with points prompt
model("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])

# Segment with multiple points prompt
model("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[[1, 1]])

# Segment with multiple points prompt per object
model("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]])

# Segment with negative points prompt.
model("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

または、コマンドラインインターフェース(CLI)でSAMを使用して推論を実行することもできます。

yolo predict model=sam_b.pt source=path/to/image.jpg

より詳細な使用方法については、セグメンテーションのセクションをご覧ください。

SAMモデルとYOLOモデルのパフォーマンスを比較するとどうですか?

YOLO と比較すると、SAM、MobileSAM、FastSAMなどのSAM 、一般的にサイズが大きく処理速度も遅いものの、独自のゼロショットセグメンテーション機能を提供します。 例えば、YOLO26n-segは、CPU SAMと比較して、サイズが56分の1処理速度が1650倍以上高速です。このため、YOLO 、高速かつ軽量で計算効率の高いセグメンテーションが求められる用途に最適である一方、SAM 、柔軟性が高く、プロンプト対応が可能で、ゼロショットセグメンテーションタスクにおいて優れた性能を発揮します。

SAMを使用してデータセットを自動アノテーションするにはどうすればよいですか?

UltralyticsのSAMは、事前学習済みdetectionモデルを使用してsegmentationデータセットを生成できる自動アノテーション機能を提供します。pythonでの例を以下に示します。

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")

この関数は、画像へのパスと、事前学習済みdetectionモデルおよびSAM segmentationモデル、デバイス、出力ディレクトリの指定のためのオプション引数を取ります。完全なガイドについては、Auto-Annotationを参照してください。

Segment Anything Model(SAM)のトレーニングには、どのようなデータセットが使用されますか?

SAMは、1100万枚の画像にわたる10億以上のマスクで構成される大規模なSA-1Bデータセットでトレーニングされています。SA-1Bは、現在までに最大のセグメンテーションデータセットであり、高品質で多様なトレーニングデータを提供し、さまざまなセグメンテーションタスクで優れたゼロショットパフォーマンスを保証します。詳細については、データセットセクションをご覧ください。



📅 2年前に作成されました✏️ 1日前に更新されました
glenn-jocherRizwanMunawarLaughing-qraimbekovmronald_eddy@yahoo.compderrengeronuralpszrY-T-GMatthewNoyceUltralyticsAssistantBurhan-Q

コメント