[PYTHON] J'ai essayé d'utiliser magenta / TensorFlow

Génération automatique de mélodie avec magenta / TensorFlow

Contexte

Cette fois, je voulais pouvoir manipuler des données MIDI en utilisant Python, alors en parcourant divers sites, je suis arrivé à un outil appelé Magenta.

Qu'est-ce que #Magenta? L'autre jour, un nouveau projet appelé Magenta de Google a ouvert sur Github. https://github.com/tensorflow/magenta

Magenta est un projet qui utilise un réseau neuronal pour générer de l'art et de la musique.

L'objectif est de faire évoluer la créativité de l'apprentissage automatique et de devenir une communauté d'artistes et d'apprentissage automatique.

Réseau de neurones récurrent à composer

En tant que premier Magenta, un modèle du réseau neuronal récurrent (RNN) qui le compose a été publié. Il intègre une technique appelée LSTM (Long Short-Term Memory). Selon le site officiel de magenta (http://magenta.tensorflow.org/)

It’s purposefully a simple model, so don’t expect stellar music results. We’ll post more complex models soon. Il s'agit d'un modèle volontairement simplifié et vous ne pouvez pas vous attendre à faire une musique exceptionnelle. Cependant, nous continuerons à publier des modèles plus complexes.

Magenta est sorti en 2016. Il est nécessaire d'étudier d'abord RNN et LSTM, mais j'aimerais utiliser cet outil en essayant de l'utiliser pour le moment.

environnement

Les références

Extraire une pièce spécifique

Nous avons confirmé les données MIDI (chanson titre de Hinatazaka 46, 4 chansons) achetées sur la boutique en ligne YAMAHA.

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

De cette façon, il a été divisé en plusieurs pistes. (Partie de batterie, accompagnement, etc.) Comme cela sera décrit plus loin, l'apprentissage a été effectué en utilisant les données telles quelles sans rien faire. J'ai vérifié les résultats, mais ce n'est pas bon s'il y a de nombreux genres de données utilisés. Par conséquent, il est nécessaire de se concentrer uniquement sur la mélodie.

Extrayons donc uniquement la partie mélodie en utilisant le package Python pretty-midi.

terminal


pip install pretty_midi

Pour référence, l'allocation des ressources est la suivante.

スクリーンショット 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')

    #Sélectionnez le numéro d'instrument sélectionné et enregistrez
    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())

    #Retirez l'instrument sélectionné et faites-en une instance
    for instrument in midi_track:
        if instrument.program == i:
            ins = instrument

    #Créer un objet Pretty MIDI pour une nouvelle création
    rev_en_chord = pretty_midi.PrettyMIDI()

    #Ajouté à l'objet PrettyMIDI
    rev_en_chord.instruments.append(ins)

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

  return

func()

C'est un code qui fait référence à chaque fichier MIDI, spécifie le numéro de l'instrument et enregistre uniquement cette piste.

Divers tableaux de correspondance des numéros de notes MIDI. Noms d'instruments rythmiques en GM, GS et XG. Numéro de programme, nom de l'instrument et plage de prononciation.

Consultez le site ci-dessus pour les codes d'instruments. La plupart des gens semblent jouer avec le code de l'instrument lorsqu'ils touchent les données MIDI de la programmation.

Enfin apprendre

Démarrez Docker et tirez l'image magenta / tensorflow. Puisque TensorBoard est également utilisé, spécifiez le numéro de port.

Terminal


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

En gros, je ne l'ai pas précisé ici car j'ai procédé à la procédure du site suivant.

PyDataOkinawa/meetup017

Cependant, j'ai dû frapper le script shell dans l'image, mais il s'est arrêté avec une erreur. Je n'avais jamais touché au script shell auparavant, il a donc fallu beaucoup de temps pour le déchiffrer. Peut-être en raison d'un environnement différent, le nom du fichier de programmation spécifié était différent ou les réglages des paramètres étaient incorrects, ce qui entraînait une erreur. (J'ai appris des scripts shell.)

Pour référence, il était possible d'apprendre en apportant les modifications suivantes à mon environnement.

build_dataset.sh



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

######Changé en######

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

Apprentissage ... J'ai également vu TensorBoard pour la première fois. Je dois étudier davantage parce que je n'ai aucune idée de ce qui est écrit. スクリーンショット 2020-04-16 17.29.32.png

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

