Ultralytics YOLO27:

Schnelles Segmentierungsmodell für beliebige Objekte (FastSAM)#

Das schnelle Segmentierungsmodell für beliebige Objekte (FastSAM) ist eine neuartige, echtzeitfähige, CNN-basierte Lösung für die Aufgabe der Segmentierung beliebiger Objekte. Diese Aufgabe ist darauf ausgelegt, jedes Objekt innerhalb eines Bildes anhand verschiedener möglicher Eingabeaufforderungen durch den Benutzer zu segmentieren. FastSAM reduziert den Rechenaufwand erheblich und erzielt gleichzeitig wettbewerbsfähige Ergebnisse, wodurch es sich für eine Vielzahl von Bildverarbeitungsaufgaben eignet.



Watch: Object Tracking using FastSAM with Ultralytics

Modellarchitektur#

Übersicht über die Architektur des schnellen Segmentierungsmodells für beliebige Objekte (FastSAM)

Übersicht#

FastSAM wurde entwickelt, um die Einschränkungen des Segmentierungsmodells für beliebige Objekte (SAM) zu überwinden, eines umfangreichen Transformers mit erheblichem Bedarf an Rechenressourcen. FastSAM teilt die Aufgabe der Segmentierung beliebiger Objekte in zwei aufeinanderfolgende Phasen auf: die Instanzsegmentierung aller Objekte und die durch Eingabeaufforderungen gesteuerte Auswahl. In der ersten Phase verwendet es YOLOv8-seg, um die Segmentierungsmasken aller Instanzen im Bild zu erzeugen. In der zweiten Phase gibt es den zur Eingabeaufforderung gehörenden Interessenbereich aus.

Wichtige Funktionen#

  1. Echtzeitlösung: Durch die Nutzung der Recheneffizienz von CNNs bietet FastSAM eine Echtzeitlösung für die Segmentierung beliebiger Objekte und ist damit für industrielle Anwendungen wertvoll, die schnelle Ergebnisse erfordern.

  2. Effizienz und Leistung: FastSAM reduziert den Rechen- und Ressourcenbedarf erheblich, ohne die Leistungsqualität zu beeinträchtigen. Es erzielt eine mit SAM vergleichbare Leistung, benötigt dafür jedoch deutlich weniger Rechenressourcen und ermöglicht so Echtzeitanwendungen.

  3. Durch Eingabeaufforderungen gesteuerte Segmentierung: FastSAM kann jedes Objekt in einem Bild anhand verschiedener möglicher Eingabeaufforderungen des Benutzers segmentieren und bietet dadurch Flexibilität und Anpassungsfähigkeit in unterschiedlichen Szenarien.

  4. Basierend auf YOLOv8-seg: FastSAM basiert auf YOLOv8-seg, einem Objektdetektor mit einem Zweig für die Instanzsegmentierung. Dadurch kann es die Segmentierungsmasken aller Instanzen in einem Bild effektiv erzeugen.

  5. Wettbewerbsfähige Ergebnisse bei Benchmarks: Bei der Aufgabe der Objekterzeugung auf MS COCO erzielt FastSAM auf einer einzelnen NVIDIA RTX 3090 hohe Werte bei deutlich höherer Geschwindigkeit als SAM und demonstriert damit seine Effizienz und Leistungsfähigkeit.

  6. Praktische Anwendungen: Der vorgeschlagene Ansatz bietet eine neue, praktische Lösung für eine große Zahl von Bildverarbeitungsaufgaben mit sehr hoher Geschwindigkeit – zehn- oder sogar hundertmal schneller als aktuelle Methoden.

  7. Möglichkeiten der Modellkomprimierung: FastSAM zeigt, dass sich der Rechenaufwand durch die Einführung eines künstlichen Priorwissens in die Struktur erheblich reduzieren lässt, und eröffnet dadurch neue Möglichkeiten für große Modellarchitekturen für allgemeine Bildverarbeitungsaufgaben.

Verfügbare Modelle, unterstützte Aufgaben und Betriebsmodi#

