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, rendendolo una scelta pratica per una varietà di compiti di visione.



Guarda: Tracciamento di oggetti tramite 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: lasegmentazione di tutte le istanze e la selezione guidata dal prompt. Il primo stadio utilizza YOLOv8-seg per produrre le maschere di segmentazione di tutte le istanze dell'immagine. Nel secondo stadio, viene prodotta 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 significativa riduzione dei requisiti di calcolo e di risorse senza compromettere la qualità delle prestazioni. Raggiunge prestazioni paragonabili a quelle di SAM ma con risorse computazionali drasticamente ridotte, consentendo applicazioni in tempo reale.

  3. Segmentazione guidata da prompt: FastSAM è in grado di segmentare qualsiasi oggetto all'interno di un'immagine guidati 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. SAM su un singolo 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 più veloce dei 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, Addestramento 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 delle istanze
FastSAM-x FastSAM-x.pt Segmentazione delle istanze

Esempi di utilizzo

I modelli FastSAM sono facili da integrare nelle applicazioni Python . Ultralytics fornisce API Python e comandi CLI di facile utilizzo per semplificare lo sviluppo.

Prevedere l'utilizzo

Per eseguire rilevamento degli oggetti su un'immagine, utilizzare l'opzione 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")
# 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 è possibile eseguire l'inferenza sull'immagine e ottenere tutti i segmenti results una volta ed eseguire l'inferenza dei prompt 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 dati restituiti results negli esempi precedenti sono Risultati che consente 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

Si noti 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 si prepara il set di dati, è necessario convertire tutti gli ID di categoria degli oggetti in 0.

Utilizzo della traccia

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

FastSAM Uso ufficiale

FastSAM è disponibile anche direttamente dal repository https://github.com/CASIA-IVA-Lab/FastSAM. Ecco una breve panoramica dei passi tipici che si possono compiere per utilizzare FastSAM:

Installazione

  1. Clonare il repository FastSAM :

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

    conda create -n FastSAM python=3.9
    conda activate FastSAM
    
  3. Navigare nel repository clonato e installare i pacchetti necessari:

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

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

Esempio di utilizzo

  1. Scaricare un modello di checkpoint.

  2. Utilizzare FastSAM per l'inferenza. Comandi di esempio:

    • Segmentare tutto ciò che è presente in un'immagine:

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg
      
    • Segmentare oggetti specifici utilizzando una richiesta 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 rettangolo di selezione (fornire le coordinate del rettangolo in formato xywh):

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --box_prompt "[570,200,230,400]"
      
    • Segmentare 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, è possibile 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 contributi significativi 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 pubblicamente disponibile 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.

FAQ

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

FastSAM, abbreviazione di Fast Segment Anything Model, è una soluzione in tempo reale basata su reti neurali convoluzionali (CNN), progettata per ridurre i requisiti computazionali mantenendo alte le prestazioni 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 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 raggiunge la 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 significativa riduzione dei requisiti di calcolo e di risorse, mantenendo al contempo prestazioni competitive. Questo approccio a due stadi consente a FastSAM di fornire 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 medicale per compiti di segmentazione precisi e rapidi

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

Come si utilizza il modello FastSAM per l'inferenza in Python?

Per utilizzare FastSAM per l'inferenza in Python, si può seguire l'esempio seguente:

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, consultare la sezione Previsione dell'uso della documentazione.

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

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

  • Tutto il resto: Genera la 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 punto: Segmenta gli oggetti in prossimità di 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'uso di questi prompt, consultare la sezione Caratteristiche principali.

📅C reato 1 anno fa ✏️ Aggiornato 2 mesi fa

Commenti