Crea un modelo de clasificación de audio personalizado previamente entrenado
Acerca de este codelab
1. Antes de comenzar
En el codelab anterior, compilaste una app básica para la clasificación de audio.
¿Qué pasa si quieres personalizar el modelo de clasificación de audio para reconocer audio de diferentes clases que no están presentes en un modelo previamente entrenado? ¿O si quiere personalizar el modelo con sus propios datos?
En este codelab, personalizarás un modelo de clasificación de audio previamente entrenado para detectar sonidos de pájaros. La misma técnica se puede replicar con sus propios datos.
Requisitos previos
Este codelab fue diseñado para desarrolladores de dispositivos móviles con experiencia que quieran adquirir experiencia en el aprendizaje automático. Debes estar familiarizado con lo siguiente:
- Desarrollo para Android con Kotlin y Android Studio
- Sintaxis básica de Python
Qué aprenderás
- Cómo realizar el aprendizaje por transferencia para el dominio de audio
- Cómo crear sus propios datos
- Cómo implementar tu propio modelo en una app para Android
Requisitos
- Una versión reciente de Android Studio (v4.1.2 o posterior)
- Dispositivo Android físico con versión de Android en API 23 (Android 6.0)
- El código de muestra
- Conocimientos básicos sobre el desarrollo para Android en Kotlin
2. Conjunto de datos de aves
Utilizará un conjunto de datos de Birdsong que ya está preparado para facilitar su uso. Todos los archivos de audio provienen del sitio web de Xeno-Canto.
Este conjunto de datos contiene canciones de:
Nombre: House Sparrow | Código: houspa |
Nombre: Billboard rojo | Código: redcro |
Nombre: Pecho manchado en blanco | Código: wbwwre1 |
Nombre: Antpitta con corona de castañas | Código: chcant2 |
Nombre: Abela's Spintail | Código: azaspi1 |
Este conjunto de datos está en un archivo ZIP y su contenido es el siguiente:
- Un objeto
metadata.csv
que tiene toda la información sobre cada archivo de audio, como quién lo grabó, dónde se grabó, la licencia de uso y el nombre del pájaro. - Una carpeta de entrenamiento y pruebas
- Dentro de las carpetas de entrenamiento o pruebas, hay una carpeta para cada código de aves. Dentro de cada uno de ellos, se encuentran todos los archivos .wav de ese pájaro en esa división.
Los archivos de audio están en el formato WAV y siguen esta especificación:
- Tasa de muestreo de 16,000 Hz
- 1 canal de audio (mono)
- 16 bits
Esta especificación es importante porque usarás un modelo base que espera datos en este formato. Si deseas obtener más información, consulta esta entrada de blog.
Para facilitar todo el proceso, no necesitarás descargar el conjunto de datos en tu máquina, ya que lo usarás en Google Colab (más adelante en esta guía).
Si quieres usar tus propios datos, todos tus archivos de audio deben estar en este formato específico.
3. Obtén el código de muestra
Descarga el código
Haz clic en el siguiente vínculo a fin de descargar todo el código de este codelab:
Como alternativa, clona el repositorio:
git clone https://github.com/googlecodelabs/odml-pathways.git
Descomprime el archivo zip descargado. Esto descomprimirá una carpeta raíz (odml-pathways
) con todos los recursos que necesitarás. Para este codelab, solo necesitarás las fuentes del subdirectorio audio_classification/codelab2/android
.
El subdirectorio android
en el repositorio audio_classification/codelab2/android
contiene dos directorios:
starter: Código inicial en el que se basa este codelab.
final: Código completo para la app de muestra finalizada.
Cómo importar la app de inicio
Para comenzar, importa la app de inicio a Android Studio:
- Abre Android Studio y selecciona Import Project (Gradle, Eclipse ADT, etc.).
- Abre la carpeta
starter
(audio_classification/codelab2/android/starter
) del código fuente que descargaste antes.
Para asegurarte de que todas las dependencias estén disponibles en la app, debes sincronizar tu proyecto con los archivos de Gradle cuando finalice el proceso de importación.
- En la barra de herramientas de Android Studio, selecciona Sync Project with Gradle Files (
).
4. Información sobre la app inicial
Esta app es la misma que se compiló en el primer codelab para la clasificación de audio: Cómo crear una app básica de clasificación de audio.
Para comprender mejor el código en detalle, te recomendamos que lo hagas antes de continuar.
Todo el código está en el MainActivity
(para que sea lo más simple posible).
En resumen, el código revisa las tareas a continuación:
- Carga el modelo
val classifier = AudioClassifier.createFromFile(this, modelPath)
- Crea la grabadora de audio y comienza la grabación
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()
- Crear un subproceso de temporizador para ejecutar la inferencia Los parámetros del método
scheduleAtFixedRate
son cuánto tiempo se iniciará la ejecución y el tiempo que transcurre entre la ejecución sucesiva de la tarea. En el siguiente código, comenzará en 1 milisegundo y se volverá a ejecutar cada 500 milisegundos.
Timer().scheduleAtFixedRate(1, 500) {
...
}
- Ejecuta la inferencia en el audio capturado
val numberOfSamples = tensor.load(record)
val output = classifier.classify(tensor)
- Filtrar clasificaciones para puntuaciones bajas
val filteredModelOutput = output[0].categories.filter {
it.score > probabilityThreshold
}
- Mostrar los resultados en la pantalla
val outputStr = filteredModelOutput.map { "${it.label} -> ${it.score} " }
.joinToString(separator = "\n")
runOnUiThread {
textView.text = outputStr
}
Ahora puedes ejecutar la app y jugar con ella tal como está, pero recuerda que usa un modelo previamente entrenado más genérico.
5. Entrena un modelo de clasificación de audio personalizado con Model Maker
En el paso anterior, descargaste una app que usa un modelo previamente entrenado para clasificar eventos de audio. Pero, a veces, es necesario personalizar este modelo para eventos de audio que te interesen o convertirlo en una versión más especializada.
Como se mencionó anteriormente, se especializará el modelo para los sonidos de aves. Este es un conjunto de datos con audio de aves que se selecciona del sitio web de Xeno-canto.
Colaboratory
A continuación, iremos a Google Colab para entrenar el modelo personalizado.
Entrenar el modelo personalizado demorará unos 30 minutos.
Si deseas omitir este paso, puedes descargar el modelo que hubieras entrenado en el Colab con el conjunto de datos proporcionado y continuar con el siguiente paso.
6. Agrega el modelo TFLite personalizado a la app para Android
Ahora que entrenaste tu propio modelo de clasificación de audio y lo guardaste de forma local, debes colocarlo en la carpeta de elementos de la app para Android.
El primer paso es mover el modelo descargado del paso anterior a la carpeta de elementos en tu app.
- En Android Studio, con la vista Android Project, haz clic con el botón derecho en la carpeta assets.
- Verás una ventana emergente con una lista de opciones. Una de ellas será abrir la carpeta en tu sistema de archivos. Encuentra el más adecuado para tu sistema operativo y selecciónalo. En una Mac, será Discover in Finder, en Windows será Open in Explorer y, en Ubuntu, será Show in Files.
- Copia el modelo descargado en la carpeta.
Una vez que lo hayas hecho, regresa a Android Studio y verás tu archivo en la carpeta de elementos.
7. Carga el modelo nuevo en la app de base
La app de base ya usa un modelo previamente entrenado. Lo reemplazará por el que acaba de entrenar.
- TODO 1: Para cargar el modelo nuevo después de agregarlo a la carpeta assets, cambia el valor de la variable
modelPath
:
var modelPath = "my_birds_model.tflite"
El modelo nuevo tiene dos resultados (cabezas):
- La salida más genérica y original del modelo base que usaste, en este caso, YAMNet.
- La salida secundaria específica de las aves que usaste en el entrenamiento.
Esto es necesario porque YAMNet hace un gran trabajo cuando reconoce varias clases comunes, como en silencio. Con esto, no tienes que preocuparte por todas las demás clases que no agregaste a tu conjunto de datos.
Ahora, lo que harás ahora es que, si la clasificación YAMNet muestra una puntuación alta para la clase de aves, verás qué pájaro es esa en la otra salida.
- TODO 2 Lee si el primer encabezado de clasificación tiene un alto nivel de confianza en que es un sonido de pájaro. Aquí cambiarás el filtro para filtrar también lo que no sea pájaro:
val filteredModelOuput = output[0].categories.filter {
it.label.contains("Bird") && it.score > .3
}
- TODO 3: Si la cabeza base del modelo detecta que había un pájaro en el audio con una buena probabilidad, obtendrás cuál es el segundo en la segunda cabeza:
if (filteredModelOutput.isNotEmpty()) {
Log.i("Yamnet", "bird sound detected!")
filteredModelOutput = output[1].categories.filter {
it.score > probabilityThreshold
}
}
Así de simple. Cambiar el modelo para usar el que acabas de entrenar es sencillo.
El siguiente paso es probarlo.
8. Prueba la app con tu modelo nuevo
Ya integró su modelo de clasificación de audio en la app, así que probémoslo.
- Conecta tu dispositivo Android y haz clic en Ejecutar (
) en la barra de herramientas de Android Studio.
La app debería poder predecir correctamente el audio de los pájaros. Para que sea más fácil realizar pruebas, reproduce uno de los audios de tu computadora (de los pasos anteriores), y tu teléfono debería poder detectarlo. Cuando lo haga, aparecerá en la pantalla el nombre de los pájaros y la probabilidad de que sea correcto.
9. Felicitaciones
En este codelab, aprendiste a crear tu propio modelo de clasificación de audio con Model Maker y a implementarlo en tu app para dispositivos móviles con TensorFlow Lite. Para obtener más información sobre TFLite, consulta otras muestras de TFLite.
Temas abordados
- Cómo preparar su propio conjunto de datos
- Cómo realizar el aprendizaje por transferencia para la clasificación de audio con Model Maker
- Cómo usar tu modelo en una app para Android
Próximos pasos
- Prueba con tus propios datos
- Comparte con nosotros lo que compilas
Más información
- Vínculo a la ruta de aprendizaje
- Documentación de TensorFlow Lite
- Documentación de Model Maker
- Documentación de TensorFlow Hub
- Aprendizaje automático en el dispositivo con las tecnologías de Google
¿Tienes alguna pregunta?
- Visita el Foro de colaboradores de TensorFlow.