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
FastSAM is designed to address the limitations of the Segment Anything Model (SAM), a heavy Transformer model with substantial computational resource requirements. The FastSAM decouples the segment anything task into two sequential stages: all-instance segmentation and prompt-guided selection. The first stage uses YOLOv8-seg to produce the segmentation masks of all instances in the image. In the second stage, it outputs the region-of-interest corresponding to the 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: 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à.
-
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
To perform object detection on an image, use the 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")
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 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
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:
-
Segment objects within a bounding box (provide box coordinates in xywh format):
-
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.
DOMANDE FREQUENTI
Che cos'è FastSAM e come si differenzia da SAM?
FastSAM, short for Fast Segment Anything Model, is a real-time convolutional neural network (CNN)-based solution designed to reduce computational demands while maintaining high performance in object segmentation tasks. Unlike the Segment Anything Model (SAM), which uses a heavier Transformer-based architecture, FastSAM leverages Ultralytics YOLOv8-seg for efficient instance segmentation in two stages: all-instance segmentation followed by prompt-guided selection.
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 is practical for a variety of computer vision tasks that require real-time segmentation performance. Applications include:
- 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
# 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 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.