11
votes

Détection de pitch à l'aide de réseaux de neurones

J'essaie d'utiliser Ann pour la détection de hauteur des notes musicales. Le réseau est un simple MLP à deux couches, dont les entrées sont fondamentalement un DFT (moyenné et distribué de manière logarithmique) et 12 sorties correspondent aux 12 notes d'une octave particulière.

Le réseau est formé à plusieurs échantillons de ces 12 notes jouées par certains instruments (une note à la fois) et quelques échantillons de "silence".

Les résultats sont réellement bons. Le réseau est capable de détecter ces notes jouées par différents instruments Puerety avec précision, elle est relativement amune au bruit, et même ne pas perdre sa force complètement lors de la lecture d'une chanson.

L'objectif, cependant, est de pouvoir détecter le son polyphonique. De sorte que lorsque deux ou plusieurs notes sont jouées ensemble, les deux neurones correspondants vont tirer. La chose surprenante est que le réseau fait déjà cela dans une certaine mesure (étant formé sur des échantillons monophoniques uniquement), mais moins systématiquement et moins précisément que pour les notes monophoniques. Ma question est de savoir comment puis-je améliorer sa capacité à reconnaître le son polyphnique?

Le problème est que je ne comprends pas vraiment pourquoi cela fonctionne déjà. Les différentes notes (ou leurs DFT) sont essentiellement des points différents dans l'espace pour lequel le réseau est formé. Je vois donc pourquoi il reconnaît des sons similaires (points à proximité), mais pas comment il "conclut" la sortie d'une combinaison de notes (qui forment un point éloigné de chacun des exemples de formation). La même manière et un réseau formé sur (0,0) (0,1) (1,0) = (0), ne devrait pas "conclure" que (1,1) = (1).

La force brute Aproach à ceci est de former le réseau avec autant d'échantillons polyphoniques que possible. Cependant, étant donné que le réseau semble en quelque sorte saisir vaguement l'idée des échantillons monophoniques, il y a probablement quelque chose de plus fondamental ici.

Tous les pointeurs? (désolé pour la longueur, BTW :).


0 commentaires

4 Réponses :


7
votes

La raison pour laquelle il fonctionne déjà est probablement tout simplement que vous ne l'avez pas formé pour choisir un seul et un seul résultat (au moins je suppose que vous n'avez pas). Dans le cas simple lorsque la sortie est juste un produit DOT de l'entrée et des poids, les poids deviendraient des filtres correspondants pour le hauteur correspondant. Étant donné que tout est linéaire, plusieurs sorties seraient activées simultanément si plusieurs filtres correspondants ont simultanément enregistré de bonnes correspondances (comme le cas pour les notes polyphoniques). Puisque votre réseau inclut probablement des non-linéarités, la photo est un peu plus complexe, mais l'idée est probablement la même.

En ce qui concerne les moyens de l'améliorer, la formation avec des échantillons polyphoniques est certainement une possibilité. Une autre possibilité est de passer à un filtre linéaire. Le DFT d'un son polyphonique est fondamentalement la somme des DFT de chaque son individuel. Vous voulez qu'une combinaison linéaire d'entrées deviennent une combinaison linéaire correspondante de sorties, de sorte qu'un filtre linéaire est approprié.

Incidemment, pourquoi utilisez-vous un réseau de neurones pour cela en premier lieu? Il semble que juste regarder le DFT et dire, prendre la fréquence maximale vous donnerait de meilleurs résultats plus facilement.


1 commentaires

Juste prendre la fréquence maximale est très peu fiable



2
votes

J'ai expérimenté l'évolution d'un CTRNN (réseau neuronal récurrent continu) sur la détection de la différence entre 2 ondes sinusoïdales. J'avais un succès modéré, mais je n'ai jamais eu le temps de faire un suivi avec une banque de ces neurones (c'est-à-dire des bandes similaires à la cochléear).


0 commentaires

0
votes

Une approche possible serait d'utiliser Programmation génétique (GP), pour générer des extraits courts de code qui détecte le terrain. De cette façon, vous seriez en mesure de générer une règle pour que la détection de hauteur fonctionne, ce qui serait lisible par l'homme.


0 commentaires

5
votes

anssi klapuri est un chercheur audio bien respecté qui a publié une méthode pour effectuer une détection de hauteur sur des enregistrements polyphoniques à l'aide de réseaux de neurones.

Vous voudrez peut-être comparer la méthode de Klapuri à la vôtre. Il est entièrement décrit dans la thèse de sa maîtrise, les méthodes de traitement de signal pour la transcription automatique de la musique . Vous pouvez trouver ses nombreux papiers en ligne ou acheter son livre qui explique son algorithme et ses résultats de test. La thèse de sa maîtrise est liée ci-dessous.

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

La détection de hauteur sur les enregistrements polyphoniques est un sujet très difficile et contient de nombreuses controverses - être prêt à faire beaucoup de lecture. Le lien ci-dessous contient une autre approche de la détection de hauteur sur les enregistrements polyphoniques que j'ai développés pour une application gratuite appelée Pitchscope Player . Mon code source C ++ est disponible sur github.com et est référencé dans le lien ci-dessous. Une version exécutable gratuite de PitchScope Player est également disponible sur le Web et fonctionne sous Windows.

détection pas en temps réel


0 commentaires