[PYTHON] Bewerben Sie sich für die NNC Challenge von SONY (verwenden Sie Audiodaten, um etwas Nützliches für AudioStock zu erstellen).

0. Wer bin ich?

Ich bin ein Doktorand im Doktorandenprogramm in Mathematik. Meine Spezialität ist die Analyse, und ich habe wenig Kenntnisse über Computeralgebra, geschweige denn maschinelles Lernen, aber manchmal benutze ich Computer für Forschungszwecke und kann nur Python verwenden. Ich habe auch an der ersten NNC Challenge (Bildklassifizierung) teilgenommen, aber ich hatte keinen klaren Sinn und kein Wissen, so dass ich keine bemerkenswerten Ergebnisse erzielen konnte (ich habe es nur eingereicht).

1. Was ist die SONY NNC Challenge?

Dies ist ein Wettbewerb für maschinelles Lernen unter Verwendung der von SONY betriebenen integrierten Entwicklungsumgebung "Neural Network Console (NNC)" für maschinelles Lernen. Der Wettbewerb wird von SONY und ledge Co., Ltd. durchgeführt. Eine Übersicht finden Sie unter folgender URL. https://nnc-challenge.com/

2. Dieses Thema

Da es sich bei diesem offenen Aufruf für Teilnehmer um Sprachdaten handelt, wurde klar entschieden, was wir tun wollten. Mein Hobby ist das sogenannte "Soundspiel", und ich höre normalerweise Spielelieder. Unter ihnen macht mein Lieblingskomponist, t + pazolite (ausgesprochen "to Pazoraito"), sehr einzigartige Musik. Das Thema dieser Zeit ist, dass die einzigartige Sicht auf die Welt von Maschinen wahrgenommen werden kann. Mit anderen Worten: "Kann die Maschine t + pazolite-Songs unterscheiden?" Um es mit dem Thema des Wettbewerbs in Einklang zu bringen, heißt es "Lernen Sie Ihre Lieblingslieder und erstellen Sie eine Funktion, um Benutzern neue Lieder zu empfehlen"? Amazon Prime Music und andere haben bereits eine Funktion implementiert, um Benutzern Songs zu empfehlen. Es mag als "Herausforderung" nicht einzigartig sein, aber angesichts meiner Fähigkeiten und der Frist des Wettbewerbs kann ich nicht viel Zeit damit verbringen, das Thema auszuwählen. Vor allem das Thema, an dem Sie interessiert sind, wird von der Herausforderung mehr begeistert sein. Dieses Mal werden wir dieses Thema verwenden.

3. Was du brauchst

