Zum Inhalt springen

Segment Anything Model (SAM)

Welcome to the frontier of image segmentation with the Segment Anything Model, or SAM. This revolutionary model has changed the game by introducing promptable image segmentation with real-time performance, setting new standards in the field.

Einführung in SAM: Das Segment Anything Model

Das Segment Anything Model ( SAM) ist ein innovatives Bildsegmentierungsmodell, das eine sofortige Segmentierung ermöglicht und damit eine beispiellose Vielseitigkeit bei der Bildanalyse bietet. SAM ist das Herzstück der Segment Anything Initiative, einem bahnbrechenden Projekt, das ein neues Modell, eine neue Aufgabe und einen neuen Datensatz für die Bildsegmentierung vorstellt.

SAMDas fortschrittliche Design von ermöglicht es, sich ohne Vorkenntnisse an neue Bildverteilungen und Aufgaben anzupassen, eine Eigenschaft, die als Zero-Shot-Transfer bekannt ist. Getestet mit dem umfangreichen SA-1B-Datensatz, der mehr als 1 Milliarde Masken auf 11 Millionen sorgfältig kuratierten Bildern enthält, hat SAM eine beeindruckende Zero-Shot-Leistung gezeigt, die in vielen Fällen die bisherigen vollständig überwachten Ergebnisse übertrifft.

Datensatz Beispielbild SA-1B Beispielbilder. Die Bilder des Datensatzes überlagern die Masken des neu eingeführten SA-1B Datensatzes. SA-1B enthält 11 Millionen verschiedene, hochauflösende, lizenzierte und datenschutzfreundliche Bilder und 1,1 Milliarden hochwertige Segmentierungsmasken. Diese Masken wurden von SAM vollautomatisch annotiert und sind, wie menschliche Bewertungen und zahlreiche Experimente belegen, von hoher Qualität und Vielfalt. Die Bilder sind nach der Anzahl der Masken pro Bild gruppiert, um sie zu visualisieren (im Durchschnitt gibt es ∼100 Masken pro Bild).

Hauptmerkmale des Segment Anything Model (SAM)

  • Promptable Segmentation Task: SAM wurde mit Blick auf eine Promptable Segmentation Task entwickelt, die es ermöglicht, gültige Segmentierungsmasken aus jeder beliebigen Eingabeaufforderung zu generieren, z. B. aus räumlichen oder textlichen Hinweisen zur Identifizierung eines Objekts.
  • Fortschrittliche Architektur: Das Segment Anything Model verwendet einen leistungsstarken Bild-Encoder, einen Prompt-Encoder und einen leichtgewichtigen Maskendecoder. Diese einzigartige Architektur ermöglicht eine flexible Eingabeaufforderung, die Berechnung von Masken in Echtzeit und das Erkennen von Mehrdeutigkeiten bei Segmentierungsaufgaben.
  • Der SA-1B-Datensatz: Der SA-1B-Datensatz wurde im Rahmen des Segment Anything-Projekts eingeführt und enthält über 1 Milliarde Masken auf 11 Millionen Bildern. Als der bisher größte Segmentierungsdatensatz bietet er SAM eine vielfältige und umfangreiche Trainingsdatenquelle.
  • Zero-Shot Performance: SAM displays outstanding zero-shot performance across various segmentation tasks, making it a ready-to-use tool for diverse applications with minimal need for prompt engineering.

Wenn du einen tieferen Einblick in das Segment Anything-Modell und den SA-1B-Datensatz haben möchtest, besuche die Segment Anything-Website und lies das Forschungspapier Segment Anything.

Verfügbare Modelle, unterstützte Aufgaben und Betriebsmodi

Diese Tabelle zeigt die verfügbaren Modelle mit ihren spezifischen vortrainierten Gewichten, die Aufgaben, die sie unterstützen, und ihre Kompatibilität mit verschiedenen Betriebsmodi wie Inferenz, Validierung, Training und Export, gekennzeichnet durch ✅ Emojis für unterstützte Modi und ❌ Emojis für nicht unterstützte Modi.

Modell TypVortrainierte GewichteUnterstützte AufgabenInferenzValidierungAusbildungexportieren
SAM Basissam_b.ptInstanz-Segmentierung
SAM großsam_l.ptInstanz-Segmentierung

