Erik172 AI

Importar el conjunto de datos de mini comandos de voz

Para ahorrar tiempo con la carga de datos, trabajará con una versión más pequeña del conjunto de datos de comandos de voz. El conjunto de datos original consta de más de 105 000 archivos de audio en formato de archivo de audio WAV (Waveform) de personas que dicen 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 comandos de voz 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 :

Extraiga los clips de audio en una lista llamada filenames de archivo y mezcle:

Divida los nombres de filenames en conjuntos de entrenamiento, validación y prueba utilizando una proporción de 80:10:10, respectivamente:

Leer los archivos de audio y sus etiquetas.

En esta sección, preprocesará el conjunto de datos, creando tensores decodificados para las formas de onda y las etiquetas correspondientes. Tenga en cuenta que:

La forma del tensor devuelto por tf.audio.decode_wav es [samples, channels] , donde channels son 1 para mono o 2 para estéreo. El conjunto de datos de mini comandos de voz solo contiene grabaciones mono.

Ahora, definamos una función que preprocesa los archivos de audio WAV sin procesar del conjunto de datos en tensores de audio:

Defina una función que cree etiquetas usando los directorios principales para cada archivo:

Defina otra función auxiliar, get_waveform_and_label , que lo integre todo:

Cree el conjunto de entrenamiento para extraer los pares de etiquetas de audio:

Construirá los conjuntos de validación y prueba usando un procedimiento similar más adelante.

Tracemos algunas formas de onda de audio:

Convertir formas de onda en espectrogramas

Las formas de onda en el conjunto de datos se representan en el dominio del tiempo. A continuación, transformará las formas de onda de las señales de dominio de tiempo en señales de dominio de frecuencia de tiempo mediante el cálculo de la transformada de Fourier de tiempo corto (STFT) para convertir las formas de onda en espectrogramas , que muestran los cambios de frecuencia a lo largo del tiempo y pueden ser representados como imágenes 2D. Introducirá las imágenes del espectrograma en su red neuronal para entrenar el modelo.

Una transformada de Fourier ( tf.signal.fft ) convierte una señal a las frecuencias de sus componentes, pero pierde toda la información de tiempo. En comparación, STFT ( tf.signal.stft ) divide la señal en ventanas de tiempo y ejecuta una transformada de Fourier en cada ventana, preservando parte de la información de tiempo y devolviendo un tensor 2D en el que puede ejecutar convoluciones estándar.

Cree una función de utilidad para convertir formas de onda en espectrogramas:

A continuación, comience a explorar los datos. Imprima las formas de la forma de onda tensionada de un ejemplo y el espectrograma correspondiente, y reproduzca el audio original:

Ahora, defina una función para mostrar un espectrograma:

Trace la forma de onda del ejemplo a lo largo del tiempo y el espectrograma correspondiente (frecuencias a lo largo del tiempo):

Ahora, defina una función que transforme el conjunto de datos de forma de onda en espectrogramas y sus etiquetas correspondientes como ID de números enteros:

Asigne get_spectrogram_and_label_id a través de los elementos del conjunto de datos con Dataset.map :

Examine los espectrogramas para ver diferentes ejemplos del conjunto de datos:

Construir y entrenar el modelo.

Repita el preprocesamiento del conjunto de entrenamiento en los conjuntos de validación y prueba:

Agrupe los conjuntos de entrenamiento y validación para el entrenamiento del modelo:

Agregue las operaciones Dataset.cache y Dataset.prefetch para reducir la latencia de lectura mientras entrena el modelo:

Para el modelo, utilizará una red neuronal convolucional (CNN) simple, ya que ha transformado los archivos de audio en imágenes de espectrograma.

Su modelo tf.keras.Sequential utilizará las siguientes capas de preprocesamiento de Keras:

Para la capa de Normalization , primero se necesitaría llamar a su método de adapt en los datos de entrenamiento para calcular las estadísticas agregadas (es decir, la media y la desviación estándar).

Configure el modelo de Keras con el optimizador de Adam y la pérdida de entropía cruzada:

Tracemos las curvas de pérdida de entrenamiento y validación para verificar cómo ha mejorado su modelo durante el entrenamiento:

Evaluar el rendimiento del modelo.

Ejecute el modelo en el conjunto de prueba y verifique el rendimiento del modelo:

Ejecutar inferencia en un archivo de audio.

Finalmente, verifique la salida de predicción del modelo utilizando un archivo de audio de entrada de alguien que dice "no". ¿Qué tan bien funciona tu modelo?

Como sugiere el resultado, su modelo debería haber reconocido el comando de audio como "no".