Crea un modello di classificazione audio preaddestrato personalizzato

1. Prima di iniziare

Nel codelab precedente, hai creato un'app di base per la classificazione audio.

Che cosa succede se vuoi personalizzare il modello di classificazione audio in modo che riconosca l'audio di classi diverse non presenti in un modello preaddestrato? O se vuoi personalizzare il modello utilizzando i tuoi dati?

In questo codelab, personalizzerai un modello di classificazione audio preaddestrato per rilevare i suoni degli uccelli. La stessa tecnica può essere replicata utilizzando i tuoi dati.

Prerequisiti

Questo codelab è stato progettato per sviluppatori di dispositivi mobili esperti che vogliono acquisire esperienza con il machine learning. Dovresti acquisire familiarità con:

  • Sviluppo Android con Kotlin e Android Studio
  • Sintassi Python di base

Obiettivi didattici

  • Come eseguire il trasferimento dell'apprendimento per il dominio audio
  • Come creare i tuoi dati
  • Come eseguire il deployment del modello su un'app Android

Che cosa ti serve

  • Una versione recente di Android Studio (v4.1.2+)
  • Dispositivo fisico Android con versione di Android alla versione API 23 (Android 6.0)
  • Codice di esempio
  • Conoscenza di base dello sviluppo di Android in Kotlin

2. Il set di dati Uccelli

Utilizzerai un set di dati già disponibile per semplificarne l'utilizzo. Tutti i file audio provengono dal sito web di Xeno-canto.

Questo set di dati contiene brani di:

Nome: House Sparrow

Codice: houspa

Immagine della specie ornitologica House Passera di Alejandro Bayer Tamayo dell'Armenia, Colombia.

[audio]

Nome: Crossbill rosso

Codice: redcro

Immagine della specie di uccelli della Croce Rossa di Elaine Wilson.

[audio]

Nome: petto in legno dal petto bianco

Codice: wbwwre1

Immagine di un petto di legno dal petto bianco, autore sconosciuto.

[audio]

Nome: Antpitta con corona di castagno

Codice: chcant2

Immagine di un'antpitta con corona di castagno

[audio]

Nome: Azara's Spinetail

Codice: azaspi1

Immagine del dorso di azara.

[audio]

Questo set di dati è in un file ZIP e i suoi contenuti sono:

  • Un elemento metadata.csv che contiene tutte le informazioni su ogni file audio, ad esempio chi ha registrato l'audio, dove è stato registrato, la licenza di utilizzo e il nome dell'uccello.
  • Una cartella di treni e test.
  • All'interno delle cartelle Train/Test, c'è una cartella per ogni codice. All'interno di ognuno di essi sono presenti tutti i file .wav dell'elemento in questione.

I file audio sono tutti in formato wav e rispettano questa specifica:

Questa specifica è importante perché utilizzerai un modello base che prevede dati in questo formato. Per saperne di più, puoi leggere ulteriori informazioni in questo post del blog.

Per semplificare l'intero processo, non è necessario scaricare il set di dati sulla tua macchina, lo utilizzerai su Google Colab (più avanti in questa guida).

Se vuoi utilizzare i tuoi dati personali, anche tutti i file audio devono essere in questo formato specifico.

3. Recupera il codice campione

Scarica il codice

Fai clic sul seguente link per scaricare tutto il codice di questo codelab:

Se preferisci, clona il repository:

git clone https://github.com/googlecodelabs/odml-pathways.git

Apri il file ZIP scaricato. Verrà aperta una cartella principale (odml-pathways) che conterrà tutte le risorse necessarie. Per questo codelab, avrai bisogno solo delle origini nella sottodirectory audio_classification/codelab2/android.

La sottodirectory android nel repository audio_classification/codelab2/android contiene due directory:

  • cartella_studio_android.pngstarter: il codice di avvio sulla quale crei questo codelab.
  • cartella_studio_android.pngfinal: è stato completato il codice per l'app di esempio terminata.

Importare l'app iniziale

Per iniziare, importa l'app iniziale in Android Studio:

  1. Apri Android Studio e seleziona Importa progetto (Gradle, Eclipse ADT ecc.).
  2. Apri la cartella starter (audio_classification/codelab2/android/starter) dal codice sorgente che hai scaricato in precedenza.

7c0f27882a2698ac.png

Per assicurarti che tutte le dipendenze siano disponibili per la tua app, devi sincronizzare il tuo progetto con file di Gradle al termine del processo di importazione.

  1. Seleziona Sincronizza progetto con file Gradle ( b451ab2d04d835f9.png) dalla barra degli strumenti di Android Studio.

4. Comprendere l'app iniziale

