[PYTHON] Essayons le projet de génération de musique TensorFlow "Magenta" du réglage de l'environnement de développement à la génération de chansons.

introduction

Basé sur GitHub de magenta README, configurez l'environnement de développement magenta sans utiliser Docker. Je voudrais générer une chanson avec Basic RNN.

Téléchargez et utilisez le modèle entraîné.

Veuillez vous référer à ici si vous souhaitez utiliser Docker facilement. Essayez de créer une chanson avec le projet de création artistique et musicale de TensorFlow "magenta".

Environnement de développement

Pour préparer l'environnement de développement pour Magenta ・ Dépôt GitHub de Magenta ・ Bazel ・ TensorFlow Vous en avez besoin de trois.

De plus, Magenta semble ne prendre en charge que Python 2.7 pour le moment, je l'ai donc configuré après avoir créé un environnement Python 2.7 avec virtualenv sur Mac.

Un clone du référentiel GitHub de Magenta

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

Installer Bazel

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

$ brew install bazel

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

Lors de l'installation de TensorFlow, veuillez vérifier si votre PC ne dispose que d'un processeur ou d'un GPU. Il semble que TensorFlow prend en charge un GPU appelé CUDA, donc si vous avez un Mac, vous pouvez l'utiliser. Référence: Le GPU OSX est pris en charge par Tensorflow

J'ai procédé avec le CPU uniquement.

$ 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

Lançons le test après le réglage. Accédez à / magenta / sous git clone et appuyez sur la commande suivante.

bazel test //magenta/...

Si le message suivant apparaît, cela signifie qu'il a réussi et le réglage est terminé.

.........
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
(Omission)

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.

Faisons une chanson avec Basic RNN.

Magenta propose trois types de modèles d'apprentissage: RNN de base, LookBack RNN et Attention RNN. Cette fois, j'essaierai la méthode de Basic RNN.

Ce modèle est une mélodie qui ne produit qu'un seul son au même moment. Je ne le ferai pas dans ce post, mais si vous mettez en MIDI et apprenez par vous-même, il semble qu'un seul son soit pris en compte même s'il y a un son qui sonne au même moment avec ce MIDI.

Télécharger le modèle entraîné

Vous pouvez le télécharger depuis ici.

Après le téléchargement, veuillez le placer n'importe où.

Réglage du chemin

Définissez le chemin du modèle entraîné téléchargé ci-dessus avec "Chemin absolu".

BUNDLE_PATH=<absolute path of basic_rnn.mag>

Génération de chansons

Il peut être généré avec la commande suivante.

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]"

Les options semblent avoir les significations suivantes.

Où générer la chanson

--output_dir=/tmp/basic_rnn/generated \

Vous pouvez décider où générer le morceau.

Nombre de chansons

--num_outputs=10 \

Vous pouvez décider du nombre de chansons à créer.

Durée de la chanson

--num_steps=128 \

Définissez le nombre de sons et le nombre de mesures pour créer un morceau. Un morceau de 8 mesures est composé de 128. Je pense que 16 sons peuvent être mis dans chaque mesure. (La définition de mots tels que "mesurer" est ambiguë ...)

Intro de la chanson

--primer_melody="[60]"

C'est le son avec lequel la chanson commence. Par exemple --primer_melody="[60, -2, 60, -2, 67, -2, 67, -2]” Cela indique "Dodo Soso", et les chansons qui commencent par l'intro de l'étoile scintillante seront générées. (À propos, puisque ce qui précède est de 8 sons, cela signifie que la moitié de la première mesure est définie.)

Les chiffres sont -2:no event -1:note-off event C'est comme ça, et je ne le comprends pas en mots, mais Dans le cas de [60, -2, 60, -2, 67, -2, 67, -2], "Dodo Soso" et le son avant de continuer, alors que Dans le cas de [60, -1, 60, -1, 67, -1, 67, -1], cela ressemble à "fais-le" et le son est interrompu. Est-ce la différence entre «ne rien faire» et «couper le son»?

60: de 67: Donc Je pense que le nombre de touches du piano indique le son.

Une fois exécuté, un morceau sera généré.

résultat

Les chansons suivantes ont été créées. Cela a commencé avec l'intro de "Do Do So So" et a fait une chanson de 16 mesures. Exemple

Voici le premier avec "Dodo Soso". Exemple

L'atmosphère change un peu et vous pouvez sentir que les réglages d'intro ont un effet sur la mélodie suivante.

Merci beaucoup.

Recommended Posts

Essayons le projet de génération de musique TensorFlow "Magenta" du réglage de l'environnement de développement à la génération de chansons.
Le projet de génération de musique "Magenta" réalisé par TensorFlow entraîne des fichiers MIDI et génère des chansons.
Introduction à Python Préparons l'environnement de développement
De 0 à la construction de l'environnement de développement Django à l'exploitation de base
[Il n'est pas trop tard pour apprendre Python à partir de 2020] Partie 2 Créons un environnement de développement Python
Essayez de configurer SSH (Exscript) du logiciel au routeur
Essayez de configurer NETCONF (ncclient) du logiciel au routeur
Construction de l'environnement de développement Python 2020 [De l'installation de Python à l'introduction à la poésie]
Comment créer un environnement de développement pour TensorFlow (1.0.0) (Mac)
Ajoutons-le à la variable d'environnement à partir de la commande ~
Changer la valeur de paramètre de setting.py en fonction de l'environnement de développement
De la configuration de l'environnement Rust à l'exécution de Hello World