SAM: Vielseitigkeit und Leistung bei der Bildsegmentierung

The Segment Anything Model can be employed for a multitude of downstream tasks that go beyond its training data. This includes edge detection, object proposal generation, instance segmentation, and preliminary text-to-mask prediction. With prompt engineering, SAM can swiftly adapt to new tasks and data distributions in a zero-shot manner, establishing it as a versatile and potent tool for all your image segmentation needs.

SAM Vorhersagebeispiel

Segment mit Aufforderungen

Segmentiere das Bild mit den gegebenen Anweisungen.

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

Alles segmentieren

Segmentiere das gesamte Bild.

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
  • Die Logik hier ist, das gesamte Bild zu segmentieren, wenn du keine Aufforderungen (Bboxen/Punkte/Masken) übergibst.

SAMPredictor Beispiel

Auf diese Weise kannst du das Bild einmal einstellen und die Ableitung der Aufforderungen mehrmals ausführen, ohne den Bildkodierer mehrmals zu starten.

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

Segmentiere alles mit zusätzlichen Args.

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)

Hinweis

Alle zurückgegebenen results in den obigen Beispielen sind Ergebnisse Objekt, das einen einfachen Zugriff auf vorhergesagte Masken und das Quellbild ermöglicht.

SAM Vergleich vs. YOLOv8

Hier vergleichen wir das kleinste Modell von Meta SAM , SAM-b, mit dem kleinsten Segmentierungsmodell von Ultralytics , YOLOv8n-seg:

ModellSize
(MB)
Parameters
(M)
Geschwindigkeit (CPU)
(ms/im)
Meta SAM-b35894.751096
MobileSAM40.710.146122
FastSAM-s mit YOLOv8 backbone23.711.8115
Ultralytics YOLOv8n-seg6.7 (53.4x smaller)3.4 (27.9x less)59 (866x faster)

Dieser Vergleich zeigt, wie groß die Unterschiede in den Modellgrößen und Geschwindigkeiten zwischen den Modellen sind. Während SAM einzigartige Möglichkeiten für die automatische Segmentierung bietet, ist es kein direkter Konkurrent für die YOLOv8 Segmentmodelle, die kleiner, schneller und effizienter sind.

Die Tests laufen auf einem 2023 Apple M2 Macbook mit 16 GB RAM. Um diesen Test zu reproduzieren:

Beispiel

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)

Auto-Annotation: Ein schneller Weg zu Segmentierungsdatensätzen

Die automatische Beschriftung ist eine Schlüsselfunktion von SAM und ermöglicht es den Nutzern, einen Segmentierungsdatensatz mit einem vorab trainierten Erkennungsmodell zu erstellen. Diese Funktion ermöglicht eine schnelle und genaue Beschriftung einer großen Anzahl von Bildern, ohne dass eine zeitaufwändige manuelle Beschriftung erforderlich ist.

Erstelle deinen Segmentierungsdatensatz mithilfe eines Erkennungsmodells

Um deinen Datensatz mit dem Ultralytics Framework automatisch zu annotieren, verwende die auto_annotate Funktion wie unten dargestellt:

Beispiel

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolov8x.pt", sam_model="sam_b.pt")
ArgumentTypBeschreibungStandard
datastrPfad zu einem Ordner mit Bildern, die mit Anmerkungen versehen werden sollen.
det_modelstr, optionalVorgeprüftes YOLO Erkennungsmodell. Die Voreinstellung ist 'yolov8x.pt'.'yolov8x.pt'
sam_modelstr, optionalVortrainiertes SAM Segmentierungsmodell. Der Standardwert ist 'sam_b.pt'.'sam_b.pt'
devicestr, optionalGerät, auf dem die Modelle ausgeführt werden sollen. Der Standardwert ist eine leere Zeichenkette (CPU oder GPU, falls verfügbar).
output_dirstr, Keine, optionalVerzeichnis zum Speichern der kommentierten Ergebnisse. Standardmäßig wird der Ordner "labels" im selben Verzeichnis wie "data" gespeichert.None

