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, questa schermata dell'applicazione di esempio mostra come sono stati riconosciuti due oggetti e le loro posizioni annotate:

Screenshot dell'esempio Android

Iniziare

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

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

Scarica il modello iniziale con metadati

Per ulteriori informazioni sui metadati e sui campi associati (ad esempio: labels.txt ) vedere Leggere 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 tipo diverso 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 )

Applicazioni e guide di esempio

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 pronta all'uso della libreria di attività TensorFlow Lite per integrare 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 riportato di seguito illustra l'implementazione di entrambi i metodi utilizzando rispettivamente la libreria Task e l'API interprete .

Visualizza l'esempio di Android

iOS

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

Visualizza l'esempio iOS

Descrizione del Modello

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

Un modello di rilevamento degli oggetti è 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 appare ciascun oggetto in l'immagine.

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

Firma di input

Il modello prende un'immagine come input.

Supponiamo che l'immagine prevista sia di 300x300 pixel, con tre canali (rosso, blu e verde) per pixel. Questo dovrebbe essere inserito nel modello come 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 codice dell'app di esempio per capire come eseguire questa pre-elaborazione su Android.

Firma di uscita

Il modello restituisce 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 Matrice multidimensionale di [N] [4] valori in virgola mobile compresi tra 0 e 1, le matrici interne che rappresentano riquadri di delimitazione nella forma [in alto, a sinistra, in basso, a destra]
1 Classi Matrice di N numeri interi (output come valori in virgola mobile), ciascuno dei quali indica l'indice di un'etichetta di classe dal file delle etichette
2 Punteggi Matrice di N valori a 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, verrà generato 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 sia stato effettivamente rilevato. Quanto più il numero è vicino a 1, tanto più sicuro è il modello.

A seconda dell'applicazione, è possibile decidere una soglia limite al di sotto della quale verranno scartati i risultati del rilevamento. Per l'esempio corrente, un valore limite ragionevole è un punteggio pari a 0,5 (ovvero 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 limite da utilizzare dovrebbe basarsi sul fatto che ti trovi più a tuo agio con i falsi positivi (oggetti erroneamente identificati o aree dell'immagine erroneamente identificate come oggetti quando non lo sono) o con i falsi negativi (oggetti autentici che sono mancato 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 valore limite appropriato. In questo caso, un cut-off di 0,6 (o 60%) escluderebbe comodamente il falso positivo.

Screenshot dell'esempio 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 iniziale fornito, i numeri sono ordinati come segue:

[ superiore, Sinistra, metter il fondo a, Giusto ]

Il valore superiore rappresenta la distanza del bordo superiore del rettangolo dalla parte superiore dell'immagine, in pixel. 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 riferimento delle prestazioni per il nostro modello iniziale vengono generati con lo strumento qui descritto .

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

* 4 fili utilizzati.

** 2 thread utilizzati su iPhone per il miglior risultato prestazionale.

Personalizzazione del modello

Modelli pre-addestrati

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

La maggior parte degli zip di download contengono 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 generare un modello sorgente ottimizzato per dispositivi mobili. Gli script collegati sopra eseguono questo passaggio.

Entrambi gli script di esportazione TF1 e TF2 dispongono di parametri che possono abilitare un numero maggiore di oggetti di output o una post-elaborazione più lenta e più accurata. Utilizza --help con gli script per visualizzare un elenco esaustivo degli argomenti supportati.

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

Come scegliere un modello da personalizzare?

Ogni modello viene fornito con la propria precisione (quantificata dal valore mAP) e caratteristiche 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 sull'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 preaddestrati che forniamo sono addestrati per rilevare 90 classi di oggetti. Per un elenco completo delle classi, consulta il file label nei metadati del modello .

È possibile utilizzare una tecnica nota come trasferimento dell'apprendimento per riqualificare un modello in modo che riconosca le classi non presenti nel set originale. Ad esempio, potresti riqualificare il modello per rilevare più tipi di verdura, nonostante nei dati di addestramento originali sia presente una sola verdura. Per fare ciò, avrai bisogno di una serie di immagini di addestramento per ciascuna delle nuove etichette che desideri addestrare. Il modo consigliato è utilizzare la libreria TensorFlow Lite Model Maker che semplifica il processo di addestramento 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 per il rilevamento di pochi colpi come esempio di messa a punto di un modello preaddestrato 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