Vai al contenuto

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 dell'architettura del Fast Segment Anything Model (FastSAM)

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

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

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

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

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

  5. 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à.

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

  7. 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, Validazione, 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='./')
# 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.

Utilizzo di Val

La convalida del modello su un set di dati può essere effettuata 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

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.

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

  1. Clona il repository FastSAM :
git clone https://github.com/CASIA-IVA-Lab/FastSAM.git
  1. Crea e attiva un ambiente Conda con Python 3.9:
conda create -n FastSAM python=3.9
conda activate FastSAM
  1. Naviga nel repository clonato e installa i pacchetti necessari:
cd FastSAM
pip install -r requirements.txt
  1. Installa il modello CLIP:
    pip install git+https://github.com/openai/CLIP.git
    

Esempio di utilizzo

  1. Scarica un modello di checkpoint.

  2. Usa FastSAM per l'inferenza. Esempi 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 (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:
      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 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:

@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}
}

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-01-25
Autori: glenn-jocher (7), berry-ding (1)

Commenti