Die auto_annotate Funktion erhält den Pfad zu deinen Bildern und optionale Argumente, um die vortrainierten Erkennungs- und SAM Segmentierungsmodelle, das Gerät, auf dem die Modelle ausgeführt werden sollen, und das Ausgabeverzeichnis zum Speichern der kommentierten Ergebnisse anzugeben.

Die automatische Beschriftung mit vortrainierten Modellen kann den Zeit- und Arbeitsaufwand für die Erstellung hochwertiger Segmentierungsdatensätze drastisch reduzieren. Diese Funktion ist besonders für Forscher und Entwickler von Vorteil, die mit großen Bildsammlungen arbeiten, da sie sich auf die Modellentwicklung und -auswertung konzentrieren können, statt auf die manuelle Annotation.

Zitate und Danksagungen

Wenn du SAM für deine Forschungs- oder Entwicklungsarbeit nützlich findest, solltest du unser Papier zitieren:

@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}
}

We would like to express our gratitude to Meta AI for creating and maintaining this valuable resource for the computer vision community.

FAQ

Was ist das Segment Anything Model (SAM) von Ultralytics?

Das Segment Anything Model (SAM) von Ultralytics ist ein revolutionäres Bildsegmentierungsmodell, das für promptable Segmentierungsaufgaben entwickelt wurde. Es nutzt eine fortschrittliche Architektur mit Bild- und Prompt-Encodern in Kombination mit einem leichtgewichtigen Maskendecoder, um hochwertige Segmentierungsmasken aus verschiedenen Prompts wie räumlichen oder textlichen Hinweisen zu generieren. SAM wurde auf dem umfangreichen SA-1B-Datensatz trainiert und zeichnet sich durch seine Zero-Shot-Performance aus, d. h. es passt sich ohne Vorwissen an neue Bildverteilungen und Aufgaben an. Hier erfährst du mehr.

Wie kann ich das Segment Anything Model (SAM) für die Bildsegmentierung nutzen?

Du kannst das Segment Anything Model (SAM) für die Bildsegmentierung verwenden, indem du Inferenzen mit verschiedenen Vorgaben wie Bounding Boxes oder Punkten durchführst. Hier ist ein Beispiel mit 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]])

Alternativ kannst du Inferenz mit SAM in der Befehlszeilenschnittstelle (CLI) ausführen:

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

Ausführlichere Anweisungen zur Verwendung findest du im Abschnitt Segmentierung.

Wie schneiden SAM und YOLOv8 in Bezug auf die Leistung ab?

Im Vergleich zu YOLOv8 sind SAM Modelle wie SAM-b und FastSAM-s größer und langsamer, bieten aber einzigartige Möglichkeiten zur automatischen Segmentierung. Zum Beispiel ist Ultralytics YOLOv8n -seg 53,4 Mal kleiner und 866 Mal schneller als SAM-b. Die Leistung von SAM macht sie jedoch sehr flexibel und effizient bei verschiedenen, nicht trainierten Aufgaben. Mehr über den Leistungsvergleich zwischen SAM und YOLOv8 erfährst duhier.

Wie kann ich meinen Datensatz mit SAM automatisch annotieren?

Ultralytics SAM bietet eine Auto-Annotation-Funktion, die es ermöglicht, mit einem vorab trainierten Erkennungsmodell Segmentierungsdatensätze zu erstellen. Hier ist ein Beispiel in : Python

from ultralytics.data.annotator import auto_annotate

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

Diese Funktion nimmt den Pfad zu deinen Bildern und optionale Argumente für die vorab trainierten Erkennungs- und SAM Segmentierungsmodelle sowie Angaben zum Gerät und zum Ausgabeverzeichnis entgegen. Eine vollständige Anleitung findest du unter Auto-Annotation.

Welche Datensätze werden verwendet, um das Segment Anything Model (SAM) zu trainieren?

SAM is trained on the extensive SA-1B dataset which comprises over 1 billion masks across 11 million images. SA-1B is the largest segmentation dataset to date, providing high-quality and diverse training data, ensuring impressive zero-shot performance in varied segmentation tasks. For more details, visit the Dataset section.

📅 Created 11 months ago ✏️ Updated 7 days ago

Kommentare