Ultralytics YOLO27:

Segmentierungsmodell für alles (SAM)#

Die Entwicklung von SAM

Dies ist das ursprüngliche SAM-Modell von Meta. Verbesserte Funktionen findest du unter SAM 2 für die Videosegmentierung oder unter SAM 3 für die durch Prompts steuerbare Konzeptsegmentierung mit Text- und Bildbeispiel-Prompts.

How to use Segment Anything In Colab

Willkommen an der Spitze der Bildsegmentierung mit dem Segmentierungsmodell für alles, kurz SAM. Dieses revolutionäre Modell hat die Spielregeln verändert, indem es eine durch Prompts steuerbare Bildsegmentierung mit Echtzeitleistung eingeführt und damit neue Standards in diesem Bereich gesetzt hat.

Einführung in SAM: das Segmentierungsmodell für alles#

Das Segmentierungsmodell für alles, kurz SAM, ist ein hochmodernes Bildsegmentierungsmodell, das eine durch Prompts steuerbare Segmentierung ermöglicht und beispiellose Vielseitigkeit bei Aufgaben der Bildanalyse bietet. SAM bildet das Herzstück der Initiative Segment Anything, eines wegweisenden Projekts, das ein neuartiges Modell, eine neue Aufgabe und einen neuen Datensatz für die Bildsegmentierung einführt.

Das fortschrittliche Design von SAM ermöglicht die Anpassung an neue Bildverteilungen und Aufgaben ohne vorheriges Wissen – diese Eigenschaft wird als Zero-Shot-Transfer bezeichnet. SAM wurde auf dem umfangreichen SA-1B-Datensatz trainiert, der mehr als 1 Milliarde Masken auf 11 Millionen sorgfältig kuratierten Bildern enthält. Dabei hat SAM eine beeindruckende Zero-Shot-Leistung gezeigt und in vielen Fällen frühere vollständig überwachte Ergebnisse übertroffen.

Beispiel aus dem SA-1B-Datensatz mit automatisch erstellten Segmentierungsmasken Beispielbilder aus SA-1B. Bilder des Datensatzes mit überlagerten Masken aus dem neu eingeführten SA-1B-Datensatz. SA-1B enthält 11 Millionen vielfältige, hochauflösende, lizenzierte und die Privatsphäre schützende Bilder sowie 1,1 Milliarden hochwertige Segmentierungsmasken. Diese Masken wurden vollständig automatisch von SAM annotiert und sind, wie durch menschliche Bewertungen und zahlreiche Experimente bestätigt wurde, von hoher Qualität und Vielfalt. Zur Visualisierung sind die Bilder nach der Anzahl der Masken pro Bild gruppiert (durchschnittlich gibt es etwa 100 Masken pro Bild).

Wichtige Funktionen des Segmentierungsmodells für alles (SAM)#

  • Durch Prompts steuerbare Segmentierungsaufgabe: SAM wurde für eine durch Prompts steuerbare Segmentierungsaufgabe entwickelt und kann aus jedem gegebenen Prompt gültige Segmentierungsmasken erzeugen, etwa aus räumlichen oder textbasierten Hinweisen, die ein Objekt identifizieren.
  • Fortschrittliche Architektur: Das Segmentierungsmodell für alles verwendet einen leistungsfähigen Bild-Encoder, einen Prompt-Encoder und einen leichtgewichtigen Masken-Decoder. Diese einzigartige Architektur ermöglicht flexible Prompts, die Berechnung von Masken in Echtzeit und die Berücksichtigung von Mehrdeutigkeiten bei Segmentierungsaufgaben.
  • Der SA-1B-Datensatz: Der vom Segment Anything-Projekt eingeführte SA-1B-Datensatz umfasst mehr als 1 Milliarde Masken auf 11 Millionen Bildern. Als bisher größter Segmentierungsdatensatz bietet er SAM eine vielfältige Trainingsdatenquelle in großem Maßstab.
  • Zero-Shot-Leistung: SAM zeigt bei verschiedenen Segmentierungsaufgaben eine herausragende Zero-Shot-Leistung und ist damit ein sofort einsatzbereites Werkzeug für vielfältige Anwendungen mit minimalem Bedarf an Prompt Engineering.

Eine ausführliche Betrachtung des Segmentierungsmodells für alles und des SA-1B-Datensatzes findest du auf Segment Anything auf GitHub sowie im Forschungsbericht Segment Anything.

SAM auf der Ultralytics Platform

SAM treibt die intelligente Annotierungsfunktion auf der Ultralytics Platform an und ermöglicht eine intelligente, klickbasierte Maskierung für die schnelle Kennzeichnung von Datensätzen. Einzelheiten findest du im Annotierungsleitfaden.

Verfügbare Modelle, unterstützte Aufgaben und Betriebsmodi#

