Fast Segment Anything Model (FastSAM)
Das Fast Segment Anything Model (FastSAM) ist eine neuartige CNN-basierte Echtzeitlösung für die Segment Anything Aufgabe. Bei dieser Aufgabe geht es darum, jedes beliebige Objekt in einem Bild auf der Grundlage verschiedener möglicher Benutzerinteraktionsaufforderungen zu segmentieren. FastSAM reduziert den Rechenaufwand erheblich, ohne die Leistung zu beeinträchtigen, und ist damit eine praktische Wahl für eine Vielzahl von Bildverarbeitungsaufgaben.
Pass auf: Objektverfolgung mit FastSAM mit Ultralytics
Modell Architektur
Übersicht
FastSAM is designed to address the limitations of the Segment Anything Model (SAM), a heavy Transformer model with substantial computational resource requirements. The FastSAM decouples the segment anything task into two sequential stages: all-instance segmentation and prompt-guided selection. The first stage uses YOLOv8-seg to produce the segmentation masks of all instances in the image. In the second stage, it outputs the region-of-interest corresponding to the prompt.
Hauptmerkmale
Lösung in Echtzeit: Durch die Nutzung der Rechenleistung von CNNs bietet FastSAM eine Echtzeitlösung für die Segmentierungsaufgabe, was sie für industrielle Anwendungen, die schnelle Ergebnisse erfordern, wertvoll macht.
Effizienz und Leistung: FastSAM bietet eine deutliche Verringerung der Rechen- und Ressourcenanforderungen, ohne die Leistungsqualität zu beeinträchtigen. Es erreicht eine vergleichbare Leistung wie SAM , aber mit drastisch reduzierten Rechenressourcen, was Echtzeitanwendungen ermöglicht.
Prompt-geführte Segmentierung: FastSAM kann jedes Objekt in einem Bild segmentieren, das von verschiedenen möglichen Benutzerinteraktionsaufforderungen geleitet wird, 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 kann er effektiv die Segmentierungsmasken aller Instanzen in einem Bild erstellen.
Konkurrenzfähige Ergebnisse bei Benchmarks: Bei der Objektvorschlagsaufgabe auf MS COCO erreicht FastSAM hohe Punktzahlen mit einer deutlich höheren Geschwindigkeit als SAM als mit einem NVIDIA RTX 3090, 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 Bildverarbeitungsaufgaben mit einer wirklich hohen Geschwindigkeit, d.h. zehn- oder hundertmal schneller als aktuelle Methoden.
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
Diese Tabelle zeigt die verfügbaren Modelle mit ihren spezifischen vortrainierten Gewichten, die Aufgaben, die sie unterstützen, und ihre Kompatibilität mit verschiedenen Betriebsmodi wie Inferenz, Validierung, Training und Export, gekennzeichnet durch ✅ Emojis für unterstützte Modi und ❌ Emojis für nicht unterstützte Modi.
Modell Typ | Vortrainierte Gewichte | Unterstützte Aufgaben | Inferenz | Validierung | Ausbildung | exportieren |
---|---|---|---|---|---|---|
FastSAM-s | FastSAM-s.pt | Instanz-Segmentierung | ✅ | ❌ | ❌ | ✅ |
FastSAM-x | FastSAM-x.pt | Instanz-Segmentierung | ✅ | ❌ | ❌ | ✅ |
Verwendungsbeispiele
Die FastSAM Modelle lassen sich leicht in deine Python Anwendungen integrieren. Ultralytics bietet eine benutzerfreundliche Python API und CLI Befehle, um die Entwicklung zu optimieren.
Nutzung vorhersagen
To perform object detection on an image, use the 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 Ausschnitt zeigt, wie einfach es ist, ein trainiertes Modell zu laden und eine Vorhersage für ein Bild zu machen.
FastSAMPredictor Beispiel
Auf diese Weise kannst du die Inferenz auf das Bild anwenden und alle Segmente erhalten. results
einmal und führe 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ückgegebenen results
in den obigen Beispielen sind Ergebnisse Objekt, das einen einfachen Zugriff auf vorhergesagte Masken und das Quellbild ermöglicht.
Val Verwendung
Die Validierung des Modells auf einem Datensatz kann wie folgt durchgeführt werden:
Beispiel
Bitte beachte, dass FastSAM nur die Erkennung und Segmentierung einer einzigen Klasse von Objekten unterstützt. Das heißt, es erkennt und segmentiert alle Objekte als dieselbe Klasse. Deshalb musst du bei der Vorbereitung des Datensatzes alle Objektkategorie-IDs in 0 umwandeln.
Verwendung verfolgen
Um eine Objektverfolgung auf einem Bild durchzuführen, verwendest du die track
Methode wie unten gezeigt:
Beispiel
FastSAM offizielle Verwendung
FastSAM ist auch direkt über das https://github.com/CASIA-IVA-Lab/FastSAM Repository erhältlich. Hier ist ein kurzer Überblick über die typischen Schritte, die du unternehmen kannst, um FastSAM zu nutzen:
Installation
Klone das Repository FastSAM :
Erstelle und aktiviere eine Conda-Umgebung mit Python 3.9:
Navigiere zu dem geklonten Repository und installiere die benötigten Pakete:
Installiere das CLIP-Modell:
Beispiel Verwendung
Lade einen Modellprüfpunkt herunter.
Verwende FastSAM für Schlussfolgerungen. Beispielbefehle:
Segmentiere alles in einem Bild:
Segmentiere bestimmte Objekte mit Hilfe von Textaufforderungen:
Segment objects within a bounding box (provide box coordinates in xywh format):
Segmentiere Objekte in der Nähe bestimmter Punkte:
Außerdem kannst du FastSAM in einer Colab-Demo oder auf der HuggingFace Web-Demo ausprobieren, um eine visuelle Erfahrung zu machen.
Zitate und Danksagungen
Wir möchten den Autoren von FastSAM für ihre bedeutenden Beiträge auf dem Gebiet der Echtzeit-Instanzsegmentierung danken:
Die Originalarbeit FastSAM ist auf arXiv zu finden. Die Autoren haben ihre Arbeit öffentlich zugänglich gemacht, und die Codebasis kann auf GitHub eingesehen 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, short for Fast Segment Anything Model, is a real-time convolutional neural network (CNN)-based solution designed to reduce computational demands while maintaining high performance in object segmentation tasks. Unlike the Segment Anything Model (SAM), which uses a heavier Transformer-based architecture, FastSAM leverages Ultralytics YOLOv8-seg for efficient instance segmentation in two stages: all-instance segmentation followed by prompt-guided selection.
Wie erreicht FastSAM eine Segmentierungsleistung in Echtzeit?
FastSAM erreicht eine Segmentierung in Echtzeit, indem es die Segmentierungsaufgabe in eine All-Instance-Segmentierung mit YOLOv8-seg und prompt-geführten Auswahlschritten entkoppelt. Durch die Nutzung der Recheneffizienz von CNNs bietet FastSAM eine erhebliche Reduzierung des Rechen- und Ressourcenbedarfs bei gleichzeitig konkurrenzfähiger Leistung. Dieser zweistufige Ansatz ermöglicht FastSAM eine schnelle und effiziente Segmentierung für Anwendungen, die schnelle Ergebnisse erfordern.
Was sind die praktischen Anwendungen von FastSAM?
FastSAM is practical for a variety of computer vision tasks that require real-time segmentation performance. Applications include:
- Industrielle Automatisierung für Qualitätskontrolle und -sicherung
- Videoanalyse in Echtzeit für Sicherheit und Überwachung
- Autonome Fahrzeuge zur Objekterkennung und -segmentierung
- 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 FastSAM Modell für Inferenzen in Python?
Um FastSAM für Schlussfolgerungen 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 Einzelheiten zu den Schlussfolgerungsmethoden findest du im Abschnitt Verwendung vorhersagen in der Dokumentation.
Welche Arten von Prompts unterstützt FastSAM für Segmentierungsaufgaben?
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 bestimmten Begrenzungsrahmens.
- Textaufforderung: Verwendet einen beschreibenden Text, um Objekte zu segmentieren, die der Beschreibung entsprechen.
- Punktaufforderung: Segmentiert Objekte in der Nähe bestimmter benutzerdefinierter Punkte.
Dank dieser Flexibilität kann FastSAM an eine Vielzahl von Benutzerinteraktionsszenarien angepasst werden, was den Nutzen für verschiedene Anwendungen erhöht. Weitere Informationen zur Verwendung dieser Prompts findest du im Abschnitt Hauptfunktionen.