Link to this sectionSegment Anything Model (SAM)#
Willkommen an der Spitze der Bildsegmentierung mit dem Segment Anything Model, kurz SAM. Dieses revolutionäre Modell hat die Spielregeln verändert, indem es prompt-basierte Bildsegmentierung mit Echtzeitleistung eingeführt und neue Maßstäbe in diesem Bereich gesetzt hat.
Link to this sectionEinfü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 vorheriges Wissen an neue Bildverteilungen und Aufgaben anzupassen, eine Funktion, die als Zero-Shot-Transfer bekannt ist. Trainiert auf 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 und in vielen Fällen bisherige vollständig überwachte Ergebnisse übertroffen.
SA-1B Beispielbilder. Datensatzbilder mit überlagerten Masken aus dem neu eingeführten SA-1B-Datensatz. SA-1B enthält 11 Mio. vielfältige, hochauflösende, lizenzierte und datenschutzfreundliche Bilder sowie 1,1 Mrd. hochwertige Segmentierungsmasken. Diese Masken wurden von SAM vollautomatisch 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 ∼100 Masken pro Bild).
Link to this sectionHauptfunktionen 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 hervorragende Zero-Shot-Leistung bei verschiedenen Segmentierungsaufgaben, was es zu einem gebrauchsfertigen Werkzeug für vielfältige Anwendungen mit minimalem Bedarf an Prompt Engineering macht.
Für einen tieferen Einblick in das Segment Anything Model und den SA-1B-Datensatz besuche bitte das Segment Anything GitHub und schau dir das Forschungspapier Segment Anything an.
SAM betreibt die intelligente Annotationsfunktion auf der Ultralytics Plattform und ermöglicht klickbasiertes intelligentes Maskieren für eine schnelle Datensatzbeschriftung. Siehe das Annotationshandbuch für Details.
Link to this sectionVerfügbare Modelle, unterstützte Aufgaben und Betriebsmodi#
Diese Tabelle zeigt die verfügbaren Modelle mit ihren spezifischen vortrainierten Gewichten, die von ihnen unterstützten Aufgaben und ihre 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 | Inference | Validation | Training | Exportieren |
|---|---|---|---|---|---|---|
| SAM base | sam_b.pt | Instance Segmentation | ✅ | ❌ | ❌ | ❌ |
| SAM large | sam_l.pt | Instance Segmentation | ✅ | ❌ | ❌ | ❌ |
Link to this sectionSo verwendest du SAM: Vielseitigkeit und Leistung bei der Bildsegmentierung#
Das Segment Anything Model kann für eine Vielzahl von Downstream-Aufgaben eingesetzt werden, die über seine Trainingsdaten hinausgehen. Dazu gehören Kantenerkennung, Objekterzeugungsvorschläge, Instance Segmentation und vorläufige Text-zu-Maske-Vorhersagen. Mit Prompt Engineering kann sich SAM schnell an neue Aufgaben und Datenverteilungen im Zero-Shot-Verfahren anpassen, was es zu einem vielseitigen und leistungsstarken Werkzeug für all deine Bildsegmentierungsanforderungen macht.
Link to this sectionSAM-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 = 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 Argumenten.
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)Alle zurückgegebenen results in den obigen Beispielen sind Results-Objekte, die einen einfachen Zugriff auf vorhergesagte Masken und das Quellbild ermöglichen.
- Weitere zusätzliche Argumente für
Segment everythingfindest du in derPredictor/generate-Referenz.
Link to this sectionSAM-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 wurden mit PyTorch gemessen, YOLO-Geschwindigkeiten mit ONNX Runtime. Tests wurden auf einem 2025 Apple M4 Air mit 16GB RAM unter Verwendung von torch==2.10.0, ultralytics==8.4.31 und onnxruntime==1.24.4 durchgeführt. Um diesen Test zu reproduzieren:
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)Link to this sectionAuto-Annotation: Ein schneller Weg zu Segmentierungsdatensätzen#
Auto-Annotation ist eine Schlüsselfunktion von SAM, die es Benutzern ermöglicht, einen Segmentierungsdatensatz unter Verwendung eines vortrainierten Detektionsmodells zu erstellen. Diese Funktion ermöglicht eine schnelle und genaue Annotation einer großen Anzahl von Bildern, ohne dass zeitaufwendiges manuelles Beschriften erforderlich ist.
Link to this sectionGeneriere deinen Segmentierungsdatensatz mit einem Detektionsmodell#
Um deinen Datensatz mit dem Ultralytics-Framework automatisch zu annotieren, verwende die auto_annotate-Funktion wie unten gezeigt:
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 Konfidenzschwellenwert zur Filterung schwacher Detektionen. |
iou | float | 0.45 | IoU-Schwellenwert für Non-Maximum Suppression zum Filtern überlappender Boxen. |
imgsz | int | 640 | Eingabegröße für das Skalieren von Bildern (muss ein Vielfaches von 32 sein). |
max_det | int | 300 | Maximale Anzahl an Detektionen pro Bild für Speichereffizienz. |
classes | list[int] | None | Liste der Klassenindizes zur Detektion (z. B. [0, 1] für Person & Fahrrad). |
output_dir | str | None | Speicherverzeichnis für Annotationen (Standard: Geschwisterverzeichnis <data>_auto_annotate_labels). |
Die auto_annotate-Funktion nimmt den Pfad zu deinen Bildern entgegen, mit optionalen Argumenten zur Angabe der vortrainierten Detektions- und SAM-Segmentierungsmodelle, des Geräts zur Ausführung der Modelle 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.
Link to this sectionZitate 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 unseren Dank dafür aussprechen, diese wertvolle Ressource für die Computer Vision Community geschaffen und gepflegt zu haben.
Link to this sectionFAQ#
Link to this sectionWas ist das Segment Anything Model (SAM) von Ultralytics?#
Das Segment Anything Model (SAM) von Ultralytics ist ein revolutionäres Bildsegmentierungsmodell, das für prompt-basierte Segmentierungsaufgaben entwickelt wurde. Es nutzt eine fortschrittliche Architektur, bestehend aus Bild- und Prompt-Encodern kombiniert mit einem leichtgewichtigen Masken-Decoder, um hochwertige Segmentierungsmasken aus verschiedenen Prompts wie räumlichen oder textuellen Hinweisen zu generieren. Trainiert auf dem umfangreichen SA-1B Datensatz, zeichnet sich SAM durch exzellente Zero-Shot-Leistung aus und passt sich ohne vorheriges Wissen an neue Bildverteilungen und Aufgaben an.
Link to this sectionWie kann ich das Segment Anything Model (SAM) für die Bildsegmentierung verwenden?#
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.jpgFür detailliertere Anweisungen zur Verwendung besuche den Segmentierungsabschnitt.
Link to this sectionWie schneiden SAM und YOLO Modelle im Vergleich ab?#
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-Segmentierungsfähigkeiten. Zum Beispiel ist YOLO26n-seg 56x kleiner und über 1650x schneller als Metas ursprüngliches SAM-b Modell auf der CPU. Dies macht YOLO Modelle ideal für Anwendungen, die schnelle, leichtgewichtige und recheneffiziente Segmentierung erfordern, während SAM Modelle bei flexiblen, prompt-basierten und Zero-Shot-Segmentierungsaufgaben glänzen.
Link to this sectionWie kann ich meinen Datensatz mit SAM auto-annotieren?#
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 verwendet den Pfad zu deinen Bildern und optionale Argumente für vortrainierte Detektions- und SAM-Segmentierungsmodelle sowie Angaben zum Gerät und Ausgabeverzeichnis. Eine vollständige Anleitung findest du unter Auto-Annotation.
Link to this sectionWelche Datensätze werden zum Training des Segment Anything Model (SAM) verwendet?#
SAM wurde auf dem umfangreichen SA-1B Datensatz trainiert, der über 1 Milliarde Masken in 11 Millionen Bildern umfasst. SA-1B ist der bisher größte Segmentierungsdatensatz und bietet qualitativ hochwertige und vielfältige Trainingsdaten, die eine beeindruckende Zero-Shot-Leistung bei verschiedenen Segmentierungsaufgaben gewährleisten. Für weitere Details besuche den Datensatz-Abschnitt.