Ultralytics YOLO27:
Get Started

Modell zur Segmentierung beliebiger Objekte (SAM)#

Entwicklung von SAM

Dies ist das ursprüngliche SAM-Modell von Meta. Informationen zu erweiterten Funktionen findest du unter SAM 2 für die Videosegmentierung oder unter SAM 3 für die promptgesteuerte Konzeptsegmentierung mit Text- und Bildbeispielen als Prompts.

How to use Segment Anything In Colab

Willkommen an der Spitze der Bildsegmentierung mit dem Modell zur Segmentierung beliebiger Objekte, kurz SAM. Dieses bahnbrechende Modell hat die Möglichkeiten grundlegend verändert, indem es promptgesteuerte Bildsegmentierung in Echtzeit ermöglicht und damit neue Maßstäbe in diesem Bereich setzt.

Einführung in SAM: das Modell zur Segmentierung beliebiger Objekte#

Das Modell zur Segmentierung beliebiger Objekte, kurz SAM, ist ein hochmodernes Bildsegmentierungsmodell, das promptgesteuerte Segmentierung ermöglicht und so eine beispiellose Vielseitigkeit bei Bildanalyseaufgaben bietet. SAM bildet das Herzstück der Initiative Segment Anything – ein bahnbrechendes Projekt, das ein neuartiges Modell, eine neue Aufgabe und einen neuen Datensatz für die Bildsegmentierung einführt.

Dank seines fortschrittlichen Designs kann sich SAM ohne Vorkenntnisse an neue Bildverteilungen und Aufgaben anpassen. Diese Eigenschaft wird als Zero-Shot-Transfer bezeichnet. SAM wurde mit dem umfangreichen SA-1B-Datensatz trainiert, der mehr als 1 Milliarde Masken auf 11 Millionen sorgfältig zusammengestellten Bildern enthält. Dabei zeigte SAM eine beeindruckende Zero-Shot-Leistung und übertraf in vielen Fällen frühere Ergebnisse mit vollständig überwachtem Lernen.

Beispiel aus dem SA-1B-Datensatz mit automatisch erstellten Segmentierungsmasken Beispielbilder aus SA-1B. Auf den Bildern des neu eingeführten SA-1B-Datensatzes sind Masken eingeblendet. SA-1B enthält 11 Millionen vielfältige, hochauflösende, lizenzierte und datenschutzfreundliche Bilder sowie 1,1 Milliarden hochwertige Segmentierungsmasken. SAM hat diese Masken vollständig automatisch annotiert. Menschliche Bewertungen und zahlreiche Experimente bestätigen ihre hohe Qualität und Vielfalt. Zur Visualisierung sind die Bilder nach der Anzahl der Masken pro Bild gruppiert (durchschnittlich etwa 100 Masken pro Bild).

Wichtige Merkmale des Modells zur Segmentierung beliebiger Objekte (SAM)#

  • Promptgesteuerte Segmentierungsaufgabe: SAM wurde für promptgesteuerte Segmentierungsaufgaben entwickelt und kann aus jedem vorgegebenen Prompt gültige Segmentierungsmasken erzeugen, etwa aus räumlichen Hinweisen oder Textangaben, die ein Objekt kennzeichnen.
  • Fortschrittliche Architektur: Das Modell zur Segmentierung beliebiger Objekte umfasst einen leistungsstarken Bildencoder, einen Prompt-Encoder und einen leichtgewichtigen Maskendecoder. 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 bislang größter Segmentierungsdatensatz bietet er SAM eine vielfältige Trainingsdatenquelle in großem Umfang.
  • Zero-Shot-Leistung: SAM zeigt bei verschiedenen Segmentierungsaufgaben herausragende Zero-Shot-Leistung und eignet sich damit für vielfältige Anwendungen, bei denen nur wenig Prompt Engineering erforderlich ist.

Ausführliche Informationen zum Modell zur Segmentierung beliebiger Objekte und zum SA-1B-Datensatz findest du auf Segment Anything auf GitHub und im Forschungsartikel Segment Anything.

SAM auf der Ultralytics Platform

SAM ermöglicht die intelligente Annotationsfunktion auf der Ultralytics Platform, mit der sich Masken per Klick erstellen lassen und Datensätze schnell beschriftet werden können. Weitere Informationen findest du in der Anleitung zur Annotation.

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

Diese Tabelle zeigt die verfügbaren Modelle mit ihren jeweiligen vortrainierten Gewichten, den unterstützten Aufgaben und der Kompatibilität mit verschiedenen Betriebsmodi wie Inferenz, Validierung, Training und Export. ✅ kennzeichnet unterstützte Modi, ❌ nicht unterstützte Modi.

ModelltypVortrainierte GewichteUnterstützte AufgabenTrainingValidierungInferenzExportieren
SAM Basesam_b.ptInstanzsegmentierung❌❌✅❌
SAM Largesam_l.ptInstanzsegmentierung❌❌✅❌

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

