Rilevamento di oggetti, Rilevamento di oggetti

Data un'immagine o un flusso video, un modello di rilevamento degli oggetti può identificare quale di un insieme noto di oggetti potrebbe essere presente e fornire informazioni sulla loro posizione all'interno dell'immagine.

Ad esempio, questo screenshot dell'applicazione di esempio mostra come sono stati riconosciuti due oggetti e le loro posizioni annotate:

Screenshot dell'esempio di Android

Iniziare

Per informazioni su come utilizzare il rilevamento di oggetti in un'app mobile, esplora le applicazioni e le guide di esempio .

Se stai utilizzando una piattaforma diversa da Android o iOS, o se hai già familiarità con le API di TensorFlow Lite , puoi scaricare il nostro modello di rilevamento degli oggetti di base e le etichette di accompagnamento.

Scarica il modello iniziale con i metadati

Per ulteriori informazioni sui metadati e sui campi associati (ad esempio: labels.txt ) vedere Leggi i metadati dai modelli

Se desideri addestrare un modello di rilevamento personalizzato per la tua attività, consulta Personalizzazione del modello .

Per i seguenti casi d'uso, dovresti utilizzare un diverso tipo di modello:

  • Prevedere quale singola etichetta rappresenta più probabilmente l'immagine (vedi classificazione delle immagini)
  • Prevedere la composizione di un'immagine, ad esempio soggetto rispetto allo sfondo (vedi segmentazione )

Esempi di applicazioni e guide

Se non conosci TensorFlow Lite e lavori con Android o iOS, ti consigliamo di esplorare le seguenti applicazioni di esempio che possono aiutarti a iniziare.

Androide

Puoi sfruttare l'API predefinita di TensorFlow Lite Task Library per integrare i modelli di rilevamento degli oggetti in poche righe di codice. Puoi anche creare la tua pipeline di inferenza personalizzata utilizzando l' API Java dell'interprete TensorFlow Lite .

L'esempio Android seguente mostra l'implementazione per entrambi i metodi rispettivamente come lib_task_api e lib_interpreter .

Visualizza esempio Android

iOS

È possibile integrare il modello utilizzando l' API Swift dell'interprete TensorFlow Lite . Vedi l'esempio iOS di seguito.

Visualizza esempio iOS

Descrizione del Modello

Questa sezione descrive la firma per i modelli Single-Shot Detector convertiti in TensorFlow Lite dall'API TensorFlow Object Detection .

Un modello di rilevamento degli oggetti viene addestrato per rilevare la presenza e la posizione di più classi di oggetti. Ad esempio, un modello potrebbe essere addestrato con immagini che contengono vari pezzi di frutta, insieme a un'etichetta che specifica la classe di frutta che rappresentano (ad esempio una mela, una banana o una fragola) e dati che specificano dove ogni oggetto appare in l'immagine.

Quando un'immagine viene successivamente fornita al modello, verrà prodotto un elenco degli oggetti rilevati, la posizione di un riquadro di delimitazione che contiene ciascun oggetto e un punteggio che indica la certezza che il rilevamento è stato corretto.

Firma in ingresso

Il modello acquisisce un'immagine come input.

Supponiamo che l'immagine prevista sia 300x300 pixel, con tre canali (rosso, blu e verde) per pixel. Questo dovrebbe essere inviato al modello come un buffer appiattito di valori di 270.000 byte (300x300x3). Se il modello è quantizzato , ogni valore dovrebbe essere un singolo byte che rappresenta un valore compreso tra 0 e 255.

Puoi dare un'occhiata al nostro codice dell'app di esempio per capire come eseguire questa pre-elaborazione su Android.

Firma in uscita

Il modello genera quattro array, mappati sugli indici 0-4. Gli array 0, 1 e 2 descrivono N oggetti rilevati, con un elemento in ogni array corrispondente a ciascun oggetto.

Indice Nome Descrizione
0 Posizioni Array multidimensionale di [N][4] valori in virgola mobile compresi tra 0 e 1, gli array interni che rappresentano i riquadri di delimitazione nella forma [in alto, a sinistra, in basso, a destra]
1 Classi Matrice di N numeri interi (output come valori a virgola mobile) ciascuno che indica l'indice di un'etichetta di classe dal file di etichette
2 Punteggi Matrice di N valori in virgola mobile compresi tra 0 e 1 che rappresentano la probabilità che una classe sia stata rilevata
3 Numero di rilevamenti Valore intero di N

Ad esempio, immagina che un modello sia stato addestrato per rilevare mele, banane e fragole. Quando viene fornita un'immagine, produrrà un determinato numero di risultati di rilevamento - in questo esempio, 5.

Classe Punto Posizione
Mela 0,92 [18, 21, 57, 63]
Banana 0,88 [100, 30, 180, 150]
Fragola 0,87 [7, 82, 89, 163]
Banana 0,23 [42, 66, 57, 83]
Mela 0.11 [6, 42, 31, 58]

Punteggio di fiducia

Per interpretare questi risultati, possiamo guardare il punteggio e la posizione di ciascun oggetto rilevato. Il punteggio è un numero compreso tra 0 e 1 che indica la certezza che l'oggetto è stato effettivamente rilevato. Più il numero è vicino a 1, più sicuro è il modello.

A seconda della tua applicazione, puoi decidere una soglia di interruzione al di sotto della quale scarterai i risultati del rilevamento. Per l'esempio attuale, un limite ragionevole è un punteggio di 0,5 (che significa una probabilità del 50% che il rilevamento sia valido). In tal caso, gli ultimi due oggetti nell'array verrebbero ignorati perché i punteggi di confidenza sono inferiori a 0,5:

Classe Punto Posizione
Mela 0,92 [18, 21, 57, 63]
Banana 0,88 [100, 30, 180, 150]
Fragola 0,87 [7, 82, 89, 163]
Banana 0,23 [42, 66, 57, 83]
Mela 0.11 [6, 42, 31, 58]

Il taglio che usi dovrebbe essere basato sul fatto che ti trovi più a tuo agio con i falsi positivi (oggetti identificati in modo errato o aree dell'immagine che sono erroneamente identificate come oggetti quando non lo sono) o con i falsi negativi (oggetti autentici che sono perse perché la loro fiducia era bassa).

Ad esempio, nell'immagine seguente, una pera (che non è un oggetto che il modello è stato addestrato a rilevare) è stata erroneamente identificata come "persona". Questo è un esempio di falso positivo che potrebbe essere ignorato selezionando un cut-off appropriato. In questo caso, un cut-off di 0,6 (o 60%) escluderebbe comodamente il falso positivo.

Screenshot dell'esempio di Android che mostra un falso positivo

Posizione

Per ogni oggetto rilevato, il modello restituirà una matrice di quattro numeri che rappresentano un rettangolo di delimitazione che circonda la sua posizione. Per il modello di avviamento fornito, i numeri sono ordinati come segue:

[ superiore, sinistra, parte inferiore, Giusto ]

Il valore superiore rappresenta la distanza in pixel del bordo superiore del rettangolo dalla parte superiore dell'immagine. Il valore sinistro rappresenta la distanza del bordo sinistro dalla sinistra dell'immagine di input. Gli altri valori rappresentano i bordi inferiore e destro in modo simile.

Benchmark delle prestazioni

I numeri di benchmark delle prestazioni per il nostro modello di partenza sono generati con lo strumento qui descritto .

Nome del modello Dimensioni del modello Dispositivo GPU processore
COCO SSD MobileNet v1 27 Mb Pixel 3 (Android 10) 22 ms 46 ms*
Pixel 4 (Android 10) 20 ms 29 ms*
iPhone XS (iOS 12.4.1) 7,6 ms 11 ms**

* 4 fili utilizzati.

** 2 thread utilizzati su iPhone per il miglior risultato in termini di prestazioni.

Personalizzazione del modello

Modelli pre-addestrati

I modelli di rilevamento ottimizzati per dispositivi mobili con una varietà di caratteristiche di latenza e precisione sono disponibili nel Detection Zoo . Ognuno di essi segue le firme di input e output descritte nelle sezioni seguenti.

La maggior parte degli zip di download contiene un file model.tflite . Se non ce n'è uno, è possibile generare un flatbuffer TensorFlow Lite utilizzando queste istruzioni . I modelli SSD di TF2 Object Detection Zoo possono anche essere convertiti in TensorFlow Lite utilizzando le istruzioni qui . È importante notare che i modelli di rilevamento non possono essere convertiti direttamente utilizzando TensorFlow Lite Converter , poiché richiedono un passaggio intermedio per la generazione di un modello sorgente ottimizzato per i dispositivi mobili. Gli script collegati sopra eseguono questo passaggio.

Entrambi gli script di esportazione TF1 e TF2 hanno parametri che possono abilitare un numero maggiore di oggetti di output o una post-elaborazione più lenta e accurata. Usa --help con gli script per vedere un elenco completo di argomenti supportati.

Attualmente, l'inferenza sul dispositivo è ottimizzata solo con i modelli SSD. È allo studio un migliore supporto per altre architetture come CenterNet ed EfficientDet.

Come scegliere un modello da personalizzare?

Ogni modello viene fornito con le proprie caratteristiche di precisione (quantificata dal valore della mappa) e di latenza. Dovresti scegliere un modello che funzioni meglio per il tuo caso d'uso e l'hardware previsto. Ad esempio, i modelli Edge TPU sono ideali per l'inferenza su Edge TPU di Google su Pixel 4.

Puoi utilizzare il nostro strumento di benchmark per valutare i modelli e scegliere l'opzione più efficiente disponibile.

Ottimizzazione dei modelli su dati personalizzati

I modelli pre-addestrati che forniamo sono addestrati per rilevare 90 classi di oggetti. Per un elenco completo delle classi, vedere il file delle etichette nei metadati del modello .

È possibile utilizzare una tecnica nota come trasferimento dell'apprendimento per riqualificare un modello per riconoscere le classi non nell'insieme originale. Ad esempio, è possibile riqualificare il modello per rilevare più tipi di ortaggi, nonostante sia presente un solo ortaggio nei dati di addestramento originali. Per fare ciò, avrai bisogno di una serie di immagini di formazione per ciascuna delle nuove etichette che desideri addestrare. Il modo consigliato è utilizzare la libreria TensorFlow Lite Model Maker che semplifica il processo di training di un modello TensorFlow Lite utilizzando un set di dati personalizzato, con poche righe di codice. Utilizza l'apprendimento del trasferimento per ridurre la quantità di dati e tempo di addestramento richiesti. Puoi anche imparare da Colab rilevamento pochi colpi come esempio di messa a punto di un modello pre-addestrato con pochi esempi.

Per la messa a punto con set di dati più grandi, dai un'occhiata a queste guide per addestrare i tuoi modelli con l'API TensorFlow Object Detection: TF1 , TF2 . Una volta addestrati, possono essere convertiti in un formato compatibile con TFLite con le istruzioni qui: TF1 , TF2