Deep Learning with Spectrograms para reconhecimento de som

12

Eu estava estudando a possibilidade de classificar o som (por exemplo, sons de animais) usando espectrogramas. A idéia é usar redes neurais convolucionais profundas para reconhecer segmentos no espectrograma e emitir um (ou muitos) rótulos de classe. Esta não é uma idéia nova (veja, por exemplo , classificação de som de baleia ou reconhecimento de estilo musical ).

O problema que estou enfrentando é que tenho arquivos de som de diferentes comprimentos e, portanto, espectrogramas de diferentes tamanhos. Até agora, todas as abordagens que eu vi usam uma amostra de som de tamanho fixo, mas não posso fazer isso porque meu arquivo de som pode ter 10 segundos ou 2 minutos de duração.

Com, por exemplo, um som de pássaro no começo e um som de sapo no final (a saída deve ser "Pássaro, sapo"). Minha solução atual seria adicionar um componente temporal à rede neural (criando mais uma rede neural recorrente), mas gostaria de mantê-la simples por enquanto. Alguma idéia, links, tutoriais, ...?

user667804
fonte
1
A maneira mais simples é usar uma FFT de comprimento fixo em vez de uma STFT (espectrograma). Isso eliminará seu problema de tamanho variável. Por que você não aplica apenas uma rede neural recorrente? Você só precisa de um exemplo trabalhado? Em caso afirmativo, você é flexível sobre qual software usar?
Emre
1
Eu acho que perderia muita informação com uma FFT de comprimento fixo. Se eu fizesse isso, acho que teria que fazer uma segmentação primeiro, onde procuro por partes 'interessantes'. Eu poderia fazer isso ou ir para as redes neurais recorrentes (um exemplo é bom, mas não é necessário, eu queria usar Lasanha). A razão pela qual tentei evitá-lo é que é mais difícil lidar com a saída de uma rede neural recorrente (a cada passo, mas só tenho os rótulos para o arquivo inteiro). Então, eu queria começar com o modelo mais simples e gradualmente torná-lo mais complexo.
user667804
você poderia dizer o que acabou usando e a melhor abordagem encontrada? @ user667804
nia
Confira este documento para uma solução: ceur-ws.org/Vol-1609/16090547.pdf Usando um CNN em pedaços de tamanho fixo do espectrograma e calculando a média das saídas para gerar uma previsão final (a média das saídas individuais parece funcionar melhor).
user667804

Respostas:

4

Para o reconhecimento automático de fala (ASR), os recursos do banco de filtros têm um desempenho tão bom quanto a CNN nos espectrogramas Tabela 1 . Você pode treinar um sistema DBN-DNN no fbank para classificar sons de animais.

Na prática, os enunciados de fala mais longos são divididos em enunciados mais curtos, pois a decodificação de Viterbi não funciona bem para enunciados mais longos. Você poderia fazer o mesmo.

Você pode dividir as expressões mais longas em expressões menores de comprimento fixo. É fácil dividir as expressões mais longas em menores. O problema surge no aumento do comprimento das expressões menores para atingir um comprimento fixo.

Você pode distorcer o eixo de frequência do espectrograma para aumentar os enunciados menores. Este aumento de dados demonstrou melhorar o aumento de dados de desempenho do ASR .

Para um enunciado mais longo com vários sons, você pode usar algoritmos de segmentação de música para dividi-lo em vários enunciados. Essas declarações podem ser feitas de comprimento fixo, por divisão ou aumento.

arduinolover
fonte
4

RNNs não estavam produzindo resultados bons o suficiente e também são difíceis de treinar, então eu fui com CNNs.

Como um som específico de um animal dura apenas alguns segundos, podemos dividir o espectrograma em pedaços. Eu usei um comprimento de 3 segundos. Em seguida, executamos a classificação em cada bloco e calculamos a média das saídas para criar uma única previsão por arquivo de áudio. Isso funciona muito bem e também é simples de implementar.

Uma explicação mais aprofundada pode ser encontrada aqui: http://ceur-ws.org/Vol-1609/16090547.pdf

user667804
fonte