Zum Inhalt springen

Segment Anything Model (SAM)

Wie man Segment Anything in Colab verwendet

Willkommen an der Grenze der Bildsegmentierung mit dem Segment Anything Model, oder SAM. Dieses revolutionäre Modell hat das Spiel verändert, indem es eine prompte Bildsegmentierung mit Echtzeitleistung einführt und damit neue Maßstäbe in diesem Bereich setzt.

Einführung in SAM: Das Segment Anything Model

Das Segment Anything Model ( SAM) ist ein innovatives Bildsegmentierungsmodell, das eine sofortige Segmentierung ermöglicht und damit 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.

SAMDas fortschrittliche Design von ermöglicht es, sich ohne Vorkenntnisse an neue Bildverteilungen und Aufgaben anzupassen - eine Eigenschaft, die als Zero-Shot-Transfer bekannt ist. Getestet 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 übertrifft in vielen Fällen die bisherigen vollständig überwachten Ergebnisse.

Datensatz Beispielbild SA-1B Beispielbilder. Bilder des Datensatzes überlagern Masken aus dem neu eingeführten SA-1B-Datensatz. SA-1B enthält 11 Millionen verschiedene, hochauflösende, lizenzierte und datenschutzfreundliche Bilder und 1,1 Milliarden 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 (im Durchschnitt gibt es ∼100 Masken pro Bild).

Hauptmerkmale des Segment Anything Model (SAM)

  • Promptable Segmentation Task: SAM wurde mit Blick auf eine Promptable Segmentation Task entwickelt, die es ermöglicht, gültige Segmentierungsmasken aus jeder beliebigen Eingabeaufforderung zu generieren, z. B. aus räumlichen oder textlichen Hinweisen zur Identifizierung eines Objekts.
  • Fortschrittliche Architektur: Das Segment Anything Model verwendet einen leistungsstarken Bild-Encoder, einen Prompt-Encoder und einen leichtgewichtigen Maskendecoder. Diese einzigartige Architektur ermöglicht eine flexible Eingabeaufforderung, Maskenberechnung in Echtzeit und Mehrdeutigkeitserkennung bei Segmentierungsaufgaben.
  • Der SA-1B-Datensatz: Der SA-1B-Datensatz wurde im Rahmen des Segment Anything-Projekts eingeführt und enthält über 1 Milliarde Masken auf 11 Millionen Bildern. Als der bisher größte 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 damit ein sofort einsatzbereites Werkzeug für verschiedene Anwendungen, das nur minimale technische Eingriffe erfordert.

Für einen detaillierten Einblick in das Segment Anything Modell 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

In dieser Tabelle werden die verfügbaren Modelle mit ihren spezifischen vortrainierten Gewichten, den von ihnen unterstützten Aufgaben und ihrer Kompatibilität mit verschiedenen Betriebsmodi wie Inferenz, Validierung, Training und Export aufgeführt, gekennzeichnet durch ✅ Emojis für unterstützte Modi und ❌ Emojis für nicht unterstützte Modi.

Modell Typ Vorgefertigte Gewichte Unterstützte Aufgaben Inferenz Validierung Ausbildung Exportieren
SAM Basis sam_b.pt Instanz-Segmentierung
SAM groß sam_l.pt Instanz-Segmentierung

Verwendung von SAM: Vielseitigkeit und Leistung bei der Bildsegmentierung

Das Segment Anything Model kann für eine Vielzahl von nachgelagerten Aufgaben eingesetzt werden, die über die Trainingsdaten hinausgehen. Dazu gehören die Erkennung von Kanten, die Erstellung von Objektvorschlägen, die Segmentierung von Instanzen und die Vorhersage von Text-zu-Masken. Durch eine schnelle Entwicklung kann SAM schnell und ohne großen Aufwand an neue Aufgaben und Datenverteilungen angepasst werden, was es zu einem vielseitigen und leistungsstarken Werkzeug für alle Ihre Bildsegmentierungsanforderungen macht.

SAM Beispiel für eine Vorhersage

Segment mit Eingabeaufforderungen

Segmentieren Sie das Bild mit den gegebenen Anweisungen.

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

Segmentieren Sie 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")
# Run inference with a SAM model
yolo predict model=sam_b.pt source=path/to/image.jpg
  • Die Logik besteht darin, das gesamte Bild zu segmentieren, wenn Sie keine Eingabeaufforderungen (Bboxen/Punkte/Masken) übergeben.

SAMPredictor Beispiel

Auf diese Weise können Sie das Bild einmal einstellen und die Ableitung der Eingabeaufforderungen mehrfach ausführen, ohne den Bildkodierer mehrfach zu starten.

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ückgesandten results in den obigen Beispielen sind Ergebnisse Objekt, das einen einfachen Zugriff auf vorausgesagte Masken und das Quellbild ermöglicht.

SAM Vergleich mit YOLO

Hier vergleichen wir das SAM von Meta mit dem kleinsten Segmentierungsmodell Ultralytics , YOLO11n-seg:

Modell Größe
(MB)
Parameter
(M)
Geschwindigkeit (CPU)
(ms/im)
Meta SAM-b 375 93.7 49401
MobileSAM 40.7 10.1 25381
FastSAM mitYOLOv8-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 zeigt die erheblichen Unterschiede in den Modellgrößen und Geschwindigkeiten zwischen SAM und YOLO . Während SAM einzigartige automatische Segmentierungsfähigkeiten bietet, sind die YOLO , insbesondere YOLOv8n und YOLO11n-seg, deutlich kleiner, schneller und rechnerisch effizienter.

