YOLO Vision 2026:

Fast Segment Anything Model (FastSAM)#

Il Fast Segment Anything Model (FastSAM) è una soluzione innovativa basata su CNN in tempo reale per l'attività di Segment Anything. Questa attività è progettata 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 pur mantenendo prestazioni competitive, rendendolo una scelta pratica per una varietà di attività di visione artificiale.



Watch: Object Tracking using FastSAM with Ultralytics

Architettura del modello#

Panoramica dell'architettura di Fast Segment Anything Model (FastSAM)

Panoramica#

FastSAM è progettato per superare i limiti del Segment Anything Model (SAM), un pesante modello Transformer con notevoli requisiti di risorse computazionali. FastSAM scompone il compito di segmentare qualsiasi cosa in due fasi sequenziali: segmentazione di tutte le istanze e selezione guidata da prompt. La prima fase utilizza YOLOv8-seg per generare le maschere di segmentazione di tutte le istanze nell'immagine. Nella seconda fase, restituisce la regione di interesse corrispondente al prompt.

Caratteristiche principali#

  1. Soluzione in tempo reale: Sfruttando l'efficienza computazionale delle CNN, FastSAM fornisce una soluzione in tempo reale per l'attività di segmentazione, rendendolo prezioso per applicazioni industriali che richiedono risultati rapidi.

  2. 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.

  3. Segmentazione guidata da prompt: FastSAM può segmentare qualsiasi oggetto all'interno di un'immagine guidato da vari possibili prompt di interazione dell'utente, fornendo flessibilità e adattabilità in diversi scenari.

  4. Basato su YOLOv8-seg: FastSAM si basa su YOLOv8-seg, un rilevatore di oggetti dotato di un ramo di segmentazione delle istanze. Questo gli consente di produrre efficacemente le maschere di segmentazione di tutte le istanze in un'immagine.

  5. Risultati competitivi sui benchmark: Nel compito 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à.

  6. Applicazioni pratiche: L'approccio proposto fornisce una nuova soluzione pratica per un gran numero di attività di visione a una velocità davvero elevata, decine o centinaia di volte più veloce rispetto ai metodi attuali.

  7. 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 grandi modelli per attività di visione generale.

Modelli disponibili, attività supportate e modalità operative#

Questa tabella presenta i modelli disponibili con i rispettivi pesi pre-addestrati specifici, i compiti che supportano e la loro compatibilità con diverse modalità operative come Inference, Validation, Training e Export, indicate dalle emoji ✅ per le modalità supportate e ❌ per quelle non supportate.

Tipo di modelloPesi pre-addestratiAttività supportateAddestramentoValidazioneInferenzaEsportazione
FastSAM-sFastSAM-s.ptSegmentazione di istanze
FastSAM-xFastSAM-x.ptSegmentazione di istanze

Confronto tra FastSAM e YOLO#

Qui confrontiamo i modelli SAM 2 di Meta, inclusa la variante più piccola SAM2-t, con i modelli di segmentazione Ultralytics tra cui YOLO26n-seg:

ModelloDimensioni
(MB)
Parametri
(M)
Velocità (CPU)
(ms/im)
Meta SAM-b37593.741703
Meta SAM2-b16280.828867
Meta SAM2-t78.138.923430
MobileSAM40.710.123802
FastSAM-s con backbone YOLOv823.911.858.0
Ultralytics YOLOv8n-seg7.1 (11.0x più piccolo)3.4 (11.4x in meno)24.8 (945x più veloce)
Ultralytics YOLO11n-seg6.2 (12.6x più piccolo)2.9 (13.4x in meno)24.3 (964x più veloce)
Ultralytics YOLO26n-seg6.7 (11.7x più piccolo)2.7 (14.4x in 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 fornisce capacità di segmentazione automatica uniche, 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.

Velocità di SAM misurate con PyTorch, velocità di YOLO misurate con ONNX Runtime. Test 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:

Esempio
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 e comandi CLI intuitivi per semplificare lo sviluppo.

Utilizzo di Predict#

Per eseguire il rilevamento di oggetti su un'immagine, usa il metodo predict come mostrato di seguito:

Esempio
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 previsione su un'immagine.

Esempio di FastSAMPredictor

In questo modo puoi eseguire l'inferenza sull'immagine e ottenere tutti i segmenti results in una sola volta, ed eseguire l'inferenza dei prompt più volte senza dover 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")
Nota

Tutti gli oggetti results restituiti negli esempi precedenti sono oggetti Results che consentono di accedere facilmente alle maschere predette e all'immagine sorgente.

Utilizzo 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 la stessa classe. Pertanto, durante la preparazione del set di dati, è necessario convertire tutti gli ID delle categorie di oggetti in 0.

La convalida del modello su un set di dati può essere eseguita come segue:

Esempio
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 di Track#

Per eseguire il tracciamento degli oggetti su un'immagine, usa il metodo track come mostrato di seguito:

Esempio
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 seguire per usare FastSAM:

Installazione#

  1. Clona il repository FastSAM:

    git clone https://github.com/CASIA-IVA-Lab/FastSAM.git
  2. Crea e attiva un ambiente Conda con Python 3.9:

    conda create -n FastSAM python=3.9
    conda activate FastSAM
  3. Passa al repository clonato e installa i pacchetti necessari:

    cd FastSAM
    pip install -r requirements.txt
  4. Installa il modello CLIP:

    pip install git+https://github.com/ultralytics/CLIP.git

Esempio di utilizzo#

  1. Scarica un checkpoint del modello.

  2. Usa FastSAM per l'inferenza. Esempio di comandi:

    • Segmenta tutto in un'immagine:

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg
    • Segmenta oggetti specifici utilizzando un prompt di testo:

      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 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 di CASIA-IVA-Lab.

Citazioni e riconoscimenti#

Desideriamo ringraziare gli autori di FastSAM per i loro significativi contributi nel campo dell'instance segmentation in tempo reale:

Citazione
  @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 pubblicamente disponibile e il codice sorgente è accessibile su GitHub. Ringraziamo gli autori per il loro impegno nel far progredire il settore e nel rendere il loro lavoro accessibile alla community.

FAQ#

Cos'è FastSAM e in cosa differisce da SAM?#

FastSAM, acronimo di Fast Segment Anything Model, è una soluzione in tempo reale basata su rete neurale convoluzionale (CNN) progettata per ridurre le richieste di calcolo mantenendo alte performance nei compiti 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 l'attività di segmentazione in una fase di segmentazione di tutte le istanze con YOLOv8-seg e una fase di selezione guidata da prompt. Utilizzando l'efficienza computazionale delle CNN, FastSAM offre riduzioni significative delle richieste computazionali e di risorse pur mantenendo prestazioni competitive. Questo approccio a due fasi consente a FastSAM di fornire una segmentazione veloce ed efficiente, adatta ad applicazioni che richiedono risultati rapidi.

Quali sono le applicazioni pratiche di FastSAM?#

FastSAM è pratico per una varietà di compiti di visione artificiale che richiedono prestazioni di segmentazione in tempo reale. Le applicazioni includono:

  • Automazione industriale per il controllo e l'assicurazione della qualità
  • Analisi video in tempo reale per sicurezza e sorveglianza
  • Veicoli autonomi per il rilevamento e la segmentazione degli oggetti
  • Imaging medico per attività di segmentazione precise e rapide

La sua capacità di gestire vari prompt di interazione dell'utente rende FastSAM adattabile e flessibile per diversi scenari.

Come utilizzo il modello FastSAM per l'inferenza in Python?#

Per utilizzare 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, consulta la sezione Predict Usage della documentazione.

Quali tipi di prompt supporta FastSAM per le attività di segmentazione?#

FastSAM supporta molteplici tipi di prompt per guidare le attività di segmentazione:

  • Everything Prompt: Genera la segmentazione per tutti gli oggetti visibili.
  • Bounding Box (BBox) Prompt: Segmenta gli oggetti all'interno di un bounding box specificato.
  • Text Prompt: Utilizza un testo descrittivo per segmentare gli oggetti corrispondenti alla descrizione.
  • Point Prompt: Segmenta gli oggetti vicino a punti specifici definiti dall'utente.

Questa flessibilità consente a FastSAM di adattarsi a un'ampia gamma di scenari di interazione con l'utente, migliorandone l'utilità in diverse applicazioni. Per ulteriori informazioni sull'utilizzo di questi prompt, fai riferimento alla sezione Key Features.

Commenti