Dogłębne uczenie się za pomocą spektrogramów do rozpoznawania dźwięku

12

Zastanawiałem się nad możliwością klasyfikacji dźwięku (na przykład dźwięków zwierząt) za pomocą spektrogramów. Chodzi o to, aby użyć głębokich splotowych sieci neuronowych do rozpoznania segmentów w spektrogramie i uzyskania jednej (lub wielu) etykiet klasy. To nie jest nowy pomysł (patrz na przykład klasyfikacja dźwięku wieloryba lub rozpoznawanie stylu muzyki ).

Problem, przed którym stoję, polega na tym, że mam pliki dźwiękowe o różnej długości, a zatem spektrogramy o różnych rozmiarach. Jak dotąd każde podejście, które widziałem, wykorzystuje próbkę dźwięku o stałym rozmiarze, ale nie mogę tego zrobić, ponieważ mój plik dźwiękowy może mieć 10 sekund lub 2 minuty długości.

Na przykład z dźwiękiem ptaka na początku i dźwiękiem żaby na końcu (wyjście powinno brzmieć „Bird, Frog”). Moje obecne rozwiązanie polegałoby na dodaniu komponentu czasowego do sieci neuronowej (tworząc bardziej rekurencyjną sieć neuronową), ale na razie chciałbym zachować prostotę. Wszelkie pomysły, linki, samouczki, ...?

user667804
źródło
1
Najprostszym sposobem jest użycie FFT o stałej długości zamiast STFT (spektrogram). To wyeliminuje problem ze zmienną długością. Dlaczego po prostu nie zastosujesz cyklicznej sieci neuronowej? Potrzebujesz tylko sprawdzonego przykładu? Jeśli tak, to czy jesteś elastyczny w wyborze oprogramowania?
Emre
1
Myślę, że straciłbym dużo informacji z FFT o stałej długości. Gdybym to zrobił, myślę, że najpierw musiałbym dokonać segmentacji, w której szukam „interesujących” części. Mogę to zrobić lub przejść do powtarzających się sieci neuronowych (przykład jest fajny, ale nie konieczny, chciałem użyć Lasagne). Powodem, dla którego próbowałem tego uniknąć, jest to, że wyjście z powtarzającej się sieci neuronowej jest trudniejsze do rozwiązania (na każdym etapie, ale mam tylko etykiety dla całego pliku). Chciałem więc zacząć od najprostszego modelu i stopniowo go komplikować.
user667804
czy mógłbyś powiedzieć, czego użyłeś i jakie najlepsze podejście znalazłeś? @ user667804
nia
Sprawdź rozwiązanie w tym dokumencie: ceur-ws.org/Vol-1609/16090547.pdf Użycie CNN na porcjach spektrogramu o stałych rozmiarach, a następnie uśrednienie wyników w celu wygenerowania jednej ostatecznej prognozy (wydaje się, że średnia wyników pojedynczych wydaje się działać) Najlepsza).
user667804

Odpowiedzi:

4

W przypadku automatycznego rozpoznawania mowy (ASR) funkcje banku filtrów działają tak dobrze, jak CNN w spektrogramach Tabela 1 . Możesz szkolić system DBN-DNN na fbank do klasyfikowania dźwięków zwierząt.

W praktyce dłuższe wypowiedzi są podzielone na krótsze, ponieważ dekodowanie Viterbi nie działa dobrze w przypadku dłuższych wypowiedzi. Możesz zrobić to samo.

Możesz podzielić dłuższe wypowiedzi na mniejsze wypowiedzi o stałej długości. Dzielenie dłuższych wypowiedzi na mniejsze jest łatwe. Problem polega na zwiększeniu długości mniejszych wypowiedzi w celu osiągnięcia stałej długości.

Możesz wypaczać oś częstotliwości spektrogramu w celu zwiększenia mniejszych wypowiedzi. Wykazano, że to powiększanie danych poprawia zwiększanie wydajności danych ASR .

Aby uzyskać dłuższą wypowiedź z wieloma dźwiękami, możesz użyć algorytmów segmentacji muzyki, aby podzielić ją na wiele wypowiedzi. Wypowiedzi te mogą być wykonane ze stałej długości przez podział lub powiększenie.

arduinolover
źródło
4

RNN nie dawały wystarczająco dobrych wyników i są również trudne do trenowania, więc wybrałem CNN.

Ponieważ konkretny dźwięk zwierzęcia trwa tylko kilka sekund, możemy podzielić spektrogram na części. Użyłem długości 3 sekund. Następnie przeprowadzamy klasyfikację dla każdego fragmentu i uśredniamy wyjścia, aby utworzyć pojedynczą prognozę dla pliku audio. Działa to naprawdę dobrze i jest również łatwe do wdrożenia.

Bardziej szczegółowe wyjaśnienie można znaleźć tutaj: http://ceur-ws.org/Vol-1609/16090547.pdf

user667804
źródło