Zum Inhalt springen

Fast Segment Anything Model (FastSAM)

Das Fast Segment Anything Model (FastSAM) ist eine neuartige, echtzeitfähige CNN-basierte Lösung für die Segment Anything Aufgabe. Diese Aufgabe wurde entwickelt, um jedes beliebige Objekt in einem Bild auf der Grundlage verschiedener möglicher Benutzerinteraktionsaufforderungen zu segmentieren. FastSAM reduziert den Rechenaufwand erheblich, während die Leistung konkurrenzfähig bleibt, was es zu einer praktischen Wahl für eine Vielzahl von Bildverarbeitungsaufgaben macht.



Beobachten: Objektverfolgung mit FastSAM mit Ultralytics

Modell der Architektur

Überblick über die Architektur des Fast Segment Anything Model (FastSAM)

Übersicht

FastSAM wurde entwickelt, um die Beschränkungen des Segment Anything Model (SAM) zu überwinden, ein schweres Transformer-Modell mit erheblichen Anforderungen an die Rechenleistung. Das FastSAM entkoppelt die Segment Anything Aufgabe in zwei aufeinanderfolgende Phasen:All-Instance-Segmentierung und 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.

Wesentliche Merkmale

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

  2. Effizienz und Leistung: FastSAM bietet eine erhebliche Reduzierung der Rechen- und Ressourcenanforderungen ohne Kompromisse bei der Leistungsqualität. Es erreicht eine vergleichbare Leistung wie SAM , aber mit drastisch reduzierten Rechenressourcen, was Echtzeitanwendungen ermöglicht.

  3. Prompt-geführte Segmentierung: FastSAM kann jedes beliebige Objekt innerhalb eines Bildes 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 auf einem einzelnen 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

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

Beispiele für die Verwendung

Die FastSAM Modelle sind einfach in Ihre Python Anwendungen zu integrieren. Ultralytics bietet eine benutzerfreundliche Python API und CLI Befehle, um die Entwicklung zu rationalisieren.

Nutzung vorhersagen

Zur Durchführung Objekterkennung auf einem Bild, verwenden Sie die predict Methode wie unten gezeigt:

Beispiel

from ultralytics import FastSAM

# 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)

# Run inference with bboxes prompt
results = model(source, bboxes=[439, 437, 524, 709])

# Run inference with points prompt
results = model(source, points=[[200, 200]], labels=[1])

# Run inference with texts prompt
results = model(source, texts="a photo of a dog")

# Run inference with bboxes and points and texts prompt at the same time
results = model(source, bboxes=[439, 437, 524, 709], points=[[200, 200]], labels=[1], texts="a photo of a dog")
# 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 vorab trainiertes Modell zu laden und eine Vorhersage für ein Bild durchzuführen.

FastSAMPredictor-Beispiel

Auf diese Weise können Sie eine Inferenz für ein Bild durchführen und alle Segmente erhalten results einmal und führen Sie die Inferenz mehrfach aus, ohne die Inferenz mehrfach auszuführen.

from ultralytics.models.fastsam import FastSAMPredictor

# Create FastSAMPredictor
overrides = dict(conf=0.25, task="segment", mode="predict", model="FastSAM-s.pt", save=False, imgsz=1024)
predictor = FastSAMPredictor(overrides=overrides)

# Segment everything
everything_results = predictor("ultralytics/assets/bus.jpg")

# Prompt inference
bbox_results = predictor.prompt(everything_results, bboxes=[[200, 200, 300, 300]])
point_results = predictor.prompt(everything_results, points=[200, 200])
text_results = predictor.prompt(everything_results, texts="a photo of a dog")

Hinweis

Alle zurückgesandten results in den obigen Beispielen sind Ergebnisse Objekt, das einen einfachen Zugriff auf vorausgesagte Masken und das Quellbild ermöglicht.

Val-Verwendung

Die Validierung des Modells anhand eines Datensatzes kann wie folgt erfolgen:

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 beachten Sie, dass FastSAM nur die Erkennung und Segmentierung einer einzigen Objektklasse unterstützt. Das bedeutet, dass es alle Objekte als dieselbe Klasse erkennt und segmentiert. Daher müssen Sie bei der Vorbereitung des Datensatzes alle Objektkategorie-IDs in 0 umwandeln.

Verwendung der Spur