Die Tests laufen auf einem 2025 Apple M4 Pro mit 24 GB RAM und torch==2.6.0 und ultralytics==8.3.90. Um diesen Test zu reproduzieren:

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-Beschriftung: Ein schneller Weg zu Segmentierungsdatensätzen

Die automatische Beschriftung ist eine Schlüsselfunktion von SAM, die es dem Benutzer ermöglicht, einen Segmentierungsdatensatz mithilfe eines vorab trainierten Erkennungsmodells zu erstellen. Diese Funktion ermöglicht eine schnelle und genaue Beschriftung einer großen Anzahl von Bildern, ohne dass eine zeitaufwändige manuelle Beschriftung erforderlich ist.

Erzeugen Sie Ihren Segmentierungsdatensatz mithilfe eines Erkennungsmodells

Um Ihren Datensatz mit dem Ultralytics Framework automatisch zu annotieren, verwenden Sie die auto_annotate Funktion wie unten dargestellt:

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, das die Zielbilder für die Beschriftung oder Segmentierung enthält.
det_model str 'yolo11x.pt' YOLO Erkennungsmodellpfad für die anfängliche Objekterkennung.
sam_model str 'sam_b.pt' SAM für die Segmentierung (unterstützt SAM, SAM2 und mobile_sam-Modelle).
device str '' Berechnungsgerät (z. B. 'cuda:0', 'cpu' oder '' für die automatische Geräteerkennung).
conf float 0.25 YOLO Schwellenwert für die Erkennungswahrscheinlichkeit zum Herausfiltern schwacher Erkennungen.
iou float 0.45 IoU-Schwelle für die Nicht-Maximum-Unterdrückung, um überlappende Boxen zu filtern.
imgsz int 640 Eingabegröß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, um den Speicher zu schonen.
classes list[int] None Liste der zu erkennenden Klassenindizes (z. B., [0, 1] für Person & Fahrrad).
output_dir str None Speicherverzeichnis für Anmerkungen (Standardwert ist './labels' relativ zum Datenpfad).

Die auto_annotate Funktion nimmt den Pfad zu Ihren Bildern, mit optionalen Argumenten für die Angabe der vortrainierten Erkennungs- und SAM Segmentierungsmodelle, des Geräts, auf dem die Modelle ausgeführt werden sollen, und des Ausgabeverzeichnisses zum Speichern der kommentierten Ergebnisse.

Die automatische Beschriftung mit vorab trainierten 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 sich auf die Modellentwicklung und -auswertung konzentrieren können, statt auf die manuelle Annotation.

Zitate und Danksagungen

Wenn Sie SAM für Ihre Forschungs- oder Entwicklungsarbeit nützlich finden, sollten Sie unser Papier 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-Gemeinschaft 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 promptable Segmentierungsaufgaben entwickelt wurde. Es nutzt eine fortschrittliche Architektur, einschließlich Bild- und Prompt-Encodern in Kombination mit einem leichtgewichtigen Maskendecoder, um qualitativ 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 eine Zero-Shot-Leistung aus, die sich ohne Vorkenntnisse an neue Bildverteilungen und Aufgaben anpassen lässt. Erfahren Sie hier mehr.

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 die Inferenz mit verschiedenen Eingabeaufforderungen wie Bounding Boxes oder Punkten durchfü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

Ausführlichere Anweisungen zur Verwendung finden Sie im Abschnitt Segmentierung.

Wie schneiden die SAM und YOLO in Bezug auf ihre Leistung ab?

Im Vergleich zu YOLO sind SAM wie SAM, SAM2, MobileSAM und FastSAM in der Regel größer und langsamer, bieten aber einzigartige Zero-Shot-Segmentierungsfunktionen. Ultralytics YOLOv8n ist beispielsweise 11,7-mal kleiner und 1069-mal schneller als das ursprüngliche SAM von Meta, was den erheblichen Geschwindigkeits- und Effizienzvorteil von YOLO unterstreicht. Das neuere YOLO11n-seg ist sogar noch kleiner und behält seine beeindruckende Inferenzgeschwindigkeit bei. Damit sind YOLO ideal für Anwendungen, die eine schnelle, leichte und recheneffiziente Segmentierung erfordern, während SAM sich durch flexible, sofortige und Zero-Shot-Segmentierungsaufgaben auszeichnen.

Wie kann ich meinen Datensatz mit SAM automatisch annotieren?

Ultralytics' SAM bietet eine Auto-Annotation-Funktion, die es ermöglicht, Segmentierungsdatensätze mit Hilfe eines vorab trainierten Erkennungsmodells zu erstellen. 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 die vorab trainierten Erkennungs- und SAM Segmentierungsmodelle sowie Angaben zum Gerät und zum Ausgabeverzeichnis. Eine vollständige Anleitung finden Sie unter Auto-Annotation.

Welche Datensätze werden für das Training des Segment Anything Model (SAM) verwendet?

SAM wird auf dem umfangreichen SA-1B-Datensatz trainiert, der über 1 Milliarde Masken auf 11 Millionen Bildern umfasst. SA-1B ist der bisher größte Segmentierungsdatensatz, der hochwertige und vielfältige Trainingsdaten liefert und eine beeindruckende Zero-Shot-Leistung bei verschiedenen Segmentierungsaufgaben gewährleistet. Weitere Einzelheiten finden Sie im Abschnitt Datensatz.

📅 Erstellt vor 1 Jahr ✏️ Aktualisiert vor 9 Tagen

Kommentare