Written by 1:39 pm Audio, Deep Learning

Audio – wizja w przebraniu?

Audio jako obraz

Ekstrakcja cech wizualnych z dźwięku i porównanie przetwarzania audio i wizji komputerowej

Co przychodzi Ci jako pierwsze do głowy kiedy poproszę Cię abyś wyobraził_a sobie dźwięk?

Jeśli jesteś związany_a z muzyką to być może jedną z pierwszych myśli będą np. nuty. Zapis ten ma za zadanie przedstawić nam graficznie sekwencję dźwięków, ich wysokość oraz czas trwania. Dla osób korzystających z różnorodnych programów do odtwarzania muzyki takim obrazem może być też np. fala, która odzwierciedla nam zmiany ciśnienia interpretowane przez nasz mózg jako dźwięki.

Jak to więc się dzieje, że, choć naturalnym jest myślenie o dźwięku jako sekwencji (nutach lub fali), lwią część badań na audio prowadzi się właśnie w oparciu o obraz i korzystając z metod odkrywanych w wizji komputerowej? Przyjrzyjmy się temu.

W tym artykule opowiem Ci:

  1. w jaki sposób można przedstawić dźwięk jako obraz i co każdy z tych obrazów oznacza?
  2. czy audio jest w takim razie tylko wizją w przebraniu, a może ma własne problemy i wyzwania?

Wszystkie drogi prowadzą do matematyki (ale intuicyjnej)

Żeby zrozumieć w jaki sposób dźwięk może być kodowany jako obraz, najprościej jest w pierwszej kolejności zbadać działanie ludzkiego ucha i to jak ono interpretuje dźwięk.

Nasze ucho składa się z 3 części: ucha zewnętrznego, środkowego i wewnętrznego. To właśnie do ucha zewnętrznego wpada fala dźwiękowa, która następnie wprawia w drganie błonę bębenkową znajdującą się w uchu środkowym. Na podstawie tego drgania poruszane są 3 kostki: kowadełko, młoteczek i strzemiączko, które wzmacniają dźwięk przekazując go dalej do tzw. ślimaka.

I to właśnie tutaj odbywa się cała magia.

W ślimaku znajduje się płyn, który przenosi falę dźwiękową w głąb, gdzie nerwy słuchowe rejestrują określone częstotliwości dźwięku.

Ale czym są właściwie te częstotliwości?

Dziedzina częstotliwości

Mówi się, że obraz przekazuje więcej niż 1000 słów, zatem przeanalizujmy ideę częstotliwości na wykresie.

drawing

Bardzo upraszczając, częstotliwość mówi nam o tym ile razy wydarzyło się pewne powtarzalne zdarzenie w wybranym przez nas okresie, a mierzona jest w Hertzach (10 Hz == 10 zdarzeń). Przyjmijmy, że wybranym okresem jest u nas 1 sekunda, a pewnym wybranym zdarzeniem jest 1 cykl funkcji sinus. Wtedy możemy stwierdzić, że fala na naszym pierwszym wykresie ma częstotliwość 1Hz, ponieważ w tym okresie wydarzył się tylko 1 cykl.

Na wykresie numer 2 liczba zdarzeń zagęszcza się – tutaj w tym samym okresie mówimy już o 2Hz, a na trzecim wykresie już o 3Hz. Jednak co dzieje się na wykresie numer 4?

Okazuje się, że fala składać się może z sumy fal o wielu częstotliwościach. W naszym skonstruowanym przykładzie wiemy, że jest to suma fal o częstotliwościach 1Hz, 2Hz i 3Hz, jednak normalnie informację tę musimy pozyskać.

W naszym ślimaku odbywa się coś na kształt takiej dekompozycji, ponieważ określone części ślimaka rejestrują wybrane częstotliwości. Okazuje się też, że podobne narzędzie do dekompozycji dostarcza nam właśnie matematyka.

Transformata Fouriera

Spróbujmy zatem kontynuować przykład z wykresu i zastosujmy Dyskretną Transformatę Fouriera (DFT) na naszej sumie sinusów.

drawing

Nie używając informacji o częstotliwościach byliśmy w stanie stworzyć wykres 1D, z którego wyczytać możemy częstotliwości składowe.

