Fast Segment Anything Model (FastSAM)

Das Fast Segment Anything Model (FastSAM) ist eine neuartige, auf CNNs basierende Echtzeit-Lösung für die Segment-Anything-Aufgabe. Diese Aufgabe wurde entwickelt, um jedes Objekt innerhalb eines Bildes basierend auf verschiedenen möglichen Benutzerinteraktions-Prompts zu segmentieren. FastSAM reduziert den Rechenaufwand erheblich bei gleichzeitig wettbewerbsfähiger Leistung, was es zu einer praktischen Wahl für eine Vielzahl von Vision-Aufgaben macht.



Watch: Object Tracking using FastSAM with Ultralytics

Modellarchitektur

Übersicht der Architektur des Fast Segment Anything Model (FastSAM)

Übersicht

FastSAM wurde entwickelt, um die Einschränkungen des Segment Anything Model (SAM) zu adressieren, einem schweren Transformer-Modell mit erheblichen Anforderungen an Rechenressourcen. FastSAM entkoppelt die Segment-Anything-Aufgabe in zwei sequentielle Stufen: All-Instanz-Segmentierung und prompt-gestützte Auswahl. Die erste Stufe verwendet YOLOv8-seg, um die Segmentierungsmasken aller Instanzen im Bild zu erzeugen. In der zweiten Stufe gibt es die Region-of-Interest aus, die dem Prompt entspricht.

Hauptmerkmale

  1. Echtzeit-Lösung: Durch die Nutzung der Recheneffizienz von CNNs bietet FastSAM eine Echtzeit-Lösung für die Segment-Anything-Aufgabe, was es wertvoll für industrielle Anwendungen macht, die schnelle Ergebnisse erfordern.

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

  3. Prompt-gestützte Segmentierung: FastSAM kann jedes Objekt innerhalb eines Bildes segmentieren, geleitet durch verschiedene mögliche Benutzerinteraktions-Prompts, 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 Instanz-Segmentierungszweig ausgestattet ist. Dies ermöglicht es, effektiv die Segmentierungsmasken aller Instanzen in einem Bild zu erstellen.

  5. Wettbewerbsfähige Ergebnisse auf Benchmarks: Bei der Objektvorschlagsaufgabe auf MS COCO erzielt FastSAM hohe Punktzahlen bei einer deutlich schnelleren 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 Vision-Aufgaben mit einer sehr hohen Geschwindigkeit, die zig- oder hunderte Male schneller ist als aktuelle Methoden.

  7. Machbarkeit der Modellkomprimierung: FastSAM demonstriert die Machbarkeit eines Pfades, der den Rechenaufwand durch die Einführung eines künstlichen Priors in die Struktur erheblich reduzieren kann, was neue Möglichkeiten für große Modellarchitekturen für allgemeine Vision-Aufgaben eröffnet.

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 Inference, Validation, Training und Export, gekennzeichnet durch ✅-Emojis für unterstützte und ❌-Emojis für nicht unterstützte Modi.

ModelltypVortrainierte GewichteUnterstützte AufgabenInferenzValidierungTrainingExportieren
FastSAM-sFastSAM-s.ptInstance Segmentation
FastSAM-xFastSAM-x.ptInstance Segmentation

FastSAM-Vergleich vs YOLO

Hier vergleichen wir Metas SAM 2-Modelle, einschließlich der kleinsten SAM2-t-Variante, mit Ultralytics-Segmentierungsmodellen, einschließlich YOLO26n-seg:

ModellGröße
(MB)
Parameter
(M)
Geschwindigkeit (CPU)
(ms/im)
Meta SAM-b37593.741703
Meta SAM2-b16280.828867
Meta SAM2-t78.138.923430
MobileSAM40.710.123802
FastSAM-s mit YOLOv8 Backbone23.911.858.0
Ultralytics YOLOv8n-seg7.1 (11.0x kleiner)3.4 (11.4x weniger)24.8 (945x schneller)
Ultralytics YOLO11n-seg6.2 (12.6x kleiner)2.9 (13.4x weniger)24.3 (964x schneller)
Ultralytics YOLO26n-seg6.7 (11.7x kleiner)2.7 (14.4x weniger)25.2 (930x schneller)

Dieser Vergleich demonstriert die erheblichen Unterschiede in Modellgröße und Geschwindigkeit zwischen SAM-Varianten und YOLO-Segmentierungsmodellen. Während SAM einzigartige automatische Segmentierungsfunktionen bietet, sind YOLO-Modelle, insbesondere YOLOv8n-seg, YOLO11n-seg und YOLO26n-seg, deutlich kleiner, schneller und recheneffizienter.

SAM-Geschwindigkeiten gemessen mit PyTorch, YOLO-Geschwindigkeiten gemessen mit ONNX Runtime. Tests wurden auf einem 2025 Apple M4 Air mit 16 GB RAM unter Verwendung von torch==2.10.0, ultralytics==8.4.31 und onnxruntime==1.24.4 durchgeführt. Um diesen Test zu reproduzieren:

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 (ONNX)
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt", "yolo26n-seg.pt"]:
    model = YOLO(file_name)
    model.info()
    onnx_path = model.export(format="onnx", dynamic=True)
    model = YOLO(onnx_path)
    model(ASSETS)

