Deep Learning mit Spektrogrammen zur Schallerkennung

12

Ich habe die Möglichkeit untersucht, Geräusche (zum Beispiel Tiergeräusche) mithilfe von Spektrogrammen zu klassifizieren. Die Idee ist, ein tiefes Faltungs-Neuronales Netz zu verwenden, um Segmente im Spektrogramm zu erkennen und eine (oder mehrere) Klassenbezeichnungen auszugeben. Dies ist keine neue Idee (siehe zum Beispiel die Klangklassifizierung von Walen oder die Erkennung von Musikstilen ).

Das Problem, mit dem ich konfrontiert bin, ist, dass ich Sounddateien unterschiedlicher Länge und daher Spektrogramme unterschiedlicher Größe habe. Bisher verwendet jeder Ansatz, den ich gesehen habe, ein Soundbeispiel mit fester Größe, aber das kann ich nicht, da meine Sounddatei möglicherweise 10 Sekunden oder 2 Minuten lang ist.

Zum Beispiel mit einem Vogelgeräusch am Anfang und einem Froschgeräusch am Ende (Ausgabe sollte "Vogel, Frosch" sein). Meine derzeitige Lösung wäre, dem neuronalen Netzwerk eine zeitliche Komponente hinzuzufügen (wodurch mehr ein wiederkehrendes neuronales Netzwerk entsteht), aber ich möchte es vorerst einfach halten. Irgendwelche Ideen, Links, Tutorials, ...?

user667804
quelle
1
Der einfachste Weg ist die Verwendung einer FFT fester Länge anstelle einer STFT (Spektrogramm). Dadurch wird Ihr Problem mit variabler Länge beseitigt. Warum wenden Sie nicht einfach ein wiederkehrendes neuronales Netzwerk an? Benötigen Sie nur ein Beispiel? Wenn ja, sind Sie flexibel, welche Software Sie verwenden möchten?
Emre
1
Ich denke, ich würde mit einer FFT mit fester Länge viele Informationen verlieren. Wenn ich das tun würde, müsste ich zuerst eine Segmentierung durchführen, bei der ich nach 'interessanten' Teilen suche. Ich könnte das tun oder zu den wiederkehrenden neuronalen Netzen gehen (ein Beispiel ist nett, aber nicht super notwendig, ich wollte Lasagne verwenden). Der Grund, warum ich versucht habe, dies zu vermeiden, ist, dass die Ausgabe eines wiederkehrenden neuronalen Netzwerks schwieriger zu handhaben ist (bei jedem Zeitschritt, aber ich habe nur die Beschriftungen für die gesamte Datei). Deshalb wollte ich mit dem einfachsten Modell beginnen und es schrittweise komplexer machen.
user667804
Könnten Sie bitte sagen, was Sie letztendlich verwendet haben und welchen Ansatz Sie am besten gefunden haben? @ user667804
nia
In diesem Dokument finden Sie eine Lösung: ceur-ws.org/Vol-1609/16090547.pdf Verwenden eines CNN für Abschnitte mit fester Größe des Spektrogramms und anschließendes Mitteln der Ausgaben, um eine endgültige Vorhersage zu generieren (der Mittelwert der einzelnen Ausgaben scheint zu funktionieren Beste).
user667804

Antworten:

4

Für die automatische Spracherkennung (ASR) sind Filterbankfunktionen in Spektrogrammen in Tabelle 1 genauso gut wie CNN . Sie können ein DBN-DNN-System auf fbank trainieren, um Tiergeräusche zu klassifizieren.

In der Praxis werden längere Sprachäußerungen in kürzere Äußerungen unterteilt, da die Viterbi-Decodierung bei längeren Äußerungen nicht gut funktioniert. Sie könnten das gleiche tun.

Sie können die längeren Äußerungen in kleinere Äußerungen fester Länge unterteilen. Das Aufteilen der längeren Äußerungen in kleinere ist einfach. Das Problem besteht darin, die Länge der kleineren Äußerungen zu erhöhen, um eine feste Länge zu erreichen.

Sie können die Frequenzachse des Spektrogramms verziehen, um die kleineren Äußerungen zu verstärken. Es wurde gezeigt, dass diese Datenerweiterung die ASR-Leistungsdatenerweiterung verbessert .

Für eine längere Äußerung mit mehreren Klängen können Sie Musiksegmentierungsalgorithmen verwenden, um sie in mehrere Äußerungen zu unterteilen. Diese Äußerungen können entweder durch Teilung oder Vergrößerung von fester Länge sein.

Arduinolover
quelle
4

RNNs lieferten nicht gut genug Ergebnisse und sind auch schwer zu trainieren, deshalb habe ich mich für CNNs entschieden.

Da ein bestimmtes Tiergeräusch nur wenige Sekunden lang ist, können wir das Spektrogramm in Stücke teilen. Ich habe eine Länge von 3 Sekunden verwendet. Wir führen dann eine Klassifizierung für jeden Block durch und mitteln die Ausgaben, um eine einzelne Vorhersage pro Audiodatei zu erstellen. Dies funktioniert sehr gut und ist auch einfach zu implementieren.

Eine ausführlichere Erklärung finden Sie hier: http://ceur-ws.org/Vol-1609/16090547.pdf

user667804
quelle