Guida alle attività di rilevamento di oggetti

L'attività Rilevamento di oggetti MediaPipe consente di rilevare la presenza e la posizione di più classi di oggetti all'interno di immagini o video. Ad esempio, un rilevatore di oggetti può individuare dei cani in un'immagine. Questa attività opera sui dati di immagine con un modello di machine learning (ML), accettando dati statici o un flusso video continuo come input e generando un elenco dei risultati del rilevamento. Ogni risultato del rilevamento rappresenta un oggetto che compare nell'immagine o nel video.

Prova!

Inizia

Inizia a utilizzare questa attività seguendo una di queste guide all'implementazione per la piattaforma su cui stai lavorando:

Queste guide specifiche per piattaforma illustrano l'implementazione di base di questa attività, inclusi un modello consigliato ed un esempio di codice con le opzioni di configurazione consigliate.

Dettagli attività

Questa sezione descrive le funzionalità, gli input e gli output di questa attività.

Funzionalità

  • Elaborazione dell'immagine in input: l'elaborazione include la rotazione, il ridimensionamento, la normalizzazione e la conversione dello spazio colore dell'immagine.
  • Impostazioni internazionali mappa etichette: imposta la lingua utilizzata per i nomi visualizzati.
  • Soglia punteggio: filtra i risultati in base ai punteggi delle previsioni.
  • Rilevamento top-k: filtra i risultati del rilevamento dei numeri.
  • Lista consentita e lista bloccata: specifica le categorie rilevate.
Input attività Output attività
L'API Object Detector accetta un input di uno dei seguenti tipi di dati:
  • Immagini statiche
  • Fotogrammi video decodificati
  • Feed video in diretta
L'API Object Detector genera i seguenti risultati per gli oggetti rilevati:
  • Categoria dell'oggetto
  • Punteggio probabilità
  • Coordinate riquadro di delimitazione

Opzioni di configurazione

Questa attività prevede le seguenti opzioni di configurazione:

Nome opzione Descrizione Intervallo di valori Valore predefinito
running_mode Imposta la modalità di esecuzione per l'attività. Esistono tre modalità:

IMAGE: la modalità per gli input di singole immagini.

VIDEO: la modalità per i fotogrammi decodificati di un video.

LIVE_STREAM: la modalità per un live streaming di dati di input, ad esempio da una videocamera. In questa modalità, resultListener deve essere chiamato per configurare un listener per ricevere i risultati in modo asincrono.
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
display_names Imposta la lingua delle etichette da utilizzare per i nomi visualizzati forniti nei metadati del modello dell'attività, se disponibili. Il valore predefinito è en per l'inglese. Puoi aggiungere etichette localizzate ai metadati di un modello personalizzato utilizzando l'API Metadata Writer di TensorFlow Lite Codice impostazioni internazionali it
max_results Imposta il numero massimo facoltativo di risultati di rilevamento con il punteggio più alto da restituire. Eventuali numeri positivi -1 (vengono restituiti tutti i risultati)
score_threshold Imposta la soglia del punteggio di previsione che sostituisce quella fornita nei metadati del modello (se presenti). I risultati inferiori a questo valore vengono rifiutati. Qualsiasi elemento in virgola mobile Non impostata
category_allowlist Consente di impostare l'elenco facoltativo di nomi di categorie consentite. Se il campo non è vuoto, i risultati del rilevamento il cui nome di categoria non è in questo set verranno filtrati. I nomi di categoria duplicati o sconosciuti vengono ignorati. Questa opzione si esclude a vicenda con category_denylist e l'utilizzo di entrambe genera un errore. Qualsiasi stringa Non impostata
category_denylist Consente di impostare l'elenco facoltativo di nomi di categorie non consentiti. Se il campo non è vuoto, i risultati del rilevamento il cui nome di categoria è presente in questo set verranno filtrati. I nomi di categoria duplicati o sconosciuti vengono ignorati. Questa opzione si esclude a vicenda con category_allowlist e l'uso di entrambe genera un errore. Qualsiasi stringa Non impostata

ottimizzabili

L'API Object Detector richiede che un modello di rilevamento degli oggetti venga scaricato e archiviato nella directory del progetto. Se non ne hai ancora uno, inizia con il modello predefinito consigliato. Gli altri modelli presentati in questa sezione compromettono la latenza e l'accuratezza.

Il modello EfficientDet-Lite0 utilizza una backbone EfficientNet-Lite0 con dimensioni di input di 320 x 320 e una rete di caratteristiche BiFPN. Il modello è stato addestrato con il set di dati COCO, un set di dati per il rilevamento di oggetti su larga scala che contiene 1,5 milioni di istanze di oggetto e 80 etichette di oggetti. Consulta l'elenco completo delle etichette supportate. EfficientDet-Lite0 è disponibile nei formati int8, float16 o float32. Questo modello è consigliato perché trova un equilibrio tra latenza e accuratezza. È precisa e allo stesso tempo abbastanza leggera per molti casi d'uso.

