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.



Guarda: Tracciamento degli oggetti con FastSAM con Ultralytics

Modello di architettura

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: Nel compito di proposta di oggetti su MS COCO, FastSAM ottiene punteggi elevati a una velocità significativamente superiore a quella di un singolo RTX 3090, dimostrando la sua efficienza e le sue capacità. SAM su una singola RTX 3090 di NVIDIA , 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, 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
results = prompt_process.everything_prompt()

# Bbox default shape [0,0,0,0] -> [x1,y1,x2,y2]
results = prompt_process.box_prompt(bbox=[200, 200, 300, 300])

# Text prompt
results = 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
results = prompt_process.point_prompt(points=[[200, 200]], pointlabel=[1])
prompt_process.plot(annotations=results, 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.

Nota

Tutti i risultati restituiti results negli esempi precedenti sono Risultati che permette di accedere facilmente alle maschere previste e all'immagine di partenza.

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.

Utilizzo del tracciato

Per eseguire il tracciamento di un oggetto su un'immagine, usa la funzione 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)
yolo segment track model=FastSAM-s.pt source="path/to/video/file.mp4" imgsz=640

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
    
  2. Crea e attiva un ambiente Conda con Python 3.9:

    conda create -n FastSAM python=3.9
    conda activate FastSAM
    
  3. Naviga nel 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 modello di checkpoint.

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

    • Segmenta tutto ciò che è presente 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.

DOMANDE FREQUENTI

Che cos'è FastSAM e come si differenzia da SAM?

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 alte le 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 un'efficiente segmentazione dell'istanza in due fasi: segmentazione dell'intera istanza seguita da una selezione guidata dal prompt.

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

FastSAM ottiene una segmentazione in tempo reale disaccoppiando l'attività di segmentazione in una segmentazione all-instance con YOLOv8-seg e fasi di selezione guidate dal prompt. Utilizzando l'efficienza computazionale delle CNN, FastSAM offre una riduzione significativa dei requisiti di calcolo e di risorse, pur mantenendo prestazioni competitive. Questo approccio a due fasi consente a FastSAM di offrire una segmentazione rapida ed efficiente, adatta alle applicazioni che richiedono risultati rapidi.

Quali sono le applicazioni pratiche di FastSAM?

FastSAM è pratico per una serie di compiti di computer vision 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 la sicurezza e la sorveglianza
  • Veicoli autonomi per il rilevamento e la segmentazione degli oggetti
  • Imaging medico per operazioni di segmentazione precise e veloci

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

Come posso utilizzare il modello FastSAM per l'inferenza in Python?

Per utilizzare FastSAM per l'inferenza in Python, puoi seguire l'esempio seguente:

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()

# Bounding box prompt
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
ann = prompt_process.point_prompt(points=[[200, 200]], pointlabel=[1])
prompt_process.plot(annotations=ann, output="./")

Per maggiori dettagli sui metodi di inferenza, consulta la sezione Predict Usage della documentazione.

Quali tipi di messaggi supporta FastSAM per le attività di segmentazione?

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

  • Prompt tutto: Genera una segmentazione per tutti gli oggetti visibili.
  • Prompt Bounding Box (BBox): Segmenta gli oggetti all'interno di un rettangolo di selezione specificato.
  • Prompt di testo: Utilizza un testo descrittivo per segmentare gli oggetti che corrispondono alla descrizione.
  • Prompt di punti: Segmenta gli oggetti in prossimità di punti specifici definiti dall'utente.

Questa flessibilità permette a FastSAM di adattarsi a un'ampia gamma di scenari di interazione con l'utente, migliorando la sua utilità in diverse applicazioni. Per maggiori informazioni sull'utilizzo di questi prompt, consulta la sezione Caratteristiche principali.



Creato 2023-11-12, Aggiornato 2024-07-18
Autori: Ridere-q (2), glenn-jocher (13), RizwanMunawar (2), berry-ding (1)

Commenti