Addestra ed esegui il deployment di un modello di classificazione delle immagini on-device con AutoML Vision in ML Kit

1. Introduzione

I recenti progressi nel machine learning hanno reso relativamente facile per i computer riconoscere gli oggetti nelle immagini. In questo codelab, ti guideremo in un percorso end-to-end per la creazione di un modello di classificazione delle immagini in grado di riconoscere diversi tipi di oggetti, per poi eseguire il deployment del modello su un'app per Android e iOS. ML Kit e AutoML ti consentono di creare ed eseguire il deployment del modello su larga scala senza alcuna competenza di machine learning.

Che cos'è ML Kit?

ML Kit è un SDK per dispositivi mobili che porta l'esperienza di machine learning di Google nelle app Android e iOS in un pacchetto potente ma facile da usare. Che tu sia un principiante o un esperto di machine learning, puoi implementare facilmente la funzionalità di cui hai bisogno con poche righe di codice. Esistono diverse API in grado di riconoscere testo, volti e così via che puoi utilizzare immediatamente. Tuttavia, se devi riconoscere oggetti non supportati dalle API, ad esempio diversi tipi di fiori da un'immagine, devi addestrare il tuo modello. È qui che AutoML può aiutarti.

Che cos'è AutoML?

Cloud AutoML è una suite di prodotti di machine learning che consente agli sviluppatori con esperienza limitata nel campo del machine learning di addestrare modelli di alta qualità in base alle esigenze aziendali, sfruttando il transfer learning all'avanguardia e la tecnologia Neural Architecture Search di Google.

In questo codelab utilizzeremo AutoML Vision Edge in ML Kit per addestrare un modello di classificazione dei fiori. Il modello viene addestrato nel cloud, ma poi viene raggruppato o scaricato dall'app per eseguire le inferenze completamente sul dispositivo.

93f21fd287496e4e.png

Obiettivi didattici

  • Come addestrare un modello di classificazione delle immagini utilizzando AutoML Vision Edge in ML Kit.
  • Come eseguirlo in un'app di esempio per Android o iOS utilizzando l'SDK ML Kit.

Che cosa ti serve

Per l'app Android

  • Una versione recente di Android Studio (v3.4 o successive)
  • Emulatore Android Studio con Play Store o un dispositivo Android fisico (v5.0 o versioni successive)
  • Conoscenza di base dello sviluppo Android in Kotlin

Per l'app per iOS

  • Una versione recente di Xcode (v10.2+)
  • Simulatore iOS o un dispositivo iOS fisico (v9.0+)
  • CocoaPods
  • Conoscenza di base dello sviluppo per iOS in Swift

2. Configurazione

Scarica il codice e il set di dati di addestramento

Scarica un archivio zip contenente il codice sorgente di questo codelab e un set di dati di addestramento. Estrai l'archivio nella macchina locale.

Crea un progetto nella console Firebase

  1. Vai alla Console Firebase.
  2. Seleziona Crea nuovo progetto e assegna al progetto il nome "ML Kit Codelab".

Configurare l'app Android

  1. Aggiungi la nostra app per Android al progetto Firebase. Nome pacchetto Android: com.google.firebase.codelab.mlkit.automl
  2. Scarica il file di configurazione google-services.json e inseriscilo nell'app per Android in android/mlkit-automl/app/google-services.json.

Configurare l'app per iOS

  1. Aggiungi la nostra app per iOS al progetto Firebase. ID bundle iOS: com.google.firebase.codelab.mlkit.automl
  2. Scarica il file di configurazione GoogleService-Info.plist e segui le istruzioni per inserirlo nell'app per iOS in ios/mlkit-automl/GoogleService-Info.plist.

3. Preparare il set di dati di addestramento

Per addestrare un modello a riconoscere diversi tipi di oggetti, devi preparare un insieme di immagini ed etichettarle. Abbiamo creato un archivio di foto di fiori con licenza Creative Commons da utilizzare in questo codelab.

Il set di dati è incluso in un file ZIP denominato flower_photos.zip, che a sua volta è incluso nell'archivio ZIP scaricato nel passaggio precedente.

Esplorare il set di dati

Se estrai il file flower_photos.zip, vedrai che il set di dati contiene immagini di 5 tipi di fiori: tarassaco, margherita, tulipani, girasoli e rose, organizzati in cartelle con il nome dei fiori. Questo è un modo pratico per creare un set di dati di addestramento da fornire ad AutoML e addestrare un modello di classificazione delle immagini.

