Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ss20:song-generator

Dies ist eine alte Version des Dokuments!


Song-Generator (Charts Garantie) [SS20]


Projektteilnehmende: Daria, Lennart, Joshua & Niklas

Idee:

Wir wollen ein neuronales Netzwerk trainieren (Stil ist noch offen. zB. Klassik, Techno, Hip-Hop Beats, Lofi, oder bestimmten Künstlern) was aus verschieden Quellen einen Song/Beat generieren kann ggf. mit Songtext.

Projektplanung:

Ziele: Mit bestimmten Style ein Lied zu generieren ggf. mit Stimme

Zwischenziele: Sounds generieren (müssen sich nicht perfekt anhören)

Neuronale Netze:

Ein neuronales Netz arbeitet anders als ein normales Programm am Computer. Ein Programm gibt meistens für jeden möglichen Fall, der eintreffen kann ein Szenario aus und macht das einfach immer wieder. Ein neuronales Netz dagegen bekommt ein Dataset, das für möglichst viele Fälle die Ausgangswerte und das erwünschte richtige Ergebnis hat. Davor wird das Dataset in Trainings- und Testdateien aufgeteilt. Das neuronale Netz arbeitet mit den Trainingsdaten. Mit diesen versucht das neuronale Netz mithilfe einer oder mehrerer Funktionen je nach Komplexität so gut wie möglich für alle Trainingsdateien diese Funktionen anzupassen, damit es bei den Trainingsdaten möglichst geringe Fehler macht. Dazu werden werden die Parameter in der Funktion mit jeder neuen Datei angepasst. Um zu schauen wie gut das neuronale Netz wirklich ist, können nun die Testdateien dem neuronalen Netz übergeben werden. Dann wird der Output mit den echten Ergebnissen verglichen. Je ähnlicher der Output den echten Ergebnissen ist, desto besser ist das neuronale Netz.

Was ist der Song-Generator:

Der Song-Generator ist ein mit unseren gesammelten Musikdateien trainiertes neuronales Netz, dass einen Ton, eine Tonfolge oder auch ein Lied bekommt und daraus ein oder mehrere verschiedene Klavierlieder generiert, die im besten Fall gut klingen und zu der gegebenen Tonfolge oder dem gegebenen Ton passen.

Hilfsmittel: Magenta, Tensorflow

Basis-Musik (auf der Basis dieses Datensets haben wir Songs generiert):

https://drive.google.com/drive/folders/1JfRAdHkYw8F7b0mVlPqr_xQYgJ8_xpsO?usp=sharing

Projektablauf: Als erstes brauch man für Machine learning immer ein Dataset. Also in unserem Fall möglichst viele Midi Dateien. Um diese zusammenzusuchen, haben wir auf mehreren Websites geguckt und dann aus allen Dateien zusammen ein Dataset erstellt. Um unser neuronales Netz zu trainieren benutzen wir Magenta (baut auf Tensorflow und Keras auf). In Magenta können neuronale Netze aber meistens nicht direkt mit Midi Dateien trainiert werden. Deswegen haben wir anschließend alle Midi Dateien in eine .tfrecord Datei umgewandelt. In der Magenta Dokumentation wird .tfrecord als besseres Dateiformat beschrieben, weil man damit leichter und schneller auf die wichtigen Inhalte zugreifen kann. Außerdem werden so sehr viele Midi Dateien in eine Datei zusammengefasst, wodurch der Zugriff auf die Dateien zusätzlich erleichtert wird. Die entstandene .tfrecord-Datei wird anschließend in Training- und Testdateien geteilt. Bei der Erstellung der .tfrecord-Dateien muss bereits die Konfiguration, mit der später gearbeitet werden soll angeben, damit die .tfrecord-Datei richtig formatiert wird. Magenta bietet die Konfigurationen Basic, Mono, Lookback und Attention an. Wir haben uns für Attention entschieden, weil mit Attention Muster besser erkannt werden und damit generierte Lieder mehr Struktur haben und besser klingen. Zu jeder Konfiguration gibt es auch schon vortrainierte Modelle. Damit können die verschiedenen Modelle ohne Vorbereitung auch schon ausprobiert und verglichen werden.

Als nächstes haben wir also unser neuronales Netz trainiert, indem wir die Trainingsdateien dem neuronalen Netz übergeben haben und dieses daraus gelernt hat. Genauer gesagt geht das neuronale Netz ohne Informationen an diese Daten heran und arbeitet dann in dem gegebenen Rahmen. Wir haben die Hyperparameter auf 64 gesetzt, was in diesem Fall bedeutet, dass immer 64 Stücke zusammen angeguckt werden und ein Teil immer aus einer 64×64 Matrix besteht. Je höher diese Zahl desto weiter ist der Rahmen, in dem das neuronale Netz arbeiten kann. Je weiter der Rahmen, desto eher neigen neuronale Netze zu Over Fitting, also fast perfekten Vorhersagen bei den Testdateien und sehr schlechten Vorhersagen bei nicht Testdateien. Wenn der Rahmen zu klein ist, werden die Vorhersagen auch schlecht. Eine gute Veranschaulichung dafür ist, wenn man sich Punkte auf einer Parabel vorstellt dafür eine Gerade zu finden, die alle Punkte möglichst gut trifft. Das kann nie wirklich genau werden, weil die Gerade keine Kurven hat.

Das neuronale Netz versucht jetzt also praktisch eine möglichst gute Funktion zu finden, um aus gegebenen Daten möglichst nah an die gewünschten Daten zu kommen. Das fordert sehr viel Leistung von einem Computer, da dabei sehr viele Rechnungen durchgeführt werden. Deshalb haben wir ab diesem Schritt mit Google-Colab gearbeitet, da man dort Rechner von Google diese Rechnungen durchführen lassen kann und auch sehr gut mit mehreren Personen an Code arbeiten kann. Dieses Netzwerk haben wir ungefähr 20000 Durchläufe machen lassen und die Ergebnisse entstanden mit dem so trainierten Netzwerk.

Da mit unserer Methode Midi Dateien mit einem Ton zu jedem gegebenen Zeitpunkt generiert wird, haben wir auch versucht mehrere generierte Midi Dateien übereinander zu legen, damit es sich eher wie ein echtes Musikstück anhört. Die so entstandenen Lieder klingen spannender, aber oft auch sehr durcheinander. Das liegt daran, dass auch wenn das gleiche Netzwerk mehrere Midi Dateien mit dem gleichen Input generiert, diese generierten Dateien nicht aufeinander abgestimmt und teilweise ziemlich unterschiedliche Muster haben.

Journal

Code:

Google-Colab-Notebook

Danksagung:

Vielen lieben Dank an dieser Stelle an Andrea und Lysanne, dass ihr uns ein so cooles Projekt ermöglicht habt! Und auch danke an Stefan, der er uns das Grundprinzip von Machine Learning nochmal genauer erläutert hat, sowie ein von ihm erstelltes Jupyter-Notebook zu dem Thema zur Verfügung gestellt hat. Wir haben alle vier einiges aus dieser Zeit mitgenommen, auch wenn oder wahrscheinlich gerade weil es öfter mal ordentlich was zu knobeln gab!

Literatur:

ss20/song-generator.1598437995.txt.gz · Zuletzt geändert: 2020/08/26 12:33 von dahin