Segment Anything Model (SAM)
Willkommen an der Spitze der Bildsegmentierung mit dem Segment Anything Model oder SAM. Dieses revolutionäre Modell hat das Spiel verändert, indem es eine promptgesteuerte Bildsegmentierung mit Echtzeitleistung eingeführt und neue Maßstäbe in diesem Bereich gesetzt hat.
Einführung in SAM: Das Segment Anything Model
Das Segment Anything Model oder SAM ist ein hochmodernes Bildsegmentierungsmodell, das eine promptgesteuerte 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 Aufgabe und einen Datensatz für die Bildsegmentierung einführt.
Das fortschrittliche Design von SAM ermöglicht es ihm, sich ohne Vorwissen an neue Bildverteilungen und Aufgaben anzupassen, eine Funktion, die als Zero-Shot-Transfer bezeichnet wird. SAM wurde auf dem umfangreichen SA-1B-Datensatz trainiert, der mehr als 1 Milliarde Masken verteilt auf 11 Millionen sorgfältig kuratierte Bilder enthält, und hat eine beeindruckende Zero-Shot-Performance gezeigt, die in vielen Fällen frühere vollständig überwachte Ergebnisse übertrifft.
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 datenschutzrechtlich geschützte 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. Die Bilder sind zur Visualisierung nach der Anzahl der Masken pro Bild gruppiert (es gibt durchschnittlich ∼100 Masken pro Bild).
Hauptmerkmale des Segment Anything Model (SAM)
- Promptgesteuerte Segmentierungsaufgabe: SAM wurde mit Blick auf eine promptgesteuerte Segmentierungsaufgabe entwickelt, die es ihm ermöglicht, gültige Segmentierungsmasken aus jedem gegebenen Prompt zu generieren, z. B. räumliche oder textliche Hinweise, die ein Objekt identifizieren.
- Fortschrittliche Architektur: Das Segment Anything Model verwendet einen leistungsstarken Bild-Encoder, einen Prompt-Encoder und einen schlanken Masken-Decoder. Diese einzigartige Architektur ermöglicht flexibles Prompting, Echtzeit-Maskenberechnung 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 umfangreiche Trainingsdatenquelle.
- Zero-Shot-Performance: SAM zeigt eine hervorragende Zero-Shot-Performance bei verschiedenen Segmentierungsaufgaben und ist somit ein sofort einsatzbereites Werkzeug für vielfältige Anwendungen, das nur einen minimalen Bedarf an Prompt-Engineering hat.
Für einen detaillierten Einblick in das Segment Anything Model und den SA-1B-Datensatz besuchen Sie bitte die Segment Anything-Website und lesen Sie das Forschungspapier Segment Anything.
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 Inferenz, Validierung, Training und Export, die durch ✅-Emojis für unterstützte Modi und ❌-Emojis für nicht unterstützte Modi gekennzeichnet sind.
Modelltyp | Vortrainierte Gewichte | Unterstützte Aufgaben | Inferenz | Validierung | Training | Export |
---|---|---|---|---|---|---|
SAM-Basisversion | sam_b.pt | Instanzsegmentierung | ✅ | ❌ | ❌ | ❌ |
SAM, große Version | sam_l.pt | Instanzsegmentierung | ✅ | ❌ | ❌ | ❌ |
So verwenden Sie 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-Masken-Vorhersage. Mit Prompt-Engineering kann sich SAM schnell und ohne zusätzliche Schulung an neue Aufgaben und Datenverteilungen anpassen, was es zu einem vielseitigen und leistungsstarken Werkzeug für alle Ihre Bildsegmentierungsanforderungen macht.
SAM-Vorhersagebeispiel
Segmentierung mit Prompts
Segmentiere ein Bild 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]])
Alles segmentieren
Das ganze 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")
# Run inference with a SAM model
yolo predict model=sam_b.pt source=path/to/image.jpg
- Die Logik hier ist, das ganze Bild zu segmentieren, wenn keine Prompts (Begrenzungsrahmen/Punkte/Masken) übergeben werden.
SAMPredictor Beispiel
Auf diese Weise können Sie das Bild einmal festlegen und die Prompt-Inferenz mehrmals ausführen, ohne den Bild-Encoder mehrmals ausführen 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)
Hinweis
Alle zurückgegebenen results
in den obigen Beispielen sind Ergebnisse Objekte, die einen einfachen Zugriff auf vorhergesagte Masken und Quellbilder ermöglichen.
- Weitere zusätzliche Argumente für
Segment everything
siehePredictor/generate
Referenz.
SAM Vergleich vs YOLO
Hier vergleichen wir das SAM-b-Modell von Meta mit dem kleinsten Segmentierungsmodell von Ultralytics, YOLO11n-seg:
Modell | Größe (MB) |
Parameter (M) |
Geschwindigkeit (CPU) (ms/Bild) |
---|---|---|---|
Meta SAM-b | 375 | 93.7 | 49401 |
MobileSAM | 40.7 | 10.1 | 25381 |
FastSAM-s mit YOLOv8 Backbone | 23.7 | 11.8 | 55.9 |
Ultralytics YOLOv8n-seg | 6.7 (11,7x kleiner) | 3.4 (11,4x weniger) | 24.5 (1061x schneller) |
Ultralytics YOLO11n-seg | 5.9 (13.2x kleiner) | 2.9 (13.4x weniger) | 30.1 (864x 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 und YOLO11n-seg, deutlich kleiner, schneller und recheneffizienter.
Tests, die auf einem 2025 Apple M4 Pro mit 24 GB RAM laufen, verwenden torch==2.6.0
und ultralytics==8.3.90
. So reproduzieren Sie diesen Test:
Beispiel
from ultralytics import ASSETS, SAM, YOLO, FastSAM
# Profile SAM2-t, SAM2-b, SAM-b, MobileSAM
for file in ["sam_b.pt", "sam2_b.pt", "sam2_t.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
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt"]:
model = YOLO(file_name)
model.info()
model(ASSETS)
Auto-Annotation: Ein schneller Weg zu Segmentierungsdatensätzen
Die automatische Annotation ist ein Hauptmerkmal von SAM, das es Benutzern ermöglicht, einen Segmentierungsdatensatz mithilfe eines vortrainierten Erkennungsmodells zu erstellen. Diese Funktion ermöglicht eine schnelle und genaue Annotation einer großen Anzahl von Bildern, wodurch die zeitaufwändige manuelle Beschriftung entfällt.
Generieren Sie Ihren Segmentierungsdatensatz mithilfe eines Erkennungsmodells
Um Ihren Datensatz mit dem Ultralytics-Framework automatisch zu annotieren, verwenden Sie die auto_annotate
Funktion, wie unten gezeigt:
Beispiel
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="sam_b.pt")
Argument | Typ | Standard | Beschreibung |
---|---|---|---|
data |
str |
erforderlich | Pfad zum Verzeichnis mit den Zielbildern für Annotation oder Segmentierung. |
det_model |
str |
'yolo11x.pt' |
YOLO-Erkennungsmodellpfad für die anfängliche Objekterkennung. |
sam_model |
str |
'sam_b.pt' |
SAM-Modellpfad für die Segmentierung (unterstützt SAM, SAM2-Varianten und mobile_sam-Modelle). |
device |
str |
'' |
Rechengerät (z. B. 'cuda:0', 'cpu' oder '' für automatische Geräteerkennung). |
conf |
float |
0.25 |
YOLO-Erkennungsschwellenwert für die Filterung schwacher Erkennungen. |
iou |
float |
0.45 |
IoU-Schwellenwert für Non-Maximum Suppression, um überlappende Boxen zu filtern. |
imgsz |
int |
640 |
Eingangsgröße für die Größenänderung von Bildern (muss ein Vielfaches von 32 sein). |
max_det |
int |
300 |
Maximale Anzahl von Erkennungen pro Bild für Speichereffizienz. |
classes |
list[int] |
None |
Liste der zu erkennenden Klassenindizes (z. B. [0, 1] für Personen & Fahrräder). |
output_dir |
str |
None |
Speicherverzeichnis für Anmerkungen (standardmäßig './labels' relativ zum Datenpfad). |
Die auto_annotate
Funktion übernimmt den Pfad zu Ihren Bildern 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.
Die automatische Annotation mit vortrainierten Modellen kann den Zeit- und Arbeitsaufwand für die Erstellung hochwertiger Segmentierungsdatensätze erheblich reduzieren. Diese Funktion ist besonders nützlich für Forscher und Entwickler, die mit großen Bildersammlungen arbeiten, da sie sich auf die Modellentwicklung und -bewertung anstatt auf die manuelle Annotation konzentrieren können.
Zitate und Danksagungen
Wenn Sie SAM in Ihrer Forschungs- oder Entwicklungsarbeit nützlich finden, ziehen Sie 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 unseren Dank dafür aussprechen, dass sie diese wertvolle Ressource für die Computer-Vision-Community erstellt und pflegt.
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 promptbasierte Segmentierungsaufgaben entwickelt wurde. Es nutzt eine fortschrittliche Architektur, einschliesslich Bild- und Prompt-Encodern in Kombination mit einem schlanken Masken-Decoder, um hochwertige Segmentierungsmasken aus verschiedenen Prompts wie räumlichen oder textlichen Hinweisen zu generieren. SAM wurde auf dem umfangreichen SA-1B-Datensatz trainiert und zeichnet sich durch Zero-Shot-Performance aus, indem es sich ohne Vorwissen an neue Bildverteilungen und Aufgaben anpasst.
Wie kann ich das Segment Anything Model (SAM) für die Bildsegmentierung verwenden?
Sie können das Segment Anything Model (SAM) für die Bildsegmentierung verwenden, indem Sie Inferenz mit verschiedenen Prompts wie Begrenzungsrahmen oder Punkten ausführen. 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 können Sie die Inferenz mit SAM über die Befehlszeilenschnittstelle (CLI) ausführen:
yolo predict model=sam_b.pt source=path/to/image.jpg
Weitere detaillierte Anweisungen finden Sie im Abschnitt Segmentierung.
Wie schneiden SAM- und YOLO-Modelle im Hinblick auf die Leistung ab?
Im Vergleich zu YOLO-Modellen sind SAM-Varianten wie SAM-b, SAM2-t, MobileSAM und FastSAM-s in der Regel größer und langsamer, bieten aber einzigartige Zero-Shot-Segmentierungsfähigkeiten. Zum Beispiel ist Ultralytics YOLOv8n-seg 11,7x kleiner und 1069x schneller als das ursprüngliche SAM-b-Modell von Meta, was den deutlichen Vorteil von YOLO in Bezug auf Geschwindigkeit und Effizienz hervorhebt. In ähnlicher Weise bietet das neuere YOLO11n-seg eine noch geringere Größe und behält eine beeindruckende Inferenzgeschwindigkeit bei. Dies macht YOLO-Modelle ideal für Anwendungen, die eine schnelle, leichtgewichtige und recheneffiziente Segmentierung erfordern, während SAM-Modelle sich durch flexible, promptbasierte und Zero-Shot-Segmentierungsaufgaben auszeichnen.
Wie kann ich meinen Datensatz mit SAM automatisch annotieren?
Ultralytics' SAM bietet eine Auto-Annotation-Funktion, 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="yolov8x.pt", sam_model="sam_b.pt")
Diese Funktion übernimmt den Pfad zu Ihren Bildern und optionale Argumente für vortrainierte Detektions- und SAM-Segmentierungsmodelle sowie Geräte- und Ausgabeverzeichnisspezifikationen. Eine vollständige Anleitung finden Sie unter Auto-Annotation.
Welche Datensätze werden zum Trainieren des Segment Anything Model (SAM) verwendet?
SAM wird 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, der hochwertige und vielfältige Trainingsdaten bereitstellt und eine beeindruckende Zero-Shot-Performance bei verschiedenen Segmentierungsaufgaben gewährleistet. Weitere Informationen finden Sie im Abschnitt Datensatz.