Frage

Ich versuche Ann zu verwenden, um Musiknoten zu erkennen. Das Netzwerk ist ein einfaches zweischichtiges MLP, dessen Eingaben im Grunde genommen ein DFT sind (gemittelt und logarithmisch verteilt), und 12 Ausgänge entsprechen den 12 Notizen einer bestimmten Oktave.

Das Netzwerk ist mit mehreren Proben dieser 12 Noten trainiert, die von einem Instrument (eine Note gleichzeitig) und ein paar Proben von "Stille" gespielt werden.

Die Ergebnisse sind tatsächlich gut. Das Netzwerk ist in der Lage, diese Notizen, die von verschiedenen Instrumenten präpariert gespielt werden, genau zu erkennen, es ist relativ amunen für Lärm und verliert es sogar nicht vollständig, wenn ein Lied gespielt wird.

Das Ziel ist jedoch in der Lage, den polyphonischen Klang zu erkennen. Wenn zwei oder mehr Noten zusammen gespielt werden, werden die beiden entsprechenden Neuronen abfeuern. Das Überraschende ist, dass das Netzwerk dies tatsächlich bereits in gewissem Maße tut (nur über monophonische Proben trainiert wird), jedoch weniger konsequent und weniger genau als für monophonische Noten. Meine Frage ist, wie ich die Fähigkeit verbessern kann, den polyphnischen Klang zu erkennen.

Das Problem ist, dass ich nicht wirklich verstehe, warum es tatsächlich bereits funktioniert. Die verschiedenen Noten (oder deren DFTs) sind im Grunde unterschiedliche Punkte im Raum, für das das Netzwerk trainiert wird. Ich sehe also, warum es ähnliche Geräusche (in der Nähe) erkennt, aber nicht, wie es die Ausgabe für eine Kombination von Notizen "abschließt" (die von jedem der Trainingsbeispiele einen entfernten Punkt bilden). Auf die gleiche Weise und ein Netzwerk, das über (0,0) (0,1) (1,0) = (0) trainiert wird, wird nicht erwartet, dass (1,1) = (1) "abschließt".

Die Brute Force Aprroach dazu besteht darin, das Netzwerk mit möglichst vielen polyphonischen Proben wie möglich zu trainieren. Da das Netzwerk jedoch die Idee aus den monophonischen Stichproben irgendwie vage zu erfassen scheint, gibt es hier wahrscheinlich etwas finanzieller.

Irgendwelche Zeiger? (Entschuldigung für die Länge, übrigens :).

War es hilfreich?

Lösung

Der Grund, warum es bereits funktioniert, ist wahrscheinlich ganz einfach, dass Sie es nicht trainiert haben, ein und nur eine Ausgabe auszuwählen (zumindest nehme ich an, dass Sie es nicht getan haben). In dem einfachen Fall, in dem die Ausgabe nur ein Punktprodukt der Eingabe und die Gewichte ist, werden die Gewichte zu übergreifenden Filtern für die entsprechende Tonhöhe. Da alles linear ist, würden mehrere Ausgänge gleichzeitig aktiviert, wenn mehrere übereinstimmende Filter gleichzeitig gute Übereinstimmungen sahen (wie es bei polyphonischen Notizen der Fall ist). Da Ihr Netzwerk wahrscheinlich Nichtlinearitäten enthält, ist das Bild etwas komplexer, aber die Idee ist wahrscheinlich die gleiche.

In Bezug auf Möglichkeiten, es zu verbessern, ist das Training mit polyphonischen Proben sicherlich eine Möglichkeit. Eine andere Möglichkeit besteht darin, zu einem linearen Filter umzusteigen. Das DFT eines polyphonischen Klangs ist im Grunde die Summe der DFTs jedes einzelnen Klangs. Sie möchten, dass eine lineare Kombination von Eingängen zu einer entsprechenden linearen Kombination von Ausgängen wird, sodass ein linearer Filter angemessen ist.

Warum verwenden Sie übrigens überhaupt ein neuronales Netzwerk dafür? Es scheint, dass nur das Betrachten der DFT und beispielsweise die maximale Frequenz bessere Ergebnisse liefern würde.

Andere Tipps

Anssi Klapuri ist ein angesehener Audioforscher, der eine Methode zur Durchführung von Pitch-Erkennung bei polyphonischen Aufnahmen mithilfe neuronaler Netzwerke veröffentlicht hat.

Vielleicht möchten Sie Klapuris Methode mit Ihrer vergleichen. Es wird in der These seines Meisters vollständig beschrieben, Signalverarbeitungsmethoden für die automatische Transkription von Musik. Sie können seine vielen Papiere online finden oder sein Buch kaufen, das seinen Algorithmus und seine Testergebnisse erklärt. Die These seines Meisters ist unten verknüpft.

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

Die Tonhöhenerkennung bei polyphonischen Aufnahmen ist ein sehr schwieriges Thema und enthält viele Kontroversen - seien Sie bereit, viel zu lesen. Der folgende Link enthält einen weiteren Ansatz zur Pitch -Erkennung bei polyphonischen Aufzeichnungen, die ich für eine kostenlose App namens entwickelt habe Pitchscope -Spieler. Mein C ++ - Quellcode ist auf github.com verfügbar und wird im folgenden Link verwiesen. Eine kostenlose ausführbare Version von Pitchscope -Spieler ist auch im Web verfügbar und läuft unter Windows.

Echtzeit -Pitch -Erkennung

Ich experimentierte mit der Entwicklung eines CTRNN (kontinuierliche Zeit wiederkehrende neuronale Netzwerk) zum Erkennen der Differenz zwischen 2 Sinuswellen. Ich hatte einen moderaten Erfolg, hatte aber nie Zeit, eine Bank dieser Neuronen zu verfolgen (dh in Banden ähnlich dem Cochlear).

Ein möglicher Ansatz wäre die Verwendung Genetische Programmierung (GP), um kurze Codeausschnitte zu generieren, die die Tonhöhe erkennen. Auf diese Weise können Sie in der Lage sein, eine Regel für die Funktionsweise der Tonhöhenerkennung zu generieren, was hoffentlich menschlich lesbar wäre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top