Mein Thema ist diesmal, einen "Diskriminator" zu erstellen, der bestimmt, ob das eingegebene Lied von t + pazolite (im Folgenden "topazo") stammt. Mit anderen Worten, erstellen Sie ein Programm (das Gerät lernt von selbst), das "0" (nicht "Topazo-Song") oder "1" ("Topazo-Song") zurückgibt, wenn einige Musikdaten eingegeben werden. Wird sein. Eine große Anzahl von Songs mit der Bezeichnung "0" oder "1" wird verwendet, um zu erfahren, welcher Song "0" und welcher Song "1" ist, und ein Programm, das diese Beurteilung für unbekannte Songs vornehmen kann, wird erstellt. In NNC ist die Eingabe ein Array, daher müssen die Musikdaten auf irgendeine Weise angeordnet werden. Da die Musikdatei im WAV-Format im Array-Format vorliegt, wird die Musik in dieses Format konvertiert. (Offizielles NNC-Dokument, https://support.dl.sony.com/wp-content/uploads/sites/2/2017/11/19120828/starter_guide_sound_classification.pdf) Außerdem müssen die Eingabedatensequenzen alle dieselbe Form haben. Dieses Mal wurden mehr als 10.000 Songdaten von NNC-Beamten im WAV-Format derselben Größe (Lerndaten von Audiostock) verteilt, daher werden wir den "Topazo-Song" entsprechend formatieren.

4. Formatieren von Musikdaten

Formatiert das Lied als "1" Beurteilungsdaten. Mein Topazo-Song war im m4a-Format, daher muss ich ihn in das WAV-Format konvertieren. Ich habe es in Python unter Bezugnahme auf diesen Beitrag programmiert. (M4A in WAV konvertieren und umgekehrt) https://wave.hatenablog.com/entry/2017/01/29/160000) Sobald das Lied in das WAV-Format konvertiert wurde, besteht der nächste Schritt darin, es auf die gleiche Größe wie die bereitgestellten Trainingsdaten zu skalieren. Die Arrangementgröße der Songs beträgt 1. Stereo oder Mono, 2. Sampling-Rate, 3. Song-Länge (Anzahl der Sekunden) (Siehe offizielle NNC-Dokumentation). Stereo-Mono musste ich nicht ändern, da sowohl die bereitgestellten Daten als auch die Daten, die ich hatte, monaural waren. In Bezug auf die Abtastrate betrug die offizielle Verteilung 8 kHz und die vorhandene Musik 48 kHz, so dass ein Downsample erforderlich ist. Wenn Sie jedoch die Abtastrate einfach auf 1/6 reduzieren, werden verzögerte (verlangsamte) Musikdaten generiert, sodass Sie eine Methode auswählen müssen. Mit der in diesem Artikel beschriebenen Methode konnte ich problemlos die gewünschte Abtastratenumrechnung erzielen. (Downsampling wav audio file https://stackoverflow.com/questions/30619740/downsampling-wav-audio-file) Richten Sie zum Schluss die Länge der Songs aus. Alle bereitgestellten Daten wurden in 24 Sekunden formatiert, sodass Sie Ihre Songs in 24 Sekunden "schneiden" können. In Bezug auf diesen Artikel habe ich den Namen der Ausgabedatei in den Namen des ursprünglichen Songs mit einer Seriennummer geändert und ein Programm geschrieben, das den gleichen Vorgang für alle Songs im Ordner wiederholt. ([Python] Programm, das WAV-Dateien in gleichen Intervallen teilt [Soundprogrammierung] http://tacky0612.hatenablog.com/entry/2017/11/21/164409)

5. Erstellen einer Anmerkungs-CSV-Datei

Schließlich werden wir die Annotationsarbeit ausführen, um die Daten in den NNC einzugeben. Anmerkung ist, jedes Lied als "1" oder "0" zu kennzeichnen. NNC lädt dazu diese Eingabe als CSV-Datei mit dem Songpfad und der diesem Song entsprechenden "0" oder "1" hoch. Musikdaten werden automatisch von dem in CSV geschriebenen Pfad hochgeladen (siehe offizielles NNC-Dokument). Ich habe ein Programm geschrieben, um den Pfad aus dem Ordner mit den Songs in Python abzurufen und in CSV zu schreiben. "Topazo-Songs" und "andere Songs" werden in separaten Ordnern abgelegt, und "1" ist dem Pfad der Top-Songs zugeordnet, und "0" ist den anderen Songs zugeordnet. Ich habe die Reihenfolge der Songs gemischt, als ich die CSV erstellt habe, aber ich habe sie nicht benötigt, da sie eine Funktion zum Mischen der Daten hat, die auf NNC angezeigt wurden.

6. Lernen

Jetzt, da wir alle Daten haben, ist es Zeit zu lernen. Zu diesem Zeitpunkt war es jedoch 14.00 Uhr am Tag der Frist. Ich wusste, dass das Lernen einige Zeit dauern würde, also borgte ich mir eines für Sprachdaten aus dem NNC-Beispielprojekt aus und entschied mich, das zu verwenden, das dem Thema dieser Zeit entspricht. Insbesondere habe ich die Eingabe des Projekts wav_keyboard_sound (96000, 1) verwendet und die Verarbeitung vor der Ausgabe in Affine-> Sigmoid-> Binarycrossentropy geändert. Es ist bedauerlich, dass die Zeitzuweisung nicht gut gelaufen ist.

  1. Ergebnis12sec_completed.jpeg

12sec_result1.jpeg

Das Ergebnis ist einfach überwältigend und Sie können sehen, dass "Topazokyoku" selbst für Maschinen eine überwältigende Erkennungsrate aufweist. Das Foto verwendet 5450 Musikdaten, die zum Lernen in 12 Sekunden geschnitten wurden. Das Lernen mit vier TESLA V100 dauerte für diese Prozesse 14 Minuten. Ich habe auch versucht, mit der CPU zu lernen, aber das Lernen dauerte mehr als 2 Stunden und ich habe es aufgegeben, Ergebnisse zu erzielen. Ich bedauere die schlechte Zeitverteilung, auch wenn ich sie zurückschicke. Beim nächsten Mal möchte ich die vorgegebene Zeit gut nutzen, um zu versuchen, Datenvorverarbeitung, effizientes Lernen usw. zu vergleichen.

Recommended Posts

Bewerben Sie sich für die NNC Challenge von SONY (verwenden Sie Audiodaten, um etwas Nützliches für AudioStock zu erstellen).
Verwendung von "deque" für Python-Daten
Verwendung von Datenanalysetools für Anfänger
Erstellen Sie einen Datensatz mit Bildern, die für das Training verwendet werden sollen