Les androïdes rêvent-ils de punk électrique? Comment j'ai appris à un réseau de neurones à écrire de la musique

Lors de cours d'apprentissage automatique à Artezio, j'ai rencontré un modèle d'apprentissage qui pouvait faire de la musique. La musique est une partie essentielle de ma vie, pendant de nombreuses années j'ai joué dans des groupes (punk rock, reggae, hip hop, rock, etc.) et je suis un auditeur fanatique.

Malheureusement, de nombreux groupes, dont j'étais un grand fan dans ma jeunesse, se sont séparés pour diverses raisons. Ou ils n'ont pas rompu, mais ce qu'ils enregistrent maintenant ... en général, ce serait mieux s'ils se séparaient.

J'étais curieux de savoir s'il existe maintenant un modèle prêt à l'emploi qui peut apprendre sur les pistes d'un de mes groupes préférés et créer des compositions similaires. Puisque les musiciens eux-mêmes ne sont plus très performants, peut-être que le réseau de neurones peut les gérer?

Source

En étudiant les modèles finis, je suis rapidement tombé sur un tel article avec un aperçu des six options les plus célèbres. Il s'agit bien sûr des formats de musique numérique. On peut voir dans l'article que deux approches principales de la génération de musique peuvent être distinguées: basée sur le flux audio numérisé (le son que nous entendons des haut-parleurs - audio brut, fichiers wav) et basé sur le travail avec MIDI (notation musicale).

J'ai abandonné les options avec du son brut, et c'est pourquoi.

  • Les résultats ne sont pas impressionnants - l'utilisation de tels modèles pour la musique polyphonique donne un résultat très spécifique. C'est inhabituel, vous pouvez créer des peintures intéressantes, mais cela ne convient pas à mes fins: cela semble étrange, mais je voulais entendre quelque chose de similaire à l'original.

Source

Un bon exemple avec la musique pour piano:


Et avec la musique orchestrale ou le rock, ça sonne beaucoup plus étrange:


Ici, les gars ont essayé de traiter le Black Metal et pas seulement en audio brut.

  • Dans les compositions de mes groupes préférés, divers instruments sonnent - voix, batterie, basse, guitares, synthétiseurs. Chaque instrument sonne avec le reste. Je recherche un modèle qui agirait de la même manière, c'est-à-dire qui fonctionnerait non seulement avec des instruments individuels, mais prendrait également en compte leur son commun.

    Lorsqu'un musicien a besoin d'apprendre une partie d'un instrument à l'oreille, il essaie d'isoler l'instrument dont il a besoin de l'ensemble du flux sonore. Il répète ensuite son son jusqu'à ce qu'il obtienne un résultat similaire. La tâche n'est pas la plus facile, même pour une personne ayant une bonne audition - la musique peut être difficile, les instruments «fusionnent».

Source

Je suis tombé sur des outils logiciels qui ont essayé de résoudre un problème similaire. Il existe plusieurs projets basés sur l'apprentissage automatique. Par exemple, pendant que j'écrivais ce texte, Magenta a sorti un nouvel instrument, Wave2Midi2Wave, capable de «prendre» des notes de piano et de «les reproduire» de façon réaliste. Il existe d'autres outils, bien qu'en général cette tâche n'ait pas encore été résolue.

Ainsi, afin d'apprendre une partie d'une œuvre, il est plus facile de prendre des notes toutes faites. C'est le moyen le plus simple. Il est logique de supposer qu'il sera plus facile pour les réseaux de neurones de travailler avec la représentation musicale de la musique, où chaque instrument est représenté par une piste distincte.

  • Dans le cas de l'audio brut, le résultat est un mélange de tous les instruments, les parties ne peuvent pas être chargées individuellement dans le séquenceur (éditeur audio), corrigées, modifiées le son, etc. Je suis très content si le réseau de neurones compose un hit, mais fait une erreur dans quelques notes - lorsque je travaille avec des notes, je peux facilement les corriger, avec du son brut, cela est presque impossible.

La notation musicale a également ses inconvénients. Il ne prend pas en compte la masse des nuances de performances. En ce qui concerne le MIDI, on ne sait pas toujours qui étaient ces fichiers MIDI, à quel point ils sont proches de l'original. Peut-être que le compilateur a simplement fait une erreur, car ce n'est pas une tâche facile de "supprimer" le jeu.

Lorsque vous travaillez avec des notes polyphoniques, vous devez vous assurer que les instruments sont à tout moment accordés. De plus, il est important que la séquence de ces moments soit logique du point de vue humain de la musique.

