1. Prima di iniziare
Nel codelab precedente hai creato un'app per Android e iOS che utilizzava un modello di etichettatura delle immagini di base che riconosce diverse centinaia di classi di immagini. Ha riconosciuto una foto di un fiore in modo molto generico, vedendo petali, fiore, pianta e cielo.
Per aggiornare l'app in modo che riconosca fiori specifici, ad esempio margherite o rose, avrai bisogno di un modello personalizzato addestrato su molti esempi di ogni tipo di fiore che vuoi riconoscere.
Prerequisiti
- Il Codelab precedente in questo percorso di apprendimento.
Cosa creerai e imparerai
- Come addestrare un modello personalizzato di classificazione delle immagini utilizzando TensorFlow Lite Model Maker.
Che cosa ti serve
- Non è necessario alcun hardware particolare: tutto può essere completato utilizzando Google Colab nel browser.
2. Inizia
Tutto il codice da seguire è stato preparato per te ed è disponibile per l'esecuzione utilizzando Google Colab qui. Se non hai accesso a Google Colab, puoi clonare il repository e utilizzare il notebook denominato CustomImageClassifierModel.ipynb, che si trova nella directory ImageClassificationMobile->colab.
Se hai molti esempi di fiori particolari, è relativamente facile addestrare un modello con TensorFlow Lite Model Maker per riconoscerli.
Il modo più semplice per farlo è creare un file .zip o .tgz contenente le immagini, ordinate in directory. Ad esempio, se utilizzi immagini di margherite, tarassaco, rose, girasole e tulipani, puoi organizzarle in directory come questa:

Comprimi il file e ospitalo su un server per poter addestrare i modelli. Nel resto del lab utilizzerai un bucket che è stato preparato per te.
In questo lab si presuppone che tu stia utilizzando Google Colab per addestrare il modello. Puoi trovare Colab all'indirizzo colab.research.google.com. Se utilizzi un altro ambiente, potresti dover installare molte dipendenze, non ultima TensorFlow.
3. Installare e importare le dipendenze
- Installa TensorFlow Lite Model Maker. Puoi farlo con un'installazione pip. &> /dev/null alla fine sopprime l'output. Model Maker genera molti contenuti che non sono immediatamente pertinenti. È stato soppresso per consentirti di concentrarti sull'attività in corso.
# Install Model maker
!pip install -q tflite-model-maker &> /dev/null
- Successivamente, devi importare le librerie che devi utilizzare e assicurarti di utilizzare TensorFlow 2.x:
# Imports and check that we are using TF2.x
import numpy as np
import os
from tflite_model_maker import configs
from tflite_model_maker import ExportFormat
from tflite_model_maker import model_spec
from tflite_model_maker import image_classifier
from tflite_model_maker.image_classifier import DataLoader
import tensorflow as tf
assert tf.__version__.startswith('2')
tf.get_logger().setLevel('ERROR')
Ora che l'ambiente è pronto, è il momento di iniziare a creare il modello.
4. Scaricare e preparare i dati
Se le tue immagini sono organizzate in cartelle e queste cartelle sono compresse, quando scarichi il file ZIP e lo decomprimi, le immagini vengono etichettate automaticamente in base alla cartella in cui si trovano. A questa directory verrà fatto riferimento come data_path.
data_path = tf.keras.utils.get_file(
'flower_photos',
'https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz',
untar=True)
Questo percorso dei dati può quindi essere caricato in un modello di rete neurale per l'addestramento con la classe ImageClassifierDataLoader di TensorFlow Lite Model Maker. Puntala sulla cartella e il gioco è fatto.
Un elemento importante nell'addestramento dei modelli con il machine learning è non utilizzare tutti i dati per l'addestramento. Trattieni una parte dei dati per testare il modello con dati che non ha mai visto prima. È facile da fare con il metodo di suddivisione del set di dati restituito da ImageClassifierDataLoader. Se passi 0, 9, otterrai il 90% dei dati di addestramento e il 10% dei dati di test:
data = DataLoader.from_folder(data_path)
train_data, test_data = data.split(0.9)
Ora che i dati sono preparati, puoi creare un modello utilizzandoli.
5. Crea il modello di classificazione delle immagini
Model Maker astrae molte delle specifiche della progettazione della rete neurale, quindi non devi occuparti della progettazione della rete e di elementi come convoluzioni, dense, relu, flatten, funzioni di perdita e ottimizzatori. Per un modello predefinito, puoi utilizzare una sola riga di codice per creare un modello addestrando una rete neurale con i dati forniti:
model = image_classifier.create(train_data)
Quando esegui questo comando, vedrai un output simile al seguente:
Model: "sequential_2"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
hub_keras_layer_v1v2_2 (HubK (None, 1280) 3413024
_________________________________________________________________
dropout_2 (Dropout) (None, 1280) 0
_________________________________________________________________
dense_2 (Dense) (None, 5) 6405
=================================================================
Total params: 3,419,429
Trainable params: 6,405
Non-trainable params: 3,413,024
_________________________________________________________________
None
Epoch 1/5
103/103 [===] - 15s 129ms/step - loss: 1.1169 - accuracy: 0.6181
Epoch 2/5
103/103 [===] - 13s 126ms/step - loss: 0.6595 - accuracy: 0.8911
Epoch 3/5
103/103 [===] - 13s 127ms/step - loss: 0.6239 - accuracy: 0.9133
Epoch 4/5
103/103 [===] - 13s 128ms/step - loss: 0.5994 - accuracy: 0.9287
Epoch 5/5
103/103 [===] - 13s 126ms/step - loss: 0.5836 - accuracy: 0.9385
La prima parte mostra l'architettura del modello. Ciò che Model Maker fa dietro le quinte si chiama transfer learning, che utilizza un modello preaddestrato esistente come punto di partenza e prende solo ciò che il modello ha appreso su come sono costruite le immagini e lo applica alla comprensione di questi 5 fiori. Puoi vederlo nella prima riga, che riporta:
hub_keras_layer_v1v2_2 (HubK (None, 1280) 3413024
La parola chiave è "Hub", che indica che questo modello proviene da TensorFlow Hub. Per impostazione predefinita, TensorFlow Lite Model Maker utilizza un modello chiamato "MobileNet", progettato per riconoscere 1000 tipi di immagini. La logica qui è che la metodologia che utilizza, imparando le "funzionalità" per distinguere tra 1000 classi, può essere riutilizzata. Le stesse "caratteristiche" possono essere mappate alle nostre 5 classi di fiori, quindi non devono essere apprese da zero.
Il modello ha eseguito 5 epoche, dove un'epoca è un ciclo completo di addestramento in cui la rete neurale tenta di abbinare le immagini alle relative etichette. Dopo 5 epoche, in circa 1 minuto, l'accuratezza dei dati di addestramento era del 93,85%. Dato che ci sono 5 classi, una scelta casuale avrebbe un'accuratezza del 20%, quindi è un buon risultato. Viene segnalato anche un numero di "perdite", ma per ora puoi ignorarlo.
In precedenza hai suddiviso i dati in dati di addestramento e di test, in modo da poter valutare le prestazioni della rete sui dati che non ha mai visto prima, un indicatore migliore di come potrebbe funzionare nel mondo reale utilizzando model.evaluate sui dati di test:
loss, accuracy = model.evaluate(test_data)
L'output sarà simile al seguente:
12/12 [===] - 5s 115ms/step - loss: 0.6622 - accuracy: 0.8801
Prendi nota dell'accuratezza qui. È pari all'88,01%, quindi l'utilizzo del modello predefinito nel mondo reale dovrebbe garantire questo livello di precisione. Non è male per il modello predefinito che hai addestrato in circa un minuto. Ovviamente, potresti apportare molte modifiche per migliorare il modello, e questa è una scienza a sé stante.
6. Esportare il modello
Ora che il modello è addestrato, il passaggio successivo consiste nell'esportarlo nel formato .tflite che un'applicazione mobile può utilizzare. Model Maker fornisce un metodo di esportazione semplice che puoi utilizzare: basta specificare la directory in cui esportare.
Ecco il codice:
model.export(export_dir='/mm_flowers')
Se esegui questa operazione in Google Colab, puoi visualizzare il modello facendo clic sull'icona della cartella a sinistra dello schermo:

Da qui, vedrai un elenco della directory corrente. Utilizza il pulsante indicato per spostarti "in alto" in una directory:

Nel codice hai specificato di esportare nella directory mm_flowers. Aprila e vedrai un file chiamato "model.tflite". Questo è il tuo modello addestrato.

Seleziona il file e vedrai comparire tre puntini sulla destra. Fai clic su questi elementi per visualizzare un menu contestuale e scaricare il modello.

Dopo qualche istante, il modello verrà scaricato nella cartella Download.
7. Complimenti
Ora puoi integrarlo nella tua app mobile. Lo farai nel prossimo lab.