L'attività MediaPipe Object Detector 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 i cani in un'immagine. Questa attività opera sui dati delle immagini con un modello di machine learning (ML), accettando dati statici o uno stream video continuo come input e producendo un elenco di risultati di rilevamento. Ogni risultato di rilevamento rappresenta un oggetto visualizzato nell'immagine o nel video.
Inizia
Per iniziare a utilizzare questa attività, segui una di queste guide all'implementazione per la piattaforma su cui stai lavorando:
- Android - Esempio di codice - Guide
- Python - Esempio di codice - Guida
- Web - Esempio di codice - Guida
- iOS - Esempio di codice - Guide
Queste guide specifiche per la piattaforma illustrano un'implementazione di base di questa attività, incluso un modello consigliato e 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 delle immagini di input: l'elaborazione include la rotazione, il ridimensionamento, la normalizzazione e la conversione dello spazio colore delle immagini.
- Impostazioni internazionali mappa delle etichette: imposta la lingua utilizzata per i nomi visualizzati
- Soglia di punteggio: filtra i risultati in base ai punteggi di previsione.
- Rilevamento dei primi k: filtra i risultati del rilevamento dei numeri.
- Lista consentita ed esclusa delle etichette: specifica le categorie rilevate.
Input delle attività | Output delle attività |
---|---|
L'API Object Detector accetta un input di uno dei seguenti tipi di dati:
|
L'API Object Detector restituisce i seguenti risultati per gli oggetti rilevati:
|
Opzioni di configurazione
Questa attività ha le seguenti opzioni di configurazione:
Nome opzione | Descrizione | Intervallo di valori | Valore predefinito |
---|---|---|---|
running_mode |
Imposta la modalità di esecuzione dell'attività. Esistono tre
modalità: IMMAGINE: la modalità per l'inserimento 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 ascoltatore 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 disponibile. Il valore predefinito è en per
l'inglese. Puoi aggiungere etichette localizzate ai metadati di un modello personalizzato
utilizzando l'API TensorFlow Lite Metadata Writer
|
Codice delle impostazioni internazionali | it |
max_results |
Imposta il numero massimo facoltativo di risultati di rilevamento con il punteggio più alto da restituire. | Qualsiasi numero positivo | -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 stato mobile | Non impostato |
category_allowlist |
Imposta l'elenco facoltativo dei nomi delle categorie consentite. Se non è vuoto,
i risultati di rilevamento il cui nome della categoria non è presente in questo insieme verranno
eliminati. I nomi di categorie duplicati o sconosciuti vengono ignorati.
Questa opzione è mutuamente esclusiva con category_denylist e l'utilizzo di entrambe genera un errore. |
Qualsiasi stringa | Non impostato |
category_denylist |
Imposta l'elenco facoltativo dei nomi di categorie non consentiti. Se non è vuoto, i risultati di rilevamento il cui nome della categoria è presente in questo insieme verranno esclusi. I nomi di categorie duplicati o sconosciuti vengono ignorati. Questa opzione è mutuamente esclusa da category_allowlist e l'utilizzo di entrambe genera un errore. |
Qualsiasi stringa | Non impostato |
Modelli
L'API Object Detector richiede che un modello di rilevamento di oggetti venga scaricato e memorizzato nella directory del progetto. Se non hai già un modello, inizia con quello predefinito consigliato. Gli altri modelli presentati in questa sezione fanno un compromesso tra latenza e accuratezza.
Modello EfficientDet-Lite0 (consigliato)
Il modello EfficientDet-Lite0 utilizza una struttura di base EfficientNet-Lite0 con una dimensione di input di 320 x 320 e una rete di funzionalità BiFPN. Il modello è stato addestrato con il set di dati COCO, un set di dati di rilevamento degli oggetti su larga scala che contiene 1,5 milioni di istanze di oggetti e 80 etichette di oggetti. Consulta l'elenco completo delle etichette supportate. EfficientDet-Lite0 è disponibile come int8, float16 o float32. Questo modello è consigliato perché trova un equilibrio tra latenza e precisione. È preciso e abbastanza leggero per molti casi d'uso.
Nome modello | Forma di input | Tipo di quantizzazione | Versioni |
---|---|---|---|
EfficientDet-Lite0 (int8) | 320 x 320 | int8 | Ultime notizie |
EfficientDet-Lite0 (float 16) | 320 x 320 | float 16 | Ultime notizie |
EfficientDet-Lite0 (float 32) | 320 x 320 | Nessuno (float32) | Ultime notizie |
Modello EfficientDet-Lite2
Il modello EfficientDet-Lite2 utilizza una struttura di base 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 di rilevamento degli oggetti su larga scala che contiene 1,5 milioni di istanze di oggetti e 80 etichette di oggetti. Consulta l'elenco completo delle etichette supportate. EfficientDet-Lite2 è disponibile come modello int8, float16 o float32. Questo modello è generalmente più preciso di EfficientDet-Lite0, ma è anche più lento e richiede una maggiore quantità di memoria. Questo modello è appropriato per casi in cui l'accuratezza ha una priorità maggiore rispetto alla velocità e alle dimensioni.
Nome modello | Forma di input | Tipo di quantizzazione | Versioni |
---|---|---|---|
EfficientDet-Lite2 (int8) | 448 x 448 | int8 | Ultime notizie |
EfficientDet-Lite2 (float 16) | 448 x 448 | float 16 | Ultime notizie |
EfficientDet-Lite2 (float 32) | 448 x 448 | Nessuno (float32) | Ultime notizie |
Modello SSD MobileNetV2
Il modello SSD MobileNetV2 utilizza una struttura di base MobileNetV2 con dimensioni di input di 256 x 256 e una rete di funzionalità SSD. Il modello è stato addestrato con il set di dati COCO, un set di dati di rilevamento degli oggetti su larga scala che contiene 1,5 milioni di istanze di oggetti e 80 etichette di oggetti. Consulta l'elenco completo delle etichette supportate. SSD MobileNetV2 è disponibile come modello int8 e float 32. Questo modello è più veloce e leggero di EfficientDet-Lite0, ma in genere è anche meno preciso. Questo modello è adatto a casi d'uso che richiedono un modello veloce e leggero che sacrifica un po' di precisione.
Nome modello | Forma di input | Tipo di quantizzazione | Versioni |
---|---|---|---|
SSDMobileNet-V2 (int8) | 256 x 256 | int8 | Ultime notizie |
SSDMobileNet-V2 (float 32) | 256 x 256 | Nessuno (float32) | Ultime notizie |
Requisiti e metadati 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 metadata che descrivono i parametri di funzionamento del modello.
Requisiti di progettazione
Input | Shape | Descrizione |
---|---|---|
Immagine di input | Tensore float32 di forma [1, altezza, larghezza, 3] | L'immagine di input normalizzata. |
Output | Shape | Descrizione |
---|---|---|
detection_boxes |
Tensore float32 di forma [1, num_boxes, 4] | Posizione della casella di ogni oggetto rilevato. |
detection_classes |
Tensore Float32 di forma [1, num_boxes] | Indici dei nomi delle classi per ogni oggetto rilevato. |
detection_scores |
Tensore float32 di forma [1, num_boxes] | Punteggi di previsione per ogni oggetto rilevato. |
num_boxes |
Tensore Float32 di dimensione 1 | Il numero di caselle rilevate. |
Requisiti per i 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 del campo utilizzata nella normalizzazione del tensore di input. | Posizione della casella di ogni oggetto rilevato. |
label_file_paths |
I percorsi dei file delle etichette tensore delle categorie. Se il modello non contiene file di etichette, passa un elenco vuoto. | Indici dei nomi delle classi per ogni 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 ogni oggetto rilevato. |
num_boxes |
Tensore Float32 di dimensione 1 | Il numero di caselle rilevate. |
Benchmark delle attività
Ecco i benchmark delle attività per i modelli preaddestrati sopra indicati. Il risultato della latenza è la latenza media su Pixel 6 che utilizza CPU / GPU.
Nome modello | Latenza della CPU | Latenza GPU |
---|---|---|
Modello EfficientDet-Lite0 float32 | 61,30 ms | 27,83 ms |
Modello EfficientDet-Lite0 float16 | 53,97 ms | 27,97 ms |
Modello EfficientDet-Lite0 int8 | 29,31 ms | - |
Modello EfficientDet-Lite2 float32 | 197,98 ms | 41,15 ms |
Modello EfficientDet-Lite2 float16 | 198,77 ms | 47,31 ms |
Modello EfficientDet-Lite2 int8 | 70,91 ms | - |
Modello SSD MobileNetV2 float32 | 36,30 ms | 24,01 ms |
Modello SSD MobileNetV2 float16 | 37,35 ms | 28,16 ms |