Zum Inhalt springen

Fast Segment Anything Model (FastSAM)

Das Fast Segment Anything Model (FastSAM) ist eine neuartige CNN-basierte Echtzeitlösung fĂŒr die Segment Anything Aufgabe. Bei dieser Aufgabe geht es darum, jedes beliebige Objekt in einem Bild auf der Grundlage verschiedener möglicher Benutzerinteraktionsaufforderungen zu segmentieren. FastSAM reduziert den Rechenaufwand erheblich, ohne die Leistung zu beeintrĂ€chtigen, und ist damit eine praktische Wahl fĂŒr eine Vielzahl von Bildverarbeitungsaufgaben.



Pass auf: Objektverfolgung mit FastSAM mit Ultralytics

Modell Architektur

Fast Segment Anything Model (FastSAM) ArchitekturĂŒbersicht

Übersicht

FastSAM wurde entwickelt, um die Grenzen des Segment Anything Model (SAM) zu ĂŒberwinden, ein schweres Transformer-Modell mit erheblichem Bedarf an Rechenleistung. Das FastSAM entkoppelt die Segment Anything Aufgabe in zwei aufeinanderfolgende Phasen: die Segmentierung aller Instanzen und die prompt-gefĂŒhrte Auswahl. In der ersten Phase wird YOLOv8-seg verwendet, um die Segmentierungsmasken aller Instanzen im Bild zu erstellen. In der zweiten Phase wird die Region-of-Interest ausgegeben, die dem Prompt entspricht.

Hauptmerkmale

  1. Lösung in Echtzeit: Durch die Nutzung der Rechenleistung von CNNs bietet FastSAM eine Echtzeitlösung fĂŒr die Segmentierungsaufgabe, was sie fĂŒr industrielle Anwendungen, die schnelle Ergebnisse erfordern, wertvoll macht.

  2. Effizienz und Leistung: FastSAM bietet eine deutliche Verringerung der Rechen- und Ressourcenanforderungen, ohne die LeistungsqualitÀt zu beeintrÀchtigen. Es erreicht eine vergleichbare Leistung wie SAM , aber mit drastisch reduzierten Rechenressourcen, was Echtzeitanwendungen ermöglicht.

  3. Prompt-gefĂŒhrte Segmentierung: FastSAM kann jedes Objekt in einem Bild segmentieren, das von verschiedenen möglichen Benutzerinteraktionsaufforderungen geleitet wird, was FlexibilitĂ€t und AnpassungsfĂ€higkeit in verschiedenen Szenarien bietet.

  4. Basierend auf YOLOv8 -seg: FastSAM basiert auf YOLOv8-seg, einem Objektdetektor, der mit einem Instanzsegmentierungszweig ausgestattet ist. Dadurch kann er effektiv die Segmentierungsmasken aller Instanzen in einem Bild erstellen.

  5. KonkurrenzfÀhige Ergebnisse bei Benchmarks: Bei der Objektvorschlagsaufgabe auf MS COCO erreicht FastSAM hohe Punktzahlen mit einer deutlich höheren Geschwindigkeit als SAM als mit einem NVIDIA RTX 3090, was seine Effizienz und LeistungsfÀhigkeit unter Beweis stellt.

  6. Praktische Anwendungen: Der vorgeschlagene Ansatz bietet eine neue, praktische Lösung fĂŒr eine große Anzahl von Bildverarbeitungsaufgaben mit einer wirklich hohen Geschwindigkeit, d.h. zehn- oder hundertmal schneller als aktuelle Methoden.

  7. Machbarkeit der Modellkomprimierung: FastSAM demonstriert die Machbarkeit eines Weges, der den Rechenaufwand durch die EinfĂŒhrung einer kĂŒnstlichen Vorstufe zur Struktur erheblich reduzieren kann und damit neue Möglichkeiten fĂŒr große Modellarchitekturen fĂŒr allgemeine Sehaufgaben eröffnet.

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
FastSAM-s FastSAM-s.pt Instanz-Segmentierung ✅ ❌ ❌ ✅
FastSAM-x FastSAM-x.pt Instanz-Segmentierung ✅ ❌ ❌ ✅

Verwendungsbeispiele

Die FastSAM Modelle lassen sich leicht in deine Python Anwendungen integrieren. Ultralytics bietet eine benutzerfreundliche Python API und CLI Befehle, um die Entwicklung zu optimieren.

Nutzung vorhersagen

Um eine Objekterkennung in einem Bild durchzufĂŒhren, verwendest du die predict Methode wie unten gezeigt:

Beispiel

from ultralytics import FastSAM
from ultralytics.models.fastsam import FastSAMPrompt

# Define an inference source
source = "path/to/bus.jpg"

# Create a FastSAM model
model = FastSAM("FastSAM-s.pt")  # or FastSAM-x.pt

# Run inference on an image
everything_results = model(source, device="cpu", retina_masks=True, imgsz=1024, conf=0.4, iou=0.9)

# Prepare a Prompt Process object
prompt_process = FastSAMPrompt(source, everything_results, device="cpu")

