Modello Fast Segment Anything (FastSAM)#
Il modello Fast Segment Anything (FastSAM) è una nuova soluzione in tempo reale basata su CNN per il task Segment Anything. Questo task è progettato per segmentare qualsiasi oggetto all'interno di un'immagine in base a diversi possibili prompt di interazione forniti dall'utente. FastSAM riduce notevolmente il fabbisogno computazionale mantenendo prestazioni competitive, il che lo rende una scelta pratica per varie attività di visione artificiale.
Guarda: Tracking degli oggetti con FastSAM e Ultralytics
Architettura del modello#

Panoramica#
FastSAM è progettato per superare i limiti del modello Segment Anything (SAM), un modello Transformer pesante che richiede notevoli risorse computazionali. FastSAM suddivide il task Segment Anything in due fasi sequenziali: segmentazione di tutte le istanze e selezione guidata da prompt. Nella prima fase usa YOLOv8-seg per generare le maschere di segmentazione di tutte le istanze presenti nell'immagine. Nella seconda fase restituisce la regione di interesse corrispondente al prompt.
Funzionalità principali#
-
Soluzione in tempo reale: sfruttando l'efficienza computazionale delle CNN, FastSAM offre una soluzione in tempo reale per il task Segment Anything, risultando utile nelle applicazioni industriali che richiedono risultati rapidi.
-
Efficienza e prestazioni: FastSAM riduce significativamente il fabbisogno computazionale e di risorse senza compromettere la qualità delle prestazioni. Offre prestazioni paragonabili a SAM, ma con risorse computazionali drasticamente ridotte, consentendo applicazioni in tempo reale.
-
Segmentazione guidata da prompt: FastSAM può segmentare qualsiasi oggetto all'interno di un'immagine usando diversi possibili prompt di interazione forniti dall'utente, offrendo flessibilità e adattabilità in scenari diversi.
-
Basato su YOLOv8-seg: FastSAM si basa su YOLOv8-seg, un rilevatore di oggetti dotato di un ramo per la segmentazione delle istanze. Questo gli consente di generare efficacemente le maschere di segmentazione di tutte le istanze presenti 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 efficienza e capacità.
-
Applicazioni pratiche: l'approccio proposto offre una nuova soluzione pratica per numerose attività di visione artificiale a velocità molto elevata, da decine a centinaia di volte superiore rispetto ai metodi attuali.
-
Fattibilità della compressione del modello: FastSAM dimostra la fattibilità di un approccio in grado di ridurre significativamente il carico computazionale introducendo un prior artificiale nella struttura e aprendo così nuove possibilità per le architetture di modelli di grandi dimensioni dedicate alle attività generali di visione artificiale.
Modelli disponibili, attività supportate e modalità operative#
Questa tabella presenta i modelli disponibili con i rispettivi pesi preaddestrati, le attività supportate e la compatibilità con le diverse modalità operative, come Inferenza, Validazione, Addestramento ed Esportazione. Le emoji ✅ indicano le modalità supportate e le emoji ❌ quelle non supportate.
| Tipo di modello | Pesi preaddestrati | Attività supportate | Addestramento | Validazione | Inferenza | Esporta |
|---|---|---|---|---|---|---|
| FastSAM-s | FastSAM-s.pt | Segmentazione di istanze | ❌ | ✅ | ✅ | ✅ |
| FastSAM-x | FastSAM-x.pt | Segmentazione di istanze | ❌ | ✅ | ✅ | ✅ |
Confronto tra FastSAM e YOLO#
Qui confrontiamo FastSAM-s con le varianti SAM di Meta e i modelli di segmentazione Ultralytics, tra cui YOLO26n-seg:
| Modello | Dimensione (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 in meno) | 24.8 (945x più veloce) |
| Ultralytics YOLO11n-seg | 6.2 (12.6x più piccolo) | 2.9 (13.4x in meno) | 24.3 (964x più veloce) |
| Ultralytics YOLO26n-seg | 6.7 (11.7x più piccolo) | 2.7 (14.4x in meno) | 25.2 (930x più veloce) |
Questo confronto evidenzia le notevoli differenze nelle dimensioni e nella velocità dei modelli tra le varianti SAM e i modelli di segmentazione YOLO. Sebbene SAM offra capacità uniche di segmentazione automatica, i modelli YOLO, in particolare YOLOv8n-seg, YOLO11n-seg e YOLO26n-seg, sono significativamente più piccoli, più veloci e più efficienti dal punto di vista computazionale.
Le velocità di SAM sono state misurate con PyTorch, quelle di YOLO con ONNX Runtime. I test sono stati eseguiti su un Apple M4 Air del 2025 con 16 GB di RAM usando torch==2.10.0, ultralytics==8.4.31 e onnxruntime==1.24.4. Per riprodurre questo test:
from ultralytics import ASSETS, SAM, YOLO, FastSAM
# Profila 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)
# Profilo FastSAM-s
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)
# Profila i modelli YOLO (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) # Head senza NMS di YOLO26; non fa nulla per YOLOv8/YOLO11
model = YOLO(onnx_path)
model(ASSETS)Esempi d'uso#
I modelli FastSAM sono facili da integrare nelle tue applicazioni Python. Ultralytics offre un'API Python intuitiva e comandi CLI per semplificare lo sviluppo.
Uso di predict#
Per segmentare un'immagine, usa il metodo predict come mostrato di seguito:
from ultralytics import FastSAM
# Definisci una sorgente di inferenza
source = "path/to/bus.jpg"
# Crea un modello FastSAM
model = FastSAM("FastSAM-s.pt") # oppure FastSAM-x.pt
# Esegui l'inferenza su un'immagine
everything_results = model(source, device="cpu", retina_masks=True, imgsz=1024, conf=0.4, iou=0.9)
# Esegui l'inferenza con il prompt dei riquadri di delimitazione
results = model(source, bboxes=[439, 437, 524, 709])
# Esegui l'inferenza con un prompt basato su punti
results = model(source, points=[[200, 200]], labels=[1])
# Esegui l'inferenza con prompt testuali
results = model(source, texts="a photo of a dog")
# Esegui contemporaneamente l'inferenza con bbox, punti e prompt testuali
results = model(source, bboxes=[439, 437, 524, 709], points=[[200, 200]], labels=[1], texts="a photo of a dog")Questo frammento di codice mostra quanto sia semplice caricare un modello preaddestrato ed eseguire una previsione su un'immagine.
In questo modo puoi eseguire una sola inferenza sull'immagine e ottenere tutti i segmenti results, quindi eseguire l'inferenza con i prompt più volte senza ripetere l'inferenza sull'immagine.
from ultralytics.models.fastsam import FastSAMPredictor
# Crea FastSAMPredictor
overrides = {"conf": 0.25, "task": "segment", "mode": "predict", "model": "FastSAM-s.pt", "save": False, "imgsz": 1024}
predictor = FastSAMPredictor(overrides=overrides)
# Segmenta tutto
everything_results = predictor("ultralytics/assets/bus.jpg")
# Inferenza con prompt
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 gli oggetti results restituiti negli esempi precedenti sono oggetti Results, che consentono di accedere facilmente alle maschere predette e all'immagine sorgente.
Uso di val#
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 appartenenti alla stessa classe. Pertanto, quando prepari il dataset, devi convertire tutti gli ID delle categorie degli oggetti in 0.
La convalida del modello su un dataset può essere eseguita come segue:
from ultralytics import FastSAM
# Crea un modello FastSAM
model = FastSAM("FastSAM-s.pt") # oppure FastSAM-x.pt
# Convalida il modello
results = model.val(data="coco8-seg.yaml")Tracciamento#
Per eseguire il tracciamento degli oggetti in un'immagine, usa il metodo track come mostrato di seguito:
from ultralytics import FastSAM
# Crea un modello FastSAM
model = FastSAM("FastSAM-s.pt") # oppure FastSAM-x.pt
# Traccia con un modello FastSAM su un video
results = model.track(source="path/to/video.mp4", imgsz=640)Uso ufficiale di FastSAM#
FastSAM è disponibile anche direttamente dal repository CASIA-LMC-Lab/FastSAM. Ecco una breve panoramica dei passaggi tipici da seguire per usare FastSAM:
Installazione#
-
Clona il repository FastSAM:
git clone https://github.com/CASIA-LMC-Lab/FastSAM.git -
Crea e attiva un ambiente Conda con Python 3.9:
conda create -n FastSAM python=3.9 conda activate FastSAM -
Accedi al 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 d'uso#
-
Scarica un checkpoint del modello.
-
Usa FastSAM per l'inferenza. Esempi di comandi:
-
Segmenta tutti gli oggetti in un'immagine:
python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg -
Segmenta oggetti specifici usando un prompt testuale:
python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --text_prompt "the yellow dog" -
Segmenta gli oggetti all'interno di un riquadro di delimitazione (fornisci le coordinate del riquadro in formato xywh):
python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --box_prompt "[570,200,230,400]" -
Segmenta gli oggetti in prossimità di 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 di CASIA-LMC-Lab.
Citazioni e ringraziamenti#
Desideriamo ringraziare gli autori di FastSAM per il loro significativo contributo nel campo della segmentazione di 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}
}L'articolo originale su FastSAM è disponibile su arXiv. Gli autori hanno reso il loro lavoro disponibile al pubblico e il codice sorgente è accessibile su GitHub. Apprezziamo il loro impegno nel far progredire il settore e nel rendere il loro lavoro accessibile alla comunità più ampia.
Domande frequenti#
FastSAM, abbreviazione di Fast Segment Anything Model, è una soluzione basata su una rete neurale convoluzionale (CNN) in tempo reale, progettata per ridurre il fabbisogno computazionale mantenendo prestazioni elevate nelle attività di segmentazione degli oggetti. A differenza di Segment Anything Model (SAM), che utilizza un'architettura basata su Transformer più pesante, FastSAM sfrutta Ultralytics YOLOv8-seg per eseguire in modo efficiente la segmentazione delle istanze in due fasi: segmentazione di tutte le istanze, seguita dalla selezione guidata da prompt.
FastSAM ottiene la segmentazione in tempo reale separando l'attività in due fasi: segmentazione di tutte le istanze con YOLOv8-seg e selezione guidata da prompt. Sfruttando l'efficienza computazionale delle CNN, FastSAM riduce notevolmente il fabbisogno computazionale e di risorse mantenendo prestazioni competitive. Questo approccio a due fasi consente a FastSAM di offrire una segmentazione rapida ed efficiente, adatta alle applicazioni che richiedono risultati tempestivi.
FastSAM è adatto a diverse attività di visione artificiale che richiedono prestazioni di segmentazione in tempo reale. Le applicazioni includono:
- Automazione industriale per il controllo e la garanzia della qualità
- Analisi video in tempo reale per la sicurezza e la sorveglianza
- Veicoli autonomi per il rilevamento e la segmentazione degli oggetti
- Imaging medico per attività di segmentazione rapide e precise
La capacità di gestire vari prompt di interazione con l'utente rende FastSAM adattabile e flessibile in scenari diversi.
Per usare FastSAM per l'inferenza in Python, puoi seguire l'esempio seguente:
from ultralytics import FastSAM # Definisci una sorgente di inferenza source = "path/to/bus.jpg" # Crea un modello FastSAM model = FastSAM("FastSAM-s.pt") # oppure FastSAM-x.pt # Esegui l'inferenza su un'immagine everything_results = model(source, device="cpu", retina_masks=True, imgsz=1024, conf=0.4, iou=0.9) # Esegui l'inferenza con il prompt dei riquadri di delimitazione results = model(source, bboxes=[439, 437, 524, 709]) # Esegui l'inferenza con un prompt basato su punti results = model(source, points=[[200, 200]], labels=[1]) # Esegui l'inferenza con prompt testuali results = model(source, texts="a photo of a dog") # Esegui contemporaneamente l'inferenza con bbox, punti e prompt testuali 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, consulta la sezione Uso della predizione della documentazione.
FastSAM supporta diversi tipi di prompt per guidare le attività di segmentazione:
- Prompt per tutti gli oggetti: genera la segmentazione di tutti gli oggetti visibili.
- Prompt con riquadro di delimitazione (BBox): segmenta gli oggetti all'interno di un riquadro di delimitazione specificato.
- Prompt testuale: usa una descrizione testuale per segmentare gli oggetti che corrispondono alla descrizione.
- Prompt con punti: segmenta gli oggetti in prossimità di punti definiti dall'utente.
Questa flessibilità consente a FastSAM di adattarsi a un'ampia gamma di scenari di interazione con l'utente, ampliandone l'utilità nelle diverse applicazioni. Per ulteriori informazioni sull'uso di questi prompt, consulta la sezione Caratteristiche principali.