コンテンツぞスキップ

セグメント䜕でもモデル (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
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/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])

# 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 察比范YOLOv8

ここでは、Metaの最小のSAM モデル、SAM-bず、Ultralytics 最小のセグメンテヌションモデル、YOLOv8n-segを比范する

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

この比范は、モデル間のモデルサむズず速床の桁違いを瀺しおいる。SAM 、自動セグメンテヌションのためのナニヌクな機胜を備えおいるが、YOLOv8 、より小さく、より速く、より効率的なセグメントモデルず盎接競合するものではない。

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

䟋

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 YOLOv8n-seg
model = YOLO("yolov8n-seg.pt")
model.info()
model(ASSETS)

自動アノテヌションセグメンテヌション・デヌタセットぞの早道

オヌトアノテヌションは、SAM の䞻な機胜であり、ナヌザヌは事前に蚓緎された怜出モデルを䜿甚しお、セグメンテヌションデヌタセットを生成するこずができたす。この機胜により、時間のかかる手䜜業によるラベリングの必芁性を回避し、倧量の画像に迅速か぀正確なアノテヌションを行うこずができたす。

怜出モデルを䜿甚しおセグメンテヌション・デヌタセットを生成する

Ultralytics フレヌムワヌクを䜿っおデヌタセットを自動泚釈化するには、次のようにしたす。 auto_annotate 関数は以䞋のようになる

䟋

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="sam_b.pt")
議論 タむプ 説明 デフォルト
data str 泚釈を付ける画像を含むフォルダぞのパス。
det_model str任意 事前にトレヌニングされたYOLO 怜出モデル。デフォルトは 'yolo11x.pt' です。 'yolo11x.pt'
sam_model str任意 事前に蚓緎されたSAM セグメンテヌションモデル。デフォルトは 'sam_b.pt' です。 'sam_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なし、任意 泚釈付き結果を保存するディレクトリ。デフォルトは'data'ず同じディレクトリの'labels'フォルダ。 None

に぀いお 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瀟に感謝の意を衚したいず思いたす。

よくあるご質問

Ultralytics によるセグメント䜕でもモデル(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 ずYOLOv8 の性胜比范は

YOLOv8 ず比范するず、SAM-bやFastSAM-sのようなSAM モデルは、より倧きく、より遅いが、自動セグメンテヌションのためのナニヌクな機胜を提䟛する。たずえば、Ultralytics YOLOv8n -segは、 SAM-bより53.4倍小さく、866倍速い。しかし、SAM のれロショット性胜は、倚様で蚓緎されおいないタスクにおいお非垞に柔軟で効率的です。SAM ずYOLOv8 の性胜比范に぀いおは、こちらをご芧ください。

SAM を䜿っおデヌタセットを自動泚釈するには

Ultralytics'SAM には、事前に蚓緎された怜出モデルを䜿甚しおセグメンテヌションデヌタセットを生成できるオヌトアノテヌション機胜がありたす。以䞋はPython の䟋である

from ultralytics.data.annotator import auto_annotate

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

この関数は、画像ぞのパスず、事前孊習枈みの怜出モデルおよびSAM セグメンテヌションモデルのオプション匕数、デバむスおよび出力ディレクトリの指定を受け取りたす。完党なガむドに぀いおは、自動アノテヌションを参照しおください。

Segment Anything Model (SAM) のトレヌニングにはどのようなデヌタセットが䜿甚されたすか

SAM は、1,100䞇枚の画像にわたる10億以䞊のマスクから構成される広範なSA-1Bデヌタセットで孊習されたす。SA-1Bは、これたでで最倧のセグメンテヌションデヌタセットであり、高品質で倚様なトレヌニングデヌタを提䟛するこずで、様々なセグメンテヌションタスクにおいお印象的なれロショット性胜を保蚌したす。詳现に぀いおは、デヌタセットのセクションをご芧ください。

📅䜜成1幎前 ✏曎新したした 19日前

コメント