Anwendungsbeispiele

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

Vorhersage-Nutzung

Um eine Objekterkennung auf einem Bild durchzuführen, verwende 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")

Dieser Schnipsel demonstriert die Einfachheit des Ladens eines vortrainierten Modells und des Ausführens einer Vorhersage auf einem Bild.

FastSAMPredictor-Beispiel

Auf diese Weise kannst du die Inferenz auf dem Bild ausführen, alle Segment-results erhalten und die Prompt-Inferenz mehrfach ausführen, ohne die Inferenz selbst mehrfach starten zu müssen.

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 in den obigen Beispielen zurückgegebenen results sind Results-Objekte, die einen einfachen Zugriff auf vorhergesagte Masken und das Quellbild ermöglichen.

Validierungs-Nutzung

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

Bitte beachte, dass FastSAM nur die Erkennung und Segmentierung einer einzelnen Objektklasse unterstützt. Das bedeutet, dass es alle Objekte als dieselbe Klasse erkennt und segmentiert. Daher musst du bei der Vorbereitung des Datensatzes alle Objektkategorie-IDs auf 0 umwandeln.

Tracking-Nutzung

Um Objekt-Tracking auf einem Bild durchzuführen, verwende 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)

Offizielle FastSAM-Nutzung

FastSAM ist auch direkt über das Repository https://github.com/CASIA-IVA-Lab/FastSAM verfügbar. Hier ist ein kurzer Überblick über die typischen Schritte, die du zur Nutzung von FastSAM unternehmen könntest:

Installation

  1. Klonen des FastSAM-Repositorys:

    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 in das geklonte Repository und installiere die erforderlichen Pakete:

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

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

Anwendungsbeispiel

  1. Lade einen Modell-Checkpoint herunter.

  2. Verwende FastSAM für die Inferenz. Beispielbefehle:

    • Segmentiere alles in einem Bild:

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg
    • Segmentiere spezifische Objekte mithilfe eines Text-Prompts:

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --text_prompt "the yellow dog"
    • Segmentiere Objekte innerhalb eines Bounding Box (gib 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]"
    • Segmentiere Objekte in der Nähe spezifischer 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 kannst du FastSAM über das Colab-Demo von CASIA-IVA-Lab ausprobieren.

Zitate und Danksagungen

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

Zitat
  @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 originale FastSAM-Paper findest du auf arXiv. Die Autoren haben ihre Arbeit öffentlich zugänglich gemacht, und die Codebasis kann auf GitHub aufgerufen werden. Wir schätzen ihre Bemühungen, den Bereich voranzubringen 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 Echtzeit-Convolutional Neural Network (CNN) basierende Lösung, die entwickelt wurde, um den Rechenaufwand zu reduzieren und gleichzeitig eine hohe Leistung bei Objektsegmentierungsaufgaben beizubehalten. Anders als das Segment Anything Model (SAM), das eine schwerere Transformer-basierte Architektur verwendet, nutzt FastSAM Ultralytics YOLOv8-seg für eine effiziente Instanzsegmentierung in zwei Stufen: Segmentierung aller Instanzen gefolgt von einer prompt-gestützten Auswahl.

Wie erreicht FastSAM eine Echtzeit-Segmentierungsleistung?

FastSAM erreicht eine Echtzeit-Segmentierung durch die Entkopplung der Segmentierungsaufgabe in eine All-Instanz-Segmentierung mit YOLOv8-seg und eine darauf folgende, prompt-gestützte Auswahlstufe. Durch die Nutzung der Recheneffizienz von CNNs bietet FastSAM erhebliche Reduzierungen bei den Rechen- und Ressourcenanforderungen bei gleichzeitig wettbewerbsfähiger 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 praktisch für eine Vielzahl von Computer Vision-Aufgaben, die eine Echtzeit-Segmentierungsleistung erfordern. Zu den Anwendungen gehören:

  • Industrielle Automatisierung für Qualitätskontrolle und Qualitätssicherung
  • 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, kannst du 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")

Für weitere Details zu Inferenzmethoden, prüfe den Abschnitt Predict Usage der Dokumentation.

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

FastSAM unterstützt mehrere Prompt-Typen, um die Segmentierungsaufgaben zu steuern:

  • Everything-Prompt: Erzeugt eine Segmentierung für alle sichtbaren Objekte.
  • Bounding Box (BBox)-Prompt: Segmentiert Objekte innerhalb einer spezifizierten Bounding Box.
  • Text-Prompt: Verwendet beschreibenden Text, um Objekte zu segmentieren, die der Beschreibung entsprechen.
  • Point-Prompt: Segmentiert Objekte in der Nähe spezifischer, vom Benutzer definierter Punkte.

Diese Flexibilität ermöglicht es FastSAM, sich an eine breite Palette von Benutzerinteraktionsszenarien anzupassen, was seinen Nutzen in verschiedenen Anwendungen erhöht. Für weitere Informationen zur Verwendung dieser Prompts, siehe den Abschnitt Key Features.

Kommentare