Pergunta

Estou tentando usar Ann para detecção de pitch de notas musicais. A rede é um MLP simples de duas camadas, cujas entradas são basicamente uma DFT (média e distribuída logaritmicamente), e 12 saídas correspondem às 12 notas de uma oitava específica.

A rede é treinada com várias amostras dessas 12 notas tocadas por alguns instrumentos (uma nota de cada vez) e algumas amostras de "silêncio".

Os resultados são realmente bons. A rede é capaz de detectar essas notas tocadas por diferentes instrumentos com precisão com precisão, é relativamente amune ao ruído e nem se perde completamente quando é tocado uma música.

O objetivo, no entanto, é ser capaz de detectar som polifônico. Para que, quando duas ou mais notas são tocadas juntas, os dois neurônios correspondentes disparam. O surpreendente é que a rede já faz isso até certo ponto (sendo treinado apenas em amostras monofônicas), ainda que de forma menos consistente e com menos precisão do que para notas monofônicas. Minha pergunta é como posso aprimorar sua capacidade de reconhecer o som polyphnic?

O problema é que eu não entendo por que ele realmente realmente funciona. As diferentes notas (ou seus DFTs) são basicamente pontos diferentes no espaço para os quais a rede é treinada. Portanto, vejo por que ele reconhece sons semelhantes (pontos próximos), mas não como "conclui" a saída para uma combinação de notas (que formam um ponto distante de cada um dos exemplos de treinamento). Da mesma forma, uma rede e a rede que é treinada sobre (0,0) (0,1) (1,0) = (0), não se espera que "conclua" que (1,1) = (1).

A força bruta Aproach é treinar a rede com o maior número possível de amostras polifônicas. No entanto, como a rede parece, de alguma forma, entender vagamente a idéia das amostras monofônicas, provavelmente há algo mais fundamental aqui.

Algum indicador? (Desculpe pelo comprimento, btw :).

Foi útil?

Solução

A razão pela qual ele já funciona já é provavelmente simplesmente que você não o treinou para escolher uma e apenas uma saída (pelo menos eu suponho que você não). No caso simples, quando a saída é apenas um produto de ponto da entrada e os pesos, os pesos se tornariam filtros correspondentes para o tom correspondente. Como tudo é linear, várias saídas seriam ativadas simultaneamente se vários filtros correspondentes viessem simultaneamente boas correspondências (como é o caso das notas polifônicas). Como sua rede provavelmente inclui não linearidades, a imagem é um pouco mais complexa, mas a ideia é provavelmente a mesma.

Em relação às maneiras de melhorá -lo, o treinamento com amostras polifônicas é certamente uma possibilidade. Outra possibilidade é mudar para um filtro linear. A DFT de um som polifônico é basicamente a soma dos DFTs de cada som individual. Você deseja que uma combinação linear de entradas se torne uma combinação linear correspondente de saídas; portanto, um filtro linear é apropriado.

Aliás, por que você usa uma rede neural para isso em primeiro lugar? Parece que apenas olhar para o DFT e, digamos, a frequência máxima daria melhores resultados com mais facilidade.

Outras dicas

Anssi Klapuri é um respeitado pesquisador de áudio que publicou um método para executar a detecção de afinação em gravações polifônicas usando redes neurais.

Você pode comparar o método de Klapuri com o seu. Está totalmente descrito em sua tese de mestrado, Métodos de processamento de sinal para a transcrição automática da música. Você pode encontrar seus muitos artigos on -line ou comprar o livro dele, o que explica o algoritmo e os resultados dos testes. Sua tese de mestrado está ligada abaixo.

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

A detecção de pitch nas gravações polifônicas é um tópico muito difícil e contém muitas controvérsias - esteja preparado para fazer muita leitura. O link abaixo contém outra abordagem para detecção de pitch em gravações polifônicas que desenvolvi para um aplicativo gratuito chamado Jogador de pitchscope. Meu código -fonte C ++ está disponível no github.com e é referenciado no link abaixo. Uma versão executável gratuita de Jogador de pitchscope Também está disponível na web e é executado no Windows.

Detecção de tom em tempo real

Eu experimentei a evolução de um CTRNN (rede neural recorrente de tempo contínuo) ao detectar a diferença entre 2 ondas senoidais. Eu tive sucesso moderado, mas nunca tive tempo de acompanhar um banco desses neurônios (ou seja, em bandas semelhantes à coclear).

Uma abordagem possível seria empregar Programação genética (GP), para gerar trechos curtos de código que detectam o tom. Dessa forma, você seria capaz de gerar uma regra para a forma como a detecção de afinação funciona, o que, esperançosamente, seria legível por humanos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top