[PYTHON] Spracherkennung: Genreklassifizierung Teil1 - GTZAN-Genresammlungen

Ziel

Wir haben die Klassifizierung des Musikgenres mit dem Microsoft Cognitive Toolkit (CNTK) zusammengefasst.

Teil 1 bereitet die Klassifizierung des Musikgenres vor.

Ich werde sie in der folgenden Reihenfolge vorstellen.

  1. Laden Sie den GTZAN-Datensatz herunter
  2. Erstellen eines logarithmischen Mel-Spektrogramms
  3. Vorbereitung von Trainingsdaten und Verifizierungsdaten

Einführung

Laden Sie den GTZAN-Datensatz herunter

GTZAN Genre Sammlungen

・ Blues ・ Klassik ・ Land · Disko · HipHop ・ Jazz · Metall ・ Reggae · Felsen

Enthält 10 verschiedene Musikgenres. Jeder hat 100 Daten für 30 Sekunden.

GTZAN Genre Collections

Laden Sie genres.tar.gz über den obigen Link herunter und entpacken Sie es.

Die Verzeichnisstruktur ist diesmal wie folgt.

MGCC  |―gtzan   |―...  mgcc_gtzan.py

Erstellen logarithmischer Mel-Spektrogrammbilder

Sprache wird als Wellenformdaten dargestellt, aber bei der Spracherkennung werden sie im Allgemeinen als Frequenzdaten unter Verwendung der Fourier-Transformation behandelt, anstatt wie sie sind als Wellenformdaten behandelt zu werden.

Erstellen Sie dieses Mal ein logarithmisches Melspektogrammbild aus den Sprachwellenformdaten wie folgt.

  1. Erzeugung eines Spektrogramms durch kurzfristige Fourier-Transformation
  2. Konvertierung in Mel Spectrogram durch Mel Scale Filter Bank
  3. Wenden Sie den Logarithmus an und teilen Sie ihn in eine Bildgröße von 128 x 128 auf

Vorbereitung von Trainingsdaten und Verifizierungsdaten

Wir haben die train_test_split-Funktion von scikit-learn verwendet, um sie in Trainings- und Validierungsdaten aufzuteilen. Das Argument test_size war 0.2.

Implementierung

Ausführungsumgebung

Hardware-

・ CPU Intel (R) Core (TM) i7-6700K 4,00 GHz

Software

・ Windows 10 Pro 1909 ・ Python 3.6.6 ・ Matplotlib 3.1.1 ・ Numpy 1.19.2 ・ Librosa 0.8.0 ・ Scikit-Learn 0.23.2

Programm zum Ausführen

Das implementierte Programm wird auf [GitHub] veröffentlicht (https://github.com/sho-watari/SpeechRecognition/tree/master/MGCC).

mgcc_genre.py


Kommentar

Es ergänzt die wesentlichen Inhalte des auszuführenden Programms.

Fourier-Transformation

Wie unten links in der Abbildung unten gezeigt, wird Audio als Wellenformdaten mit der Zeit auf der horizontalen Achse und der Amplitude auf der vertikalen Achse erhalten. Andererseits bestehen Wellenformdaten aus Wellenformen mit mehreren Frequenzen, wie oben rechts gezeigt. Daher können Sie mithilfe der schnellen Fourier-Transformation die in der Wellenform enthaltene Frequenz überprüfen, wie unten rechts gezeigt.

time_fft_frequency.png

Kurzzeit-Fourier-Transformation

Die Kurzzeit-Fourier-Transformation unterteilt die Wellenformdaten in Abschnitte und führt eine schnelle Fourier-Transformation durch. Dies ermöglicht es, die zeitliche Änderung der Frequenz mit jedem Abschnitt als einen Rahmen zu sehen.

Zum Zeitpunkt der Ausführung ist, wie in der folgenden Abbildung gezeigt, eine Überlappung zulässig, der Abschnitt wird ausgeschnitten, die Fensterfunktion wird angewendet und dann wird die Fourier-Transformation durchgeführt.

stft.png

Ich habe ein summendes Fenster für die Fensterfunktion verwendet. Das Summenfenster wird durch die folgende Formel ausgedrückt.

W_{hamming} = 0.54 - 0.46 \cos \left( \frac{2n \pi}{N-1} \right)

Wie in der folgenden Abbildung gezeigt, können die durch die Kurzzeit-Fourier-Transformation erhaltenen Ergebnisse als Bild mit der Zeit auf der horizontalen Achse und der Frequenz auf der vertikalen Achse betrachtet werden. Ein solches Bild wird als Spektrogramm bezeichnet, wobei jedes Pixel die Intensität des Amplitudenspektrums darstellt, das hier in dB umgewandelt wird.

spectrogram.png

Mel Scale Filter Bank

Je höher die Frequenz des menschlichen Gehörs ist, desto niedriger ist die Auflösung. Die Mel-Skala [2] ist eine Skala, die dies widerspiegelt. Es gibt verschiedene Arten von Mel-Skalenumwandlungsformeln, aber librosa verwendet standardmäßig die Slaney-Formel.

Wandeln Sie das Spektrogramm in Mel-Frequenz um, indem Sie das innere Produkt des folgenden Filters und das Leistungsspektrum der Kurzzeit-Fourier-Transformation berechnen.

mel_filterbank.png

Ergebnis

Durch Ausführen des Programms werden logarithmische Melspektogrammbilder von Trainings- und Validierungsdaten erstellt und gespeichert.

Die folgende Abbildung zeigt ein logarithmisches Melspektogramm jedes Genres. Die horizontale Achse ist die Zeit und die vertikale Achse ist die Mel-Frequenz, und jedes Pixel repräsentiert die logarithmische Stärke.

log-mel_spectrogram.png

Jetzt, da Sie bereit sind zu trainieren, wird Teil 2 eine Klassifizierung des Musikgenres durchführen.

Referenz

GTZAN Genre Collections

  1. Bob L. Sturm. "The GTZAN dataset: Its contents, its faults, their effects on evaluation, and its futre use", arXiv preprint arXiv:1306.1461 (2013).
  2. Stanley Smith Stevens, John Volkman, and Edwin Newman. "A scale for the measurement of the psychological magnitude pitch", Journal of the Acoustical Society of America, vol. 8, no. 3, pp. 185-190(1937).
  3. Koichi Shinoda. "Spracherkennung Professional Series Voice Recognition", Kodansha, 2017.

Recommended Posts

Spracherkennung: Genreklassifizierung Teil1 - GTZAN-Genresammlungen
Spracherkennung: Genreklassifizierung Part2-Musikgenreklassifizierung CNN
Spracherkennung: Phonemvorhersage Teil 2 - Connectionist Temporal Classification RNN
Spracherkennung: Phoneme Prediction Part1 --ATR Sprachdatensatz
Spracherkennung mit Python