Vai al contenuto

Fast Segment Anything Model (FastSAM)

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



Guarda: Tracciamento degli oggetti utilizzando FastSAM con Ultralytics

Architettura del modello

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

Panoramica

FastSAM è progettato per affrontare le limitazioni del Segment Anything Model (SAM), un modello Transformer pesante con notevoli requisiti di risorse computazionali. FastSAM disaccoppia l'attività di segmentazione di qualsiasi cosa 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

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

  2. Efficienza e prestazioni: FastSAM offre una significativa riduzione delle esigenze computazionali e di risorse senza compromettere la qualità delle prestazioni. Ottiene prestazioni paragonabili a SAM ma con risorse computazionali drasticamente ridotte, consentendo applicazioni in tempo reale.

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

  4. Basato su YOLOv8-seg: FastSAM è basato su YOLOv8-seg, un object detector dotato di un branch di instance segmentation. Ciò gli consente di produrre efficacemente le maschere di segmentazione di tutte le istanze in un'immagine.

  5. Risultati competitivi sui benchmark: Nell'attività di proposta di oggetti su MS COCO, FastSAM ottiene punteggi elevati a una velocità significativamente più elevata 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 ad 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 che può ridurre significativamente lo sforzo computazionale introducendo un precedente artificiale alla struttura, aprendo così nuove possibilità per l'architettura di modelli di grandi dimensioni per attività di visione generali.

Modelli disponibili, attività supportate e modalità operative

Questa tabella presenta i modelli disponibili con i loro pesi pre-addestrati specifici, le attività che supportano e la loro compatibilità con diverse modalità operative come Inferenza, Validazione, Addestramento ed Esportazione, indicate da emoji ✅ per le modalità supportate ed emoji ❌ per le modalità non supportate.

Tipo di modello Pesi pre-addestrati Task supportati Inferenza Validazione Training Esportazione
FastSAM-s FastSAM-s.pt Segmentazione delle istanze
FastSAM-x FastSAM-x.pt Segmentazione delle istanze

Confronto tra FastSAM e YOLO

Qui confrontiamo i modelli SAM 2 di Meta, inclusa la variante più piccola SAM2-t, con il modello di segmentazione più piccolo di Ultralytics, YOLO11n-seg:

Modello Dimensione
(MB)
Parametri
(M)
Velocità (CPU)
(ms/im)
Meta SAM-b 375 93.7 49401
Meta SAM2-b 162 80.8 31901
Meta SAM2-t 78.1 38.9 25997
MobileSAM 40.7 10.1 25381
FastSAM-s con backbone YOLOv8 23.7 11.8 55.9
Ultralytics YOLOv8n-seg 6.7 (11.7 volte più piccolo) 3.4 (11.4 volte inferiore) 24.5 (1061 volte più veloce)
Ultralytics YOLO11n-seg 5.9 (13,2 volte più piccolo) 2.9 (13,4 volte inferiore) 30.1 (864 volte 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 capacità uniche di segmentazione automatica, i modelli YOLO, in particolare YOLOv8n-seg e YOLO11n-seg, sono significativamente più piccoli, più veloci e più efficienti dal punto di vista computazionale.

Test eseguiti su un Apple M4 Pro 2025 con 24 GB di RAM utilizzando torch==2.6.0 e ultralytics==8.3.90. 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
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt"]:
    model = YOLO(file_name)
    model.info()
    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 della previsione

Per eseguire il rilevamento di oggetti su un'immagine, usa il predict method 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")
# Load a FastSAM model and segment everything with it
yolo segment predict model=FastSAM-s.pt source=path/to/bus.jpg imgsz=640

Questo snippet dimostra la semplicità di caricare un modello pre-addestrato 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 una volta ed esegui l'inferenza delle richieste più volte senza eseguire 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")

Nota

Tutti i risultati restituiti results negli esempi sopra sono Risultati oggetto che consente di accedere facilmente alle maschere predette e all'immagine sorgente.

Utilizzo di Val

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")
# Load a FastSAM model and validate it on the COCO8 example dataset at image size 640
yolo segment val model=FastSAM-s.pt data=coco8.yaml imgsz=640

Si prega di notare 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, durante la preparazione del dataset, è necessario convertire tutti gli ID delle categorie di oggetti in 0.

Utilizzo della traccia

Per eseguire il tracciamento degli oggetti su un'immagine, utilizzare track method 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)
yolo segment track model=FastSAM-s.pt 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 intraprendere per utilizzare 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. Spostarsi nel repository clonato e installare i pacchetti richiesti:

    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. Utilizza FastSAM per l'inferenza. Comandi di esempio:

    • Segmenta qualsiasi cosa 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 oggetti all'interno di un bounding box (fornisci le coordinate del box 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 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 pubblicamente disponibile e il codice può essere consultato 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 in tempo reale basata su reti neurali convoluzionali (CNN) progettata per ridurre le esigenze computazionali mantenendo alte prestazioni nelle attività 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 una segmentazione efficiente delle istanze in due fasi: segmentazione di tutte le istanze seguita dalla selezione guidata da prompt.

Come fa FastSAM a raggiungere prestazioni di segmentazione in tempo reale?

FastSAM raggiunge la segmentazione in tempo reale disaccoppiando l'attività 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 delle richieste computazionali e di risorse, pur mantenendo prestazioni competitive. Questo approccio a due fasi consente a FastSAM di fornire una segmentazione rapida ed efficiente adatta per applicazioni che richiedono risultati rapidi.

Quali sono le applicazioni pratiche di FastSAM?

FastSAM è pratico per una varietà di attività di computer vision 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 la sicurezza e la sorveglianza
  • Veicoli autonomi per il rilevamento e la segmentazione di oggetti
  • Imaging medicale per attività di segmentazione precise e rapide

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

Come posso usare 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 i task di segmentazione?

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

  • Prompt completo: Genera la segmentazione per tutti gli oggetti visibili.
  • Prompt Bounding Box (BBox): Segmenta gli oggetti all'interno di un bounding box specificato.
  • Prompt testuale: Utilizza un testo descrittivo per segmentare gli oggetti che corrispondono 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, consultare la sezione Key Features.



📅 Creato 1 anno fa ✏️ Aggiornato 2 mesi fa

Commenti