Diese Tabelle zeigt die verfügbaren Modelle mit ihren jeweiligen vortrainierten Gewichten, die von ihnen unterstützten Aufgaben und ihre Kompatibilität mit verschiedenen Betriebsmodi wie Inference, Validierung, Training und Export. Unterstützte Modi sind mit dem Emoji ✅ und nicht unterstützte Modi mit dem Emoji ❌ gekennzeichnet.

ModelltypVortrainierte GewichteUnterstützte AufgabenTrainingValidierungInferenzExport
FastSAM-sFastSAM-s.ptInstanzsegmentierung
FastSAM-xFastSAM-x.ptInstanzsegmentierung

FastSAM im Vergleich zu YOLO#

Hier vergleichen wir FastSAM-s mit den SAM-Varianten von Meta und den Ultralytics-Segmentierungsmodellen einschließlich YOLO26n-seg:

ModellGröße
(MB)
Parameter
(M)
Geschwindigkeit (CPU)
(ms/Bild)
Meta SAM-b37593.741703
Meta SAM2-b16280.828867
Meta SAM2-t78.138.923430
MobileSAM40.710.123802
FastSAM-s mit Backbone von YOLOv823.911.858.0
Ultralytics YOLOv8n-seg7,1 (11,0-mal kleiner)3,4 (11,4-mal weniger)24,8 (945-mal schneller)
Ultralytics YOLO11n-seg6.2 (12.6-mal kleiner)2,9 (13,4-mal weniger)24.3 (964-mal schneller)
Ultralytics YOLO26n-seg6,7 (11,7-mal kleiner)2.7 (14.4-mal weniger)25,2 (930-mal schneller)

Dieser Vergleich zeigt die deutlichen Unterschiede bei Modellgrößen und Geschwindigkeiten zwischen SAM-Varianten und YOLO-Segmentierungsmodellen. Während SAM einzigartige Funktionen zur automatischen Segmentierung bietet, sind YOLO-Modelle, insbesondere YOLOv8n-seg, YOLO11n-seg und YOLO26n-seg, deutlich kleiner, schneller und recheneffizienter.

Die Geschwindigkeiten von SAM wurden mit PyTorch gemessen, die Geschwindigkeiten von YOLO mit ONNX Runtime. Die Tests wurden auf einem Apple M4 Air aus dem Jahr 2025 mit 16 GB RAM unter Verwendung von torch==2.10.0, ultralytics==8.4.31 und onnxruntime==1.24.4 durchgeführt. So kannst du diesen Test 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, nms=False)  # YOLO26 NMS-free head; no-op for YOLOv8/YOLO11
    model = YOLO(onnx_path)
    model(ASSETS)

Verwendungsbeispiele#

Die FastSAM-Modelle lassen sich einfach in deine Python-Anwendungen integrieren. Ultralytics stellt benutzerfreundliche Python-API- und CLI-Befehle bereit, um die Entwicklung zu vereinfachen.

Verwendung für Vorhersagen#

Um ein Bild zu segmentieren, verwende die Methode predict 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")

Dieses Beispiel zeigt, wie einfach sich ein vortrainiertes Modell laden und eine Vorhersage für ein Bild ausführen lässt.

Beispiel für FastSAMPredictor

Auf diese Weise kannst du einmal eine Inferenz für ein Bild ausführen und alle Segmente results abrufen sowie anschließend mehrmals eine Inferenz mit Eingabeaufforderungen ausführen, ohne die Inferenz mehrfach auszuführen.

from ultralytics.models.fastsam import FastSAMPredictor

