Cómo usar mel-spectrogram como entrada de una CNN

El espaciado de frecuencia de Mel se aproxima al mapeo de frecuencias a parches de nervios en la cóclea y, por lo tanto, la importancia relativa de los diferentes sonidos para los humanos (y otros animales). Por lo tanto, agrupar un espectro en anchos de espaciado de frecuencia de mel aproximadamente le permite usar la información espectral de la misma manera que la audición humana. Esto es útil si su CNN está intentando cosas como el reconocimiento de voz. Si bien una CNN puede extraer sus propias características, las características que se describen a continuación tienen un largo historial de éxito, y proporcionar estas características a su CNN reducirá en gran medida el tiempo de entrenamiento y mantendrá la precisión alta.

Tomar el registro de la suma de la potencia en los contenedores que ha reunido como espaciamiento de mel es un enfoque, pero recomendaría una táctica algo diferente. Normalmente, querrá utilizar los coeficientes cepstrales de frecuencia de mel (MFCC) en lugar de los coeficientes espectrales; los coeficientes cepstrales son una forma compacta, dispersa, de describir los espectros que normalmente se encuentran en el habla. Hay varios algoritmos que pueden usarse para generar coeficientes cepstrales de mel. Si ya tiene uno en su biblioteca de procesamiento de señal favorita, está por delante del juego. He usado las bibliotecas R tuneR y seewave, y esta biblioteca MATLAB y funcionan bien, no he probado este código Python. Sin duda hay otras opciones.

Ahora, solo tener un cuadro (intervalo de tiempo de espectrograma) de datos mel cepstrales proporciona mucha información, pero el reconocimiento de voz (si ese es su objetivo) normalmente utiliza más datos. Muy comúnmente usará MFCC de varios marcos superpuestos al 50% (típicamente 5 de ~ 15–30 mseg, y 24 bins por marco), y las diferencias entre el MFCC de estos marcos superpuestos.

Un buen artículo que explica esto es Rabiner “Un tutorial sobre modelos ocultos de Markov y aplicaciones seleccionadas en reconocimiento de voz”. La mayor parte de este documento trata sobre HMM (Modelos ocultos de Markov) en reconocimiento de voz; puede ser interesante, pero lo reemplazará (y generará algunas capas superiores de características) con la CNN. A lo que debe prestar atención es a la sección IV “Implementación de reconocedores de voz usando HMM”, subsección C “Análisis de características de LPC” en la página 277. Esto proporciona diagramas de bloques de alto nivel, parámetros y referencias sobre cómo construir un front-end para un reconocedor de voz, incluido el uso de coeficientes cepstrales.

Esto puede ser un poco abrumador, pero muchos documentos de reconocimiento de voz usan aproximadamente el mismo frente, por lo que si busca en Google Scholar los documentos que citan a Rabiner anteriormente, puede encontrar un documento que lo explique de una manera cómoda. Las bibliotecas de software contienen varios extractores de funciones diferentes que también pueden interesarle.

audio-clasificador-keras-cnn

utiliza melespectrogramas como entradas y un CNN multicapa con normalización de lotes y activaciones de ELU.

Puede descargar el código y estudiarlo, creo que le dará más imágenes en drscotthawley / audio-classifier-keras-cnn

Bueno, lo calculas y lo alimentas. Después de todo, es solo un vector después de la conversión.

El verdadero problema aquí es que aún no entendiste lo que hace funcionar a estas CNN profundas. El truco es NO usar las funciones de frecuencia Mel, sino que CNN descubra sus propias funciones. Así es como logran su superioridad sobre los métodos clásicos.

1. Calcular el espectrograma de Mel (2d)

2. apilarlos usando numpy.dstack (3d)

3. gírelo desde el eje (x, y, z) -> eje (z, x, y) usando np.rot90

4. luego numpy.expand_dims (para keras) (4d)