In questo set di dati di addestramento sono presenti 200 immagini per ogni tipo di fiore. Per addestrare un modello sono necessarie almeno 10 immagini per classe. Tuttavia, un maggior numero di immagini di addestramento generalmente porta a modelli migliori.

e5772b6527a6048d.png 6c4443d31cd5653e.png

4. Addestra un modello

Caricare il set di dati di addestramento

  1. Dalla console Firebase, apri il progetto che hai appena creato.
  2. Seleziona ML Kit > AutoML.
  3. Potresti visualizzare alcune schermate di benvenuto. Seleziona Inizia, se applicabile.
  1. Al termine dell'avanzamento della configurazione, seleziona Aggiungi set di dati e chiamalo "Fiori".
  2. In Obiettivo del modello, scegli Classificazione con etichetta singola,poiché i dati di addestramento contengono una sola etichetta per immagine.
  3. Seleziona Crea.
  4. Carica il file flower_photos.zip che hai scaricato nel passaggio precedente per importare il set di dati di addestramento sui fiori.
  5. Attendi qualche minuto per il completamento dell'attività di importazione.
  6. Ora puoi verificare che il set di dati sia stato importato correttamente.
  7. Poiché tutte le immagini nel set di dati di addestramento sono state etichettate, puoi procedere all'addestramento di un modello.

cdb18b61f890934f.png

Addestra un modello di classificazione delle immagini

Poiché il nostro modello verrà eseguito su un dispositivo mobile con potenza di calcolo e spazio di archiviazione limitati, dobbiamo prestare attenzione non solo alla precisione del modello, ma anche alle sue dimensioni e alla sua velocità. Esiste sempre un compromesso tra l'accuratezza del modello, la latenza (ovvero il tempo necessario per classificare un'immagine) e le dimensioni del modello. In genere, un modello con una precisione maggiore è anche più grande e impiega più tempo a classificare un'immagine.

AutoML offre diverse opzioni: puoi scegliere di ottimizzare per l'accuratezza, per la latenza e le dimensioni del modello oppure per bilanciare questi fattori. Puoi anche scegliere per quanto tempo consentire l'addestramento del modello. I set di dati più grandi devono essere addestrati più a lungo.

dd6b7eaa2dd5a9de.png

Ecco i passaggi da seguire se vuoi addestrare il modello autonomamente.

  1. Seleziona Addestra modello.
  2. Seleziona l'opzione Uso generico e il tempo di addestramento 1 ora di calcolo.
  3. Attendi un po' di tempo (probabilmente diverse ore) per il completamento dell'attività di addestramento.
  4. Al termine dell'attività di addestramento, vedrai le metriche di valutazione sulle prestazioni del modello addestrato.

73f98fbed5ae5ee5.png

5. Utilizzare il modello nelle app mobile

Preparazione

  • Questo codelab contiene app di esempio per Android e iOS che mostrano come utilizzare il modello di classificazione delle immagini che abbiamo addestrato in precedenza in un'app mobile. Le due app hanno funzionalità simili. Puoi scegliere la piattaforma che ti è più familiare.
  • Prima di procedere, assicurati di aver scaricato le app di esempio e di averle configurate nel passaggio 2.
  • Assicurati inoltre che il tuo ambiente locale sia configurato per poter creare app per la piattaforma che hai scelto (Android/iOS).

Scarica il modello di classificazione delle immagini

  • Se hai addestrato un modello nel passaggio precedente, seleziona Scarica per ottenerlo.
  • Se non hai addestrato un modello o l'attività di addestramento non è ancora terminata, puoi utilizzare il modello incluso nelle app di esempio.

Aggiungere il modello alle app di esempio

Devi solo aggiungere il modello alle app di esempio e funzioneranno subito. Per una guida completa su come integrare ML Kit AutoML nella tua app, consulta la nostra documentazione ( Android, iOS). Il codice che interagisce con l'SDK ML Kit si trova rispettivamente nei file ImageClassifier.kt e ImageClassifier.swift, quindi puoi iniziare da lì per scoprire come funzionano le app.

Esistono due opzioni per il deployment del modello: locale e remoto.

  • Il modello locale viene utilizzato principalmente per raggruppare il modello di classificazione delle immagini nel binario dell'app, anche se è possibile fornire anche un modello salvato nell'archivio locale. Con il bundling, il modello è disponibile immediatamente per gli utenti dopo il download dell'app dall'App Store / Play Store e funzionerà senza connessione a internet.
  • Modello remoto significa che il modello è ospitato su Firebase e verrà scaricato sul dispositivo dell'utente solo quando è necessario per la prima volta. Dopodiché, il modello funzionerà anche offline.

