11

Estoy tratando de usar ANN para la detección de tono de notas musicales. La red es una simple MLP de dos capas, cuyas entradas son básicamente una DFT (promediada y distribuida logarítmicamente), y 12 salidas corresponden a las 12 notas de una octava en particular.Detección de tono usando redes neuronales

La red está formada con varias muestras de esas 12 notas tocadas por algún instrumento (una nota a la vez), y algunas muestras de "silencio".

Los resultados son realmente buenos. La red es capaz de detectar esas notas tocadas con precisión por diferentes instrumentos, es relativamente amiguito al ruido, e incluso no se pierde completamente cuando se reproduce una canción.

El objetivo, sin embargo, es poder detectar sonido polifónico. De modo que cuando dos o más notas se tocan juntas, las dos neuronas correspondientes dispararán. Lo sorprendente es que la red ya lo hace en cierta medida (entrenándose solo con muestras monofónicas), aunque de manera menos consistente y menos precisa que las notas monofónicas. Mi pregunta es ¿cómo puedo mejorar su capacidad para reconocer el sonido polifónico?

El problema es que realmente no entiendo por qué realmente funciona. Las diferentes notas (o sus DFT) son básicamente diferentes puntos en el espacio para el que se entrena la red. Entonces veo por qué reconoce sonidos similares (puntos cercanos), pero no cómo "concluye" el resultado para una combinación de notas (que forman un punto distante de cada uno de los ejemplos de entrenamiento). De la misma forma que una red Y que está entrenada sobre (0,0) (0,1) (1,0) = (0), no se espera que "concluya" que (1,1) = (1).

La fuerza bruta se aplica a esto para entrenar la red con tantas muestras polifónicas como sea posible. Sin embargo, dado que la red parece captar de alguna manera vagamente la idea de las muestras monofónicas, probablemente haya algo más divertido aquí.

¿Alguna sugerencia? (perdón por la duración, por cierto :).

Respuesta

6

La razón por la que funciona ya es, sencillamente, que no entrenaste para elegir una y solo una salida (al menos supongo que no). En el caso simple, cuando la salida es solo un producto de punto de la entrada y los pesos, los pesos se convertirían en filtros coincidentes para el tono correspondiente. Dado que todo es lineal, múltiples salidas se activarían simultáneamente si múltiples filtros coincidentes vieran simultáneamente coincidencias (como es el caso de las notas polifónicas). Dado que su red probablemente incluye no linealidades, la imagen es un poco más compleja, pero la idea es probablemente la misma.

En cuanto a las formas de mejorarlo, el entrenamiento con muestras polifónicas es ciertamente una posibilidad. Otra posibilidad es cambiar a un filtro lineal. La DFT de un sonido polifónico es básicamente la suma de las DFT de cada sonido individual. Desea una combinación lineal de entradas para convertirse en una combinación lineal correspondiente de salidas, por lo que un filtro lineal es apropiado.

Por cierto, ¿por qué usa una red neuronal para esto en primer lugar? Parece que solo mirar el DFT y, por ejemplo, tomar la frecuencia máxima le daría mejores resultados más fácilmente.

+3

Sólo tomando la frecuencia máxima es muy poco fiable – finnw

2

Experimenté con la evolución de una red neuronal recidivante de tiempo continuo (CTRNN) para detectar la diferencia entre 2 ondas sinusoidales. Tuve un éxito moderado, pero nunca tuve tiempo de seguir con un banco de estas neuronas (es decir, en bandas similares a la cóclea).

1

Un posible enfoque sería emplear Genetic Programming (GP), para generar breves fragmentos de código que detecta el tono. De esta forma, usted podría generar una regla sobre cómo funciona la detección de tono, que con suerte sería humanamente legible.

3

Anssi Klapuri es un respetado investigador de audio que ha publicado un método para realizar la detección de tono en grabaciones polifónicas utilizando redes neuronales.

Es posible que desee comparar el método de Klapuri con el suyo. Está completamente descrito en su tesis de maestría, Métodos de procesamiento de señales para la transcripción automática de música. Puede encontrar sus muchos documentos en línea o comprar su libro que explica su algoritmo y los resultados de las pruebas. Su tesis de maestría está vinculada a continuación.

https://www.cs.tut.fi/sgn/arg/klap/phd/klap_phd.pdf

detección de tono en las grabaciones polifónicas es un tema muy difícil y contiene muchas controversias - estar preparado para hacer un montón de lectura. El siguiente enlace contiene otro enfoque para la detección de tono sobre grabaciones polifónicas que desarrollé para una aplicación gratuita llamada PitchScope Player. Mi código fuente de C++ está disponible en GitHub.com, y se hace referencia en el siguiente enlace. Una versión ejecutable gratuita de PitchScope Player también está disponible en la web y se ejecuta en Windows.

Real time pitch detection

Cuestiones relacionadas