Génération de musique classique
Particpants :
Louis De Oliveira, Guillaume Allègre
Description :
Ce projet consite à générer des extraits de musique classique avec un GAN.
Le but :
- Générer des extraits de musique classique écoutables
- Construire un modèle de GAN assez performant pour être utilisé pour d'autres tâches
Difficultés rencontrées :
- Instabilité de l'entraînement du GAN
- Durée de l'entrainement de GAN
- Difficultés pour trouver un dataset de fichiers midis adéquats
Implémentation :
Construction d'un dataset
Le dataset d'entraînement pour le GAN est construit à l'aide d'un dataset de fichiers midi de grands compositeurs classiques. On utilise la fonction midi2img issue de ce repo, légérements modifiée, pour convertir les fichiers midis en images sur lesquelles ont peut facilement entrainer un GAN Une fois ceci fait, les images sont converties en noir et blanc, puis en array numpy (après avoir filtré les imga complètement noires).
entraînement du GAN
La structure du GAN est disponible dans le notebook. Pour aider à l'entrainement du GAN, nous faisons appel à plusieurs astuces:
-
Le label smoothing qui consiste a remplacer les valeurs de vérité binaires fournies au discriminateur par des valeurs comme 0.1 et 0.9 ou 0.2 et 0.8 pour éviter de rendre le discriminateur trop fort.
-
Le label flipping qui consiste a inverser de temps en temps les valeurs de vérité fournies au discriminateur pour la encore faciliter l'apprentissage du générateur.
L'évvolution des images générées au cours de l'entrainement est visibible ci-dessus.
écoute des morceaux générés :
Nous utilisons la fonction img2midi issue du même repo que midi2img pour convertir les images générées par notre GAN en fichier midis que l'on peut écouter.
Conclusion et perspectives :
Les morceaux générés par le GAN ont un certains rythmes mais restent assez éloignés de la musique classique que nous voulions générer. Voici quelques pistes d'amélioration:
- Utiliser un modèle génératif permettant d'intégrer une notion temporelle pour avoir une meilleure cohérence dans le temps des morceaux générés.
- Mieux nettoyer le dataset d'entrainement pour enlever les images majoritairement vides qui n'aident pas a générer des musiques intéressantes.
- Se renseigner sur d'autre modes de représentation de la musique que le midi.
Sources :
- Article medium sur le sujet, nous utilisons une architecture de GAN assez différente de la sienne pour éviter d'avoir un nombre trop important de paramètres mais l'idée est similaire.
- Repo git de fonctions sur les fichiers midi
- librairire python music21