Questa app è la stessa creata nel primo codelab per la classificazione audio: Create a base app for audio class (Crea un'app di base per la classificazione audio).

Per comprendere meglio il codice nel dettaglio, ti consigliamo di farlo prima di continuare.

Tutto il codice è in MainActivity (per essere il più semplice possibile).

In breve, il codice esamina le attività:

  • Caricamento del modello in corso...
val classifier = AudioClassifier.createFromFile(this, modelPath)
  • Creazione del registratore audio e avvio della registrazione
val tensor = classifier.createInputTensorAudio()

val format = classifier.requiredTensorAudioFormat
val recorderSpecs = "Number Of Channels: ${format.channels}\n" +
       "Sample Rate: ${format.sampleRate}"
recorderSpecsTextView.text = recorderSpecs

val record = classifier.createAudioRecord()
record.startRecording()
  • Creazione di un thread del timer per eseguire l'inferenza. I parametri del metodo scheduleAtFixedRate sono il tempo di attesa prima di avviare l'esecuzione e il tempo tra l'esecuzione successiva dell'attività. Nel codice riportato di seguito, inizierà tra 1 millisecondo e verrà eseguito di nuovo ogni 500 millisecondi.
Timer().scheduleAtFixedRate(1, 500) {
...
}
  • Esecuzione dell'inferenza sull'audio acquisito
val numberOfSamples = tensor.load(record)
val output = classifier.classify(tensor)
  • Filtra classificazione per punteggi bassi
val filteredModelOutput = output[0].categories.filter {
   it.score > probabilityThreshold
}
  • Mostra i risultati sullo schermo
val outputStr = filteredModelOutput.map { "${it.label} -> ${it.score} " }
   .joinToString(separator = "\n")

runOnUiThread {
   textView.text = outputStr
}

Ora puoi eseguire l'app ed è disponibile così come è, ma ricorda che utilizza un modello preaddestrato più generico.

5. Addestrare un modello di classificazione audio personalizzato con Model Maker

Nel passaggio precedente hai scaricato un'app che utilizza un modello preaddestrato per classificare gli eventi audio. A volte, però, devi personalizzare questo modello per gli eventi audio che ti interessano o per renderlo una versione più specializzata.

Come accennato in precedenza, specializzerai il modello per i suoni degli uccelli. Ecco un set di dati con audio per gli uccelli, selezionato dal sito web di Xeno-canto.

Colaboratory

Passiamo ora a Google Colab per addestrare il modello personalizzato.

Per addestrare il modello personalizzato sono necessari circa 30 minuti.

Se vuoi saltare questo passaggio, puoi scaricare il modello che hai addestrato con il set di dati fornito e procedere al passaggio successivo

6. Aggiungi il modello TFLite personalizzato all'app Android

Ora che hai addestrato il tuo modello di classificazione dell'audio e lo hai salvato localmente, devi inserirlo nella cartella degli asset dell'app Android.

Per prima cosa, sposta il modello scaricato dal passaggio precedente alla cartella degli asset nell'app.

  1. In Android Studio, con la visualizzazione Progetto Android, fai clic con il pulsante destro del mouse sulla cartella degli asset.

7cca2c22ed8cf4c8.png

  1. Viene visualizzato un popup con un elenco di opzioni. Una delle seguenti operazioni consiste nell'aprire la cartella nel file system. Trova quella più adatta al tuo sistema operativo e selezionala. Su Mac, l'app sarà Reveal in Finder, mentre su Windows sarà Open in Explorer, mentre su Ubuntu sarà Show in Files.

95e0eca881d35f6b.png

  1. Copia il modello scaricato nella cartella.

Al termine dell'operazione, torna ad Android Studio e dovresti vedere il file nella cartella degli asset.

52bda66abe201fe5.png

7. Carica il nuovo modello nell'app di base

L'app di base utilizza già un modello preaddestrato. Lo sostituirai con quello che hai appena addestrato.

  1. TODO 1: per caricare il nuovo modello dopo averlo aggiunto alla cartella assets, modifica il valore della variabile modelPath:
var modelPath = "my_birds_model.tflite"

Il nuovo modello ha due output (head):

  • L'output originale, più generico del modello base utilizzato, in questo caso YAMNet.
  • L'output secondario specifico per gli uccelli utilizzati nell'addestramento.

Questo è necessario perché YAMNet è in grado di riconoscere più classi comuni, ad esempio Silence. In questo modo, non dovrai preoccuparti di tutte le altre classi che non hai aggiunto al set di dati.

Ciò che farai ora, se la classificazione YAMNet mostra un punteggio elevato per la classe di uccelli, verificherai quale uccello è nell'altro output.

37ce1c14e9e2d1b0.png

  1. DA FARE 2: leggi se il primo capo della classificazione ha un'elevata affidabilità; è un suono di uccello. Qui modificherai il filtro per escludere anche tutti gli altri elementi.
val filteredModelOuput = output[0].categories.filter {
   it.label.contains("Bird") && it.score > .3
}
  1. TODO 3: Se la testa di base del modello rileva che l'audio è stato preparato con una buona probabilità, otterrai la seconda testa:
if (filteredModelOutput.isNotEmpty()) {
   Log.i("Yamnet", "bird sound detected!")
   filteredModelOutput = output[1].categories.filter {
       it.score > probabilityThreshold
   }
}

Ed è fatta. Cambiare il modello per utilizzare quello che hai appena addestrato è semplice.

Il passaggio successivo consiste nel testarlo.

8. Testare l'app con il nuovo modello

Hai integrato il tuo modello di classificazione audio nell'app, perciò testalo.

  1. Connetti il tuo dispositivo Android e fai clic su Esegui ( esegui.png) nella barra degli strumenti di Android Studio.

L'app dovrebbe essere in grado di prevedere correttamente l'audio degli uccelli. Per facilitare il test, riproduci uno degli audio dal tuo computer (vedi i passaggi precedenti) e il telefono dovrebbe essere in grado di rilevarlo. In questo modo, mostrerà sullo schermo il nome degli uccelli e la probabilità che sia corretta.

bec397de3c8aaf32.png

9. Complimenti

In questo codelab, hai imparato come creare il tuo modello di classificazione audio con Model Maker e eseguirne il deployment nella tua app per dispositivi mobili utilizzando TensorFlow Lite. Per scoprire di più su TFLite, dai un'occhiata ad altri esempi di TFLite.

Cosa abbiamo trattato

  • Come preparare il proprio set di dati
  • Come trasferire l'apprendimento per la classificazione audio con Model Maker
  • Come utilizzare il modello in un'app Android

Passaggi successivi

  • Prova con i tuoi dati
  • Condividi con noi i tuoi progetti

Ulteriori informazioni

Hai una domanda?

Segnala problemi