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

Panoramica#
FastSAM è progettato per affrontare i limiti del modello Segment Anything (SAM), un modello Transformer pesante con requisiti significativi in termini di risorse computazionali. FastSAM disaccoppia il task Segment Anything in due fasi sequenziali: segmentazione delle istanze di tutti gli oggetti e selezione guidata dal prompt. La prima fase usa YOLOv8-seg per produrre 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 per applicazioni industriali che richiedono risultati rapidi.
-
Efficienza e prestazioni: FastSAM offre una significativa riduzione dei requisiti computazionali e di risorse senza compromettere la qualità delle prestazioni. Raggiunge prestazioni paragonabili a SAM, ma con risorse computazionali drasticamente inferiori, consentendo applicazioni in tempo reale.
-
Segmentazione guidata dal prompt: FastSAM può segmentare qualsiasi oggetto all'interno di un'immagine, guidato da diversi possibili prompt di interazione dell'utente, offrendo flessibilità e adattabilità in scenari differenti.
-
Basato su YOLOv8-seg: FastSAM si basa su YOLOv8-seg, un rilevatore di oggetti dotato di un ramo per la segmentazione delle istanze. Ciò gli consente di produrre 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 raggiunge punteggi elevati a una velocità significativamente superiore rispetto a SAM su una singola NVIDIA RTX 3090, dimostrando la propria efficienza e capacità.
-
Applicazioni pratiche: l'approccio proposto offre una soluzione nuova e pratica per un gran numero di task di visione artificiale a una velocità davvero 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, aprendo così nuove possibilità per architetture di modelli di grandi dimensioni dedicate a task generali di visione artificiale.
Modelli disponibili, attività supportate e modalità operative#
Questa tabella presenta i modelli disponibili con i relativi pesi preaddestrati, le attività supportate e la compatibilità con diverse modalità operative, come Inferenza, Validazione, Addestramento ed Esportazione, indicate dalle emoji ✅ per le modalità supportate e dalle emoji ❌ per quelle non supportate.
| Tipo di modello | Pesi preaddestrati | Attività supportate | Addestramento | Convalida | Inferenza | Esportazione |
|---|---|---|---|---|---|---|
| FastSAM-s | FastSAM-s.pt | Segmentazione delle istanze | ❌ | ✅ | ✅ | ✅ |
| FastSAM-x | FastSAM-x.pt | Segmentazione delle istanze | ❌ | ✅ | ✅ | ✅ |
Confronto tra FastSAM e YOLO#
Qui confrontiamo FastSAM-s con le varianti SAM di Meta e 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,0 volte più piccolo) | 3,4 (11,4 volte in meno) | 24,8 (945 volte più veloce) |
| Ultralytics YOLO11n-seg | 6.2 (12.6 volte più piccolo) | 2,9 (13,4 volte in meno) | 24.3 (964 volte più veloce) |
| Ultralytics YOLO26n-seg | 6,7 (11,7 volte più piccolo) | 2.7 (14.4 volte in meno) | 25,2 (930 volte più veloce) |
Questo confronto evidenzia le notevoli differenze nelle dimensioni e nelle velocità dei modelli tra le varianti di SAM e i modelli di segmentazione YOLO. Sebbene SAM offra capacità di segmentazione automatica uniche, i modelli YOLO, in particolare YOLOv8n-seg, YOLO11n-seg e YOLO26n-seg, sono significativamente più piccoli, veloci ed efficienti dal punto di vista computazionale.
Le velocità di SAM sono state misurate con PyTorch, mentre quelle di YOLO sono state misurate con ONNX Runtime. I test sono stati eseguiti su un Apple M4 Air del 2025 con 16 GB 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, nms=False) # YOLO26 NMS-free head; no-op for YOLOv8/YOLO11
model = YOLO(onnx_path)
model(ASSETS)Esempi di utilizzo#
I modelli FastSAM sono facili da integrare nelle tue applicazioni Python. Ultralytics offre comandi Python API e CLI intuitivi per semplificare lo sviluppo.
Utilizzo della previsione#
Per segmentare 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 frammento mostra quanto sia semplice caricare un modello pretrained ed eseguire una previsione su un'immagine.
In questo modo puoi eseguire l'inferenza su un'immagine e ottenere tutte le results una volta sola, quindi eseguire l'inferenza dei prompt più volte senza ripetere l'inferenza.
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")Tutti gli results restituiti negli esempi precedenti sono oggetti Results, che consentono di accedere facilmente alle maschere predette e all'immagine di origine.
Utilizzo della validazione#
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 validazione del modello su un dataset può essere eseguita 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")Utilizzo del tracking#
Per eseguire il tracking 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 CASIA-LMC-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-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 di utilizzo#
-
Scarica un checkpoint del modello.
-
Usa FastSAM per l'inferenza. Esempi di comandi:
-
Segmenta tutto ciò che compare 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 nel formato xywh):
python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --box_prompt "[570,200,230,400]" -
Segmenta gli oggetti vicini 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 di CASIA-LMC-Lab.
Citazioni e ringraziamenti#
Desideriamo riconoscere il contributo degli autori di FastSAM per il loro importante lavoro 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}
}L'articolo originale su FastSAM è disponibile su arXiv. Gli autori hanno reso il loro lavoro disponibile pubblicamente e il codice sorgente è accessibile su GitHub. Apprezziamo i loro sforzi nel far progredire il settore e nel rendere il loro lavoro accessibile a una comunità più ampia.
FAQ#
FastSAM, abbreviazione di Fast Segment Anything Model, è una soluzione in tempo reale basata su una rete neurale convoluzionale (CNN), progettata per ridurre i requisiti computazionali mantenendo prestazioni elevate nei task di segmentazione degli oggetti. A differenza del modello Segment Anything (SAM), che usa un'architettura più pesante basata su Transformer, FastSAM sfrutta Ultralytics YOLOv8-seg per una segmentazione efficiente delle istanze in due fasi: segmentazione di tutte le istanze seguita dalla selezione guidata dal prompt.
FastSAM raggiunge la segmentazione in tempo reale disaccoppiando il task di segmentazione in due fasi: segmentazione di tutte le istanze con YOLOv8-seg e selezione guidata dal prompt. Utilizzando l'efficienza computazionale delle CNN, FastSAM riduce significativamente i requisiti computazionali 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 veloci.
FastSAM è adatto a una varietà di task 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 sicurezza e sorveglianza
- Veicoli autonomi per il rilevamento e la segmentazione degli oggetti
- Imaging medico per task di segmentazione precisi e rapidi
La capacità di gestire diversi prompt di interazione dell'utente rende FastSAM adattabile e flessibile in scenari differenti.
Per usare FastSAM per l'inferenza in Python, puoi seguire l'esempio seguente:
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, consulta la sezione Utilizzo della previsione della documentazione.
FastSAM supporta diversi tipi di prompt per guidare i task di segmentazione:
- Prompt Everything: 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 un testo descrittivo per segmentare gli oggetti che corrispondono alla descrizione.
- Prompt puntuale: segmenta gli oggetti vicini a punti specifici definiti dall'utente.
Questa flessibilità consente a FastSAM di adattarsi a un'ampia gamma di scenari di interazione dell'utente, ampliandone l'utilità in applicazioni diverse. Per maggiori informazioni sull'uso di questi prompt, consulta la sezione Funzionalità principali.