Segment Anything Model (SAM)
Willkommen an der Spitze der Bildsegmentierung mit dem Segment Anything Model, kurz SAM. Dieses revolutionäre Modell hat das Feld verändert, indem es prompt-basierte Bildsegmentierung mit Echtzeitleistung eingeführt und damit neue Standards 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 damit beispiellose Vielseitigkeit bei Bildanalyseaufgaben bietet. SAM bildet das Herzstück der Segment Anything-Initiative, einem bahnbrechenden Projekt, das ein neuartiges Modell, eine Aufgabe und einen 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 Eigenschaft, die als Zero-Shot-Transfer bekannt ist. Trainiert auf dem umfangreichen SA-1B-Datensatz, der mehr als 1 Milliarde Masken über 11 Millionen sorgfältig kuratierte Bilder hinweg 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 Millionen vielfältige, hochauflösende, lizenzierte und datenschutzkonforme Bilder sowie 1,1 Milliarden qualitativ 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 ∼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 zum Beispiel 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, Echtzeit-Maskenberechnung und Mehrdeutigkeitserkennung bei Segmentierungsaufgaben.
- Der SA-1B-Datensatz: Der SA-1B-Datensatz wurde vom Segment Anything-Projekt eingeführt und umfasst ü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 macht, das nur minimales Prompt Engineering erfordert.
Für einen tieferen Einblick in das Segment Anything Model und den SA-1B-Datensatz besuche bitte das Segment Anything GitHub und lies das Forschungspapier Segment Anything.
SAM betreibt die intelligente Annotationsfunktion auf der Ultralytics Plattform und ermöglicht klickbasiertes intelligentes Maskieren für eine schnelle Datensatz-Labeling. Siehe den Annotationsleitfaden für Details.
Verfü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 und ❌-Emojis für nicht unterstützte Modi.
| Modelltyp | Vortrainierte Gewichte | Unterstützte Aufgaben | Inferenz | Validierung | Training | Exportieren |
|---|---|---|---|---|---|---|
| SAM base | sam_b.pt | Instance Segmentation | ✅ | ❌ | ❌ | ❌ |
| SAM large | sam_l.pt | Instance Segmentation | ✅ | ❌ | ❌ | ❌ |
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, Objekterzeugung, Instanzsegmentierung und vorläufige Text-zu-Maske-Vorhersage. Mit Prompt Engineering kann sich SAM schnell und Zero-Shot an neue Aufgaben und Datenverteilungen anpassen, was es zu einem vielseitigen und leistungsstarken Werkzeug für all deine Bildsegmentierungsbedürfnisse macht.
SAM-Vorhersagebeispiel
Bild segmentieren 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]])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 hierbei ist, das gesamte Bild zu segmentieren, wenn du keine Prompts (bboxes/Punkte/Masken) übergibst.
Auf diese Weise kannst du das Bild einmal setzen und die Inferenz mit Prompts mehrfach ausführen, ohne den Bild-Encoder mehrmals starten zu müssen.
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()Alles mit zusätzlichen Argumenten segmentieren.
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 in den obigen Beispielen zurückgegebenen results sind Results-Objekte, die einen einfachen Zugriff auf vorhergesagte Masken und das Quellbild ermöglichen.
- More additional args for
Segment everythingseePredictor/generateReference.
SAM-Vergleich vs. YOLO
Hier vergleichen wir Metas SAM-b-Modell 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öße und Geschwindigkeit 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 wurden 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 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)Auto-Annotation: Ein schneller Weg zu Segmentierungsdatensätzen
Auto-Annotation ist eine Schlüsselfunktion von SAM, die es Benutzern ermöglicht, einen Segmentierungsdatensatz mit einem vortrainierten Detektionsmodell zu generieren. Diese Funktion ermöglicht eine schnelle und genaue Annotation einer großen Anzahl von Bildern, ohne dass zeitaufwendiges manuelles Labeling erforderlich ist.
Generiere 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, das die Zielbilder für die Annotation oder Segmentierung enthält. |
det_model | str | 'yolo26x.pt' | Pfad zum YOLO-Detektionsmodell für die anfängliche Objekterkennung. |
sam_model | str | 'sam_b.pt' | Pfad zum SAM-Modell für die Segmentierung (unterstützt SAM, SAM2-Varianten und MobileSAM-Modelle). |
device | str | '' | Rechengerät (z. B. 'cuda:0', 'cpu' oder '' für automatische Geräteerkennung). |
conf | float | 0.25 | Konfidenzschwellenwert für die YOLO-Detektion zum Filtern schwacher Detektionen. |
iou | float | 0.45 | IoU-Schwellenwert für 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 Detektionen pro Bild für Speichereffizienz. |
classes | list[int] | None | Liste der Klassenindizes zur Erkennung (z. B. [0, 1] für Person & Fahrrad). |
output_dir | str | None | Speicherverzeichnis für Annotationen (standardmäßig './labels' relativ zum Datenpfad). |
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, auf dem die Modelle ausgeführt werden sollen, und des Ausgabeverzeichnisses zum Speichern der annotierten Ergebnisse.
Auto-Annotation mit vortrainierten Modellen kann den Zeit- und Arbeitsaufwand für die Erstellung hochwertiger Segmentierungsdatensätze drastisch reduzieren. Diese Funktion ist besonders vorteilhaft für Forscher und Entwickler, die mit großen Bildsammlungen arbeiten, da sie es ihnen ermöglicht, sich auf die Modellentwicklung und Evaluierung anstatt auf manuelle Annotation zu konzentrieren.
Zitate und Danksagungen
Wenn du SAM für deine Forschungs- oder Entwicklungsarbeit nützlich findest, ziehe bitte in Betracht, 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 geschaffen und gepflegt haben.
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 prompt-basierte Segmentierungsaufgaben entwickelt wurde. Es nutzt eine fortschrittliche Architektur, einschließlich Bild- und Prompt-Encodern, kombiniert mit einem leichtgewichtigen Masken-Decoder, um qualitativ hochwertige Segmentierungsmasken aus verschiedenen Prompts wie räumlichen oder textuellen Hinweisen zu generieren. Trainiert auf dem umfangreichen SA-1B-Datensatz, zeichnet sich SAM durch Zero-Shot-Leistung aus und passt sich ohne Vorkenntnisse an neue Bildverteilungen und Aufgaben an.
Wie kann ich das Segment Anything Model (SAM) für die Bildsegmentierung verwenden?
Du kannst das Segment Anything Model (SAM) für die Bildsegmentierung verwenden, indem du die Inferenz mit verschiedenen Prompts wie Bounding Boxes oder Punkten ausführst. Hier ist ein Beispiel unter Verwendung von 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.jpgFür detailliertere Anweisungen zur Verwendung besuche den Segmentierungsabschnitt.
Wie vergleichen sich SAM- und YOLO-Modelle in Bezug auf die Leistung?
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 56-mal kleiner und über 1650-mal schneller als Metas ursprüngliches SAM-b-Modell auf der CPU. Dies macht YOLO-Modelle ideal für Anwendungen, die eine schnelle, leichtgewichtige und recheneffiziente Segmentierung erfordern, während sich SAM-Modelle durch flexible, prompt-basierte und Zero-Shot-Segmentierungsaufgaben auszeichnen.
Wie kann ich meinen Datensatz mit SAM automatisch annotieren?
Ultralytics' SAM bietet eine Auto-Annotationsfunktion, mit der Segmentierungsdatensätze mithilfe eines vortrainierten Detektionsmodells generiert werden können. 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 nimmt den Pfad zu deinen Bildern und optionale Argumente für vortrainierte Erkennungs- und SAM-Segmentierungsmodelle entgegen, zusammen mit Angaben zu Gerät und Ausgabeverzeichnis. Für eine vollständige Anleitung siehe Auto-Annotation.
Welche Datensätze werden zum Training des Segment Anything Model (SAM) verwendet?
SAM wurde mit 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 sowie vielfältige Trainingsdaten, was eine beeindruckende Zero-Shot-Leistung bei verschiedenen Segmentierungsaufgaben gewährleistet. Weitere Details findest du im Datensatz-Abschnitt.