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. Diese Aufgabe dient dazu, jedes Objekt innerhalb eines Bildes basierend auf verschiedenen möglichen Benutzerinteraktions-Prompts zu segmentieren. FastSAM reduziert den Rechenaufwand erheblich und behält gleichzeitig eine wettbewerbsfähige Leistung bei, was es zu einer praktischen Wahl für eine Vielzahl von Bildverarbeitungsaufgaben macht.



Ansehen: Objektverfolgung mit FastSAM und Ultralytics

Modellarchitektur

Architekturübersicht des Fast Segment Anything Model (FastSAM)

Überblick

FastSAM wurde entwickelt, um die Einschränkungen des Segment Anything Model (SAM) zu beheben, einem umfangreichen Transformer-Modell mit erheblichem Bedarf an Rechenressourcen. FastSAM entkoppelt die Segment-Anything-Aufgabe in zwei aufeinanderfolgende Phasen: All-Instanzsegmentierung und Prompt-gesteuerte Auswahl. Die erste Phase verwendet YOLOv8-seg, um die Segmentierungsmasken aller Instanzen im Bild zu erzeugen. In der zweiten Phase gibt sie die Region von Interesse aus, die dem Prompt entspricht.

Hauptmerkmale

  1. Echtzeitlösung: Durch die Nutzung der Recheneffizienz von CNNs bietet FastSAM eine Echtzeitlösung für die Segment-Anything-Aufgabe und ist somit wertvoll für industrielle Anwendungen, die schnelle Ergebnisse erfordern.

  2. Effizienz und Leistung: FastSAM bietet eine deutliche Reduzierung des Rechen- und Ressourcenbedarfs, ohne die Leistungsqualität zu beeinträchtigen. Es erzielt eine vergleichbare Leistung wie SAM, jedoch mit drastisch reduziertem Rechenaufwand, was Echtzeitanwendungen ermöglicht.

  3. Prompt-gesteuerte Segmentierung: FastSAM kann jedes Objekt innerhalb eines Bildes segmentieren, das durch verschiedene mögliche Benutzerinteraktions-Prompts gesteuert wird, was Flexibilität und Anpassungsfähigkeit in verschiedenen Szenarien bietet.

  4. Basiert 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 erzeugen.

  5. Wettbewerbsfähige Ergebnisse bei Benchmarks: Bei der Objekterkennungsaufgabe auf MS COCO erzielt FastSAM hohe Punktzahlen bei einer deutlich höheren Geschwindigkeit als SAM auf einer einzelnen NVIDIA RTX 3090, was seine Effizienz und Leistungsfähigkeit demonstriert.

  6. Praktische Anwendungen: Der vorgeschlagene Ansatz bietet eine neue, praktische Lösung für eine große Anzahl von Bildverarbeitungsaufgaben mit einer sehr hohen Geschwindigkeit, die um ein Vielfaches höher ist als bei aktuellen Methoden.

  7. Machbarkeit der Modellkomprimierung: FastSAM demonstriert die Machbarkeit eines Pfades, der den Rechenaufwand durch die Einführung einer künstlichen Priorität in die Struktur erheblich reduzieren kann, wodurch sich neue Möglichkeiten für große Modellarchitekturen für allgemeine Bildverarbeitungsaufgaben eröffnen.

Verfügbare Modelle, unterstützte Aufgaben und Betriebsmodi

Diese Tabelle zeigt die verfügbaren Modelle mit ihren spezifischen vortrainierten Gewichten, die von ihnen unterstützten Aufgaben und ihre Kompatibilität mit verschiedenen Betriebsmodi wie Inferenz, Validierung, Training und Export, die durch ✅-Emojis für unterstützte Modi und ❌-Emojis für nicht unterstützte Modi gekennzeichnet sind.

Modelltyp Vortrainierte Gewichte Unterstützte Aufgaben Inferenz Validierung Training Export
FastSAM-s FastSAM-s.pt Instanzsegmentierung
FastSAM-x FastSAM-x.pt Instanzsegmentierung

FastSAM Vergleich vs YOLO

Hier vergleichen wir die SAM2-Modelle von Meta, einschließlich der kleinsten SAM2-t-Variante, mit dem kleinsten Segmentierungsmodell von Ultralytics, YOLO11n-seg:

Modell Größe
(MB)
Parameter
(M)
Geschwindigkeit (CPU)
(ms/Bild)
Meta SAM-b 375 93.7 49401
Meta SAM2-b 162 80.8 31901
Meta SAM2-t 78.1 38.9 25997
MobileSAM 40.7 10.1 25381
FastSAM-s mit YOLOv8 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 demonstriert die erheblichen Unterschiede in Modellgrößen und -geschwindigkeiten zwischen SAM-Varianten und YOLO-Segmentierungsmodellen. Während SAM einzigartige automatische Segmentierungsfunktionen bietet, sind YOLO-Modelle, insbesondere YOLOv8n-seg und YOLO11n-seg, deutlich kleiner, schneller und recheneffizienter.

Tests, die auf einem 2025 Apple M4 Pro mit 24 GB RAM laufen, verwenden torch==2.6.0 und ultralytics==8.3.90. So reproduzieren Sie diesen Test:

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)

Anwendungsbeispiele

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

Vorhersageanwendung

Um eine Objekterkennung durchzuführen auf einem Bild die predict Methode, wie unten gezeigt, verwenden:

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 Codeausschnitt demonstriert, wie einfach es ist, ein vortrainiertes Modell zu laden und eine Vorhersage auf einem Bild auszuführen.

