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 auf Basis verschiedener möglicher Benutzer-Eingabeaufforderungen 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#
FastSAM wurde entwickelt, um die Einschränkungen des Segment Anything Model (SAM) zu bewältigen, einem schweren Transformer-Modell mit erheblichem Rechenbedarf. Das FastSAM entkoppelt die Segment-Anything-Aufgabe in zwei aufeinanderfolgende Phasen: die All-Instanzsegmentierung und die prompt-gesteuerte Auswahl. Die erste Phase verwendet YOLOv8-seg, um die Segmentierungsmasken aller Instanzen im Bild zu erzeugen. In der zweiten Phase wird die dem Prompt entsprechende Region von Interesse ausgegeben.
Hauptfunktionen#
-
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.
-
Effizienz und Leistung: FastSAM bietet eine signifikante Reduzierung des Rechen- und Ressourcenbedarfs, ohne die Leistungsqualität zu beeinträchtigen. Es erzielt eine vergleichbare Leistung wie SAM, jedoch mit drastisch reduzierten Rechenressourcen, was eine Anwendung in Echtzeit ermöglicht.
-
Prompt-gesteuerte Segmentierung: FastSAM kann jedes Objekt in einem Bild segmentieren, gesteuert durch verschiedene mögliche Benutzer-Eingabeaufforderungen, was Flexibilität und Anpassungsfähigkeit in verschiedenen Szenarien bietet.
-
Basierend auf YOLOv8-seg: FastSAM basiert auf YOLOv8-seg, einem Objektdetektor, der mit einem Instanzsegmentierungszweig ausgestattet ist. Dadurch können Segmentierungsmasken aller Instanzen in einem Bild effektiv erstellt werden.
-
Wettbewerbsfähige Ergebnisse bei Benchmarks: Bei der Objektvorschlagsaufgabe auf MS COCO erreicht FastSAM auf einer einzelnen NVIDIA RTX 3090 hohe Punktzahlen bei einer deutlich schnelleren Geschwindigkeit als SAM, was seine Effizienz und Leistungsfähigkeit unter Beweis stellt.
-
Praktische Anwendungen: Der vorgeschlagene Ansatz bietet eine neue, praktische Lösung für eine große Anzahl von Vision-Aufgaben bei sehr hoher Geschwindigkeit, zig- oder hundertmal schneller als aktuelle Methoden.
-
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, wodurch neue Möglichkeiten für die Architektur großer Modelle für allgemeine Vision-Aufgaben eröffnet werden.
Verfügbare Modelle, unterstützte Aufgaben und Betriebsmodi#
Diese Tabelle zeigt die verfügbaren Modelle mit ihren spezifischen vortrainierten Gewichten, den von ihnen unterstützten Aufgaben und ihrer Kompatibilität mit verschiedenen Betriebsmodi wie Inference, Validation, Training und Export, gekennzeichnet durch ✅-Emojis für unterstützte ModI und ❌-Emojis für nicht unterstützte ModI.
| Modelltyp | Vortrainierte Gewichte | Unterstützte Aufgaben | Training | Validation | Inference | Exportieren |
|---|---|---|---|---|---|---|
| FastSAM-s | FastSAM-s.pt | Instanzsegmentierung | ❌ | ✅ | ✅ | ✅ |
| FastSAM-x | FastSAM-x.pt | Instanzsegmentierung | ❌ | ✅ | ✅ | ✅ |
FastSAM Vergleich vs YOLO#
Hier vergleichen wir die SAM 2-Modelle von Meta, einschließlich der kleinsten SAM2-t-Variante, mit Ultralytics Segmentierungsmodellen einschließlich YOLO26n-seg:
| Modell | Größe (MB) | Parameter (M) | Geschwindigkeit (CPU) (ms/im) |
|---|---|---|---|
| Meta SAM-b | 375 | 93.7 | 41703 |
| Meta SAM2-b | 162 | 80.8 | 28867 |
| Meta SAM2-t | 78.1 | 38.9 | 23430 |
| MobileSAM | 40.7 | 10.1 | 23802 |
| FastSAM-s mit YOLOv8-Backbone | 23.9 | 11.8 | 58.0 |
| Ultralytics YOLOv8n-seg | 7.1 (11.0x kleiner) | 3.4 (11.4x weniger) | 24.8 (945x schneller) |
| Ultralytics YOLO11n-seg | 6.2 (12.6x kleiner) | 2.9 (13.4x weniger) | 24.3 (964x schneller) |
| Ultralytics YOLO26n-seg | 6.7 (11.7x kleiner) | 2.7 (14.4x weniger) | 25.2 (930x 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, YOLO11n-seg und YOLO26n-seg, deutlich kleiner, schneller und recheneffizienter.
SAM-Geschwindigkeiten gemessen mit PyTorch, YOLO-Geschwindigkeiten gemessen mit ONNX Runtime. Tests ausgeführt 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. So reproduzierst du diesen Test:
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 lassen sich einfach in deine Python-Anwendungen integrieren. Ultralytics bietet eine benutzerfreundliche Python API und CLI-Befehle, um die Entwicklung zu optimieren.
Predict-Nutzung#
Um eine Objekterkennung auf einem Bild durchzuführen, verwende die Methode predict wie unten gezeigt:
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 Ausschnitt demonstriert die Einfachheit des Ladens eines vortrainierten Modells und des Ausführens einer Vorhersage auf einem Bild.
Auf diese Weise kannst du Inferenz auf Bildern ausführen und alle results-Segmente einmalig abrufen und Prompt-Inferenzen mehrfach durchfü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")Alle in den obigen Beispielen zurückgegebenen results sind Results-Objekte, die den einfachen Zugriff auf vorhergesagte Masken und Quellbilder ermöglichen.
Val-Nutzung#
Bitte beachte, 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 musst du bei der Vorbereitung des Datensatzes alle Objektkategorie-IDs auf 0 konvertieren.
Die Validierung des Modells auf einem Datensatz kann wie folgt durchgeführt werden:
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")Track-Nutzung#
Um die Objektverfolgung auf einem Bild durchzuführen, verwende die Methode track wie unten gezeigt:
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)FastSAM offizielle Nutzung#
FastSAM ist auch direkt über das Repository https://github.com/CASIA-IVA-Lab/FastSAM verfügbar. Hier ist eine kurze Übersicht über die typischen Schritte, die du zur Verwendung von FastSAM ausführen kannst:
Installation#
-
Klonen des FastSAM-Repositorys:
git clone https://github.com/CASIA-IVA-Lab/FastSAM.git -
Erstelle und aktiviere eine Conda-Umgebung mit Python 3.9:
conda create -n FastSAM python=3.9 conda activate FastSAM -
Navigiere zum geklonten Repository und installiere die erforderlichen Pakete:
cd FastSAM pip install -r requirements.txt -
Installiere das CLIP-Modell:
pip install git+https://github.com/ultralytics/CLIP.git
Beispielanwendung#
-
Lade einen Modell-Checkpoint herunter.
-
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-Bereichs (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 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}
}Das originale FastSAM-Papier ist auf arXiv zu finden. Die Autoren haben ihre Arbeit öffentlich zugänglich gemacht, und auf die Codebasis kann auf GitHub zugegriffen werden. Wir schätzen ihre Bemühungen, das Fachgebiet voranzubringen und ihre Arbeit der breiteren Community 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 Echtzeit-Lösung, die den Rechenaufwand reduzieren und gleichzeitig eine hohe Leistung bei der Objektsegmentierung aufrechterhalten soll. 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 Phasen: All-Instanz-Segmentierung gefolgt von prompt-gesteuerter Auswahl.
Wie erreicht FastSAM eine Echtzeit-Segmentierungsleistung?#
FastSAM erreicht eine Segmentierung in Echtzeit durch die Entkopplung der Segmentierungsaufgabe in die Segmentierung aller Instanzen mit YOLOv8-seg und anschließende prompt-gesteuerte Auswahlphasen. Durch die Nutzung der Recheneffizienz von CNNs bietet FastSAM erhebliche Reduzierungen des Rechen- und Ressourcenbedarfs 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 praktisch, die eine Echtzeit-Segmentierungsleistung erfordern. Zu den Anwendungen 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
Die Fähigkeit, verschiedene Benutzer-Eingabeaufforderungen zu verarbeiten, macht FastSAM anpassungsfähig und flexibel für unterschiedliche 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")Weitere Details zu Inferenzmethoden findest du im Abschnitt Predict Usage der Dokumentation.
Welche Arten von Prompts unterstützt FastSAM für Segmentierungsaufgaben?#
FastSAM unterstützt mehrere Prompt-Typen zur Steuerung der Segmentierungsaufgaben:
- Everything Prompt: Generiert eine Segmentierung für alle sichtbaren Objekte.
- Bounding Box (BBox) Prompt: Segmentiert Objekte innerhalb einer angegebenen Bounding Box.
- Text Prompt: Verwendet einen 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 Vielzahl von Benutzerinteraktionsszenarien anzupassen und seinen Nutzen über verschiedene Anwendungen hinweg zu verbessern. Weitere Informationen zur Verwendung dieser Prompts findest du im Abschnitt Key Features.