Diese Tabelle zeigt die verfügbaren Modelle mit ihren jeweiligen vortrainierten Gewichten, die von ihnen unterstützten Aufgaben und ihre Kompatibilität mit verschiedenen Betriebsmodi wie Inference, Validierung, Training und Export. Unterstützte Modi sind mit dem Emoji ✅ und nicht unterstützte Modi mit dem Emoji ❌ gekennzeichnet.

ModelltypVortrainierte GewichteUnterstützte AufgabenTrainingValidierungInferenzExport
SAM Basissam_b.ptInstanzsegmentierung
SAM Largesam_l.ptInstanzsegmentierung

SAM verwenden: Vielseitigkeit und Leistungsfähigkeit bei der Bildsegmentierung#

Das Segmentierungsmodell für alles kann für zahlreiche nachgelagerte Aufgaben eingesetzt werden, die über seine Trainingsdaten hinausgehen. Dazu gehören Kantenerkennung, die Erzeugung von Objektvorschlägen, Instanzsegmentierung und die vorläufige Vorhersage von Masken aus Text. Durch Prompt Engineering kann sich SAM im Zero-Shot-Verfahren schnell an neue Aufgaben und Bildverteilungen anpassen und ist damit ein vielseitiges und leistungsfähiges Werkzeug für all deine Anforderungen an die Bildsegmentierung.

Beispiel für eine SAM-Vorhersage#

Mit Prompts segmentieren

Bild mit den angegebenen Prompts segmentieren.

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

Das gesamte Bild segmentieren.

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")
  • Die Logik besteht darin, das gesamte Bild zu segmentieren, wenn du keine Prompts (bboxes/Punkte/Masken) übergibst.
Beispiel für SAMPredictor

So kannst du das Bild einmal festlegen und die Inferenz mit Prompts mehrmals ausführen, ohne den Bild-Encoder mehrmals auszuführen.

import cv2

from ultralytics.models.sam import Predictor as SAMPredictor

