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.
Inizia
Inizia a utilizzare questa attività seguendo una di queste guide all'implementazione per la piattaforma su cui stai lavorando:
- Android - Esempio di codice - Guida
- Python - Esempio di codice - Guida
- Web - Esempio di codice - Guida
- iOS - Esempio di codice - Guida
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:
|
L'API Object Detector genera i seguenti risultati per gli oggetti rilevati:
|
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.
Modello EfficientDet-Lite0 (consigliato)
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 |