segment anything

So verwenden Sie das Segment Anything-Modell (SAM)

Stefan
8 Min Read
segment anything

Entdecken Sie in diesem umfassenden Tutorial das Potenzial von Meta AIs Segment Anything Model (SAM) . Wir tauchen ein in SAM, ein effizientes und reaktionsfähiges Modell zur Bildsegmentierung. Mit über 1 Milliarde Masken auf 11 Millionen lizenzierten und datenschutzkonformen Bildern ist die Zero-Shot-Leistung von SAM oft konkurrenzfähig mit früheren vollständig überwachten Ergebnissen oder diesen sogar überlegen. Weitere Informationen zur Funktionsweise von SAM und zur Modellarchitektur finden Sie in unserem technischen SAM-Deep Dive .

In diesem schriftlichen Tutorial (und dem Video unten) werden wir untersuchen, wie man mit SAM automatisch Masken generiert, Segmentierungsmasken mithilfe von Begrenzungsrahmen erstellt und Objekterkennungsdatensätze in Segmentierungsmasken umwandelt. Wenn Sie SAM zum Beschriften von Daten für die Computervision verwenden möchten, können Sie Roboflow Annotate kostenlos ausprobieren, das SAM zur automatischen Polygonbeschriftung im Browser verwendet .

Was ist Segment Anything?

Segment Anything (SAM) ist ein von Meta AI entwickeltes Bildsegmentierungsmodell. Dieses Modell kann die genaue Position entweder bestimmter Objekte in einem Bild oder aller Objekte in einem Bild identifizieren. SAM wurde im April 2023 veröffentlicht. SAM ist Open Source und wird unter einer Apache 2.0-Lizenz veröffentlicht.

Hintergrund: Objekterkennung vs. Segmentierung

Bei Objekterkennungsaufgaben werden Objekte durch Begrenzungsrahmen dargestellt, die so aussehen, als ob man ein Rechteck um das Objekt zeichnet. Diese Rechtecke geben eine allgemeine Vorstellung von der Position des Objekts, zeigen aber nicht die genaue Form des Objekts. Sie können auch Teile des Hintergrunds oder andere Objekte innerhalb des Rechtecks ​​enthalten, wodurch es schwierig wird, Objekte von ihrer Umgebung zu unterscheiden.

Segmentierungsmasken hingegen sind wie das Zeichnen eines detaillierten Umrisses um das Objekt herum, der seiner genauen Form folgt. Dies ermöglicht ein genaueres Verständnis der Form, Größe und Position des Objekts.

Um Segment Anything auf einem lokalen Computer zu verwenden, befolgen wir diese Schritte:

  1. Einrichten einer Python-Umgebung
  2. Laden Sie das Segment Anything Model (SAM)
  3. Masken automatisch generieren mit SAM
  4. Mit Supervision Masken auf ein Bild zeichnen
  5. Generieren Sie Begrenzungsrahmen aus den SAM-Ergebnissen

Einrichten Ihrer Python-Umgebung

Öffnen Sie zunächst das Roboflow-Notebook in Google Colab und stellen Sie sicher, dass Sie für eine schnellere Verarbeitung Zugriff auf eine GPU haben. Installieren Sie als Nächstes die erforderlichen Projektabhängigkeiten und laden Sie die erforderlichen Dateien herunter, einschließlich SAM-Gewichte.

Laden des Segment Anything-Modells

Sobald Ihre Umgebung eingerichtet ist, laden Sie das SAM-Modell in den Speicher. Da mehrere Modi für die Inferenz verfügbar sind, können Sie das Modell verwenden, um Masken auf verschiedene Weise zu generieren. Wir werden die automatische Maskengenerierung, die Generierung von Segmentierungsmasken mit Begrenzungsrahmen und die Konvertierung von Objekterkennungsdatensätzen in Segmentierungsmasken untersuchen.

Das SAM-Modell kann mit 3 verschiedenen Encodern geladen werden: ViT-B, ViT-L und ViT-H. ViT-H ist wesentlich besser als ViT-B, hat aber nur geringe Vorteile gegenüber ViT-L. Diese Encoder haben unterschiedliche Parameterzahlen, wobei ViT-B 91M, ViT-L 308M und ViT-H 636M Parameter hat. Dieser Größenunterschied beeinflusst auch die Geschwindigkeit der Inferenz, also berücksichtigen Sie dies bei der Auswahl des Encoders für Ihren spezifischen Anwendungsfall.

Automatisierte Maskengenerierung (Instanzsegmentierung) mit SAM

