Fast Segment Anything Model (FastSAM)
Il Fast Segment Anything Model (FastSAM) è una soluzione innovativa basata su CNN in tempo reale per il task di Segment Anything. Questo task è progettato per segmentare qualsiasi oggetto all'interno di un'immagine in base a vari possibili prompt di interazione dell'utente. FastSAM riduce significativamente le richieste computazionali mantenendo prestazioni competitive, rendendolo una scelta pratica per una varietà di task di visione.
Watch: Object Tracking using FastSAM with Ultralytics
Architettura del modello

Panoramica
FastSAM è progettato per affrontare i limiti del Segment Anything Model (SAM), un pesante modello Transformer con notevoli requisiti di risorse computazionali. Il FastSAM disaccoppia il task di segment anything in due fasi sequenziali: segmentazione di tutte le istanze e selezione guidata da prompt. La prima fase utilizza YOLOv8-seg per produrre le maschere di segmentazione di tutte le istanze nell'immagine. Nella seconda fase, restituisce la regione di interesse corrispondente al prompt.
Caratteristiche principali
-
Soluzione in tempo reale: Sfruttando l'efficienza computazionale delle CNN, FastSAM fornisce una soluzione in tempo reale per il task di segment anything, rendendolo prezioso per le applicazioni industriali che richiedono risultati rapidi.
-
Efficienza e prestazioni: FastSAM offre una riduzione significativa delle richieste computazionali e di risorse senza compromettere la qualità delle prestazioni. Ottiene prestazioni paragonabili a SAM ma con risorse computazionali drasticamente ridotte, consentendo l'applicazione in tempo reale.
-
Segmentazione guidata da prompt: FastSAM può segmentare qualsiasi oggetto all'interno di un'immagine guidato da vari possibili prompt di interazione dell'utente, offrendo flessibilità e adattabilità in diversi scenari.
-
Basato su YOLOv8-seg: FastSAM è basato su YOLOv8-seg, un rilevatore di oggetti dotato di un ramo per la segmentazione delle istanze. Questo gli consente di produrre efficacemente le maschere di segmentazione di tutte le istanze in un'immagine.
-
Risultati competitivi sui benchmark: Nel task di proposta di oggetti su MS COCO, FastSAM ottiene punteggi elevati a una velocità significativamente superiore rispetto a SAM su una singola NVIDIA RTX 3090, dimostrando la sua efficienza e capacità.
-
Applicazioni pratiche: L'approccio proposto fornisce una nuova soluzione pratica per un gran numero di task di visione a una velocità davvero elevata, decine o centinaia di volte più veloce rispetto ai metodi attuali.
-
Fattibilità della compressione del modello: FastSAM dimostra la fattibilità di un percorso in grado di ridurre significativamente lo sforzo computazionale introducendo un prior artificiale nella struttura, aprendo così nuove possibilità per l'architettura di modelli di grandi dimensioni per task di visione generale.
Modelli disponibili, task supportati e modalità operative
Questa tabella presenta i modelli disponibili con i relativi pesi pre-addestrati, i task che supportano e la loro compatibilità con diverse modalità operative come Inferenza, Validazione, Addestramento ed Esportazione, indicate da emoji ✅ per le modalità supportate e ❌ per le modalità non supportate.
| Tipo di modello | Pesi preaddestrati | Attività supportate | Inferenza (Inference) | Validazione | Addestramento | Export |
|---|---|---|---|---|---|---|
| FastSAM-s | FastSAM-s.pt | Segmentazione delle istanze | ✅ | ❌ | ❌ | ✅ |
| FastSAM-x | FastSAM-x.pt | Segmentazione delle istanze | ✅ | ❌ | ❌ | ✅ |
Confronto FastSAM vs YOLO
Qui confrontiamo i modelli SAM 2 di Meta, inclusa la variante più piccola SAM2-t, con i modelli di segmentazione Ultralytics, incluso YOLO26n-seg:
| Modello | Dimensioni (MB) | Parametri (M) | Velocità (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 con backbone YOLOv8 | 23.9 | 11.8 | 58.0 |
| Ultralytics YOLOv8n-seg | 7.1 (11.0x più piccolo) | 3.4 (11.4x meno) | 24.8 (945x più veloce) |
| Ultralytics YOLO11n-seg | 6.2 (12.6x più piccolo) | 2.9 (13.4x meno) | 24.3 (964x più veloce) |
| Ultralytics YOLO26n-seg | 6.7 (11.7x più piccolo) | 2.7 (14.4x meno) | 25.2 (930x più veloce) |
Questo confronto dimostra le sostanziali differenze nelle dimensioni e nelle velocità dei modelli tra le varianti SAM e i modelli di segmentazione YOLO. Mentre SAM offre funzionalità di segmentazione automatica uniche, i modelli YOLO, in particolare YOLOv8n-seg, YOLO11n-seg e YOLO26n-seg, sono significativamente più piccoli, veloci e computazionalmente più efficienti.
Velocità SAM misurate con PyTorch, velocità YOLO misurate con ONNX Runtime. Test eseguiti su un Apple M4 Air 2025 con 16GB di RAM utilizzando torch==2.10.0, ultralytics==8.4.31 e onnxruntime==1.24.4. Per riprodurre questo 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)Esempi di utilizzo
I modelli FastSAM sono facili da integrare nelle tue applicazioni Python. Ultralytics fornisce API Python user-friendly e comandi CLI per semplificare lo sviluppo.
Utilizzo di Predict
Per eseguire il rilevamento di oggetti su un'immagine, usa il metodo predict come mostrato di seguito:
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")Questo snippet dimostra la semplicità di caricare un modello preaddestrato ed eseguire una predizione su un'immagine.
In questo modo puoi eseguire l'inferenza sull'immagine e ottenere tutti i results di segmentazione una volta sola, ed eseguire l'inferenza dei prompt più volte senza dover rieseguire l'inferenza più volte.
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")Tutti i results restituiti negli esempi sopra sono oggetti Results che consentono di accedere facilmente alle maschere predette e all'immagine sorgente.
Utilizzo di Val
La validazione del modello su un dataset può essere effettuata come segue:
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")Tieni presente che FastSAM supporta solo il rilevamento e la segmentazione di una singola classe di oggetti. Ciò significa che riconoscerà e segmenterà tutti gli oggetti come la stessa classe. Pertanto, quando prepari il dataset, devi convertire tutti gli ID delle categorie degli oggetti a 0.
Utilizzo di Track
Per eseguire il tracciamento degli oggetti su un'immagine, usa il metodo track come mostrato di seguito:
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)Utilizzo ufficiale di FastSAM
FastSAM è disponibile anche direttamente dal repository https://github.com/CASIA-IVA-Lab/FastSAM. Ecco una breve panoramica dei passaggi tipici che potresti compiere per usare FastSAM:
Installazione
-
Clona il repository FastSAM:
git clone https://github.com/CASIA-IVA-Lab/FastSAM.git -
Crea e attiva un ambiente Conda con Python 3.9:
conda create -n FastSAM python=3.9 conda activate FastSAM -
Naviga nel repository clonato e installa i pacchetti richiesti:
cd FastSAM pip install -r requirements.txt -
Installa il modello CLIP:
pip install git+https://github.com/ultralytics/CLIP.git
Esempio di utilizzo
-
Scarica un checkpoint del modello.
-
Usa FastSAM per l'inferenza. Comandi di esempio:
-
Segmenta tutto in un'immagine:
python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg -
Segmenta oggetti specifici usando un prompt di testo:
python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --text_prompt "the yellow dog" -
Segmenta oggetti all'interno di un riquadro di delimitazione (fornisci le coordinate del box nel formato xywh):
python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --box_prompt "[570,200,230,400]" -
Segmenta oggetti vicino a punti specifici:
python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --point_prompt "[[520,360],[620,300]]" --point_label "[1,0]"
-
Inoltre, puoi provare FastSAM tramite la demo Colab del CASIA-IVA-Lab.
Citazioni e ringraziamenti
Vorremmo ringraziare gli autori di FastSAM per i loro significativi contributi nel campo della segmentazione delle istanze in tempo reale:
@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}
}Il paper originale di FastSAM può essere trovato su arXiv. Gli autori hanno reso il loro lavoro pubblicamente disponibile e la codebase può essere consultata su GitHub. Apprezziamo i loro sforzi nel far progredire il settore e nel rendere il loro lavoro accessibile alla comunità più ampia.
FAQ
Cos'è FastSAM e in cosa differisce da SAM?
FastSAM, abbreviazione di Fast Segment Anything Model, è una soluzione basata su rete neurale convoluzionale (CNN) in tempo reale progettata per ridurre le richieste computazionali mantenendo prestazioni elevate nei task di segmentazione degli oggetti. A differenza del Segment Anything Model (SAM), che utilizza un'architettura più pesante basata su Transformer, FastSAM sfrutta Ultralytics YOLOv8-seg per un'efficiente segmentazione delle istanze in due fasi: segmentazione di tutte le istanze seguita da una selezione guidata da prompt.
Come ottiene FastSAM prestazioni di segmentazione in tempo reale?
FastSAM ottiene la segmentazione in tempo reale disaccoppiando il task di segmentazione in segmentazione di tutte le istanze con YOLOv8-seg e fasi di selezione guidata da prompt. Utilizzando l'efficienza computazionale delle CNN, FastSAM offre riduzioni significative nelle richieste computazionali e di risorse mantenendo prestazioni competitive. Questo approccio a due fasi consente a FastSAM di fornire una segmentazione rapida ed efficiente adatta ad applicazioni che richiedono risultati immediati.
Quali sono le applicazioni pratiche di FastSAM?
FastSAM è pratico per una varietà di task di computer vision che richiedono prestazioni di segmentazione in tempo reale. Le applicazioni includono:
- Automazione industriale per il controllo e l'assicurazione qualità
- Analisi video in tempo reale per sicurezza e sorveglianza
- Veicoli autonomi per il rilevamento e la segmentazione degli oggetti
- Imaging medico per task di segmentazione precisi e rapidi
La sua capacità di gestire vari prompt di interazione dell'utente rende FastSAM adattabile e flessibile per diversi scenari.
Come posso usare il modello FastSAM per l'inferenza in Python?
Per usare FastSAM per l'inferenza in Python, puoi seguire l'esempio qui sotto:
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")Per maggiori dettagli sui metodi di inferenza, controlla la sezione Utilizzo di Predict della documentazione.
Quali tipi di prompt supporta FastSAM per i task di segmentazione?
FastSAM supporta molteplici tipi di prompt per guidare i task di segmentazione:
- Prompt Everything: Genera la segmentazione per tutti gli oggetti visibili.
- Prompt Riquadro di delimitazione (BBox): Segmenta gli oggetti all'interno di un riquadro di delimitazione specificato.
- Prompt Testo: Usa un testo descrittivo per segmentare gli oggetti che corrispondono alla descrizione.
- Prompt Punto: Segmenta gli oggetti vicino a punti specifici definiti dall'utente.
Questa flessibilità consente a FastSAM di adattarsi a una vasta gamma di scenari di interazione dell'utente, migliorando la sua utilità attraverso diverse applicazioni. Per ulteriori informazioni sull'uso di questi prompt, fai riferimento alla sezione Caratteristiche chiave.