コンテンツへスキップ

セグメント何でもモデル (SAM)

Segment Anything Model(セグメント・エニシング・モデル、SAM )により、画像セグメンテーションのフロンティアへようこそ。この画期的なモデルは、リアルタイム・パフォーマンスによるプロンプト可能な画像セグメンテーションを導入することでゲームを変え、この分野における新しい基準を打ち立てました。

SAM の紹介:セグメント何でもモデル

Segment Anything Model(セグメント・エニシング・モデル、SAM )は、画像解析タスクに比類のない多用途性を提供する、即時可能なセグメンテーションを可能にする最先端の画像セグメンテーションモデルである。SAM は、画像セグメンテーションのための新しいモデル、タスク、データセットを導入する画期的なプロジェクト、Segment Anything イニシアティブの中核をなすものである。

SAMの高度な設計は、予備知識なしに新しい画像分布やタスクに適応することを可能にし、これはゼロショット転送として知られる機能です。1,100万枚の入念に管理された画像に広がる10億枚以上のマスクを含む膨大なSA-1BデータセットでトレーニングされたSAM は、多くのケースで以前の完全教師ありの結果を上回る、印象的なゼロショット性能を示しました。

データセットサンプル画像 SA-1B 画像の一例。 新しく導入されたSA-1Bデータセットのマスクを重ねたデータセット画像。SA-1Bには、1,100万枚の多様で高解像度の、ライセンスされた、プライバシー保護された画像と、11億枚の高品質なセグメンテーション・マスクが含まれています。これらのマスクは、SAM によって完全自動で注釈が付けられ、人間の評価と多くの実験によって検証されたように、高品質で多様性に富んでいる。画像は可視化のため、画像あたりのマスク数でグループ化されている(画像あたりのマスク数は平均約100)。

セグメント何でもモデル(SAM)の主な特徴

  • プロンプト可能なセグメンテーションタスク: SAM は、プロンプト可能なセグメンテーションタスクを念頭に置いて設計されており、オブジェクトを特定する空間やテキストの手がかりなど、任意のプロンプトから有効なセグメンテーションマスクを生成できる。
  • 高度なアーキテクチャ:セグメント何でもモデルは、強力な画像エンコーダー、プロンプトエンコーダー、軽量マスクデコーダーを採用しています。このユニークなアーキテクチャにより、柔軟なプロンプト表示、リアルタイムのマスク計算、セグメンテーションタスクにおけるあいまいさの認識が可能になります。
  • SA-1Bデータセット:Segment Anythingプロジェクトによって導入されたSA-1Bデータセットは、1,100万枚の画像上の10億以上のマスクを特徴としている。これまでで最大のセグメンテーションデータセットとして、SAM 、多様で大規模な学習データソースを提供します。
  • ゼロショット性能: SAM は、様々なセグメンテーション作業において卓越したゼロショット性能を発揮し、迅速なエンジニアリングの必要性を最小限に抑え、様々なアプリケーションにすぐに使用できるツールとなっている。

セグメント・エニシング・モデルとSA-1Bデータセットの詳細については、セグメント・エニシングのウェブサイトをご覧ください。

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

この表は、利用可能なモデルを、特定の事前訓練された重み、サポートするタスク、および推論、検証、トレーニング、エクスポートなどのさまざまな操作モードとの互換性を示しています。

モデル・タイプ 事前に訓練されたウェイト 対応タスク 推論 バリデーション トレーニング 輸出
SAM ベース sam_b.pt インスタンスのセグメンテーション ✅ ❌ ❌ ❌
SAM 大きい sam_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
model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])

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

すべてをセグメント化する

画像全体を分割する。

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/points/masks)を渡さなければ、画像全体を分割するというものです。

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])
results = predictor(points=[900, 370], labels=[1])

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

SAM 対比較YOLOv8

ここでは、Metaの最小のSAM モデル、SAM-bと、Ultralytics 最小のセグメンテーションモデル、YOLOv8n-segを比較する:

モデル サイズ パラメータ スピード(CPU)
メタのSAM-b 358 MB 94.7 M 51096 ms/im
MobileSAM 40.7 MB 10.1 M 46122 ms/im
FastSAM YOLOv8 バックボーン付き 23.7 MB 11.8 M 115ms/イム
Ultralytics YOLOv8n-セグ 6.7 MB(53.4倍小さい) 340万ドル(27.9倍減) 59 ms/im(866倍速)

この比較は、モデル間のモデルサイズと速度の桁違いを示している。SAM 、自動セグメンテーションのためのユニークな機能を備えているが、YOLOv8 、より小さく、より速く、より効率的なセグメントモデルと直接競合するものではない。

テストは16GBのRAMを搭載した2023 Apple M2 Macbookで実行。このテストを再現するには

例

from ultralytics import SAM, YOLO, FastSAM

# Profile SAM-b
model = SAM("sam_b.pt")
model.info()
model("ultralytics/assets")

# Profile MobileSAM
model = SAM("mobile_sam.pt")
model.info()
model("ultralytics/assets")

# Profile FastSAM-s
model = FastSAM("FastSAM-s.pt")
model.info()
model("ultralytics/assets")

# Profile YOLOv8n-seg
model = YOLO("yolov8n-seg.pt")
model.info()
model("ultralytics/assets")

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

オートアノテーションは、SAM の主な機能であり、ユーザーは事前に訓練された検出モデルを使用して、セグメンテーションデータセットを生成することができます。この機能により、時間のかかる手作業によるラベリングの必要性を回避し、大量の画像に迅速かつ正確なアノテーションを行うことができます。

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

Ultralytics フレームワークを使ってデータセットを自動注釈化するには、次のようにします。 auto_annotate 関数は以下のようになる:

例

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolov8x.pt", sam_model="sam_b.pt")
議論 タイプ 説明 デフォルト
データ スト 注釈を付ける画像を含むフォルダへのパス。
デトモデル str, オプション 事前に訓練されたYOLO 検出モデル。デフォルトは 'yolov8x.pt' です。 'yolov8x.pt'
samモデル str, オプション 事前に訓練されたSAM セグメンテーションモデル。デフォルトは 'sam_b.pt' です。 'sam_b.pt'
装置 str, オプション モデルを実行するデバイス。デフォルトは空の文字列(利用可能な場合はCPUまたはGPU)。
出力先 str, None, オプション 注釈付き結果を保存するディレクトリ。デフォルトは'data'と同じディレクトリの'labels'フォルダ。 なし

について auto_annotate 関数は画像のパスを取り、オプションの引数で、事前に訓練された検出モデルとSAM セグメンテーションモデル、モデルを実行するデバイス、注釈付き結果を保存する出力ディレクトリを指定します。

事前に訓練されたモデルによる自動アノテーションは、高品質なセグメンテーションデータセットの作成に必要な時間と労力を劇的に削減します。この機能は、大規模な画像コレクションを扱う研究者や開発者にとって、手作業によるアノテーションよりもモデルの開発と評価に集中できるため、特に有益です。

引用と謝辞

もし、あなたの研究や開発業務に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社に感謝の意を表したいと思います。

キーワードSegment Anything, Segment Anything Model,SAM, MetaSAM, 画像セグメンテーション, promptable segmentation, ゼロショット性能, SA-1Bデータセット, 高度なアーキテクチャ, 自動アノテーション,Ultralytics, 事前学習済みモデル,SAM base,SAM large, インスタンスセグメンテーション, コンピュータビジョン, AI, 人工知能, 機械学習, データアノテーション, セグメンテーションマスク, 検出モデル,YOLO 検出モデル, bibtex, Meta AI.



Created 2023-11-12, Updated 2024-06-10
Authors: glenn-jocher (13), Burhan-Q (1), ChaoningZhang (1), Laughing-q (1)

コメント