Modello di Segmento Veloce Qualsiasi (FastSAM)
Il Fast Segment Anything Model (FastSAM) è una soluzione innovativa e in tempo reale basata su CNN per il compito Segment Anything. Questo compito è stato progettato per segmentare qualsiasi oggetto all'interno di un'immagine in base a diverse possibili richieste di interazione da parte dell'utente. FastSAM riduce in modo significativo i requisiti computazionali mantenendo prestazioni competitive, il che lo rende una scelta pratica per una serie di compiti di visione.
Panoramica
FastSAM è stato progettato per risolvere i limiti del Segment Anything Model (SAM), un modello di trasformatore pesante che richiede notevoli risorse computazionali. FastSAM disaccoppia il compito di segmentare qualsiasi cosa in due fasi sequenziali: la segmentazione di tutte le istanze e la selezione guidata da un prompt. La prima fase utilizza YOLOv8-seg per produrre le maschere di segmentazione di tutte le istanze dell'immagine. Nella seconda fase, produce la regione di interesse corrispondente al prompt.
Caratteristiche principali
-
Soluzione in tempo reale: Sfruttando l'efficienza computazionale delle CNN, FastSAM offre una soluzione in tempo reale per il compito di segmentare qualsiasi cosa, rendendolo prezioso per le applicazioni industriali che richiedono risultati rapidi.
-
Efficienza e prestazioni: FastSAM offre una riduzione significativa della richiesta di risorse e calcoli senza compromettere la qualità delle prestazioni. Raggiunge prestazioni paragonabili a quelle di SAM ma con risorse di calcolo drasticamente ridotte, consentendo applicazioni in tempo reale.
-
Segmentazione guidata da prompt: FastSAM è in grado di segmentare qualsiasi oggetto all'interno di un'immagine guidata da vari prompt di interazione con l'utente, garantendo flessibilità e adattabilità in diversi scenari.
-
Basato su YOLOv8 -seg: FastSAM è basato su YOLOv8-seg, un rilevatore di oggetti dotato di un ramo di segmentazione delle istanze. Questo gli permette di produrre efficacemente le maschere di segmentazione di tutte le istanze presenti in un'immagine.
-
Risultati competitivi sui benchmark: Nell'attività di proposta di oggetti su MS COCO, FastSAM ottiene punteggi elevati a una velocità significativamente superiore a quella di una singola NVIDIA RTX 3090. SAM su una singola NVIDIA RTX 3090, dimostrando la sua efficienza e capacità.
-
Applicazioni pratiche: L'approccio proposto fornisce una soluzione nuova e pratica per un gran numero di compiti di visione a una velocità davvero elevata, decine o centinaia di volte superiore ai metodi attuali.
-
Fattibilità della compressione del modello: FastSAM dimostra la fattibilità di un percorso che può ridurre significativamente lo sforzo computazionale introducendo un antecedente artificiale alla struttura, aprendo così nuove possibilità per l'architettura di modelli di grandi dimensioni per compiti di visione generale.
Modelli disponibili, attività supportate e modalità operative
Questa tabella presenta i modelli disponibili con i loro pesi specifici pre-addestrati, i compiti che supportano e la loro compatibilità con diverse modalità operative come Inferenza, Convalida, Formazione ed Esportazione, indicate da ✅ emoji per le modalità supportate e ❌ emoji per le modalità non supportate.
Tipo di modello | Pesi pre-addestrati | Attività supportate | Inferenza | Convalida | Formazione | Esportazione |
---|---|---|---|---|---|---|
FastSAM-s | FastSAM-s.pt | Segmentazione dell'istanza | ✅ | ❌ | ❌ | ✅ |
FastSAM-x | FastSAM-x.pt | Segmentazione dell'istanza | ✅ | ❌ | ❌ | ✅ |
Esempi di utilizzo
I modelli FastSAM sono facili da integrare nelle tue applicazioni Python . Ultralytics fornisce API Python e comandi CLI di facile utilizzo per semplificare lo sviluppo.
Prevedere l'utilizzo
Per eseguire il rilevamento di un oggetto su un'immagine, usa la funzione predict
come mostrato di seguito:
Esempio
from ultralytics import FastSAM
from ultralytics.models.fastsam import FastSAMPrompt
# 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)
# Prepare a Prompt Process object
prompt_process = FastSAMPrompt(source, everything_results, device='cpu')
# Everything prompt
ann = prompt_process.everything_prompt()
# Bbox default shape [0,0,0,0] -> [x1,y1,x2,y2]
ann = prompt_process.box_prompt(bbox=[200, 200, 300, 300])
# Text prompt
ann = prompt_process.text_prompt(text='a photo of a dog')
# Point prompt
# points default [[0,0]] [[x1,y1],[x2,y2]]
# point_label default [0] [1,0] 0:background, 1:foreground
ann = prompt_process.point_prompt(points=[[200, 200]], pointlabel=[1])
prompt_process.plot(annotations=ann, output='./')
Questo snippet dimostra la semplicità di caricare un modello pre-addestrato ed eseguire una previsione su un'immagine.
Utilizzo di Val
La convalida del modello su un set di dati può essere effettuata come segue:
Esempio
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 set di dati, devi convertire tutti gli ID delle categorie di oggetti a 0.
Utilizzo del tracciato
Per eseguire il tracciamento di un oggetto su un'immagine, usa la funzione track
come mostrato di seguito:
Esempio
FastSAM Uso ufficiale
FastSAM è anche disponibile direttamente dal repository https://github.com/CASIA-IVA-Lab/FastSAM. Ecco una breve panoramica dei passi tipici che potresti compiere per utilizzare FastSAM:
Installazione
- Clona il repository FastSAM :
- Crea e attiva un ambiente Conda con Python 3.9:
- Naviga nel repository clonato e installa i pacchetti necessari:
- Installa il modello CLIP:
Esempio di utilizzo
-
Scarica un modello di checkpoint.
-
Usa FastSAM per l'inferenza. Esempi di comandi:
- Segmenta tutto ciò che è presente in un'immagine:
- 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 (fornire 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:
Inoltre, puoi provare FastSAM attraverso una demo di Colab o la demo web diHuggingFace per un'esperienza visiva.
Citazioni e ringraziamenti
Desideriamo ringraziare gli autori di FastSAM per i loro significativi contributi nel campo della segmentazione delle istanze in tempo reale:
Il documento originale FastSAM è disponibile su arXiv. Gli autori hanno reso il loro lavoro disponibile al pubblico e la base di codice è accessibile su GitHub. Apprezziamo i loro sforzi per far progredire il campo e rendere il loro lavoro accessibile a una comunità più ampia.
Creato 2023-11-12, Aggiornato 2024-05-01
Autori: RizwanMunawar (1), glenn-jocher (8), Laughing-q (1), berry-ding (1)