Il s'est avéré qu'il n'y a pas tellement de solutions qui pourraient fonctionner avec des notes, et même pas avec un instrument, mais avec plusieurs sons en même temps. J'ai d'abord ignoré le projet Magenta de Google TensorFlow, car il était décrit comme "non polyphonique". A cette époque, la bibliothèque MusicVAE n'était pas encore publiée, donc je me suis installé sur le projet BachBot.

Source

Bachbot


Il s'est avéré que la solution à mon problème existe déjà. Écoutez le joyeux anniversaire accordé par BachBot et sonnant comme un choral de Bach.


La chorale est une musique spécifique, elle se compose de quatre voix: soprano, alto, ténor et basse. Chacun des instruments peut produire une note à la fois. Ici, vous devez aller un peu plus loin dans la musique. Nous parlerons de musique dans la dimension des quatre quarts.

Dans une notation musicale, une note a deux indicateurs - la hauteur (to, re, mi ...) et la durée (entier, demi, huitième, seizième, trente seconde). En conséquence, une note entière dure un temps entier, deux demi-notes un temps entier, seize seizièmes un temps entier.

Lors de la préparation des données pour la formation du réseau neuronal, les créateurs de BachBot ont pris en compte les éléments suivants:

  • afin de ne pas abattre le modèle avec des accords de touches différentes, qui ensemble ne sonneraient pas harmonieusement, tous les chorals ont conduit à la même touche;
  • le réseau neuronal doit être alimenté en valeurs discrètes, et la musique est un processus continu, ce qui signifie qu'une discrétisation est nécessaire. Un instrument peut jouer une longue note entière et l'autre en même temps quelques seizièmes. Pour résoudre ce problème, toutes les notes ont été divisées en seizièmes. En d'autres termes, si une quatrième note apparaît dans les notes, elle arrive quatre fois comme la même seizième entrée - la première fois avec le drapeau sur lequel elle a été pressée et les trois fois suivantes avec le drapeau qu'elle continue.

Le format des données est le suivant - (hauteur, nouvelle note | continuation du son de l'ancienne note)

(56, Vrai) # Soprano
(52, Faux) # Alt
(47, Faux) # Ténor
(38, Faux) # Basse

Après avoir conduit tous les choraux de l'ensemble de données musical21 populaire à travers cette procédure, les auteurs de BachBot ont constaté qu'il n'y a pas beaucoup de combinaisons de combinaisons de quatre notes dans les chorales (si vous les amenez à la même tonalité), bien qu'il semble qu'il puisse y avoir potentiellement 128 x 128 x 128 x 128 (128 niveaux de hauteur utilisés en midi). La taille d'un dictionnaire conditionnel n'est pas si grande. C'est une remarque curieuse, nous y reviendrons lorsque nous parlerons de MusicVAE. Ainsi, nous avons les chorales de Bach enregistrés sous la forme de séquences de ces quatuors.

On dit souvent que la musique est une langue. Par conséquent, il n'est pas surprenant que les créateurs de BachBot aient appliqué la technologie populaire en NLP (Natural Language Processing) à la musique, à savoir qu'ils ont formé le réseau LSTM sur l'ensemble de données généré et ont obtenu un modèle qui peut compléter un ou plusieurs instruments ou même créer des chorales à partir de zéro. Autrement dit, vous définissez l'alt, le ténor et la basse, et BachBot ajoute la mélodie de soprano pour vous, et ensemble, cela ressemble à Bach.

Voici un autre exemple:

Sonne bien!

Vous pouvez regarder cette vidéo plus en détail. Il y a là une analyse intéressante, collectée sur la base d'une enquête sur le site bachbot.com

Les utilisateurs sont encouragés à distinguer les chorals originaux de Bach de la musique créée par le réseau neuronal. Les résultats mentionnent que si un réseau de neurones crée une partie basse pour tous les autres paramètres, alors seulement la moitié des utilisateurs peuvent distinguer les chorales créés par un réseau de neurones des originaux. C'est drôle, mais surtout les experts en musique se confondent. Avec d'autres outils, les choses vont un peu mieux. Cela me semble insultant en tant que bassiste - le violoniste semble être nécessaire pour le moment, mais il est temps pour les bassistes de perfectionner leurs compétences en cloisons sèches.


Magenta


En étudiant BachBot, j'ai trouvé qu'il était inclus dans le projet Magenta (Google TensorFlow). J'ai décidé de l'examiner de plus près et j'ai constaté que dans le cadre de Magenta, plusieurs modèles intéressants ont été développés, dont l'un est juste consacré à travailler avec des compositions polyphoniques. Magenta a fait ses merveilleux outils et a même déjà lancé le plugin pour l'éditeur audio Ableton, ce qui est particulièrement agréable en termes d'application pour les musiciens.

Mes favoris: beat blender (crée des variations sur une partie de batterie donnée) et
boucles latentes (crée des transitions entre les mélodies).

L'idée principale de l'outil MusicVAE, que j'ai décidé d'utiliser, est que les créateurs ont essayé de combiner le modèle et l'encodeur automatique variationnel - VAE sur le réseau LSTM.

Si vous vous souvenez, dans une conversation sur Bach Bot, nous avons remarqué que le dictionnaire d'accords ne se compose pas d'éléments de 128x128x128x128, mais beaucoup moins. Les créateurs de MusicVAE l'ont également remarqué et ont décidé d'utiliser un espace latent compressé.

Soit dit en passant, ce qui est typique, pour la formation MusicVAE, vous n'avez pas besoin de traduire les sources en une seule clé. La transposition n'est pas nécessaire, je suppose, car le code source sera toujours converti par l'auto-encodeur et les informations de tonalité disparaîtront.

VAE est conçu de manière à permettre au décodeur de récupérer efficacement les données de l'ensemble de données d'apprentissage, tandis que l'espace latent est une distribution fluide des caractéristiques des données d'entrée.

Ceci est un point très important. Cela permet de créer des objets similaires et d'effectuer une interpolation logique significative. Dans l'espace d'origine, nous avons 128x128x128x128 variantes de combinaison du son de quatre notes, mais en réalité, toutes ne sont pas utilisées (elles sonnent agréablement à l'oreille humaine). Un encodeur automatique variationnel les transforme en un ensemble beaucoup plus petit dans un espace caché, et vous pouvez proposer des opérations mathématiques dans cet espace qui ont une signification significative du point de vue de l'espace d'origine, par exemple, les points voisins seront des fragments musicaux similaires.

