Benutzerdefiniertes vortrainiertes Audioklassifizierungsmodell erstellen

1. Hinweis

Im vorherigen Codelab haben Sie eine einfache App zur Audioklassifizierung erstellt.

Was ist, wenn Sie das Audioklassifizierungsmodell anpassen möchten, um Audioinhalte aus verschiedenen Klassen zu erkennen, die bei einem vortrainierten Modell nicht vorhanden sind? Oder was ist, wenn Sie das Modell mit Ihren eigenen Daten anpassen möchten?

In diesem Codelab passen Sie ein vortrainiertes Audioklassifizierungsmodell an, um Vogelgeräusche zu erkennen. Dasselbe Verfahren kann mit Ihren eigenen Daten repliziert werden.

Vorbereitung

Dieses Codelab wurde für erfahrene mobile Entwickler entwickelt, die Erfahrung mit maschinellem Lernen sammeln möchten. Sie sollten mit Folgendem vertraut sein:

  • Android-Entwicklung mit Kotlin und Android Studio
  • Grundlegende Python-Syntax

Lerninhalte

  • Lerntransfer für die Audiodomain übertragen
  • Eigene Daten erstellen
  • Eigenes Modell in einer Android-App bereitstellen

Voraussetzungen

  • Eine aktuelle Version von Android Studio (Version 4.1.2 oder höher)
  • Physisches Android-Gerät mit Android-Version 23 (Android 6.0)
  • Der Beispielcode
  • Grundkenntnisse der Android-Entwicklung in Kotlin

2. Das Vogel-Dataset

Dabei wird ein Vögelong-Dataset verwendet, das bereits vorbereitet ist. Alle Audiodateien stammen von der Xeno-canto-Website.

Dieses Dataset enthält Titel von:

Name: Haus Spatz

Code: houspa

Bild der Vogelreihe „Haus Spatz“ von Alejandro Bayer Tamayo aus Armenien, Kolumbien.

[Audio]

Name: Rotes Kreuz

Code: redcro

Bild der Vogelreihe des Roten Kreuzschwerts von Elaine Wilson.

[Audio]

Name: Holzbrustkorsett

Code: wbwwre1

Bild eines weiß getünchten Holzschlüssels, der Autor ist unbekannt.

[Audio]

Name: Antpitta mit Kastanienkranz

Code: chcant2

Bild einer Antpitta mit Chestnut-Kraft

[Audio]

Name: Azara-Spidertail

Code: azaspi1

Bild eines Spinalschwanzvogels.

[Audio]

Das Dataset befindet sich in einer ZIP-Datei und umfasst folgende Inhalte:

  • Ein metadata.csv mit allen Informationen zu jeder Audiodatei, z. B. wer die Audiodatei aufgenommen hat, wo sie aufgenommen wurde, wie die Lizenz verwendet wird und wie der Vogel heißt.
  • Ein Trainings- und Testordner.
  • In den Trainings-/Testordnern befindet sich für jeden Vogelcode ein Ordner. In jeder dieser Dateien befinden sich alle WAV-Dateien für diesen Vogel.

Die Audiodateien werden im WAV-Format erstellt und folgen dieser Spezifikation:

Diese Spezifikation ist wichtig, da Sie ein Basismodell verwenden, das Daten in diesem Format erwartet. Weitere Informationen hierzu finden Sie in diesem Blogpost (in englischer Sprache).

Um den gesamten Prozess zu vereinfachen, müssen Sie den Datenpool auf Ihren Computer nicht herunterladen (siehe später in dieser Anleitung).

Wenn Sie Ihre eigenen Daten verwenden möchten, müssen alle Ihre Audiodateien dieses Format haben.

3. Beispielcode abrufen

Code herunterladen

Klicken Sie auf den folgenden Link, um den gesamten Code für dieses Codelab herunterzuladen:

Alternativ können Sie das Repository klonen:

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

Entpacken Sie die heruntergeladene ZIP-Datei. Dadurch wird ein Stammordner (odml-pathways) mit allen erforderlichen Ressourcen entpackt. Für dieses Codelab benötigen Sie nur die Quellen im Unterverzeichnis audio_classification/codelab2/android.