Das Modell zur Segmentierung beliebiger Objekte kann für zahlreiche nachgelagerte Aufgaben eingesetzt werden, die über seine Trainingsdaten hinausgehen. Dazu zählen Kantenerkennung, das Erzeugen von Objektvorschlägen, die Instanzsegmentierung und die vorläufige Vorhersage von Masken aus Text. Mit Prompt Engineering kann sich SAM schnell und ohne zusätzliche Trainingsbeispiele an neue Aufgaben und Bildverteilungen anpassen. Dadurch ist es ein vielseitiges und leistungsstarkes Werkzeug für all deine Anforderungen an die Bildsegmentierung.

Beispiel für eine SAM-Vorhersage#

Mit Prompts segmentieren

Bild mit vorgegebenen Prompts segmentieren.

from ultralytics import SAM

# Ein Modell laden
model = SAM("sam_b.pt")

# Modellinformationen anzeigen (optional)
model.info()

# Inferenz mit Begrenzungsrahmen-Prompt ausführen
results = model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])

# Inferenz mit einem einzelnen Punkt ausführen
results = model(points=[900, 370], labels=[1])

# Inferenz mit mehreren Punkten ausführen
results = model(points=[[400, 370], [900, 370]], labels=[1, 1])

# Inferenz mit mehreren Punkt-Prompts pro Objekt ausführen
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 1]])

# Inferenz mit einem Negativpunkt-Prompt ausführen
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])
Alles segmentieren

Das gesamte Bild segmentieren.

from ultralytics import SAM

# Ein Modell laden
model = SAM("sam_b.pt")

# Modellinformationen anzeigen (optional)
model.info()

# Inferenz ausführen
model("path/to/image.jpg")
  • Die Logik dahinter: Wenn du keine Prompts (bboxes/Punkte/Masken) übergibst, wird das gesamte Bild segmentiert.
Beispiel für SAMPredictor

So kannst du ein Bild einmal festlegen und anschließend mehrfach Inferenz mit Prompts ausführen, ohne den Bildencoder wiederholt auszuführen.

import cv2

from ultralytics.models.sam import Predictor as SAMPredictor

# SAMPredictor erstellen
overrides = {"conf": 0.25, "task": "segment", "mode": "predict", "imgsz": 1024, "model": "mobile_sam.pt"}
predictor = SAMPredictor(overrides=overrides)

# Bild festlegen
predictor.set_image("ultralytics/assets/zidane.jpg")  # mit einer Bilddatei festlegen
predictor.set_image(cv2.imread("ultralytics/assets/zidane.jpg"))  # mit np.ndarray festlegen
results = predictor(bboxes=[439, 437, 524, 709])

# Inferenz mit einem einzelnen Punkt-Prompt ausführen
results = predictor(points=[900, 370], labels=[1])

# Inferenz mit mehreren Punkt-Prompts ausführen
results = predictor(points=[[400, 370], [900, 370]], labels=[1, 1])

# Inferenz mit einem Negativpunkt-Prompt ausführen
results = predictor(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

# Bild zurücksetzen
predictor.reset_image()

Alles mit zusätzlichen Argumenten segmentieren.

from ultralytics.models.sam import Predictor as SAMPredictor

# SAMPredictor erstellen
overrides = {"conf": 0.25, "task": "segment", "mode": "predict", "imgsz": 1024, "model": "mobile_sam.pt"}
predictor = SAMPredictor(overrides=overrides)

# Mit zusätzlichen Argumenten segmentieren
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.

Vergleich von SAM und YOLO#

Hier vergleichen wir Metas SAM-b-Modell mit den Segmentierungsmodellen von Ultralytics, darunter YOLO26n-seg:

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

Dieser Vergleich zeigt die erheblichen Unterschiede bei Modellgrößen und Geschwindigkeiten zwischen SAM-Varianten und YOLO-Segmentierungsmodellen. SAM bietet zwar einzigartige Möglichkeiten zur automatischen Segmentierung, doch YOLO-Modelle, insbesondere YOLOv8n-seg, YOLO11n-seg und YOLO26n-seg, sind deutlich kleiner, schneller und recheneffizienter.

Die Geschwindigkeiten von SAM wurden mit PyTorch gemessen, die von YOLO mit ONNX Runtime. Die Tests wurden auf einem Apple M4 Air aus dem Jahr 2025 mit 16 GB RAM und 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

# SAM-b und MobileSAM profilen
for file in ["sam_b.pt", "mobile_sam.pt"]:
    model = SAM(file)
    model.info()
    model(ASSETS)

# FastSAM-s profilieren
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)

# YOLO-Modelle profilieren (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)  # NMS-freier YOLO26-Head; für YOLOv8/YOLO11 ohne Funktion
    model = YOLO(onnx_path)
    model(ASSETS)

Automatische Annotation: Schnell 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 lassen sich viele Bilder schnell und präzise annotieren, ohne sie zeitaufwendig von Hand beschriften zu müssen.