2e71ed2c7cb8757c.png

App per Android

  1. Apri Android Studio.
  2. Importa l'app per Android in android/mlkit-automl/.
  3. (Facoltativo) Estrai il modello che hai scaricato e copia i suoi contenuti nel modello incluso nell'app di esempio. 10cf6b1e0f34de29.png
  4. Ora fai clic su Esegui ( c8b8a080b7ead886.png) nella barra degli strumenti di Android Studio e verifica che possa riconoscere diversi tipi di fiori.

2e71ed2c7cb8757c.png

App per iOS

  1. Apri il terminale e vai alla cartella ios/mlkit-automl/.
  2. Esegui pod install per scaricare le dipendenze tramite CocoaPods
  3. Esegui open MLVisionExample.xcworkspace/ per aprire lo spazio di lavoro del progetto in Xcode.
  4. (Facoltativo) Estrai il modello che hai scaricato e copia i suoi contenuti nel modello incluso nell'app di esempio in ios/ml-automl/Resources/automl/cd291fe04bcdc6ee.png.
  5. Ora fai clic su Esegui ( 16629f86bbeb4208.png) nella barra degli strumenti di Xcode e verifica che possa riconoscere diversi tipi di fiori.

65172c3f35336d4e.png

6. (Facoltativo) Utilizzare il modello remoto

Il modello remoto di ML Kit ti consente di non includere i modelli TensorFlow Lite nel binario dell'app, ma di scaricarli on demand da Firebase quando necessario. I modelli remoti offrono diversi vantaggi rispetto a quelli locali:

  • Binario dell'app più piccolo
  • Possibilità di aggiornare i modelli senza aggiornare l'app
  • Test A/B con più versioni di un modello

In questo passaggio, pubblicheremo un modello remoto e lo utilizzeremo nelle app di esempio. Assicurati di aver completato l'addestramento del modello nel passaggio 4 di questo codelab.

Pubblica il modello

  1. Vai alla Console Firebase.
  2. Seleziona il progetto "ML Kit AutoML Codelab" che hai creato in precedenza.
  3. Seleziona ML Kit > AutoML.
  4. Seleziona il set di dati "Fiori" creato in precedenza.
  5. Verifica che l'attività di addestramento sia stata completata, quindi seleziona il modello.
  6. Seleziona Pubblica e assegna il nome "mlkit_flowers". b63a58b83e814acd.png

Riconoscere i fiori con il modello remoto

Le app di esempio sono configurate per utilizzare il modello remoto, se disponibile. Dopo aver pubblicato il modello remoto, devi solo eseguire di nuovo le app per attivare il download del modello. Puoi verificare che l'app utilizzi il modello remoto esaminando il valore "Origine" nel piè di pagina della schermata dell'app. Se non funziona, consulta la sezione "Risoluzione dei problemi" di seguito.

7c8292293fd858ad.png de359886ccecef2.png

Risoluzione dei problemi

Se l'app di esempio utilizza ancora il modello locale, verifica che il nome del modello remoto sia impostato correttamente all'interno del codice.

App per Android

  1. Vai a ImageClassifier.kt e trova questo blocco.
val remoteModel = FirebaseRemoteModel.Builder(REMOTE_MODEL_NAME).build()
  1. Verifica che il nome del modello impostato nel codice corrisponda al nome del modello pubblicato in precedenza tramite la console Firebase.
  2. Ora fai clic su Esegui ( c8b8a080b7ead886.png) nella barra degli strumenti di Android Studio per eseguire di nuovo l'app.

App per iOS

  1. Vai a ImageClassifier.swift e trova questo blocco.
return RemoteModel(
  name: Constant.remoteAutoMLModelName,
  allowsModelUpdates: true,
  initialConditions: initialConditions,
  updateConditions: updateConditions
)
  1. Verifica che il nome del modello impostato nel codice corrisponda al nome del modello pubblicato in precedenza tramite la console Firebase
  2. Ora fai clic su Esegui ( 16629f86bbeb4208.png) nella barra degli strumenti di Xcode per eseguire di nuovo l'app.

7. Complimenti!

Hai completato un percorso end-to-end di addestramento di un modello di classificazione delle immagini con i tuoi dati di addestramento utilizzando AutoML e poi hai utilizzato il modello in un'app mobile utilizzando ML Kit.

Consulta la nostra documentazione per scoprire come integrare AutoML Vision Edge in ML Kit nella tua app.

Puoi anche provare le nostre app di esempio ML Kit per scoprire altre funzionalità di Firebase ML Kit.

Esempi Android

Esempi per iOS