Un bon exemple est de savoir comment ajouter des lunettes à une photo à l'aide d'un encodeur automatique dans cet article . Vous pouvez en savoir plus sur le fonctionnement de Muisc VAE sur le site officiel de Magenta dans cet article , il y a aussi un lien vers arXiv.

Donc, l'instrument est sélectionné, il reste à l'utiliser avec mon objectif d'origine - créer de la nouvelle musique basée sur des pistes déjà enregistrées et évaluer combien cela sonnera comme le son du groupe d'origine. Magenta ne fonctionne pas sur mon ordinateur portable Windows et depuis longtemps, il calcule un modèle sans GPU. Après avoir souffert de machines virtuelles, d'un docker, etc., j'ai décidé d'utiliser le cloud.

Google fournit des blocs-notes Colab où vous pourrez vous adonner aux modèles magenta. Cependant, dans mon cas, il n'a pas été possible de former le modèle, le processus s'est bloqué tout le temps en raison de diverses restrictions - la quantité de mémoire disponible, les arrêts de temporisation, l'absence d'une ligne de commande normale et les droits root pour installer les bibliothèques nécessaires. Hypothétiquement, il est même possible d'utiliser le GPU, mais, je le répète, je n'ai pas pu installer le modèle et le démarrer.

Je pensais acheter un serveur et, oh, bonne chance, j'ai trouvé que Google fournit des services cloud Google Cloud avec un GPU, et même il y a une période d'essai gratuite. Certes, il s'est avéré qu'en Russie, ils ne sont officiellement accessibles qu'aux personnes morales, mais ils m'ont laissé entrer en mode d'essai gratuit.

J'ai donc créé une machine virtuelle dans GoogleCloud avec un module GPU, trouvé sur Internet plusieurs fichiers midi de l'un de mes groupes préférés et les ai téléchargés dans le dossier midi du cloud.

Installez Magenta:

pip install magenta-gpu 

C'est génial que tout cela puisse être installé avec une seule équipe, pensais-je, mais ... des erreurs. Il semble que vous deviez toucher la ligne de commande, désolé.

Nous regardons les erreurs: la bibliothèque rtmidi n'est pas installée sur la machine cloud, sans laquelle Magenta ne fonctionne pas.

Et cela, à son tour, se bloque en raison de l'absence du paquet libasound2-dev, et je n'ai pas non plus de privilèges root.

Pas si effrayant:

 sudo su root apt-get install libasound2-dev 

Hourra, maintenant pip install rtmidi fonctionne sans erreur, tout comme pip install magenta-gpu.

On le retrouve sur Internet et télécharge les fichiers sources dans le dossier midi. Ils sonnent quelque chose comme ça .

Nous convertissons midi en un format de données avec lequel le réseau peut déjà fonctionner:

 convert_dir_to_note_sequences \ --input_dir=midi\ --hparams=sampling_rate=1000.0\ --output_file=notesequences_R2Midi.tfrecord \ --log=DEBUG \ --recursive 