Co bardziej gorliwi wytkną mi tutaj, że pomijam temat fazy – ale na potrzeby intuicyjnego rozumienia pozostawiam to jako temat potencjalnych dalszych artykułów i zachęcam do poszerzenia swojej wiedzy o zawartość linków ze źródeł.

Wracając do dekompozycji zadać by można pytanie – ale co z tym obrazem? Właśnie z jednej reprezentacji 1D przenieśliśmy się na inną reprezentację 1D, jak ma nam to umożliwić stosowanie metod z wizji komputerowej?

Tutaj na pomoc przychodzi tzw. Krótka Transformata Fouriera.

Short-Term Fourier Transform (STFT)

Idea STFT jest bardzo prosta – zamiast wyliczać DFT na całości sygnału, wyliczamy ją na małym oknie, a następnie przesuwamy okno aż dojdziemy do końca sygnału. Tym sposobem otrzymujemy wiele wektorów zawierających częstotliwości, które możemy ze sobą połączyć korzystając z osi czasu. Wykonując taką procedurę otrzymamy coś na kształt poniższego wykresu.

drawing

Jak widać taki wykres pozostawia wiele do życzenia pod kątem czytelności, ale jedna rzecz, którą możemy dostrzec to fakt, iż nasze dźwięki przedstawiają więcej aktywności w niższych częstotliwościach. Prostym trikiem na uwypuklenie ich jest zmiana osi Y ze skali liniowej na logarytmiczną.

drawing

Oba te wykresy, niezależnie od skali, nazywamy spectrogramami (ponieważ jest to tylko wizualne skalowanie osi). Ale jaka wartość znajduje się na przecięciu czasu i częstotliwości?

Ponieważ celem tego artykułu jest intuicyjne wyjaśnienie zagadnień związanych z audio, pozwoliłam sobie do tej pory pominąć jeden matematyczny fakt związany z Dyskretną Transformatą Fouriera, a co za tym idzie i STFT, mianowicie to, że jej wynikiem są liczby zespolone.

I choć istnieją rozwiązania, które na wejście do sieci stosują 2 kanały z częścią rzeczywistą i urojoną, a nawet fazę liczby, to klasyczny spectrogram przyjmuje wartości modułu wynikowych liczb zespolonych w kwadracie.

Time / Frequency Trade-Off

Informacją, którą do tej pory pominęłam jest fakt, że do wygenerowania obu powyższych wykresów musiałam podjąć pewną decyzję co do hiperparametrów – okna transformaty oraz jej przesunięcia. I tu zaczynają się schody, ponieważ staniemy przed rozwiązaniem problemu pewnego trade-offu.

Przeanalizujmy raz jeszcze jak działa STFT. Posiadając wykres sinusa w dziedzinie czasu mieliśmy pełną informację o czasie wystąpienia wartości, jednak żadnej informacji o częstotliwości. Z drugiej strony, przechodząc do dziedziny częstotliwości, straciliśmy całkowicie informację o czasie, ale zyskaliśmy najbardziej dokładną informację o częstotliwościach.

W STFT z jednego okna czasu otrzymamy jeden wektor częstotliwości, ale liczony z mniejszej liczby wartości niż z całego sygnału, co zredukuje dokładność naszych wyliczeń. Już widzimy zatem, że im większe będzie okno, tym dokładniejsza informacja o częstotliwościach, ale mniejsza o czasie. I vice versa, im mniejsze okno, tym gorsza estymacja częstotliwości, ale lepiej będziemy wiedzieli kiedy dokładnie miały one swój udział w dźwięku.

Na powyższym wykresie mieliśmy do czynienia z bardzo małym oknem, co widać chociażby na lewym górnym wykresie, na którym dokładnie możemy oszacować gdzie przypisać pionowy wektor częstotliwości. Poniżej mamy z kolei do czynienia z relatywnie dużym oknem i bardziej “rozsmarowanym w poprzek” wykresem.

drawing

Opus Magnum reprezentacji

I choć w wielu przypadkach już taką reprezentację traktuje się jako wejście do sieci konwolucyjnych, to jednak w istotnej części przypadków stosuje się jeszcze kolejne operacje poprawiające zarówno czytelność takiego wykresu jak i jakość reprezentacji na wejściu do sieci.