Um Masken automatisch zu generieren, verwenden Sie das SamAutomaticMaskGenerator. Dieses Dienstprogramm generiert eine Liste von Wörterbüchern, die einzelne Segmentierungen beschreiben. Jedes dictin der Ergebnisliste hat das folgende Format:

  • segmentation- [np.ndarray]- die Maske mit (W, H)Form und boolTyp, wobei Wund Hdie Breite bzw. Höhe des Originalbildes sind
  • area- [int]- die Fläche der Maske in Pixeln
  • bbox- [List[int]]- die Boundary-Box-Erkennung im xywhFormat
  • predicted_iou- [float]- die vom Modell selbst ermittelte Qualität der Maske
  • point_coords- [List[List[float]]]- der abgetastete Eingabepunkt, der diese Maske generiert hat
  • stability_score- [float]- ein zusätzliches Maß für die Maskenqualität
  • crop_box- List[int]- der Ausschnitt des Bildes, der zur Generierung dieser Maske verwendet wurde, im xywhFormat

Um den untenstehenden Code auszuführen, benötigen Sie Bilder. Sie können Ihre eigenen verwenden, sie programmgesteuert von Roboflow abrufen oder einen der über 200.000 Datensätze herunterladen, die auf Roboflow Universe verfügbar sind .

Das Supervisionspaket (ab Version 0.5.0) bietet native Unterstützung für SAM und erleichtert so das Kommentieren von Segmentierungen in einem Bild.

Segmentierungsmaske mit Begrenzungsrahmen generieren

Nachdem Sie nun wissen, wie Sie eine Maske für alle Objekte in einem Bild generieren, sehen wir uns an, wie Sie mithilfe eines Begrenzungsrahmens SAM auf einen bestimmten Teil Ihres Bildes fokussieren können.

Um Masken zu extrahieren, die sich auf bestimmte Bereiche eines Bildes beziehen, importieren Sie SamPredictorund übergeben Sie Ihren Begrenzungsrahmen durch die predictMethode des Maskenprädiktors. Beachten Sie, dass der Maskenprädiktor ein anderes Ausgabeformat hat als der automatische Maskengenerator. Das Begrenzungsrahmenformat für das SAM-Modell sollte die Form haben [x_min, y_min, x_max, y_max] np.array.

Konvertieren Sie Objekterkennungsdatensätze in Segmentierungsmasken

Um Begrenzungsrahmen in Ihrem Objekterkennungsdatensatz in Segmentierungsmasken umzuwandeln, laden Sie den Datensatz im COCO-Format herunter und laden Sie Anmerkungen in den Speicher.

Wenn Sie keinen Datensatz in diesem Format haben, ist Roboflow Universe der ideale Ort, um einen zu finden und herunterzuladen. Jetzt können Sie das SAM-Modell verwenden, um Segmentierungsmasken für jeden Begrenzungsrahmen zu generieren. Gehen Sie zum Google Colab , wo Sie den Code zur Konvertierung vom Begrenzungsrahmen in die Segmentierung finden.

Segment Anything im großen Maßstab bereitstellen

Sie können Segment Anything (SAM) mit Roboflow Inference in großem Maßstab auf Ihrer eigenen Hardware ausführen. Roboflow Inference ist ein Inferenzserver, über den Sie fein abgestimmte Modelle (z. B. YOLOv5 und YOLOv8) sowie Basismodelle wie SAM und CLIP ausführen können.

Erfahren Sie, wie Sie mit der Schnellstartanleitung „Inference Segment Anything“ beginnen.

Abschluss

Das Segment Anything-Modell bietet eine leistungsstarke und vielseitige Lösung für die Objektsegmentierung in Bildern und ermöglicht es Ihnen, Ihre Datensätze mit Segmentierungsmasken zu verbessern.

Mit seiner hohen Verarbeitungsgeschwindigkeit und den verschiedenen Inferenzmodi ist SAM ein wertvolles Werkzeug für Computer Vision-Anwendungen. Um die Beschriftung Ihrer Daten mit SAM zu erleben, können Sie Roboflow Annotate verwenden, das ein automatisiertes Polygon-Annotationstool namens Smart Polygon bietet , das von SAM unterstützt wird.

Erfahren Sie mehr über SAM

  • Was ist das Segment Anything Model (SAM)?
  • Anwendungsfälle für Segment Anything
  • Beschriften Sie Daten mit Segment Anything in Roboflow
  • So verwenden Sie Ultralytics YOLOv8 mit SAM

Zitieren Sie diesen Beitrag

Verwenden Sie den folgenden Eintrag, um diesen Beitrag bei Ihrer Recherche zu zitieren:

Piotr Skalski . (22. Januar 2024). So verwenden Sie das Segment Anything Model (SAM). Roboflow-Blog: https://blog.roboflow.com/how-to-use-segment-anything-model-sam/

Besprechen Sie diesen Beitrag

Wenn Sie Fragen zu diesem Blogbeitrag haben, starten Sie eine Diskussion im Roboflow-Forum .