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 due oggetti sono stati riconosciuti e le loro posizioni annotate:
Iniziare
Per informazioni su come utilizzare il rilevamento degli oggetti in un'app per dispositivi mobili, esplora le applicazioni e le guide di esempio .
Se utilizzi una piattaforma diversa da Android o iOS o se conosci già le API di TensorFlow Lite , puoi scaricare il nostro modello di rilevamento degli oggetti iniziale e le relative etichette.
Scarica il modello iniziale con i metadati
Per ulteriori informazioni sui metadati e sui campi associati (ad es.: labels.txt
) vedi 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 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 della libreria di attività TensorFlow Lite 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 di TensorFlow Lite Interpreter .
L'esempio di Android riportato di seguito mostra l'implementazione per entrambi i metodi usando rispettivamente Task library e interpreter API .
Visualizza l'esempio di Android
iOS
Puoi integrare il modello utilizzando l' API Swift di TensorFlow Lite Interpreter . Vedi l'esempio iOS di seguito.
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, produrrà 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.
Immettere la firma
Il modello prende un'immagine come input.
Supponiamo che l'immagine prevista sia 300x300 pixel, con tre canali (rosso, blu e verde) per pixel. Questo deve essere inserito nel 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 codice dell'app di esempio per capire come eseguire questa pre-elaborazione su Android.
Firma di uscita
Il modello emette quattro array, mappati agli indici 0-4. Gli array 0, 1 e 2 descrivono N
oggetti rilevati, con un elemento in ciascun array corrispondente a ciascun oggetto.
Indice | Nome | Descrizione |
---|---|---|
0 | Luoghi | Matrice multidimensionale di [N][4] valori in virgola mobile compresi tra 0 e 1, le matrici interne rappresentano i riquadri di delimitazione nella forma [superiore, sinistro, inferiore, destro] |
1 | Classi | Matrice di N numeri interi (emessi come valori in virgola mobile) ognuno dei quali indica l'indice di un'etichetta di classe dal file delle etichette |
2 | Punteggi | Matrice di N valori in virgola mobile compresi tra 0 e 1 che rappresentano la probabilità che sia stata rilevata una classe |
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 sia stato effettivamente rilevato. Più il numero è vicino a 1, più il modello è sicuro.
A seconda della tua applicazione, puoi decidere una soglia di interruzione al di sotto della quale scarterai i risultati del rilevamento. Per l'esempio corrente, un cut-off ragionevole è un punteggio di 0,5 (ovvero una probabilità del 50% che il rilevamento sia valido). In tal caso, gli ultimi due oggetti nell'array verrebbero ignorati perché quei 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 cut-off che usi dovrebbe essere basato sul fatto che tu ti senta più a tuo agio con i falsi positivi (oggetti che sono erroneamente identificati, o aree dell'immagine che sono erroneamente identificate come oggetti quando non lo sono), o falsi negativi (oggetti autentici che sono perso 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 identificata erroneamente 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.
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 dei benchmark delle prestazioni per il nostro modello iniziale sono generati con lo strumento qui descritto .
Nome del modello | Dimensione del modello | Dispositivo | GPU | processore |
---|---|---|---|---|
COCO SSD Mobile Net v1 | 27 Mb | Pixel 3 (Android 10) | 22ms | 46ms* |
Pixel 4 (Android 10) | 20ms | 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
I modelli di rilevamento ottimizzati per dispositivi mobili con una varietà di caratteristiche di latenza e precisione possono essere trovati nello zoo di rilevamento . 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 . Anche i modelli SSD di TF2 Object Detection Zoo possono essere convertiti in TensorFlow Lite seguendo 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 più accurata. Utilizzare --help
con gli script per visualizzare un elenco esaustivo degli 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 (quantificate dal valore mAP) e di latenza. Dovresti scegliere un modello che funzioni al 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 riaddestrare un modello in modo che riconosca le classi non presenti nel set originale. Ad esempio, è possibile riaddestrare il modello per rilevare più tipi di ortaggi, nonostante nei dati di addestramento originali sia presente un solo ortaggio. 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 il transfer learning per ridurre la quantità di dati e tempo di formazione richiesti. Puoi anche imparare dal rilevamento di pochi colpi Colab 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 l'addestramento dei 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