Path: blob/master/site/es-419/tutorials/audio/simple_audio.ipynb
25118 views
Copyright 2020 The TensorFlow Authors.
Reconocimiento de audio sencillo: Reconociendo palabras clave
En este tutorial se muestra cómo preprocesar archivos de audio en formato WAV, además de construir y entrenar un modelo básico de reconocimiento automático del habla (ASR) para reconocer diez palabras diferentes. Se utilizará una parte del conjunto de datos Speech Commands (Warden, 2018), que contiene clips de audio cortos (de un segundo o menos) con órdenes, como "abajo", "ir", "izquierda", "no", "derecha", "parar", "arriba" y "sí".
Los sistemas de reconocimiento de voz y audio en el mundo real son complejos. Pero, al igual que la clasificación de imágenes con el conjunto de datos MNIST, este tutorial debería proporcionarle una comprensión básica de las técnicas implicadas en ellos.
Preparación
Importa los módulos y dependencias necesarios. Utilizará tf.keras.utils.audio_dataset_from_directory
(introducido en TensorFlow 2.10), que ayuda a generar conjuntos de datos de clasificación de audio a partir de directorios de archivos .wav
. También necesitará de seaborn para realizar la visualización en este tutorial.
Importar el conjunto de datos del mini comandos de voz
Para ahorrar tiempo al cargar datos, trabajará con una versión más pequeña del conjunto de datos Speech Commands. El conjunto de datos original consta de más de 105,000 archivos de audio en formato WAV (Waveform) de personas diciendo 35 palabras diferentes. Estos datos fueron recopilados por Google y publicados bajo una licencia CC BY.
Descargue y extraiga el archivo mini_speech_commands.zip
que contiene los conjuntos de datos de Speech Commands más pequeños con tf.keras.utils.get_file
:
Los clips de audio del conjunto de datos se almacenan en ocho carpetas correspondientes a cada comando de voz: no
, yes
, down
, go
, left
, up
, right
y stop
:
Dividido en directorios de esta manera, puede cargar fácilmente los datos utilizando keras.utils.audio_dataset_from_directory
.
Los clips de audio son de 1 segundo o menos a 16kHz. El output_sequence_length=16000
rellena los cortos a exactamente 1 segundo (y recortaría los más largos) para que puedan ser fácilmente agrupados.
El conjunto de datos contiene ahora lotes de clips de audio y etiquetas con números enteros. Los clips de audio tienen una forma de (batch, samples, channels)
.
Este conjunto de datos sólo contiene un audio monocanal, así que utilice la función tf.squeeze
para eliminar el eje adicional:
La función utils.audio_dataset_from_directory
sólo devuelve hasta dos divisiones. Es una buena idea mantener un conjunto de prueba separado de su conjunto de validación. Lo ideal sería mantenerlo en un directorio separado, pero en este caso puede utilizar Dataset.shard
para dividir el conjunto de validación en dos mitades. Tenga en cuenta que iterar sobre cualquier fragmento cargará todos los datos, y sólo mantendrá su fracción.
Vamos a graficar algunas ondas de audio:
Convertir ondas en espectrogramas
Las ondas del conjunto de datos se representan en el dominio del tiempo. A continuación, transformaremos las ondas de las señales en el dominio del tiempo en señales en el dominio de la frecuencia del tiempo calculando la transformación de Fourier en tiempo corto (STFT) para convertir las formas de onda en espectrogramas, que muestran los cambios de frecuencia en el tiempo y pueden representarse como imágenes 2D. Las imágenes del espectrograma se introducirán en la red neuronal para entrenar el modelo.
Una transformada de Fourier (tf.signal.fft
) convierte una señal en sus frecuencias componentes, pero pierde toda la información temporal. A su vez, la STFT (tf.signal.stft
) divide la señal en ventanas de tiempo y ejecuta una transformada de Fourier en cada ventana, conservando parte de la información temporal y devolviendo un tensor 2D sobre el que se pueden ejecutar convoluciones estándar.
Crear una función de utilidad para convertir las ondas en espectrogramas:
Las ondas deben tener la misma longitud, para que cuando las convierta en espectrogramas, los resultados tengan dimensiones similares. Para ello, basta con poner amortiguado en cero los clips de audio de menos de un segundo (con
tf.zeros
).Cuando llame a
tf.signal.stft
, elija los parámetrosframe_length
yframe_step
de forma que la "imagen" del espectrograma generado sea casi cuadrada. Para obtener más información sobre la elección de los parámetros STFT, consulte este video de Coursera sobre el procesamiento de señales de audio y STFT.La STFT produce un arreglo de números complejos que representan la magnitud y la fase. Sin embargo, en este tutorial sólo se utilizará la magnitud, que se puede derivar mediante la aplicación de
tf.abs
en la salida detf.signal.stft
.
A continuación, empieza a explorar los datos. Imprime las formas de la onda tensorizada de un ejemplo y el espectrograma correspondiente, y reproduce el audio original:
Ahora, defina una función para visualizar un espectrograma:
Grafique la onda del ejemplo a lo largo del tiempo y el espectrograma correspondiente (frecuencias a lo largo del tiempo):
Ahora, cree conjuntos de datos de espectrogramas a partir de los conjuntos de datos de audio:
Examine los espectrogramas de distintos ejemplos del conjunto de datos:
Construya y entrene el modelo.
Agregue las operaciones Dataset.cache
y Dataset.prefetch
para reducir la latencia en la lectura mientras se entrena el modelo:
Para el modelo, utilizará una red neuronal convolucional (CNN) sencilla, ya que transformó los archivos de audio en imágenes de espectrogramas.
Su modelo tf.keras.Sequential
utilizará las siguientes capas de preprocesamiento de Keras:
tf.keras.layers.Resizing
: para reducir la muestra de entrada y permitir que el modelo se entrene más rápido.tf.keras.layers.Normalization
: para normalizar cada píxel de la imagen basado en su media y desviación estándar.
Para la capa Normalization
, su método adapt
necesitaría primero recibir la llamada de los datos de entrenamiento para calcular las estadísticas agregadas (es decir, la media y la desviación estándar).
Configure el modelo Keras con el optimizador Adam y la pérdida de entropía cruzada:
Entrene el modelo durante 10 épocas con fines demostrativos:
Vamos a graficar las curvas de pérdidas de entrenamiento y validación para revisar cómo ha mejorado su modelo durante el entrenamiento:
Evaluar el rendimiento del modelo
Ejecute el modelo en el conjunto de pruebas y verifique el rendimiento del modelo:
Visualizar una matriz de confusión
Utilice una matriz de confusión para verificar que el modelo clasificó bien cada uno de los comandos del conjunto de prueba:
Ejecutar la inferencia en un archivo de audio
Por último, verifique la salida de las predicciones del modelo utilizando un archivo de audio de entrada en el que alguien diga "no". ¿Cómo funciona su modelo?
Como sugiere la salida, su modelo debería haber reconocido el comando de audio como "no".
Exportar el modelo con procesamiento previo
El modelo no es muy fácil de usar si tiene que aplicar esos pasos de procesamiento previo antes de pasar los datos al modelo para que realice inferencias. De modo que debe construir una versión de extremo a extremo:
Pruebe el modelo "exportar":
Guarde y vuelva a cargar el modelo, el modelo que se cargó de nuevo da un resultado idéntico:
Siguientes pasos
Este tutorial muestra cómo llevar a cabo una sencilla clasificación de audio/reconocimiento automático del habla utilizando una red neuronal convolucional con TensorFlow y Python. Para obtener más información, tenga en cuenta los siguientes recursos:
En el tutorial Clasificación de sonido con YAMNet se muestra cómo utilizar el aprendizaje por transferencia para realizar una clasificación de audio.
Los blocs de notas del Desafío de reconocimiento del habla con TensorFlow de Kaggle.
El TensorFlow.js - Reconocimiento de audio mediante aprendizaje por transferencia codelab le enseña a construir su propia aplicación web interactiva para realizar clasificaciones de audio.
Un tutorial sobre deep learning para la recuperación de información musical (Choi et al., 2017) en arXiv.
TensorFlow también tiene soporte adicional para la preparación y aumento de datos de audio que le ayudará con sus propios proyectos basados en audio.
Considere la posibilidad de utilizar la biblioteca librosa para realizar análisis de música y audio.