Nome modello Forma di input Tipo di quantizzazione Versions
EfficientDet-Lite0 (int8) 320 x 320 int8 Più recente
EfficientDet-Lite0 (float 16) 320 x 320 numero in virgola mobile 16 Più recente
EfficientDet-Lite0 (float 32) 320 x 320 Nessuna (float32) Più recente

Modello EfficientDet-Lite2

Il modello EfficientDet-Lite2 utilizza una backbone EfficientNet-Lite2 con dimensioni di input di 448 x 448 e una rete di funzionalità BiFPN. Il modello è stato addestrato con il set di dati COCO, un set di dati per il rilevamento di oggetti su larga scala che contiene 1,5 milioni di istanze di oggetto e 80 etichette di oggetti. Consulta l'elenco completo delle etichette supportate. EfficientDet-Lite2 è disponibile nei modelli int8, float16 o float32. In genere questo modello è più preciso di EfficientDet-Lite0, ma è anche più lento e con un utilizzo intensivo della memoria. Questo modello è appropriato per i casi d'uso in cui la precisione è una priorità maggiore in termini di velocità e dimensioni.

Nome modello Forma di input Tipo di quantizzazione Versions
EfficientDet-Lite2 (int8) 448 x 448 int8 Più recente
EfficientDet-Lite2 (float 16) 448 x 448 numero in virgola mobile 16 Più recente
EfficientDet-Lite2 (float 32) 448 x 448 Nessuna (float32) Più recente

Modello SSD MobileNetV2

Il modello SSD MobileNetV2 utilizza una backbone MobileNetV2 con dimensione di input 256 x 256 e una rete di funzionalità SSD. Il modello è stato addestrato con il set di dati COCO, un set di dati per il rilevamento di oggetti su larga scala che contiene 1,5 milioni di istanze di oggetto e 80 etichette di oggetti. Consulta l'elenco completo delle etichette supportate. SSD MobileNetV2 è disponibile nei modelli int8 e float 32. Questo modello è più veloce e leggero di EfficientDet-Lite0, ma in genere è anche meno preciso. Questo modello è appropriato per casi d'uso che richiedono un modello veloce e leggero che sacrifica una certa precisione.

Nome modello Forma di input Tipo di quantizzazione Versions
SSDMobileNet-V2 (int8) 256 x 256 int8 Più recente
SSDMobileNet-V2 (float 32) 256 x 256 Nessuna (float32) Più recente

Metadati e requisiti del modello

Questa sezione descrive i requisiti per i modelli personalizzati se decidi di creare un modello da utilizzare con questa attività. I modelli personalizzati devono essere in formato TensorFlow Lite e devono includere i metadati che descrivono i parametri operativi del modello.

Requisiti di progettazione

Input Shape Descrizione
Immagine di input Float32 tensore di forma[1, altezza, larghezza, 3] L'immagine di input normalizzata.
Output Shape Descrizione
detection_boxes Float32 tensore di forma [1, num_caselle, 4] Posizione della casella di ciascun oggetto rilevato.
detection_classes Tensore di forma float32 [1, num_caselle] Indici dei nomi delle classi per ciascun oggetto rilevato.
detection_scores float32 tensor of shape [1, num_boxes] Punteggi di previsione per ciascun oggetto rilevato.
num_boxes Tensore float32 della dimensione 1 Il numero di caselle rilevate.

Requisiti dei metadati

Parametro Descrizione Descrizione
input_norm_mean Il valore medio utilizzato nella normalizzazione del tensore di input. L'immagine di input normalizzata.
input_norm_std La norma di campo utilizzata nella normalizzazione del tensore di input. Posizione della casella di ciascun oggetto rilevato.
label_file_paths I percorsi dei file di etichette tensore di categoria. Se il modello non ha file di etichette, passa un elenco vuoto. Indici dei nomi delle classi per ciascun oggetto rilevato.
score_calibration_md Informazioni sull'operazione di calibrazione del punteggio nel tensore di classificazione. Questo parametro non è obbligatorio se il modello non utilizza la calibrazione
del punteggio.
Punteggi di previsione per ciascun oggetto rilevato.
num_boxes Tensore float32 della dimensione 1 Il numero di caselle rilevate.

Benchmark attività

Ecco i benchmark delle attività per i modelli preaddestrati sopra indicati. Il risultato della latenza è la latenza media su Pixel 6 utilizzando CPU / GPU.

Nome modello Latenza CPU Latenza GPU
Modello float32 EfficientDet-Lite0 61,30 ms 27,83 ms
Modello float16 EfficientDet-Lite0 53,97 ms 27,97 ms
Modello EfficientDet-Lite0 int8 29,31 ms -
Modello float32 EfficientDet-Lite2 197,98 ms 41,15 ms
Modello float16 EfficientDet-Lite2 198,77 ms 47,31 ms
Modello EfficientDet-Lite2 int8 70,91 ms -
Modello float32 MobileNetV2 SSD 36,30 ms 24,01 ms
Modello float16 MobileNetV2 SSD 37,35 ms 28,16 ms