[PYTHON] Versuchen wir das TensorFlow-Musikgenerierungsprojekt "Magenta" von der Entwicklungsumgebung bis zur Songgenerierung.

Einführung

Richten Sie basierend auf GitHub von Magenta README die Magenta-Entwicklungsumgebung ohne Docker ein. Ich möchte einen Song mit Basic RNN generieren.

Laden Sie das trainierte Modell herunter und verwenden Sie es.

Bitte lesen Sie hier, wenn Sie Docker einfach verwenden möchten. Versuchen Sie, mit TensorFlows Kunst- und Musikgenerierungsprojekt "magenta" einen Song zu machen.

Entwicklungsumgebung

Vorbereitung der Entwicklungsumgebung für Magenta ・ Magentas GitHub-Repository ・ Bazel ・ TensorFlow Du brauchst drei.

Außerdem scheint Magenta im Moment nur Python 2.7 zu unterstützen, daher habe ich es eingerichtet, nachdem ich eine Python 2.7-Umgebung mit virtualenv auf dem Mac erstellt habe.

Ein Klon von Magentas GitHub-Repository

git clone https://github.com/tensorflow/magenta.git

Bazel installieren

https://www.bazel.io/versions/master/docs/install.html

$ brew install bazel

TensorFlow https://www.tensorflow.org/versions/master/get_started/os_setup.html

Überprüfen Sie bei der Installation von TensorFlow, ob Ihr PC nur über CPU oder GPU verfügt. Es scheint, dass TensorFlow eine GPU namens CUDA unterstützt. Wenn Sie also einen Mac haben, können Sie diese verwenden. Referenz: OSX-GPU wird von Tensorflow unterstützt

Ich habe nur mit der CPU fortgefahren.

$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.10.0-py2-none-any.whl
$ pip install --upgrade $TF_BINARY_URL

Lassen Sie uns den Test nach dem Einstellen ausführen. Gehen Sie zu / magenta / under git clone und drücken Sie den folgenden Befehl.

bazel test //magenta/...

Wenn die folgende Meldung angezeigt wird, ist sie erfolgreich und die Einstellung ist abgeschlossen.

.........
INFO: Found 65 targets and 27 test targets...
INFO: Elapsed time: 43.359s, Critical Path: 35.97s
//magenta/common:concurrency_test                                        PASSED in 5.4s
//magenta/interfaces/midi:midi_hub_test                                  PASSED in 14.8s
(Unterlassung)

Executed 27 out of 27 tests: 27 tests pass.
There were tests whose specified size is too big. Use the --test_verbose_timeout_warnings command line option to see which ones these are.

Lassen Sie uns ein Lied mit Basic RNN machen.

Magenta verfügt über drei Arten von Lernmodellen: Basic RNN, LookBack RNN und Attention RNN. Dieses Mal werde ich die Methode von Basic RNN ausprobieren.

Dieses Modell ist eine Melodie, die nur einen Klang zum gleichen Zeitpunkt erzeugt. Ich werde es in diesem Beitrag nicht tun, aber wenn Sie MIDI eingeben und selbst lernen, scheint es, dass nur ein Sound berücksichtigt wird, selbst wenn es einen Sound gibt, der mit diesem MIDI zum gleichen Zeitpunkt klingt.

Laden Sie das trainierte Modell herunter

Sie können es von [hier] herunterladen (http://download.magenta.tensorflow.org/models/basic_rnn.mag).

Bitte platzieren Sie es nach dem Herunterladen an einer beliebigen Stelle.

Pfadeinstellung

Stellen Sie den Pfad des oben heruntergeladenen trainierten Modells mit "Absoluter Pfad" ein.

BUNDLE_PATH=<absolute path of basic_rnn.mag>

Songgenerierung

Es kann mit dem folgenden Befehl generiert werden.

bazel run //magenta/models/basic_rnn:basic_rnn_generate -- \
--bundle_file=${BUNDLE_PATH} \
--output_dir=/tmp/basic_rnn/generated \
--num_outputs=10 \
--num_steps=128 \
--primer_melody="[60]"

Die Optionen scheinen die folgenden Bedeutungen zu haben.

Wo soll das Lied erzeugt werden?

--output_dir=/tmp/basic_rnn/generated \

Sie können entscheiden, wo das Lied generiert werden soll.

Anzahl der Songs

--num_outputs=10 \

Sie können entscheiden, wie viele Songs Sie machen möchten.

Songlänge

--num_steps=128 \

Legen Sie fest, wie viele Sounds und wie viele Takte ein Song enthalten soll. Ein Lied von 8 Takten wird mit 128 gemacht. Ich denke, dass 16 Sounds in jeden Takt eingefügt werden können. (Die Definition von Wörtern wie "Maßnahme" ist nicht eindeutig ...)

Song-Intro

--primer_melody="[60]"

Es ist der Klang, mit dem das Lied beginnt. Als Beispiel --primer_melody="[60, -2, 60, -2, 67, -2, 67, -2]” Dies zeigt "Dodo Soso" an und es werden Songs generiert, die mit dem Intro des glitzernden Sterns beginnen. (Da es sich bei dem obigen Wert übrigens um 8 Sounds handelt, bedeutet dies, dass die Hälfte des ersten Takts gesetzt ist.)

Die Zahlen sind -2:no event -1:note-off event Es ist so eingestellt, und ich verstehe es nicht in Worten, aber Im Fall von "[60, -2, 60, -2, 67, -2, 67, -2]" wird "Dodo Soso" und der Ton davor fortgesetzt, während Im Fall von "[60, -1, 60, -1, 67, -1, 67, -1]" klingt es wie "dies tun" und der Ton wird unterbrochen. Ist es der Unterschied zwischen "nichts tun" und "Ton ausschalten"?

60: de 67: Also Ich denke, dass die Anzahl der Tasten am Klavier den Klang anzeigt.

Bei der Ausführung wird ein Song generiert.

Ergebnis

Die folgenden Songs wurden gemacht. Es begann mit dem Intro von "Do Do So So" und machte einen 16-Takt-Song. Beispiel

Hier ist der erste mit "Dodo Soso". Beispiel

Die Atmosphäre ändert sich ziemlich stark und Sie können spüren, dass sich die Intro-Einstellungen auf die nachfolgende Melodie auswirken.

Vielen Dank.

Recommended Posts

Versuchen wir das TensorFlow-Musikgenerierungsprojekt "Magenta" von der Entwicklungsumgebung bis zur Songgenerierung.
Das Musikgenerierungsprojekt "Magenta" von TensorFlow trainiert MIDI-Dateien und generiert Songs.
Einführung in Python Bereiten wir die Entwicklungsumgebung vor
Von 0 bis Django Entwicklungsumgebung Konstruktion bis Grundbetrieb
[Es ist noch nicht zu spät, Python ab 2020 zu lernen] Teil 2 Erstellen wir eine Python-Entwicklungsumgebung
Versuchen Sie, SSH (Exscript) von der Software auf den Router einzustellen
Versuchen Sie, NETCONF (ncclient) von der Software zum Router einzustellen
Aufbau der Python-Entwicklungsumgebung 2020 [Von der Python-Installation bis zur Einführung in die Poesie]
So erstellen Sie eine Entwicklungsumgebung für TensorFlow (1.0.0) (Mac)
Fügen wir es der Umgebungsvariablen mit dem Befehl ~ hinzu
Ändern Sie den Einstellungswert von settings.py entsprechend der Entwicklungsumgebung
Vom Einrichten der Rust-Umgebung bis zum Ausführen von Hello World