[PYTHON] Ich habe versucht, Magenta / TensorFlow zu verwenden

Automatische Melodieerzeugung mit Magenta / TensorFlow

Hintergrund

Dieses Mal wollte ich in der Lage sein, MIDI-Daten mit Python zu bearbeiten. Beim Durchsuchen verschiedener Websites kam ich zu einem Tool namens Magenta.

Was ist #Magenta? Neulich wurde auf Github ein neues Projekt namens Magenta von Google eröffnet. https://github.com/tensorflow/magenta

Magenta ist ein Projekt, das ein neuronales Netzwerk verwendet, um Kunst und Musik zu erzeugen.

Ziel ist es, die Kreativität des maschinellen Lernens zu entwickeln und eine Gemeinschaft von Künstlern und maschinellem Lernen zu werden.

Wiederkehrendes neuronales Netzwerk zum Zusammenstellen

Als erstes Magenta wurde ein Modell des wiederkehrenden neuronalen Netzwerks (RNN) veröffentlicht, das sich zusammensetzt. Es enthält eine Technik namens LSTM (Long Short-Term Memory). Laut der offiziellen Magenta-Website (http://magenta.tensorflow.org/)

It’s purposefully a simple model, so don’t expect stellar music results. We’ll post more complex models soon. Dies ist ein bewusst vereinfachtes Modell, und Sie können nicht erwarten, herausragende Musik zu machen. Wir werden jedoch weiterhin komplexere Modelle veröffentlichen.

Magenta wurde im Jahr 2016 veröffentlicht. Es ist notwendig, zuerst RNN und LSTM zu studieren, aber ich möchte dieses Tool nutzen, indem ich versuche, es vorerst zu verwenden.

Umgebung

Verweise

Extrahieren Sie ein bestimmtes Teil

Wir haben die im YAMAHA-Online-Shop gekauften MIDI-Daten (Titelsong von Hinatazaka 46, 4 Songs) bestätigt.

スクリーンショット 2020-04-17 22.53.40.png

Auf diese Weise wurde es in verschiedene Spuren unterteilt. (Schlagzeugstimme, Begleitung usw.) Wie später beschrieben wird, wurde das Lernen unter Verwendung der Daten so durchgeführt, wie sie sind, ohne etwas zu tun. Ich habe die Ergebnisse überprüft, aber es ist nicht gut, wenn viele Datengenres verwendet werden. Daher muss man sich nur auf die Melodie konzentrieren.

Extrahieren wir also nur den Melodieteil mit dem Python-Paket pretty-midi.

terminal


pip install pretty_midi

Als Referenz ist die Ressourcenzuweisung wie folgt.

スクリーンショット 2020-04-17 22.56.58.png

cut_out.py



import pretty_midi
import os

os.chdir("~/WorkSpace/MIDI_data/cut_out")

def func():
  midi_name = ["00", "01", "02", "03"]

  for m_name in midi_name:
    midi_data = pretty_midi.PrettyMIDI("resource" + m_name + '.mid')

    #Wählen Sie die ausgewählte Instrumentennummer und speichern Sie
    midi_track = midi_data.instruments
    # print("midi_track = {0}" .format(midi_track))
    for m_track in midi_track:
        print("midi_track = {0}" .format(m_track))

    print("select track-nunber => ")
    i = int(input())

    #Nehmen Sie das ausgewählte Instrument heraus und machen Sie es zu einer Instanz
    for instrument in midi_track:
        if instrument.program == i:
            ins = instrument

    #Erstellen Sie ein hübsches MIDI-Objekt für die neue Erstellung
    rev_en_chord = pretty_midi.PrettyMIDI()

    #Zum PrettyMIDI-Objekt hinzugefügt
    rev_en_chord.instruments.append(ins)

    #sparen
    rev_en_chord.write('./result/ins_' + m_name + '.mid')

  return

func()

Es ist ein Code, der sich auf jede MIDI-Datei bezieht, die Instrumentennummer angibt und nur diese Spur speichert.

Verschiedene Korrespondenztabellen mit MIDI-Notennummern. Namen von Rhythmusinstrumenten in GM, GS und XG. Programmnummer, Instrumentenname und Aussprachebereich.

Instrumentencodes finden Sie auf der obigen Website. Die meisten Leute scheinen mit dem Instrumentencode zu spielen, wenn sie MIDI-Daten aus der Programmierung berühren.

Endlich lernen

Starten Sie Docker und ziehen Sie das Bild "Magenta / Tensorflow". Da auch TensorBoard verwendet wird, geben Sie die Portnummer an.

Terminal


docker run -it -p 6006:6006 -v /tmp/magenta:/magenta-data tensorflow/magenta

Grundsätzlich habe ich es hier nicht angegeben, da ich mit dem Verfahren der folgenden Site fortgefahren bin.

PyDataOkinawa/meetup017

Ich musste jedoch das Shell-Skript im Bild drücken, aber es wurde mit einem Fehler gestoppt. Ich hatte das Shell-Skript noch nie zuvor berührt, daher dauerte es lange, es zu entschlüsseln. Möglicherweise war aufgrund einer anderen Umgebung der Name der angegebenen Programmierdatei unterschiedlich oder die Parametereinstellungen waren falsch, was zu einem Fehler führte. (Ich habe aus Shell-Skripten gelernt.)

Als Referenz war es möglich zu lernen, indem ich die folgenden Änderungen in meiner Umgebung vornahm.

build_dataset.sh



convert_midi_dir_to_note_sequences \
    --midi_dir=$MIDI_DIR \
    --output_file=$SEQUENCES_TFRECORD \
    --recursive

######Gewechselt zu######

convert_dir_to_note_sequences \
    --midi_dir=$MIDI_DIR \
    --output_file=$SEQUENCES_TFRECORD \
    --recursive

Lernen ... Ich habe TensorBoard auch zum ersten Mal gesehen. Ich muss mehr lernen, weil ich keine Ahnung habe, was geschrieben steht. スクリーンショット 2020-04-16 17.29.32.png

スクリーンショット 2020-04-15 18.37.07.png

Ich habe vorerst versucht, es auf einem MacBook einzuschalten, aber es scheint schwierig zu sein ... Ich muss es nächste Woche in Deep Infinity drehen können ...

Da die Anzahl der Schritte auf 1200 eingestellt war, dauerte das Erlernen mit MacBook Pro 1 Stunde und 30 Minuten. Das verwendete Modell ist "Basic RNN" スクリーンショット 2020-04-16 18.50.52.png

Die Genauigkeit wurde auf 0,8 erhöht.

Generieren

Mit diesen Trainingsdaten wurde eine MIDI-Datei generiert. Die Anzahl der Schritte wurde mit 500 angegeben. Außerdem werden fünf Dateien generiert.

Die generierten MIDI-Daten wurden mit "Schüchternheit" in "WAV" konvertiert und auf Goolge Drive hochgeladen.

Google Drive

Die Zeit ist gekommen, aber soweit ich das Lied höre, habe ich das Gefühl, dass eine Melodielinie erzeugt wurde, die leicht an das ursprüngliche Lied erinnert.

Recommended Posts

Ich habe versucht, Magenta / TensorFlow zu verwenden
Ich habe versucht, parametrisiert zu verwenden
Ich habe versucht, Argparse zu verwenden
Ich habe versucht, Mimesis zu verwenden
Ich habe versucht, anytree zu verwenden
Ich habe versucht, aiomysql zu verwenden
Ich habe versucht, Summpy zu verwenden
Ich habe versucht, ○ ✕ mit TensorFlow zu spielen
Ich habe versucht, Coturn zu verwenden
Ich habe versucht, Pipenv zu verwenden
Ich habe versucht, Matplotlib zu verwenden
Ich habe versucht, "Anvil" zu verwenden.
Ich habe versucht, Hubot zu verwenden
Ich habe versucht, ESPCN zu verwenden
Ich habe versucht, Text mit TensorFlow zu klassifizieren
Ich habe versucht, openpyxl zu verwenden
Ich habe versucht, Ipython zu verwenden
Ich habe versucht, PyCaret zu verwenden
Ich habe versucht, Cron zu verwenden
Ich habe versucht, face_recognition zu verwenden
Ich habe versucht, Jupyter zu verwenden
Ich habe versucht, doctest zu verwenden
Ich habe versucht, TensorFlow auszuführen
Ich habe versucht, Folium zu verwenden
Ich habe versucht, jinja2 zu verwenden
Ich habe versucht, Folium zu verwenden
Ich habe versucht, das Zeitfenster zu verwenden
Ich habe ein ○ ✕ Spiel mit TensorFlow gemacht
[Ich habe versucht, Pythonista 3 zu verwenden] Einführung
Ich habe versucht, easydict (Memo) zu verwenden.
Ich habe versucht, das Gesicht mit Face ++ zu erkennen
Ich habe versucht, BigQuery ML zu verwenden
Ich habe versucht, Amazon Glacier zu verwenden
Ich habe versucht, Git Inspector zu verwenden
Ich habe versucht, AWS Chalice zu verwenden
Ich habe versucht, Slack Emojinator zu verwenden
Ich habe versucht, Rotrics Dex Arm # 2 zu verwenden
Ich habe das TensorFlow-Tutorial als erstes ausprobiert
Ich habe das 2. TensorFlow-Tutorial ausprobiert
TensorFlow Tutorial Ich habe CNN 4th ausprobiert
Ich habe versucht, Thonny (Python / IDE) zu verwenden.
Ich habe versucht, mit dem Server-Client über tmux zu kommunizieren
Ich habe versucht, mit PyBrain verstärkt zu lernen
Ich habe versucht, mit Theano tief zu lernen
Ich habe irgendwie versucht, ein Jupyter-Notebook zu verwenden
[Kaggle] Ich habe versucht, mit unausgeglichenem Lernen zu unterabtasten
Ich habe versucht, mit OpenPose eine Schildkrötenwelle zu schießen
Ich habe versucht, die checkio-API zu verwenden
Ich habe versucht, asynchrone Verarbeitung mit Asyncio
Ich habe versucht, das CNN-Modell von TensorFlow mit TF-Slim umzugestalten
Ich habe versucht, ein Deep-Learning-Modell von TensorFlow mit TensorFlow Serving zu hosten
[Für Anfänger] Ich habe versucht, die Tensorflow-Objekterkennungs-API zu verwenden
TensorFlow Tutorial Ich habe MNIST 3rd ausprobiert
Ich habe versucht, Amazon SQS mit Django-Sellerie zu verwenden
Ich habe versucht, Azure Speech to Text zu verwenden.
Ich habe versucht, Autoencoder mit TensorFlow zu implementieren