et commencer la formation

 music_vae_train \ --config=hier-multiperf_vel_1bar_med \ --run_dir=/home/RNCDtrain/ \ --num_steps=1 \ --checkpoints_to_keep=2 \ --hparams=sampling_rate=1000.0 \ --hparams=batch_size=32,learning_rate=0.0005 \ --num_steps=5000 \ --mode=train \ --examples_path=notesequences_R2Midi.tfrecord 

Encore une fois le problème. Tensorflow se bloque avec une erreur - il ne peut pas trouver la bibliothèque, heureusement, il y a quelques jours, quelqu'un a déjà décrit cette erreur, et les sources Python peuvent être corrigées.

Nous montons dans le dossier

 /usr/local/lib/python2.7/dist-packages/tensorflow_probability/python/distributions# 

et remplacez la ligne d'importation, comme décrit dans le bogue sur github.

Lancez à nouveau music_vae_train et ... Hourra! La formation est partie!

Source

hier-multiperf_vel_1bar_med - J'utilise un modèle polyphonique (jusqu'à 8 instruments) qui produit une mesure chacun.

Un paramètre important est checkpoints_to_keep = 2, la capacité du disque dans les nuages ​​est limitée, l'un des problèmes est que le processus d'apprentissage a été interrompu tout le temps en raison d'un débordement de disque, les points de contrôle sont assez lourds - 0,6-1 gigaoctets chacun.

Quelque part dans les 5000 époques, l'erreur commence à sauter autour de 40 à 70. Je ne sais pas si c'est un bon résultat ou non, mais il semble qu'avec un peu de données de formation, le réseau sera recyclé davantage et cela n'a aucun sens de passer le temps des GPU si gentiment fournis gratuitement dans les centres de données Google. Nous passons à la génération.

Pour une raison quelconque, lorsque l'installation de Magenta n'a pas installé le fichier de génération lui-même, j'ai dû le déposer de mes mains dans le dossier des autres:

 curl -o music_vae_generate.py https://raw.githubusercontent.com/tensorflow/magenta/master/magenta/models/music_vae/music_vae_generate.py 

Enfin, créez les fragments:

 music_vae_generate --config=hier-multiperf_vel_1bar_med --checkpoint_file=/home/RNCDtrain/train/ --mode=sample --num_outputs=32 --output_dir=/home/andrey_shagal/  --temperature=0.3 

config - type de génération, exactement le même que pendant la formation - multipiste, 1 horloge
checkpoint_file - dossier où obtenir le dernier fichier avec le modèle formé
mode - échantillon - créer un échantillon (il existe une autre option interpoler - créer une mesure de transition entre deux mesures)
num_outputs - combien de pièces générer
température - un paramètre de randomisation lors de la création d'un échantillon, de 0 à 1. À 0, le résultat est plus prévisible, plus proche de la source, à 1 - Je suis un artiste, tel que je le vois.

En sortie, j'obtiens 32 fragments par mesure. Ayant démarré le générateur plusieurs fois, j'écoute les fragments et colle le meilleur sur une piste: neurancid.mp3.


Alors "j'ai passé cet été." Je suis satisfait. Bien sûr, la radio Maximum est peu susceptible de l'emmener dans la liste de lecture, mais si vous écoutez, cela ressemble vraiment au groupe Rancid original. Le son, bien sûr, est différent de l'enregistrement en studio, mais nous avons principalement travaillé avec des notes. De plus, il y a de la place pour l'action - traitez le midi avec divers plug-ins VST, réenregistrez des parties avec des musiciens en direct ou attendez que les gars de Wave2Midi2Wave arrivent aux guitares avec une surcharge.

Il n'y a rien à redire sur les notes. Idéalement, j'aimerais que le réseau neuronal crée un chef-d'œuvre ou du moins un hit pour le top 100 du Billboard. Mais alors qu'elle a appris à utiliser l'alcool et les drogues des rockers , à jouer le rythme entier d'une note en huitièmes (en fait, non seulement, mais je suis fier de son père transition de 20 à 22 secondes). Il y a des raisons à cela, et plus à leur sujet.

  1. Petite quantité de données.
  2. Le modèle que j'ai utilisé produit des fragments de la taille d'une mesure. Dans le punk rock, en règle générale, peu d'événements se déroulent au sein d'une même mesure.
  3. Les transitions et mélodies intéressantes fonctionnent juste dans le contexte des riffs de pitch, des transitions d'accord à accord, et l'auto-encodeur, avec une petite quantité de données, semble avoir perdu la plupart des morceaux, et même réduit tous les riffs à deux accords consonantiques et plusieurs accords atonaux. Nous devons essayer un modèle qui fonctionne avec 16 mesures, c'est dommage que seules trois voix y soient disponibles.