Jak wiemy spectrogram przyjmuje wartości modułu liczb zespolonych w kwadracie, co nie jest do końca optymalne do interpretacji. Wartością, o której znacznie częściej myślimy w kategoriach dźwięku jest np. jego głośność, mierzona w dB. W prosty sposób możemy przejść do skali decybelowej, co powoduje, że teraz nie tylko oś Y będzie logarytmiczna, ale również same wartości będą przetransformowane przez logarytm.

drawing

Tutaj możemy w końcu dostrzec faktyczne różnice pomiędzy naszymi dźwiękami. Widzimy, że np. szczeknięcie charakteryzuje się większą energią w jednym momencie (swego rodzaju “uderzeniem”), a następnie czerń oznacza, że mamy do czynienia z ciszą. Z kolei przy syrenie czy odkurzaczu widać, że dźwięk jest stacjonarny, często przechodzący przez pełne pasmo częstotliwości. W uderzeniu dzwonu z kolei mamy do czynienia z miejscowym uderzeniem, a następnie dźwięk rozchodzi się, powoli tracąc swoją energię.

Wadą dotychczasowych reprezentacji może być jednak zbyt wysoka wymiarowość. Jeśli mamy długi dźwięk w bardzo dobrej jakości i relatywnie duże okno to istnieje szansa, że nasz spectrogram będzie miał wymiar Y oscylujący np. w granicach od 1000 do 2500. W tym wypadku przydać się mogą bardziej kompaktowe reprezentacje.

Jedną z takich reprezentacji jest mel-spectrogram, który, prócz redukcji wymiarowości, przede wszystkim transformuje oś Y do postaci podobnej do tej, w której ludzie postrzegają dźwięki. Ludzie rozumieją dźwięk nie tylko logarytmiczne, ale również dodatkowo w różnych częstotliwościach różnice między dźwiękami mogą wydawać nam się inne, choć matematycznie jest między nimi ta sama różnica w Hertzach. Skala melowa jest zatem logarytmiczna, ale również odzwierciedla to jak my ludzie postrzegamy różnice między poszczególnymi dźwiękami. Na poniższym wykresie zobaczyć można jak wygląda mel-spectrogram również przetransformowany na decybele.

drawing

Problemem, który powstaje przy transformacji na skalę melową jest jednak wybór wymiarowości meli. Transformacja ta odbywa się bowiem przez mapowanie naszych dotychczasowych częstotliwości na mele, a co za tym idzie – musimy wybrać jak dokładną transformację chcemy wykonać.

drawing

Jak widać na wykresie, im mniej damy meli tym bardziej rozpikselowany mamy obraz, ponieważ transformujemy do niskowymiarowej skali. Z kolei już przy 128 melach przejścia pomiędzy częstotliwościami są dużo bardziej gładkie.

Można by wymieniać jeszcze wiele wariacji cech dźwięku, które powodują, że dźwięk przetwarzamy jako obraz, jednak dużo ciekawszym byłoby pochylenie się nad pytaniem – czy w takim razie audio to w pewnym sensie tylko wizja komputerowa czy jednak istotnie się w stosunku do niej różni? Przyjrzyjmy się temu.

No to wizja w przebraniu czy nie?

Okazuje się, że dźwięk ma jednak swoje własne problemy, które czasem przypominają a czasem różnią się od wizji komputerowej. Oto 4 z nich, na które wyjątkowo powinieneś_naś zwrócić uwagę, jeśli dotychczas pracowałeś_aś z obrazem i zaczynasz pracować z dźwiękiem.

Domain mismatch

Różnice pomiędzy zbiorem treningowym, testowym, a prawdziwym życiem są powszechnym problemem w uczeniu maszynowym i w wizji. W audio jest nie inaczej.

Kiedy nagrywamy dźwięk, aby użyć go do trenowania naszych sieci, możemy spotkać się z takimi problemami jak:

  • nagrywanie różnymi mikrofonami, o różnej jakości, częstości próbkowania, etc.
  • nagrywanie w różnych pomieszczeniach – ten sam dźwięk będzie brzmieć inaczej w małym pokoju, hali czy katedrze.

