Aprendizaje profundo con espectrogramas para reconocimiento de sonido

12

Estaba estudiando la posibilidad de clasificar el sonido (por ejemplo, sonidos de animales) usando espectrogramas. La idea es utilizar redes neuronales convolucionales profundas para reconocer segmentos en el espectrograma y generar una (o muchas) etiquetas de clase. Esta no es una idea nueva (ver, por ejemplo , clasificación de sonido de ballena o reconocimiento de estilo musical ).

El problema al que me enfrento es que tengo archivos de sonido de diferente longitud y, por lo tanto, espectrogramas de diferentes tamaños. Hasta ahora, cada enfoque que he visto utiliza una muestra de sonido de tamaño fijo, pero no puedo hacerlo porque mi archivo de sonido puede durar 10 segundos o 2 minutos.

Con, por ejemplo, un sonido de pájaro al principio y un sonido de rana al final (la salida debe ser "Bird, Frog"). Mi solución actual sería agregar un componente temporal a la red neuronal (creando más de una red neuronal recurrente) pero me gustaría mantenerlo simple por ahora. ¿Alguna idea, enlaces, tutoriales, ...?

usuario667804
fuente
1
La forma más simple es usar una FFT de longitud fija en lugar de una STFT (espectrograma). Eso eliminará su problema de longitud variable. ¿Por qué no solo aplicas una red neuronal recurrente? ¿Solo necesitas un ejemplo trabajado? Si es así, ¿eres flexible sobre qué software usar?
Emre
1
Creo que perdería mucha información con una FFT de longitud fija. Si hiciera eso, creo que primero tendría que hacer una segmentación, donde busco partes 'interesantes'. Podría hacer eso o ir a las redes neuronales recurrentes (un ejemplo es bueno pero no súper necesario, quería usar Lasagne). La razón por la que intenté evitarlo es que la salida de una red neuronal recurrente es más difícil de manejar (en cada paso de tiempo, pero solo tengo las etiquetas para todo el archivo). Así que quería comenzar con el modelo más simple y gradualmente hacerlo más complejo.
user667804
¿podría decir qué terminó usando y el mejor enfoque que encontró? @ user667804
nia
Consulte este documento para obtener una solución: ceur-ws.org/Vol-1609/16090547.pdf Usando una CNN en fragmentos de tamaño fijo del espectrograma y luego promediando las salidas para generar una predicción final (la media de las salidas individuales parece funcionar) mejor).
user667804

Respuestas:

4

Para el reconocimiento automático de voz (ASR), las características del banco de filtros funcionan tan bien como CNN en la Tabla 1 de espectrogramas . Puede entrenar un sistema DBN-DNN en fbank para clasificar los sonidos de los animales.

En la práctica, las expresiones de voz más largas se dividen en expresiones más cortas, ya que la decodificación de Viterbi no funciona bien para expresiones más largas. Tu podrías hacer lo mismo.

Puede dividir los enunciados más largos en enunciados más pequeños de longitud fija. Dividir las expresiones más largas en más pequeñas es fácil. El problema viene al aumentar la longitud de las expresiones más pequeñas para alcanzar una longitud fija.

Podría deformar el eje de frecuencia del espectrograma para aumentar las expresiones más pequeñas. Se ha demostrado que este aumento de datos mejora el aumento de datos de rendimiento ASR .

Para un enunciado más largo con múltiples sonidos, puede usar algoritmos de segmentación de música para dividirlo en múltiples enunciados. Estas declaraciones pueden hacerse de longitud fija ya sea por división o aumento.

arduinolover
fuente
4

Los RNN no estaban produciendo resultados suficientemente buenos y también son difíciles de entrenar, así que elegí CNN.

Como el sonido de un animal específico dura solo unos segundos, podemos dividir el espectrograma en trozos. Usé una duración de 3 segundos. Luego realizamos una clasificación en cada fragmento y promediamos las salidas para crear una sola predicción por archivo de audio. Esto funciona muy bien y también es fácil de implementar.

Puede encontrar una explicación más detallada aquí: http://ceur-ws.org/Vol-1609/16090547.pdf

usuario667804
fuente