J'ai contacté les développeurs, ils ont recommandé d'essayer de réduire la dimension de l'espace latent, car ils ont formé leur réseau sur 200000 pistes, et je me suis entraîné sur 15. Je n'ai pas pu obtenir l'effet visible de la réduction de l'espace z, mais il y a encore quelque chose à bricoler.

Soit dit en passant, la monotonie et la monotonie est loin d'être toujours un inconvénient. Des rituels chamaniques aux soirées techno, comme vous le savez, une seule étape. Nous devons essayer de former le modèle sur quelque chose comme ça - contre, rave, techno, dub, reggae, hip-hop. Certes, il y a une chance de créer quelque chose d'agréablement zombie. J'ai trouvé une vingtaine de chansons de Bob Marley en midi et, voila la, une très belle boucle:


Les parties ci-dessus sont réenregistrées avec des basses et des guitares en direct, traitées par des synthétiseurs VST pour rendre le fragment plus juteux. Dans l'original, le réseau n'a publié que des notes. Si vous les jouez avec un lecteur midi standard, cela ressemble à ceci:


Certes, si vous créez un certain nombre de dessins de batterie thématiques de base, démarrez-les dans Beat Blender + parties de base de basse et synthés avec une boucle latente (il y en avait plus à leur sujet), il est tout à fait possible d'exécuter un algorithme pour la radio techno qui créera en continu de nouvelles pistes ou même une piste sans fin. Buzz éternel!

MusicVAE offre également la possibilité de former le réseau pour générer des fragments de trio de 16 mesures - batterie, basse et plomb. Aussi assez intéressant. Données d'entrée - fichiers midi multipistes - le système se divise en triples dans toutes les combinaisons possibles et plus loin, il forme le modèle. Un tel réseau nécessite beaucoup plus de ressources, mais le résultat est immédiatement 16 cycles! Impossible de résister. J'ai essayé d'imaginer comment un groupe qui joue quelque chose entre Rancid et NOFX pourrait sonner, se chargeant pour la formation sur un nombre égal de pistes de chaque groupe:


Il y a aussi des parties midi réenregistrées sur des guitares live. Lecteur midi standard comme celui-ci:


Intéressant! C'est définitivement mieux que mon premier groupe! Et en passant, ce même modèle nous donne un free jazz décent:


Les problèmes que j'ai rencontrés:

  1. Absence d'un bon support pratique qui réduirait le temps d'attente pour la formation. Le modèle ne fonctionne que sous Linux, la formation est longue, sans GPU depuis très longtemps, et tout le temps je veux essayer de changer les paramètres et voir ce qui se passe. Par exemple, un serveur cloud avec un processeur GPU de 100 époques pour le modèle «trio de 16 cycles» a compté 8 heures.
  2. Un problème typique d'apprentissage automatique est le manque de données. Seulement 15 fichiers midi - c'est très petit pour comprendre la musique. Le réseau neuronal, contrairement à moi dans ma jeunesse, n'a pas écouté 6 albums de Rancid avant les trous, je ne suis pas allé à des concerts, ce résultat a été obtenu à partir de 15 morceaux midi inconnus de quiconque est loin de l'original. Maintenant, si vous restez autour du guitariste avec des capteurs et prenez chaque son de chaque note ... Voyons comment se développe l'idée Wave2Midi2Wave. Peut-être que dans quelques années, il sera possible de refuser des notes pour résoudre un tel problème.
  3. Le musicien doit s'inscrire clairement dans le rythme, mais pas parfaitement. Le week-end midi, il n'y a pas de dynamique dans les notes (par exemple, dans la batterie), elles sont toutes jouées au même volume, exactement en un clic (comme disent les musiciens, c'est-à-dire exactement dans le rythme), même si vous les diversifiez au hasard, la musique commence à sonner plus vivant et plus agréable. Encore une fois, Wave2Midi2Wave traite déjà ce problème.

Vous avez maintenant une idée des possibilités de l'IA dans la création de musique et de mes préférences musicales. Quel rôle pensez-vous que l'IA attend dans le processus créatif à l'avenir? Une machine peut-elle créer de la musique sur un pied d'égalité ou même mieux qu'un être humain pour être un assistant dans le processus créatif? Ou l'intelligence artificielle ne deviendra célèbre dans le domaine musical que pour l'artisanat primitif.

Source: https://habr.com/ru/post/fr439546/


All Articles