Rozwiązaniem tego problemu jest chociażby augmentacja danych różnymi odpowiedziami impulsowymi, szumem czy charakterystyką sprzętu po to, aby jak najbardziej uogólnić się do rzeczywistych przykładów. W wizji problem ten przypominać może np. nagrywanie kamerami różnorakiej jakości lub wpływ otoczenia jak oświetlenie.

Wymiarowość wejścia

Jest to szczególnie nieprzyjemny problem dla osób pracujących przy klasyfikacji dźwięku.

Wyobraźmy sobie klasy takie jak pianino, rozbicie szklanki czy szczekanie psa. Jedną cechą, która charakteryzuje te klasy jest zmienna długość wejścia, rozumiana w dwojaki sposób. Nie tylko dźwięk rozbijanej szklanki będzie krótszy niż koncert na pianinie, ale również wewnątrz klasy np. szczekanie psa może być różnej długości.

Na zniwelowanie tego problemu proponuje się zwykle 3 sposoby.

  1. Wyrównanie wszystkich dźwięków do równej długości – niestety, jeśli istnieje duża dysproporcja między najdłuższym a najkrótszym dźwiękiem (nawet jeśli zostanie ucięty), to krótkie klasy mogą być zdominowane zerami i słabo się klasyfikować.
  2. Nieprzejmowanie się długością – konstrukcyjnie jesteśmy w stanie zdefiniować sieci w taki sposób (np. korzystając z global pooling), aby nie musieć przejmować się wymiarem wejścia, jednak sporo trzeba się wtedy napocić z samplowaniem danych do batchy.
  3. Ramkowanie i agregacja – w tym przypadku tniemy każdy dźwięk na małe kawałki i to tych kawałków używamy do treningu. Następnie w inferencji wykonujemy predykcję na kilku kawałkach otrzymanego dźwięku i agregujemy tę informację do jednej predykcji. Takie rozwiązanie może nam jednak wykreować dodatkowy imbalans klas, jeśli naszym zadaniem jest np. klasyfikacja.

Normalizacja

Typowym zabiegiem, również w audio, jest normalizowanie wejścia na sieć. Jednak w audio, jeśli korzystamy z cech obrazkowych, możemy zrobić to w dwóch miejscach – bezpośrednio na sygnale oraz na cechach.

Dwie popularne metody normalizacji bezpośrednio na sygnale to:

  1. peak norm – normalizacja w stosunku do najwyższej bezwzględnej amplitudy,
  2. Root Mean Square (RMS) norm – normalizacja względem RMS sygnału.

Rotation invariance

Zasadniczą różnicą pomiędzy audio a wizją jest brak niezmienniczości ze względu na obroty, w obu osiach.

Odtwarzając dźwięk w tył nie mamy gwarancji, że będziemy w stanie zidentyfikować ten sam dźwięk – choć w niektórych przypadkach jest to prawdą. Tym bardziej takiej rotacji nie jesteśmy w stanie przeprowadzić w dziedzinie częstotliwości, gdzie dowolna zmiana kolejności doprowadziłaby do całkowitej degradacji w charakterystyce dźwięku.

Podsumowanie

Jak zatem widzisz, choć audio w bardzo prosty sposób można przetworzyć do obrazu i na pewno czerpać wiele inspiracji z wizji komputerowej, to jednak istnieją pewne pułapki, na które trzeba zwrócić uwagę.

W części drugiej spróbujemy w jak najkrótszym czasie zbudować klasyfikator zdarzeń dźwiękowych i obudować go w aplikację webową, w której oprócz klasyfikacji będziemy mogli również obejrzeć omawiane w tym artykule reprezentacje. A jeśli nie chcesz czekać na jego publikację – już teraz możesz zajrzeć do kodu całego projektu pod tym linkiem i do wdrożonej aplikacji tutaj.

Źródła:

  1. How The Ear Works, John Hopkins Medicine
  2. 2-Minute Neuroscience: The Cochlea, Neuroscientifically Challenged
  3. The Sound of AI channel
  4. But what is the Fourier Transform? A visual introduction., 3Blue1Brown
Close