Zum Inhalt springen

Segment Anything Model (SAM)

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 Standards 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 der Bildanalyse bietet. SAM ist das HerzstĂŒck der Segment Anything Initiative, einem bahnbrechenden Projekt, das ein neues Modell, eine neue Aufgabe und einen neuen Datensatz fĂŒr die Bildsegmentierung vorstellt.

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 mit 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, die in vielen FĂ€llen die bisherigen vollstĂ€ndig ĂŒberwachten Ergebnisse ĂŒbertrifft.

Datensatz Beispielbild SA-1B Beispielbilder. Die Bilder des Datensatzes ĂŒberlagern die Masken des neu eingefĂŒhrten SA-1B Datensatzes. 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 menschliche Bewertungen und zahlreiche Experimente belegen, von hoher QualitĂ€t und Vielfalt. Die Bilder sind nach der Anzahl der Masken pro Bild gruppiert, um sie zu visualisieren (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, die Berechnung von Masken in Echtzeit und das Erkennen von Mehrdeutigkeiten 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.

Wenn du einen tieferen Einblick in das Segment Anything-Modell und den SA-1B-Datensatz haben möchtest, besuche die Segment Anything-Website und lies 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 Aufgaben, die sie unterstĂŒtzen, und ihre KompatibilitĂ€t mit verschiedenen Betriebsmodi wie Inferenz, Validierung, Training und Export, gekennzeichnet durch ✅ Emojis fĂŒr unterstĂŒtzte Modi und ❌ Emojis fĂŒr nicht unterstĂŒtzte Modi.

Modell Typ Vortrainierte Gewichte UnterstĂŒtzte Aufgaben Inferenz Validierung Ausbildung exportieren
SAM Basis sam_b.pt Instanz-Segmentierung ✅ ❌ ❌ ❌
SAM groß sam_l.pt Instanz-Segmentierung ✅ ❌ ❌ ❌

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. Dank der schnellen Entwicklung kann sich SAM schnell an neue Aufgaben und Datenverteilungen anpassen und ist damit ein vielseitiges und leistungsfĂ€higes Werkzeug fĂŒr alle deine Anforderungen bei der Bildsegmentierung.

SAM Vorhersagebeispiel

Segment mit Aufforderungen

Segmentiere 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 points prompt
results = model("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])

Alles segmentieren

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")
# Run inference with a SAM model
yolo predict model=sam_b.pt source=path/to/image.jpg
  • Die Logik hier ist, das gesamte Bild zu segmentieren, wenn du keine Aufforderungen (Bboxen/Punkte/Masken) ĂŒbergibst.

SAMPredictor Beispiel

Auf diese Weise kannst du das Bild einmal einstellen und die Ableitung der Aufforderungen mehrmals ausfĂŒhren, ohne den Bildkodierer mehrmals 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])
results = predictor(points=[900, 370], labels=[1])

# Reset image
predictor.reset_image()

Segmentiere alles mit zusÀtzlichen Args.

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 Objekt, das einen einfachen Zugriff auf vorhergesagte Masken und das Quellbild ermöglicht.

SAM Vergleich vs. YOLOv8

Hier vergleichen wir das kleinste Modell von Meta SAM , SAM-b, mit dem kleinsten Segmentierungsmodell von Ultralytics , YOLOv8n-seg:

Modell GrĂ¶ĂŸe Parameter Geschwindigkeit (CPU)
Metas SAM-b 358 MB 94.7 M 51096 ms/im
MobileSAM 40,7 MB 10.1 M 46122 ms/im
FastSAM-s mit YOLOv8 backbone 23,7 MB 11.8 M 115 ms/im
Ultralytics YOLOv8n-seg 6,7 MB (53,4x kleiner) 3,4 Mio. (27,9x weniger) 59 ms/im (866x schneller)

Dieser Vergleich zeigt, wie groß die Unterschiede in den ModellgrĂ¶ĂŸen und Geschwindigkeiten zwischen den Modellen sind. WĂ€hrend SAM einzigartige Möglichkeiten fĂŒr die automatische Segmentierung bietet, ist es kein direkter Konkurrent fĂŒr die YOLOv8 Segmentmodelle, die kleiner, schneller und effizienter sind.

Die Tests laufen auf einem 2023 Apple M2 Macbook mit 16 GB RAM. Um diesen Test zu reproduzieren:

Beispiel

from ultralytics import SAM, YOLO, FastSAM

# Profile SAM-b
model = SAM("sam_b.pt")
model.info()
model("ultralytics/assets")

# Profile MobileSAM
model = SAM("mobile_sam.pt")
model.info()
model("ultralytics/assets")

# Profile FastSAM-s
model = FastSAM("FastSAM-s.pt")
model.info()
model("ultralytics/assets")

# Profile YOLOv8n-seg
model = YOLO("yolov8n-seg.pt")
model.info()
model("ultralytics/assets")

Auto-Annotation: Ein schneller Weg zu SegmentierungsdatensÀtzen

Die automatische Beschriftung ist eine SchlĂŒsselfunktion von SAM und ermöglicht es den Nutzern, einen Segmentierungsdatensatz mit einem vorab trainierten Erkennungsmodell 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.