Das Unterverzeichnis android des Repositorys audio_classification/codelab2/android enthält zwei Verzeichnisse:

  • android_studio_folder.pngstarter: Startcode, auf dem Sie für dieses Codelab aufbauen.
  • android_studio_folder.pngfinal: Code für die fertige Beispiel-App abgeschlossen

Auslöser-App importieren

Importiere dazu die Starter-App in Android Studio:

  1. Öffnen Sie Android Studio und wählen Sie Import Project (Gradle, Eclipse ADT usw.) aus.
  2. Öffnen Sie den Ordner starter (audio_classification/codelab2/android/starter) aus dem zuvor heruntergeladenen Quellcode.

7c0f27882a2698ac

Um sicherzustellen, dass alle Abhängigkeiten für Ihre App verfügbar sind, sollten Sie Ihr Projekt mit Gradle-Dateien synchronisieren, wenn der Import abgeschlossen ist.

  1. Wähle in der Android Studio Symbolleiste die Option Projekt mit Gradle-Dateien synchronisieren (b451ab2d04d835f9.png) aus.

4. Einführung der App

Diese App ist dieselbe, die im ersten Codelab für die Audioklassifizierung erstellt wurde: Grundlegende App für die Audioklassifizierung erstellen.

Für ein besseres Verständnis des Codes sollten Sie dieses Codelab ausführen, bevor Sie fortfahren.

Der gesamte Code befindet sich in MainActivity, um das Ganze so einfach wie möglich zu halten.

Das sind die Ergebnisse der folgenden Aufgaben:

  • Modell wird geladen
val classifier = AudioClassifier.createFromFile(this, modelPath)
  • Audiorekorder erstellen und Aufzeichnung starten
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()
  • Erstellen eines Timer-Threads zum Ausführen der Inferenz. Die Parameter für die Methode scheduleAtFixedRate geben an, wie lange bis zum Start der Ausführung gewartet wird und wie viel Zeit zwischen aufeinanderfolgenden Aufgaben vergeht. Im Code unten beginnt er in 1 Millisekunde und wird alle 500 Millisekunden ausgeführt.
Timer().scheduleAtFixedRate(1, 500) {
...
}
  • Inferenz für den erfassten Audiotrack ausführen
val numberOfSamples = tensor.load(record)
val output = classifier.classify(tensor)
  • Filterklassifizierung für niedrige Punktzahlen
val filteredModelOutput = output[0].categories.filter {
   it.score > probabilityThreshold
}
  • Ergebnisse auf dem Bildschirm anzeigen
val outputStr = filteredModelOutput.map { "${it.label} -> ${it.score} " }
   .joinToString(separator = "\n")

runOnUiThread {
   textView.text = outputStr
}

Sie können die App jetzt in der vorliegenden Form ausführen. Denken Sie aber daran, dass sie ein allgemeiner vortrainiertes Modell hat.

5. Benutzerdefiniertes Audioklassifizierungsmodell mit Model Maker trainieren

Im vorherigen Schritt haben Sie eine App heruntergeladen, in der Audioereignisse mit einem vortrainierten Modell klassifiziert werden. Manchmal muss dieses Modell jedoch an Audioereignisse angepasst werden, für die Sie sich interessieren, oder es zu einer spezialisierteren Version machen.

Wie bereits erwähnt, sind Sie auf das Modell für Vogelgeräusche spezialisiert. Hier finden Sie ein Dataset mit Vogelaudio, ausgewählt von der Website Xeno-canto.

Colaboratory

Als Nächstes trainieren wir das benutzerdefinierte Modell in Google Colab.

Es dauert etwa 30 Minuten, das benutzerdefinierte Modell zu trainieren.

Wenn du diesen Schritt überspringen möchtest, kannst du das Modell herunterladen, das du mit dem angegebenen Dataset im Co-Training trainiert hast, und mit dem nächsten Schritt fortfahren.

6. Benutzerdefiniertes TFLite-Modell in der Android-App hinzufügen

Nachdem Sie Ihr eigenes Audioklassifizierungsmodell trainiert und lokal gespeichert haben, müssen Sie es im Ordner „Assets“ der Android-App ablegen.

Zuerst verschieben Sie das heruntergeladene Modell aus dem vorherigen Schritt in den Ordner „Assets“ in Ihrer App.

  1. Klicken Sie in Android Studio in der Android-Projektansicht mit der rechten Maustaste auf den Ordner „Assets“.

