Segment Anything Model (SAM)#
Willkommen an der Grenze der Bildsegmentierung mit dem Segment Anything Model, kurz SAM. Dieses revolutionäre Modell hat die Spielregeln verändert, indem es eine per Prompt steuerbare Bildsegmentierung mit Echtzeitleistung eingeführt und neue Maßstäbe auf diesem Gebiet gesetzt hat.
Einführung in SAM: Das Segment Anything Model#
Das Segment Anything Model, oder SAM, ist ein hochmodernes Bildsegmentierungsmodell, das eine prompt-basierte Segmentierung ermöglicht und eine beispiellose Vielseitigkeit bei Bildanalyseaufgaben bietet. SAM bildet das Herzstück der Segment Anything-Initiative, einem bahnbrechenden Projekt, das ein neuartiges Modell, eine neue Aufgabe und einen neuen Datensatz für die Bildsegmentierung einführt.
Das fortschrittliche Design von SAM ermöglicht es ihm, sich ohne Vorkenntnisse an neue Bildverteilungen und Aufgaben anzupassen, eine Funktion, die als Zero-Shot-Transfer bekannt ist. Trainiert auf dem umfangreichen SA-1B dataset, das mehr als 1 Milliarde Masken über 11 Millionen sorgfältig kuratierte Bilder hinweg enthält, hat SAM eine beeindruckende Zero-Shot-Leistung gezeigt und frühere vollständig überwachte Ergebnisse in vielen Fällen übertroffen.
SA-1B-Beispielbilder. Dataset-Bilder mit überlagerten Masken aus dem neu eingeführten SA-1B dataset. SA-1B enthält 11 Millionen verschiedene, hochauflösende, lizenzierte und datenschutzfreundliche 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, von hoher Qualität und Vielfalt. Die Bilder sind zur Visualisierung nach der Anzahl der Masken pro Bild gruppiert (es gibt im Durchschnitt ca. 100 Masken pro Bild).
Hauptfunktionen des Segment Anything Model (SAM)#
- Prompt-basierte Segmentierungsaufgabe: SAM wurde für eine prompt-basierte Segmentierungsaufgabe entwickelt, die es ermöglicht, gültige Segmentierungsmasken aus jedem gegebenen Prompt zu generieren, wie z. B. räumliche oder textuelle Hinweise, die ein Objekt identifizieren.
- Fortschrittliche Architektur: Das Segment Anything Model verwendet einen leistungsstarken Bild-Encoder, einen Prompt-Encoder und einen leichtgewichtigen Masken-Decoder. Diese einzigartige Architektur ermöglicht flexibles Prompting, Maskenberechnung in Echtzeit und Mehrdeutigkeitserkennung bei Segmentierungsaufgaben.
- Der SA-1B-Datensatz: Der vom Segment Anything-Projekt eingeführte SA-1B-Datensatz enthält über 1 Milliarde Masken auf 11 Millionen Bildern. Als bisher größter Segmentierungsdatensatz bietet er SAM eine vielfältige und groß angelegte Trainingsdatenquelle.
- Zero-Shot-Leistung: SAM zeigt eine herausragende Zero-Shot-Leistung bei verschiedenen Segmentierungsaufgaben, was es zu einem sofort einsatzbereiten Werkzeug für diverse Anwendungen mit minimalem Bedarf an Prompt-Engineering macht.
Für einen detaillierten Einblick in das Segment Anything Model und das SA-1B dataset besuche bitte das Segment Anything GitHub und schau dir das Forschungspapier Segment Anything an.
SAM betreibt die Funktion für intelligente Annotation auf der Ultralytics Platform und ermöglicht klickbasiertes intelligentes Maskieren für eine schnelle Datensatzkennzeichnung. Weitere Details findest du im Annotationshandbuch.
Verfügbare Modelle, unterstützte Aufgaben und Betriebsmodi#
Diese Tabelle zeigt die verfügbaren Modelle mit ihren spezifischen vortrainierten Gewichten, den von ihnen unterstützten Aufgaben und ihrer Kompatibilität mit verschiedenen Betriebsmodi wie Inference, Validation, Training und Export, gekennzeichnet durch ✅-Emojis für unterstützte ModI und ❌-Emojis für nicht unterstützte ModI.
| Modelltyp | Vortrainierte Gewichte | Unterstützte Aufgaben | Training | Validation | Inference | Exportieren |
|---|---|---|---|---|---|---|
| SAM base | sam_b.pt | Instanzsegmentierung | ❌ | ❌ | ✅ | ❌ |
| SAM large | sam_l.pt | Instanzsegmentierung | ❌ | ❌ | ✅ | ❌ |
So verwendest du SAM: Vielseitigkeit und Leistung bei der Bildsegmentierung#
Das Segment Anything Model kann für eine Vielzahl von nachgelagerten Aufgaben eingesetzt werden, die über seine Trainingsdaten hinausgehen. Dazu gehören Kantenerkennung, Erstellung von Objektvorschlägen, Instanzsegmentierung und vorläufige Text-zu-Maske-Vorhersagen. Mit Prompt-Engineering kann sich SAM im Zero-Shot-Verfahren schnell an neue Aufgaben und Datenverteilungen anpassen, was es zu einem vielseitigen und starken Werkzeug für all deine Bildsegmentierungsanforderungen macht.
SAM-Vorhersagebeispiel#
Segmentiere Bilder mit gegebenen Prompts.
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]])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")- Die Logik hier ist, das gesamte Bild zu segmentieren, wenn du keine Prompts (bboxes/points/masks) übergibst.
Auf diese Weise kannst du das Bild einmal festlegen und Prompt-Inference mehrfach ausführen, ohne den Bild-Encoder mehrfach 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()Segmentiere alles mit zusätzlichen Argumenten.
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)Alle in den obigen Beispielen zurückgegebenen results sind Results-Objekte, die den einfachen Zugriff auf vorhergesagte Masken und Quellbilder ermöglichen.
- Weitere zusätzliche Argumente für
Segment everythingfindest du in derPredictor/generateReferenz.
SAM-Vergleich vs. YOLO#
Hier vergleichen wir das SAM-b-Modell von Meta mit Ultralytics Segmentierungsmodellen einschließlich YOLO26n-seg:
| Modell | Größe (MB) | Parameter (M) | Geschwindigkeit (CPU) (ms/im) |
|---|---|---|---|
| Meta SAM-b | 375 | 93.7 | 41703 |
| MobileSAM | 40.7 | 10.1 | 23802 |
| FastSAM-s mit YOLOv8-Backbone | 23.9 | 11.8 | 58.0 |
| Ultralytics YOLOv8n-seg | 7.1 (52.8x kleiner) | 3.4 (27.6x weniger) | 24.8 (1682x schneller) |
| Ultralytics YOLO11n-seg | 6.2 (60.5x kleiner) | 2.9 (32.3x weniger) | 24.3 (1716x schneller) |
| Ultralytics YOLO26n-seg | 6.7 (56.0x kleiner) | 2.7 (34.7x weniger) | 25.2 (1655x schneller) |
Dieser Vergleich demonstriert die erheblichen Unterschiede in Modellgrößen und Geschwindigkeiten zwischen SAM-Varianten und YOLO-Segmentierungsmodellen. Während SAM einzigartige automatische Segmentierungsfunktionen bietet, sind YOLO-Modelle, insbesondere YOLOv8n-seg, YOLO11n-seg und YOLO26n-seg, deutlich kleiner, schneller und recheneffizienter.
SAM-Geschwindigkeiten gemessen mit PyTorch, YOLO-Geschwindigkeiten gemessen mit ONNX Runtime. Tests ausgeführt auf einem 2025 Apple M4 Air mit 16 GB RAM unter Verwendung von torch==2.10.0, ultralytics==8.4.31 und onnxruntime==1.24.4. So reproduzierst du diesen Test:
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)
model = YOLO(onnx_path)
model(ASSETS)Auto-Annotation: Ein schneller Weg zu Segmentierungsdatensätzen#
Die Auto-Annotation ist ein Schlüsselmerkmal von SAM, das es Benutzern ermöglicht, ein Segmentierungs-Dataset mit einem vortrainierten Erkennungsmodell zu erstellen. Diese Funktion ermöglicht die schnelle und genaue Annotation einer großen Anzahl von Bildern, wodurch zeitaufwändige manuelle Markierungen umgangen werden.
Generiere deinen Segmentierungsdatensatz mit einem Detektionsmodell#
Um dein Dataset mit dem Ultralytics Framework automatisch zu annotieren, verwende die unten gezeigte Funktion auto_annotate:
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")| Argument | Typ | Standard | Beschreibung |
|---|---|---|---|
data | str | erforderlich | Pfad zum Verzeichnis mit Zielbildern für Annotation oder Segmentierung. |
det_model | str | 'yolo26x.pt' | YOLO-Detektionsmodellpfad für die anfängliche Objekterkennung. |
sam_model | str | 'sam_b.pt' | SAM-Modellpfad für Segmentierung (unterstützt SAM, SAM 2, MobileSAM und SAM 3 Gewichte). |
device | str | '' | Berechnungsgerät (z. B. 'cuda:0', 'cpu' oder '' für automatische Geräteerkennung). |
conf | float | 0.25 | YOLO-Erkennungs-Konfidenzschwellenwert zum Filtern schwacher Erkennungen. |
iou | float | 0.45 | IoU-Schwellenwert für die Non-Maximum Suppression zum Filtern überlappender Boxen. |
imgsz | int | 640 | Eingabegröße für die Bildskalierung (muss ein Vielfaches von 32 sein). |
max_det | int | 300 | Maximale Anzahl an Erkennungen pro Bild zur Speichereffizienz. |
classes | list[int] | None | Liste der zu erkennenden Klassenindizes (z. B. [0, 1] für Person & Fahrrad). |
output_dir | str | None | Speicherverzeichnis für Annotationen (Standard: <data>_auto_annotate_labels Geschwisterordner). |
Die Funktion auto_annotate akzeptiert den Pfad zu deinen Bildern sowie optionale Argumente zur Angabe der vortrainierten Erkennungs- und SAM-Segmentierungsmodelle, des Geräts, auf dem die Modelle ausgeführt werden sollen, und des Ausgabeverzeichnisses zum Speichern der annotierten Ergebnisse.
Die Auto-Annotation mit vortrainierten Modellen kann die Zeit und den Aufwand für die Erstellung hochwertiger Segmentierungsdatensätze drastisch reduzieren. Dieses Feature ist besonders vorteilhaft für Forscher und Entwickler, die mit großen Bildsammlungen arbeiten, da es ihnen ermöglicht, sich auf die Modellentwicklung und -evaluierung statt auf manuelle Annotationen zu konzentrieren.
Zitate und Danksagungen#
Wenn du SAM in deiner Forschungs- oder Entwicklungsarbeit nützlich findest, ziehe bitte in Erwägung, unser Paper zu 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}
}Wir möchten Meta AI unsere Dankbarkeit dafür aussprechen, dass sie diese wertvolle Ressource für die Computer Vision-Community erstellt und gepflegt haben.
FAQ#
Das Segment Anything Model (SAM) von Ultralytics ist ein revolutionäres Bildsegmentierungsmodell, das für promptbasierte Segmentierungsaufgaben entwickelt wurde. Es nutzt eine fortschrittliche Architektur, die Bild- und Prompt-Encoder in Kombination mit einem leichten Masken-Decoder umfasst, um hochwertige Segmentierungsmasken aus verschiedenen Prompts wie räumlichen oder Text-Hinweisen zu generieren. Trainiert auf dem umfangreichen SA-1B dataset, zeichnet sich SAM durch eine herausragende Zero-Shot-Leistung aus und passt sich ohne Vorkenntnisse an neue Bildverteilungen und Aufgaben an.
Du kannst das Segment Anything Model (SAM) für die Bildsegmentierung nutzen, indem du die Inferenz mit verschiedenen Prompts wie Bounding Boxes 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 das Command Line Interface (CLI) ausführen:
yolo predict model=sam_b.pt source=path/to/image.jpgWeitere detaillierte Anwendungsanweisungen findest du im Segmentierungsbereich.
Im Vergleich zu YOLO-Modellen sind SAM-Varianten wie SAM-b, MobileSAM und FastSAM-s typischerweise größer und langsamer, bieten jedoch einzigartige Zero-Shot-Segmentierungsfunktionen. Zum Beispiel ist YOLO26n-seg auf der CPU 56x kleiner und über 1650x schneller als Metas originales SAM-b-Modell. Dies macht YOLO-Modelle ideal für Anwendungen, die eine schnelle, leichte und recheneffiziente Segmentierung erfordern, während SAM-Modelle sich bei flexiblen, promptbasierten und Zero-Shot-Segmentierungsaufgaben auszeichnen.
Ultralytics SAM bietet eine Auto-Annotationsfunktion, die es ermöglicht, Segmentierungsdatensätze mithilfe eines vortrainierten Detektionsmodells zu generieren. Hier ist ein Beispiel in 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 akzeptiert den Pfad zu deinen Bildern und optionale Argumente für vortrainierte Erkennungs- und SAM-Segmentierungsmodelle sowie Angaben zum Gerät und Ausgabeverzeichnis. Eine vollständige Anleitung findest du unter Auto-Annotation.
SAM wurde auf dem umfangreichen SA-1B dataset trainiert, das über 1 Milliarde Masken in 11 Millionen Bildern umfasst. SA-1B ist das bisher größte Segmentierungs-Dataset und bietet hochwertige sowie vielfältige Trainingsdaten, die eine beeindruckende Zero-Shot-Leistung bei verschiedenen Segmentierungsaufgaben gewährleisten. Weitere Details findest du im Dataset-Bereich.