J'ai essayé de l'allumer sur un MacBook pour le moment, mais cela semble difficile ... Je dois pouvoir le transformer en Deep Infinity la semaine prochaine ...

Le nombre d'étapes étant fixé à 1200, il a fallu 1 heure et 30 minutes pour apprendre avec MacBook Pro. Le modèle utilisé est «Basic RNN» スクリーンショット 2020-04-16 18.50.52.png

La précision a été augmentée à 0,8.

produire

Un fichier MIDI a été généré à l'aide de ces données d'entraînement. Le nombre d'étapes a été spécifié comme 500. De plus, le nombre de fichiers générés est de cinq.

Les données MIDI générées ont été converties en «wav» en utilisant «timidity» et téléchargées sur Goolge Drive.

Google Drive

Le temps est venu ici, mais pour autant que j'écoute la chanson, je sens qu'une ligne mélodique qui rappelle légèrement la chanson originale a été générée.

Recommended Posts

J'ai essayé d'utiliser magenta / TensorFlow
J'ai essayé d'utiliser paramétré
J'ai essayé d'utiliser argparse
J'ai essayé d'utiliser la mimesis
J'ai essayé d'utiliser anytree
J'ai essayé d'utiliser aiomysql
J'ai essayé d'utiliser Summpy
J'ai essayé de jouer au jeu ○ ✕ en utilisant TensorFlow
J'ai essayé d'utiliser coturn
J'ai essayé d'utiliser Pipenv
J'ai essayé d'utiliser matplotlib
J'ai essayé d'utiliser "Anvil".
J'ai essayé d'utiliser Hubot
J'ai essayé d'utiliser ESPCN
J'ai essayé de classer le texte en utilisant TensorFlow
J'ai essayé d'utiliser openpyxl
J'ai essayé d'utiliser Ipython
J'ai essayé d'utiliser PyCaret
J'ai essayé d'utiliser cron
J'ai essayé d'utiliser face_recognition
J'ai essayé d'utiliser Jupyter
J'ai essayé d'utiliser doctest
J'ai essayé d'exécuter TensorFlow
J'ai essayé d'utiliser du folium
J'ai essayé d'utiliser jinja2
J'ai essayé d'utiliser du folium
J'ai essayé d'utiliser la fenêtre de temps
J'ai créé un jeu ○ ✕ avec TensorFlow
[J'ai essayé d'utiliser Pythonista 3] Introduction
J'ai essayé d'utiliser easydict (mémo).
J'ai essayé la reconnaissance faciale avec Face ++
J'ai essayé d'utiliser BigQuery ML
J'ai essayé d'utiliser Amazon Glacier
J'ai essayé d'utiliser git inspector
J'ai essayé d'utiliser AWS Chalice
J'ai essayé d'utiliser l'émojinateur Slack
J'ai essayé d'utiliser Rotrics Dex Arm # 2
J'ai essayé le tutoriel TensorFlow 1er
J'ai essayé le tutoriel TensorFlow 2ème
Tutoriel TensorFlow J'ai essayé CNN 4th
J'ai essayé d'utiliser Thonny (Python / IDE)
J'ai essayé de communiquer avec le client serveur en utilisant tmux
J'ai essayé l'apprentissage par renforcement avec PyBrain
J'ai essayé l'apprentissage en profondeur avec Theano
J'ai essayé d'utiliser le notebook jupyter d'une manière ou d'une autre
[Kaggle] J'ai essayé le sous-échantillonnage en utilisant un apprentissage déséquilibré
J'ai essayé de photographier une vague de tortue en utilisant OpenPose
J'ai essayé d'utiliser l'API checkio
J'ai essayé le traitement asynchrone en utilisant asyncio
J'ai essayé de refactoriser le modèle CNN de TensorFlow en utilisant TF-Slim
J'ai essayé d'héberger un modèle d'apprentissage en profondeur de TensorFlow à l'aide de TensorFlow Serving
[Pour les débutants] J'ai essayé d'utiliser l'API Tensorflow Object Detection
Tutoriel TensorFlow J'ai essayé MNIST 3rd
J'ai essayé d'utiliser Amazon SQS avec django-celery
J'ai essayé d'utiliser Azure Speech to Text.
J'ai essayé d'implémenter Autoencoder avec TensorFlow