# Create FastSAMPredictor
overrides = {"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, über die du einfach auf die vorhergesagten Masken und das Quellbild zugreifen kannst.

Verwendung für die Validierung#

Beachte, dass FastSAM nur die Erkennung und Segmentierung einer einzigen Objektklasse unterstützt. Das bedeutet, dass alle Objekte als zur selben Klasse gehörend erkannt und segmentiert werden. Deshalb musst du beim Vorbereiten des Datensatzes alle IDs der Objektkategorien in 0 umwandeln.

Die Validierung des Modells anhand eines Datensatzes 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")

Verwendung für die Verfolgung#

Um die Objektverfolgung in einem Bild durchzuführen, verwende die Methode track 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 Verwendung von FastSAM#

FastSAM ist auch direkt im Repository CASIA-LMC-Lab/FastSAM verfügbar. Hier ist eine kurze Übersicht über die typischen Schritte, die du zur Verwendung von FastSAM unternimmst:

Installation#

  1. Klone das FastSAM-Repository:

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

    conda create -n FastSAM python=3.9
    conda activate FastSAM
  3. Wechsle 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

Beispielverwendung#

  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 bestimmte Objekte mithilfe einer Texteingabe:

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --text_prompt "the yellow dog"
    • Segmentiere Objekte innerhalb einer Begrenzungsbox (gib die Boxkoordinaten 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]"

Zusätzlich kannst du FastSAM über die Colab-Demo von CASIA-LMC-Lab ausprobieren.

Zitate und Danksagungen#

Wir möchten den Autoren von FastSAM für ihre bedeutenden Beiträge auf dem Gebiet 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}
}

Die ursprüngliche FastSAM-Veröffentlichung ist auf arXiv verfügbar. Die Autoren haben ihre Arbeit öffentlich zugänglich gemacht, und der Quellcode ist auf GitHub verfügbar. Wir schätzen ihre Bemühungen, das Gebiet voranzubringen und ihre Arbeit einer breiteren Gemeinschaft zugänglich zu machen.

FAQ#

  • FastSAM, kurz für schnelles Segmentierungsmodell für beliebige Objekte, ist eine echtzeitfähige, auf einem Faltungsneuronalen Netzwerk (CNN) basierende Lösung, die den Rechenaufwand bei gleichbleibend hoher Leistung für Objeksegmentierungsaufgaben reduzieren soll. Im Gegensatz zum Segmentierungsmodell für beliebige Objekte (SAM), das eine umfangreichere Transformer-basierte Architektur verwendet, nutzt FastSAM Ultralytics YOLOv8-seg für eine effiziente Instanzsegmentierung in zwei Phasen: die Segmentierung aller Instanzen, gefolgt von einer durch Eingabeaufforderungen gesteuerten Auswahl.

  • FastSAM erreicht eine echtzeitfähige Segmentierung, indem es die Segmentierungsaufgabe in die Segmentierung aller Instanzen mit YOLOv8-seg und die durch Eingabeaufforderungen gesteuerte Auswahl aufteilt. Durch die Nutzung der Recheneffizienz von CNNs reduziert FastSAM den Rechen- und Ressourcenbedarf erheblich und erzielt gleichzeitig wettbewerbsfähige Ergebnisse. Dieser zweistufige Ansatz ermöglicht eine schnelle und effiziente Segmentierung für Anwendungen, die rasche Ergebnisse erfordern.

  • FastSAM eignet sich für eine Vielzahl von Bildverarbeitungsaufgaben, die eine echtzeitfähige Segmentierungsleistung erfordern. Zu den Anwendungen gehören:

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

    Durch die Verarbeitung verschiedener Eingabeaufforderungen des Benutzers lässt sich FastSAM flexibel an unterschiedliche Szenarien anpassen.

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

    Weitere Informationen zu Inferenzmethoden findest du im Abschnitt Verwendung für Vorhersagen der Dokumentation.

  • FastSAM unterstützt mehrere Arten von Eingabeaufforderungen zur Steuerung der Segmentierungsaufgaben:

    • Eingabeaufforderung „Alles“: Erzeugt Segmentierungen für alle sichtbaren Objekte.
    • Eingabeaufforderung mit Begrenzungsbox (BBox): Segmentiert Objekte innerhalb einer angegebenen Begrenzungsbox.
    • Texteingabeaufforderung: Verwendet eine beschreibende Texteingabe, um Objekte zu segmentieren, die der Beschreibung entsprechen.
    • Punkteingabeaufforderung: Segmentiert Objekte in der Nähe bestimmter, vom Benutzer festgelegter Punkte.

    Diese Flexibilität ermöglicht es FastSAM, sich an eine große Bandbreite von Interaktionsszenarien anzupassen, und erhöht seinen Nutzen in verschiedenen Anwendungen. Weitere Informationen zur Verwendung dieser Eingabeaufforderungen findest du im Abschnitt Wichtige Funktionen.

Kommentare