7cca2c22ed8cf4c8

  1. Ein Pop-up-Fenster mit einer Liste der Optionen wird angezeigt. Dazu gehört auch, den Ordner in Ihrem Dateisystem zu öffnen. Suchen Sie das passende Betriebssystem für Ihr Betriebssystem aus und wählen Sie es aus. Auf einem Mac ist dies Finde in Finder, unter Windows lautet er Open in Explorer und unter Ubuntu der Wert In Dateien anzeigen.

95e0eca881d35f6b.png

  1. Kopieren Sie das heruntergeladene Modell in den Ordner.

Kehren Sie anschließend zu Android Studio zurück und die Datei sollte im Ordner „Assets“ zu sehen sein.

52bda66abe201fe5

7. Neues Modell in die Basis-App laden

Die Basis-App verwendet bereits ein vortrainiertes Modell. Ersetze sie durch die zuvor trainierte.

  1. ZU 1: Wenn Sie das neue Modell laden möchten, nachdem Sie es dem Ordner assets hinzugefügt haben, ändern Sie den Wert der Variablen modelPath:
var modelPath = "my_birds_model.tflite"

Das neue Modell hat zwei Ausgaben (Kopfe):

  • Die ursprüngliche, generische Ausgabe des Basismodells, das Sie verwendet haben, in diesem Fall YAMNet.
  • Das ist die sekundäre Ausgabe für die Vögel, die Sie beim Training verwendet haben.

Das ist notwendig, weil YAMNet sehr gut darin ist, mehrere gängige Klassen zu erkennen, beispielsweise Silence. So brauchen Sie sich keine Gedanken mehr über alle anderen Klassen zu machen, die Sie Ihrem Dataset nicht hinzugefügt haben.

Wenn Sie jetzt über die YAMNet-Klassifizierung einen hohen Wert für die Vogelklasse anzeigen, sehen Sie sich an, welcher Vogel in der anderen Ausgabe enthalten ist.

37ce1c14e9e2d1b0.png

  1. TODO 2: Lesen Sie, ob der erste Titel der Klassifizierung mit hoher Wahrscheinlichkeit einen Vogelton aufweist. Hier werden auch die Filter angewendet, die nicht nach Vogel stammen:
val filteredModelOuput = output[0].categories.filter {
   it.label.contains("Bird") && it.score > .3
}
  1. TODO 3: Wenn der Grundkopf des Modells mit hoher Wahrscheinlichkeit einen Vogel in der Audiodatei erkennt, erhalten Sie den zweiten Kopf:
if (filteredModelOutput.isNotEmpty()) {
   Log.i("Yamnet", "bird sound detected!")
   filteredModelOutput = output[1].categories.filter {
       it.score > probabilityThreshold
   }
}

Das war's schon! Das Modell, das Sie gerade trainiert haben, zu ändern, ist ganz einfach.

Im nächsten Schritt wird sie getestet.

8. Anwendung mit dem neuen Modell testen

Du hast dein Audioklassifizierungsmodell in die App integriert. Teste es jetzt.

  1. Verbinde dein Android-Gerät und klicke in der Symbolleiste von Android Studio auf „Ausführen“ (Ausführen.png).

Die App sollte die Geräusche von Vögeln vorhersagen können. Lassen Sie es sich leichter machen, indem Sie eine der Audioinhalte aus Ihrem Computer abspielen. Danach werden auf dem Bildschirm die Namen der Vögel und die Wahrscheinlichkeit angezeigt, dass sie korrekt sind.

bec397de3c8aaf32

9. Glückwunsch

In diesem Codelab haben Sie gelernt, wie Sie mit Model Maker Ihr eigenes Audioklassifizierungsmodell erstellen und mit TensorFlow Lite in Ihrer mobilen App bereitstellen. Weitere Informationen zu TFLite finden Sie in diesen Beispielen.

Behandelte Themen

  • Eigenes Dataset vorbereiten
  • Lerninhalte zur Audioklassifizierung mit Model Maker übertragen
  • Modell in einer Android-App verwenden

Nächste Schritte

  • Eigene Daten ausprobieren
  • Teilen Sie uns mit, was Sie erstellen

Weitere Informationen

Hast du Fragen?

Probleme melden