# Create SAMPredictor
overrides = {"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()

Alles mit zusätzlichen Argumenten segmentieren.

from ultralytics.models.sam import Predictor as SAMPredictor

# Create SAMPredictor
overrides = {"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, min_mask_region_area=100)
Hinweis

Alle in den obigen Beispielen zurückgegebenen results sind Results-Objekte, über die du einfach auf die vorhergesagten Masken und das Quellbild zugreifen kannst.

SAM-Vergleich mit YOLO#

Hier vergleichen wir das SAM-b-Modell von Meta mit den Segmentierungsmodellen von Ultralytics, einschließlich YOLO26n-seg:

ModellGröße
(MB)
Parameter
(M)
Geschwindigkeit (CPU)
(ms/Bild)
Meta SAM-b37593.741703
MobileSAM40.710.123802
FastSAM-s mit Backbone von YOLOv823.911.858.0
Ultralytics YOLOv8n-seg7,1 (52,8x kleiner)3,4 (27,6x weniger)24,8 (1682x schneller)
Ultralytics YOLO11n-seg6.2 (60,5-mal kleiner)2,9 (32,3x weniger)24.3 (1716-mal schneller)
Ultralytics YOLO26n-seg6,7 (56,0x kleiner)2.7 (34,7-mal weniger)25,2 (1655x schneller)

Dieser Vergleich zeigt die deutlichen Unterschiede bei Modellgrößen und Geschwindigkeiten zwischen SAM-Varianten und YOLO-Segmentierungsmodellen. Während SAM einzigartige Funktionen zur automatischen Segmentierung bietet, sind YOLO-Modelle, insbesondere YOLOv8n-seg, YOLO11n-seg und YOLO26n-seg, deutlich kleiner, schneller und recheneffizienter.

Die Geschwindigkeiten von SAM wurden mit PyTorch gemessen, die Geschwindigkeiten von YOLO mit ONNX Runtime. Die Tests wurden auf einem Apple M4 Air aus dem Jahr 2025 mit 16 GB RAM unter Verwendung von torch==2.10.0, ultralytics==8.4.31 und onnxruntime==1.24.4 durchgeführt. So kannst du diesen Test 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 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, nms=False)  # YOLO26 NMS-free head; no-op for YOLOv8/YOLO11
    model = YOLO(onnx_path)
    model(ASSETS)

Automatische Annotation: Ein schneller Weg zu Segmentierungsdatensätzen#

Die automatische Annotation ist eine wichtige Funktion von SAM. Sie ermöglicht es, mithilfe eines vortrainierten Erkennungsmodells einen Segmentierungsdatensatz zu erstellen. So können zahlreiche Bilder schnell und präzise annotiert werden, ohne dass eine zeitaufwendige manuelle Kennzeichnung erforderlich ist.

Segmentierungsdatensatz mit einem Erkennungsmodell erstellen#

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

Beispiel
from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")
ArgumentTypStandardwertBeschreibung
datastrerforderlichPfad zu dem Verzeichnis mit den Zielbildern für Annotation oder Segmentierung.
det_modelstr'yolo26x.pt'Pfad zum YOLO-Erkennungsmodell für die anfängliche Objekterkennung.
sam_modelstr'sam_b.pt'Pfad zum SAM-Modell für die Segmentierung (unterstützt Gewichte von SAM, SAM 2, MobileSAM und SAM 3).
devicestr''Rechengerät (z. B. „cuda:0“, „cpu“ oder „“ für die automatische Geräteerkennung).
conffloat0.25Konfidenzschwellenwert der YOLO-Erkennung zum Herausfiltern unsicherer Erkennungen.
ioufloat0.45IoU-Schwellenwert für die Unterdrückung nichtmaximaler Werte zum Herausfiltern überlappender Boxen.
imgszint640Eingabegröße für die Größenanpassung von Bildern (muss ein Vielfaches von 32 sein).
max_detint300Maximale Anzahl von Erkennungen pro Bild zur effizienten Speichernutzung.
classeslist[int]NoneListe der zu erkennenden Klassenindizes (z. B. [0, 1] für Person und Fahrrad).
output_dirstrNoneSpeicherverzeichnis für Annotationen (Standard: benachbartes Verzeichnis zu <data>_auto_annotate_labels).

Die Funktion auto_annotate übernimmt den Pfad zu deinen Bildern und optionale Argumente zur Angabe der vortrainierten Erkennungs- und SAM-Segmentierungsmodelle, des Geräts, auf dem die Modelle ausgeführt werden, sowie des Ausgabeverzeichnisses zum Speichern der annotierten Ergebnisse.

Die automatische Annotation mit vortrainierten Modellen kann den Zeit- und Arbeitsaufwand für die Erstellung hochwertiger Segmentierungsdatensätze erheblich reduzieren. Diese Funktion ist besonders für Forschende und Entwickler mit großen Bildsammlungen nützlich, da sie sich dadurch auf die Modellentwicklung und -bewertung statt auf die manuelle Annotation konzentrieren können.

Zitate und Danksagungen#

Wenn du SAM in deiner Forschung oder Entwicklungsarbeit nützlich findest, ziehe bitte in Betracht, das Paper zu zitieren:

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

Wir danken Meta AI für die Erstellung und Pflege dieser wertvollen Ressource für die Computer-Vision-Community.

FAQ#

  • Das Segment Anything Model (SAM) von Meta ist ein revolutionäres Bildsegmentierungsmodell, das für interaktive Segmentierungsaufgaben entwickelt wurde. Es nutzt eine fortschrittliche Architektur, die Bild- und Promptencoder in Kombination mit einem lightweight Mask Decoder umfasst, um hochwertige Segmentierungsmasken aus verschiedenen Prompts wie räumlichen oder textbasierten Hinweisen zu generieren. Trainiert auf dem umfangreichen SA-1B dataset, zeichnet sich SAM durch Zero-Shot-Leistung aus und passt sich ohne Vorkenntnisse an neue Bildverteilungen und -aufgaben an.

  • Du kannst das Segmentierungsmodell für alles (SAM) für die Bildsegmentierung verwenden, indem du die Inferenz mit verschiedenen Prompts wie Begrenzungsrahmen oder Punkten ausfü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 die Inferenz mit SAM über die 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.

  • Im Vergleich zu YOLO-Modellen sind SAM-Varianten wie SAM-b, MobileSAM und FastSAM-s in der Regel größer und langsamer, bieten jedoch einzigartige Zero-Shot-Segmentierungsfunktionen. Beispielsweise ist YOLO26n-seg auf der CPU 56-mal kleiner und mehr als 1650-mal schneller als das ursprüngliche SAM-b-Modell von Meta. Dadurch eignen sich YOLO-Modelle ideal für Anwendungen, die eine schnelle, kompakte und recheneffiziente Segmentierung erfordern, während SAM-Modelle bei flexiblen, durch Prompts steuerbaren Zero-Shot-Segmentierungsaufgaben überzeugen.

  • SAM von Ultralytics bietet eine Funktion zur automatischen Annotation, mit der sich mithilfe eines vortrainierten Erkennungsmodells Segmentierungsdatensätze erstellen lassen. Hier ist ein Beispiel mit Python:

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

    Diese Funktion übernimmt den Pfad zu deinen Bildern sowie optionale Argumente für vortrainierte Erkennungs- und SAM-Segmentierungsmodelle einschließlich Angaben zum Gerät und Ausgabeverzeichnis. Eine vollständige Anleitung findest du unter Automatische Annotation.

  • SAM wird auf dem umfangreichen SA-1B-Datensatz trainiert, der mehr als 1 Milliarde Masken auf 11 Millionen Bildern umfasst. SA-1B ist der bisher größte Segmentierungsdatensatz und stellt hochwertige und vielfältige Trainingsdaten bereit, die eine beeindruckende Zero-Shot-Leistung bei verschiedenen Segmentierungsaufgaben ermöglichen. Weitere Informationen findest du im Abschnitt zu Datensätzen.

Kommentare