FastSAMPredictor Beispiel

Auf diese Weise können Sie Inferenz auf einem Bild ausführen und das gesamte Segment erhalten results einmalig und Prompt-Inferenz mehrmals ausführen, ohne die Inferenz mehrmals 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ückgegebenen results in den obigen Beispielen sind Ergebnisse Objekte, die einen einfachen Zugriff auf vorhergesagte Masken und Quellbilder ermöglichen.

Val-Anwendung

Die Validierung des Modells auf einem Datensatz 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 einzelnen Objektklasse unterstützt. Das bedeutet, dass alle Objekte als dieselbe Klasse erkannt und segmentiert werden. Daher müssen Sie bei der Vorbereitung des Datensatzes alle Objektkategorie-IDs in 0 konvertieren.

Tracking-Anwendung

Um Objektverfolgung auf einem Bild durchzuführen, verwenden Sie die track Methode, wie unten gezeigt, verwenden:

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.mp4" imgsz=640

Offizielle FastSAM-Nutzung

FastSAM ist auch direkt über das https://github.com/CASIA-IVA-Lab/FastSAM Repository verfügbar. Hier ist ein kurzer Überblick über die typischen Schritte, die Sie zur Verwendung von FastSAM ausführen können:

Installation

  1. Klonen Sie das FastSAM-Repository:

    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 zum 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
    

Beispielhafte Nutzung

  1. Laden Sie einen Modell-Checkpoint herunter.

  2. Verwenden Sie FastSAM für die Inferenz. Beispielbefehle:

    • Segmentieren Sie alles in einem Bild:

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg
      
    • Segmentieren Sie bestimmte Objekte mithilfe einer Textaufforderung:

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --text_prompt "the yellow dog"
      
    • Segmentieren Sie Objekte innerhalb einer Bounding Box (geben Sie die Box-Koordinaten 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]"
      

Zusätzlich können Sie FastSAM über die CASIA-IVA-Lab Colab Demo ausprobieren.

Zitate und Danksagungen

Wir möchten die FastSAM-Autoren für ihre bedeutenden Beiträge im Bereich der Echtzeit-Instanzsegmentierung würdigen:

@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}
}

Das Original FastSAM Paper ist auf arXiv zu finden. Die Autoren haben ihre Arbeit öffentlich zugänglich gemacht, und der Code ist auf GitHub verfügbar. Wir schätzen ihre Bemühungen, das Gebiet voranzutreiben und ihre Arbeit der 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 Convolutional Neural Network (CNN) basierende Echtzeitlösung, die entwickelt wurde, um den Rechenaufwand zu reduzieren und gleichzeitig eine hohe Leistung bei Objeksegmentierungsaufgaben zu gewährleisten. Im Gegensatz zum Segment Anything Model (SAM), das eine schwerere Transformer-basierte Architektur verwendet, nutzt FastSAM Ultralytics YOLOv8-seg für eine effiziente Instanzsegmentierung in zwei Schritten: All-Instanzsegmentierung, gefolgt von einer Prompt-gesteuerten Auswahl.

Wie erreicht FastSAM eine Echtzeit-Segmentierungsleistung?

FastSAM erreicht Echtzeit-Segmentierung, indem es die Segmentierungsaufgabe in All-Instanzsegmentierung mit YOLOv8-seg und Prompt-gesteuerte Auswahlphasen entkoppelt. Durch die Nutzung der Recheneffizienz von CNNs bietet FastSAM erhebliche Reduzierungen des Rechen- und Ressourcenbedarfs bei gleichzeitiger Aufrechterhaltung 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.

Welche praktischen Anwendungen gibt es für FastSAM?

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

  • Industrielle Automatisierung für Qualitätskontrolle und -sicherung
  • Echtzeit-Videoanalyse für Sicherheit und Überwachung
  • Autonome Fahrzeuge für Objekterkennung und -segmentierung
  • Medizinische Bildgebung für präzise und schnelle Segmentierungsaufgaben

Seine Fähigkeit, verschiedene Benutzerinteraktions-Prompts zu verarbeiten, macht FastSAM anpassungsfähig und flexibel für verschiedene Szenarien.

Wie verwende ich das FastSAM-Modell 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 Informationen zu den Inferenzmethoden finden Sie im Abschnitt Predict Usage der Dokumentation.

Welche Arten von Prompts unterstützt FastSAM für Segmentierungsaufgaben?

FastSAM unterstützt verschiedene Prompt-Typen zur Steuerung der Segmentierungsaufgaben:

  • Everything Prompt: Generiert eine Segmentierung für alle sichtbaren Objekte.
  • Bounding Box (BBox) Prompt: Segmentiert Objekte innerhalb eines bestimmten Bounding Box.
  • Text Prompt: Verwendet einen beschreibenden Text, um Objekte zu segmentieren, die der Beschreibung entsprechen.
  • Point Prompt: Segmentiert Objekte in der Nähe von bestimmten benutzerdefinierten Punkten.

Diese Flexibilität ermöglicht es FastSAM, sich an eine Vielzahl von Benutzerinteraktionsszenarien anzupassen, was seinen Nutzen in verschiedenen Anwendungen erhöht. Weitere Informationen zur Verwendung dieser Prompts finden Sie im Abschnitt Key Features.



📅 Erstellt vor 1 Jahr ✏️ Aktualisiert vor 2 Monaten

Kommentare