Erstelle deinen Segmentierungsdatensatz mithilfe eines Erkennungsmodells

Um deinen Datensatz mit dem Ultralytics Framework automatisch zu annotieren, verwende die auto_annotate Funktion wie unten dargestellt:

Beispiel

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolov8x.pt", sam_model="sam_b.pt")
Argument Typ Beschreibung Standard
Daten str Pfad zu einem Ordner mit Bildern, die mit Anmerkungen versehen werden sollen.
det_model str, optional VorgeprĂŒftes YOLO Erkennungsmodell. Die Voreinstellung ist 'yolov8x.pt'. 'yolov8x.pt'
sam_Modell str, optional Vortrainiertes SAM Segmentierungsmodell. Der Standardwert ist 'sam_b.pt'. 'sam_b.pt'
GerĂ€t str, optional GerĂ€t, auf dem die Modelle ausgefĂŒhrt werden sollen. Der Standardwert ist eine leere Zeichenkette (CPU oder GPU, falls verfĂŒgbar).
output_dir str, Keine, optional Verzeichnis zum Speichern der kommentierten Ergebnisse. StandardmĂ€ĂŸig wird der Ordner "labels" im selben Verzeichnis wie "data" gespeichert. Keine

Die auto_annotate Funktion erhĂ€lt den Pfad zu deinen Bildern und optionale Argumente, um die vortrainierten Erkennungs- und SAM Segmentierungsmodelle, das GerĂ€t, auf dem die Modelle ausgefĂŒhrt werden sollen, und das Ausgabeverzeichnis zum Speichern der kommentierten Ergebnisse anzugeben.

Die automatische Beschriftung mit vortrainierten Modellen kann den Zeit- und Arbeitsaufwand fĂŒr die Erstellung hochwertiger SegmentierungsdatensĂ€tze drastisch reduzieren. Diese Funktion ist besonders fĂŒr Forscher und Entwickler von Vorteil, 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 du SAM fĂŒr deine Forschungs- oder Entwicklungsarbeit nĂŒtzlich findest, solltest du 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 mit Bild- und Prompt-Encodern in Kombination mit einem leichtgewichtigen Maskendecoder, 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 seine Zero-Shot-Performance aus, d. h. es passt sich ohne Vorwissen an neue Bildverteilungen und Aufgaben an. Hier erfĂ€hrst du mehr.

Wie kann ich das Segment Anything Model (SAM) fĂŒr die Bildsegmentierung nutzen?

Du kannst das Segment Anything Model (SAM) fĂŒr die Bildsegmentierung verwenden, indem du Inferenzen mit verschiedenen Vorgaben wie Bounding Boxes oder Punkten durchfĂŒ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])

Alternativ kannst du Inferenz mit SAM in der Befehlszeilenschnittstelle (CLI) ausfĂŒhren:

yolo predict model=sam_b.pt source=path/to/image.jpg

AusfĂŒhrlichere Anweisungen zur Verwendung findest du im Abschnitt Segmentierung.

Wie schneiden SAM und YOLOv8 in Bezug auf die Leistung ab?

Im Vergleich zu YOLOv8 sind SAM Modelle wie SAM-b und FastSAM-s grĂ¶ĂŸer und langsamer, bieten aber einzigartige Möglichkeiten zur automatischen Segmentierung. Zum Beispiel ist Ultralytics YOLOv8n -seg 53,4 Mal kleiner und 866 Mal schneller als SAM-b. Die Leistung von SAM macht sie jedoch sehr flexibel und effizient bei verschiedenen, nicht trainierten Aufgaben. Mehr ĂŒber den Leistungsvergleich zwischen SAM und YOLOv8 erfĂ€hrst duhier.

Wie kann ich meinen Datensatz mit SAM automatisch annotieren?

Ultralytics SAM bietet eine Auto-Annotation-Funktion, die es ermöglicht, mit einem vorab trainierten Erkennungsmodell SegmentierungsdatensÀtze 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 nimmt den Pfad zu deinen Bildern und optionale Argumente fĂŒr die vorab trainierten Erkennungs- und SAM Segmentierungsmodelle sowie Angaben zum GerĂ€t und zum Ausgabeverzeichnis entgegen. Eine vollstĂ€ndige Anleitung findest du unter Auto-Annotation.

Welche DatensÀtze werden verwendet, um das Segment Anything Model (SAM) zu trainieren?

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 liefert und eine beeindruckende Leistung bei verschiedenen Segmentierungsaufgaben gewĂ€hrleistet. Weitere Informationen findest du im Abschnitt Datensatz.


Diese FAQ soll hÀufige Fragen im Zusammenhang mit dem Segment Anything Model (SAM) von Ultralytics beantworten, um das VerstÀndnis der Nutzer zu verbessern und die effektive Nutzung der Ultralytics Produkte zu erleichtern. Weitere Informationen findest du in den entsprechenden Abschnitten, die hier verlinkt sind.



Erstellt am 2023-11-12, Aktualisiert am 2024-07-18
Autoren: Laughing-q (1), glenn-jocher (15), Burhan-Q (1), ChaoningZhang (1)

Kommentare