Um eine Objektverfolgung auf einem Bild durchzuführen, verwenden Sie 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 verfügbar. Im Folgenden finden Sie einen kurzen Überblick über die typischen Schritte, die Sie zur Verwendung von FastSAM durchführen können:

Einrichtung

  1. Klonen Sie das Repository FastSAM :

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

    conda create -n FastSAM python=3.9
    conda activate FastSAM
    
  3. Navigieren Sie zu dem geklonten Repository und installieren Sie die erforderlichen Pakete:

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

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

Beispiel für die Verwendung

  1. Laden Sie einen Modellprüfpunkt herunter.

  2. Verwenden Sie FastSAM für Inferenzen. Beispielbefehle:

    • Segmentieren Sie alles in einem Bild:

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

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --text_prompt "the yellow dog"
      
    • Segmentieren Sie Objekte innerhalb eines Begrenzungsrahmens (geben Sie die Koordinaten des Rahmens im xywh-Format an):

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --box_prompt "[570,200,230,400]"
      
    • Segmentieren Sie 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 können Sie FastSAM über eine Colab-Demo oder die Web-DemoHuggingFace ausprobieren, um ein visuelles Erlebnis zu erhalten.

Zitate und Danksagungen

Wir möchten den Autoren von FastSAM für ihre bedeutenden Beiträge auf dem Gebiet der Echtzeit-Segmentierung von Instanzen unseren Dank aussprechen:

@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 kann auf arXiv gefunden werden. Die Autoren haben ihre Arbeit öffentlich zugänglich gemacht, und die Codebasis kann auf GitHub abgerufen 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, kurz für Fast Segment Anything Model, ist eine auf einem Faltungsneuronalen Netzwerk (CNN) basierende Echtzeitlösung, die den Rechenaufwand reduziert und gleichzeitig eine hohe Leistung bei Objektsegmentierungsaufgaben bietet. 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 Echtzeit-Segmentierung durch Entkopplung der Segmentierungsaufgabe in eine All-Instance-Segmentierung mit YOLOv8-seg und prompt-geführten Auswahlstufen. Durch die Nutzung der Recheneffizienz von CNNs bietet FastSAM eine erhebliche Reduzierung der Rechen- und Ressourcenanforderungen bei gleichzeitiger Beibehaltung einer wettbewerbsfähigen Leistung. Dieser zweistufige Ansatz ermöglicht es FastSAM , eine schnelle und effiziente Segmentierung zu liefern, die für Anwendungen geeignet ist, 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. Die Anwendungen umfassen:

  • Industrielle Automatisierung für Qualitätskontrolle und -sicherung
  • Videoanalyse in Echtzeit für Sicherheit und Überwachung
  • Autonome Fahrzeuge zur Erkennung und Segmentierung von Objekten
  • 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 Modell FastSAM für die Inferenz in Python?

Um FastSAM für die Inferenz in Python zu verwenden, können Sie dem folgenden Beispiel folgen:

from ultralytics import FastSAM

# 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)

# Run inference with bboxes prompt
results = model(source, bboxes=[439, 437, 524, 709])

# Run inference with points prompt
results = model(source, points=[[200, 200]], labels=[1])

# Run inference with texts prompt
results = model(source, texts="a photo of a dog")

# Run inference with bboxes and points and texts prompt at the same time
results = model(source, bboxes=[439, 437, 524, 709], points=[[200, 200]], labels=[1], texts="a photo of a dog")

Weitere Einzelheiten zu den Inferenzmethoden finden Sie im Abschnitt Verwendung vorhersagen in der Dokumentation.

Welche Arten von Eingabeaufforderungen werden von FastSAM für Segmentierungsaufgaben unterstützt?

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 angegebenen Begrenzungsrahmens.
  • Textaufforderung: Verwendet einen beschreibenden Text, um Objekte zu segmentieren, die der Beschreibung entsprechen.
  • Punkt Aufforderung: Segmentiert Objekte in der Nähe bestimmter benutzerdefinierter Punkte.

Dank dieser Flexibilität kann FastSAM an eine Vielzahl von Benutzerinteraktionsszenarien angepasst werden, was seinen Nutzen für verschiedene Anwendungen erhöht. Weitere Informationen zur Verwendung dieser Prompts finden Sie im Abschnitt Hauptfunktionen.

📅 Erstellt vor 1 Jahr ✏️ Aktualisiert vor 2 Monaten

Kommentare