Mit einem Erkennungsmodell einen Segmentierungsdatensatz 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")
ArgumentTypStandardBeschreibung
datastrerforderlichPfad zum Verzeichnis mit den Zielbildern für die 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 SAM-, SAM 2-, MobileSAM- und SAM 3-Gewichte).
devicestr''Rechengerät (z. B. 'cuda:0', 'cpu' oder '' zur automatischen Geräteerkennung).
conffloat0.25Konfidenzschwelle der YOLO-Erkennung, um unsichere Erkennungen herauszufiltern.
ioufloat0.45IoU-Schwelle für Non-Maximum Suppression, um überlappende Boxen herauszufiltern.
imgszint640Eingabegröße für die Größenanpassung von Bildern (bei Bedarf auf das nächste Vielfache von 32 aufgerundet).
max_detint300Höchstzahl der 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 (standardmäßig ein Verzeichnis neben <data>_auto_annotate_labels).

Die Funktion auto_annotate erwartet den Pfad zu deinen Bildern. Mit optionalen Argumenten kannst du das vortrainierte Erkennungsmodell und das SAM-Segmentierungsmodell, das Gerät für die Ausführung der Modelle sowie das Ausgabeverzeichnis zum Speichern der annotierten Ergebnisse angeben.

Die automatische Annotation mit vortrainierten Modellen kann den Zeit- und Arbeitsaufwand für die Erstellung hochwertiger Segmentierungsdatensätze erheblich verringern. Das ist besonders für Forschende und Entwickler nützlich, die mit großen Bildsammlungen arbeiten, denn so können sie sich auf die Entwicklung und Bewertung von Modellen statt auf manuelle Annotation konzentrieren.

Zitate und Danksagungen#

Wenn SAM für deine Forschungs- oder Entwicklungsarbeit hilfreich ist, ziehe bitte in Betracht, den Artikel 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 möchten Meta AI dafür danken, dass das Team diese wertvolle Ressource für die Computer-Vision-Community entwickelt und pflegt.

Häufig gestellte Fragen#

  • Metas Modell zur Segmentierung beliebiger Objekte (SAM) ist ein bahnbrechendes Bildsegmentierungsmodell für promptgesteuerte Segmentierungsaufgaben. Dank seiner fortschrittlichen Architektur mit Bild- und Prompt-Encodern sowie einem leichtgewichtigen Maskendecoder erzeugt es hochwertige Segmentierungsmasken aus verschiedenen Prompts, etwa räumlichen Hinweisen oder Textangaben. SAM wurde mit dem umfangreichen SA-1B-Datensatz trainiert und zeichnet sich durch seine Zero-Shot-Leistung aus: Es passt sich ohne Vorkenntnisse an neue Bildverteilungen und Aufgaben an.

  • Du kannst das Modell zur Segmentierung beliebiger Objekte (SAM) für die Bildsegmentierung verwenden, indem du mit verschiedenen Prompts wie Begrenzungsrahmen oder Punkten Inferenz ausführst. Hier ein Beispiel mit Python:

    from ultralytics import SAM
    
    # Ein Modell laden
    model = SAM("sam_b.pt")
    
    # Mit einer Begrenzungsbox als Prompt segmentieren
    model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])
    
    # Mit einem Punkt-Prompt segmentieren
    model("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])
    
    # Mit mehreren Punkt-Prompts segmentieren
    model("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[1, 1])
    
    # Mit mehreren Punkt-Prompts pro Objekt segmentieren
    model("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]])
    
    # Mit negativen Punkt-Prompts segmentieren.
    model("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

    Alternativ kannst du 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 aber einzigartige Zero-Shot-Segmentierungsfunktionen. Beispielsweise ist YOLO26n-seg auf der CPU 56-mal kleiner und mehr als 1650-mal schneller als Metas ursprüngliches SAM-b-Modell. Dadurch eignen sich YOLO-Modelle ideal für Anwendungen, bei denen schnelle, leichtgewichtige und rechenleistungseffiziente Segmentierung gefragt ist. SAM-Modelle überzeugen dagegen bei flexibler, promptgesteuerter Zero-Shot-Segmentierung.

  • SAM von Ultralytics bietet eine Funktion für automatische Annotationen, mit der sich mithilfe eines vortrainierten Erkennungsmodells Segmentierungsdatensätze erstellen lassen. Hier 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 erwartet den Pfad zu deinen Bildern sowie optionale Angaben zu vortrainierten Erkennungs- und SAM-Segmentierungsmodellen, dem Gerät und dem Ausgabeverzeichnis. Eine vollständige Anleitung findest du unter Automatische Annotation.

  • SAM wird mit dem umfangreichen SA-1B-Datensatz trainiert, der mehr als 1 Milliarde Masken auf 11 Millionen Bildern umfasst. SA-1B ist der bislang größte Segmentierungsdatensatz. Er bietet hochwertige und vielfältige Trainingsdaten, die für eine beeindruckende Zero-Shot-Leistung bei unterschiedlichen Segmentierungsaufgaben sorgen. Weitere Informationen findest du im Abschnitt Datensätze.

Kommentare