# Everything prompt
results = prompt_process.everything_prompt()

# Bbox default shape [0,0,0,0] -> [x1,y1,x2,y2]
results = prompt_process.box_prompt(bbox=[200, 200, 300, 300])

# Text prompt
results = prompt_process.text_prompt(text="a photo of a dog")

# Point prompt
# points default [[0,0]] [[x1,y1],[x2,y2]]
# point_label default [0] [1,0] 0:background, 1:foreground
results = prompt_process.point_prompt(points=[[200, 200]], pointlabel=[1])
prompt_process.plot(annotations=results, output="./")
# Load a FastSAM model and segment everything with it
yolo segment predict model=FastSAM-s.pt source=path/to/bus.jpg imgsz=640

Dieser Ausschnitt zeigt, wie einfach es ist, ein trainiertes Modell zu laden und eine Vorhersage fĂŒr ein Bild zu machen.

Hinweis

Alle zurĂŒckgegebenen results in den obigen Beispielen sind Ergebnisse Objekt, das einen einfachen Zugriff auf vorhergesagte Masken und das Quellbild ermöglicht.

Val Verwendung

Die Validierung des Modells auf einem Datensatz kann wie folgt durchgefĂŒhrt werden:

Beispiel

from ultralytics import FastSAM

# Create a FastSAM model
model = FastSAM("FastSAM-s.pt")  # or FastSAM-x.pt

# Validate the model
results = model.val(data="coco8-seg.yaml")
# Load a FastSAM model and validate it on the COCO8 example dataset at image size 640
yolo segment val model=FastSAM-s.pt data=coco8.yaml imgsz=640

Bitte beachte, dass FastSAM nur die Erkennung und Segmentierung einer einzigen Klasse von Objekten unterstĂŒtzt. Das heißt, es erkennt und segmentiert alle Objekte als dieselbe Klasse. Deshalb musst du bei der Vorbereitung des Datensatzes alle Objektkategorie-IDs in 0 umwandeln.

Verwendung verfolgen

Um eine Objektverfolgung auf einem Bild durchzufĂŒhren, verwendest du die track Methode wie unten gezeigt:

Beispiel

from ultralytics import FastSAM

# Create a FastSAM model
model = FastSAM("FastSAM-s.pt")  # or FastSAM-x.pt

# Track with a FastSAM model on a video
results = model.track(source="path/to/video.mp4", imgsz=640)
yolo segment track model=FastSAM-s.pt source="path/to/video/file.mp4" imgsz=640

FastSAM offizielle Verwendung

FastSAM ist auch direkt ĂŒber das https://github.com/CASIA-IVA-Lab/FastSAM Repository erhĂ€ltlich. Hier ist ein kurzer Überblick ĂŒber die typischen Schritte, die du unternehmen kannst, um FastSAM zu nutzen:

Installation

  1. Klone das Repository FastSAM :

    git clone https://github.com/CASIA-IVA-Lab/FastSAM.git
    
  2. Erstelle und aktiviere eine Conda-Umgebung mit Python 3.9:

    conda create -n FastSAM python=3.9
    conda activate FastSAM
    
  3. Navigiere zu dem geklonten Repository und installiere die benötigten Pakete:

    cd FastSAM
    pip install -r requirements.txt
    
  4. Installiere das CLIP-Modell:

    pip install git+https://github.com/ultralytics/CLIP.git
    

Beispiel Verwendung

  1. Lade einen ModellprĂŒfpunkt herunter.

  2. Verwende FastSAM fĂŒr Schlussfolgerungen. Beispielbefehle:

    • Segmentiere alles in einem Bild:

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg
      
    • Segmentiere bestimmte Objekte mit Hilfe von Textaufforderungen:

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --text_prompt "the yellow dog"
      
    • Segmentiere Objekte innerhalb einer Bounding Box (gib die Koordinaten der Box im xywh-Format an):

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --box_prompt "[570,200,230,400]"
      
    • Segmentiere Objekte in der NĂ€he bestimmter Punkte:

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --point_prompt "[[520,360],[620,300]]" --point_label "[1,0]"
      

Außerdem kannst du FastSAM in einer Colab-Demo oder auf der HuggingFace Web-Demo ausprobieren, um eine visuelle Erfahrung zu machen.

Zitate und Danksagungen

Wir möchten den Autoren von FastSAM fĂŒr ihre bedeutenden BeitrĂ€ge auf dem Gebiet der Echtzeit-Instanzsegmentierung danken:

@misc{zhao2023fast,
      title={Fast Segment Anything},
      author={Xu Zhao and Wenchao Ding and Yongqi An and Yinglong Du and Tao Yu and Min Li and Ming Tang and Jinqiao Wang},
      year={2023},
      eprint={2306.12156},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

Die Originalarbeit FastSAM ist auf arXiv zu finden. Die Autoren haben ihre Arbeit öffentlich zugĂ€nglich gemacht, und die Codebasis kann auf GitHub eingesehen werden. Wir schĂ€tzen ihre BemĂŒhungen, das Feld voranzubringen und ihre Arbeit einer breiteren Gemeinschaft zugĂ€nglich zu machen.

FAQ

Was ist FastSAM und wie unterscheidet es sich von SAM?

FastSAM(Fast Segment Anything Model) ist eine Echtzeitlösung auf Basis eines Faltungsneuronalen Netzes (CNN), die den Rechenaufwand reduziert und gleichzeitig eine hohe Leistung bei der Segmentierung von Objekten gewĂ€hrleistet. Im Gegensatz zum Segment Anything Model (SAM), das eine schwerere, auf Transformer basierende Architektur verwendet, nutzt FastSAM Ultralytics YOLOv8 -seg fĂŒr eine effiziente Instanzsegmentierung in zwei Stufen: All-Instance-Segmentierung gefolgt von einer prompt-guided selection.

Wie erreicht FastSAM eine Segmentierungsleistung in Echtzeit?

FastSAM erreicht eine Segmentierung in Echtzeit, indem es die Segmentierungsaufgabe in eine All-Instance-Segmentierung mit YOLOv8-seg und prompt-gefĂŒhrten Auswahlschritten entkoppelt. Durch die Nutzung der Recheneffizienz von CNNs bietet FastSAM eine erhebliche Reduzierung des Rechen- und Ressourcenbedarfs bei gleichzeitig konkurrenzfĂ€higer Leistung. Dieser zweistufige Ansatz ermöglicht FastSAM eine schnelle und effiziente Segmentierung fĂŒr Anwendungen, die schnelle Ergebnisse erfordern.

Was sind die praktischen Anwendungen von FastSAM?

FastSAM ist fĂŒr eine Vielzahl von Computer-Vision-Aufgaben geeignet, die eine Segmentierungsleistung in Echtzeit erfordern. Zu den Anwendungen gehören:

  • Industrielle Automatisierung fĂŒr QualitĂ€tskontrolle und -sicherung
  • Videoanalyse in Echtzeit fĂŒr Sicherheit und Überwachung
  • Autonome Fahrzeuge zur Objekterkennung und -segmentierung
  • Medizinische Bildgebung fĂŒr prĂ€zise und schnelle Segmentierungsaufgaben

Die FĂ€higkeit, mit verschiedenen Benutzerinteraktionsaufforderungen umzugehen, macht FastSAM anpassungsfĂ€hig und flexibel fĂŒr verschiedene Szenarien.

Wie verwende ich das FastSAM Modell fĂŒr Inferenzen in Python?

Um FastSAM fĂŒr Schlussfolgerungen in Python zu verwenden, kannst du dem folgenden Beispiel folgen:

from ultralytics import FastSAM
from ultralytics.models.fastsam import FastSAMPrompt

# Define an inference source
source = "path/to/bus.jpg"

# Create a FastSAM model
model = FastSAM("FastSAM-s.pt")  # or FastSAM-x.pt

# Run inference on an image
everything_results = model(source, device="cpu", retina_masks=True, imgsz=1024, conf=0.4, iou=0.9)

# Prepare a Prompt Process object
prompt_process = FastSAMPrompt(source, everything_results, device="cpu")

# Everything prompt
ann = prompt_process.everything_prompt()

# Bounding box prompt
ann = prompt_process.box_prompt(bbox=[200, 200, 300, 300])

# Text prompt
ann = prompt_process.text_prompt(text="a photo of a dog")

# Point prompt
ann = prompt_process.point_prompt(points=[[200, 200]], pointlabel=[1])
prompt_process.plot(annotations=ann, output="./")

Weitere Einzelheiten zu den Schlussfolgerungsmethoden findest du im Abschnitt Verwendung vorhersagen in der Dokumentation.

Welche Arten von Prompts unterstĂŒtzt FastSAM fĂŒr Segmentierungsaufgaben?

FastSAM unterstĂŒtzt mehrere Aufforderungstypen zur Steuerung der Segmentierungsaufgaben:

  • Alles Aufforderung: Erzeugt eine Segmentierung fĂŒr alle sichtbaren Objekte.
  • Bounding Box (BBox) Aufforderung: Segmentiert Objekte innerhalb eines bestimmten Begrenzungsrahmens.
  • Textaufforderung: Verwendet einen beschreibenden Text, um Objekte zu segmentieren, die der Beschreibung entsprechen.
  • Punktaufforderung: Segmentiert Objekte in der NĂ€he bestimmter benutzerdefinierter Punkte.

Dank dieser FlexibilitĂ€t kann FastSAM an eine Vielzahl von Benutzerinteraktionsszenarien angepasst werden, was den Nutzen fĂŒr verschiedene Anwendungen erhöht. Weitere Informationen zur Verwendung dieser Prompts findest du im Abschnitt Hauptfunktionen.



Erstellt am 2023-11-12, Aktualisiert am 2024-07-18
Autoren: Laughing-q (2), glenn-jocher (13), RizwanMunawar (2), berry-ding (1)

Kommentare