VT2022 Spleeter fiche

=Résumé=

Spleeter est une bibliothèque Python qui propose de séparer les différentes pistes d'une musique grâce au machine learning.

=Mots-Clés=

Spleeter, Intelligence Artificielle, Deep Learning, Séparation de sources, Time-frequency masking

=Introduction=

Spleeter est une bibliothèque Python développée par Deezer en novembre 2019 permettant de séparer les différentes pistes d’une musique. Par exemple, on a une musique et l’on souhaite séparer la voix et les instruments en fichiers audio comme si on avait enregistré les pistes à part.

=Acteurs du projet=

Spleeter est un outil open source qui a été développé par Deezer par son centre de recherche à Paris et on l’utilise avec des modèles pré-entraînés écrits en Python. Spleeter utilise également Tensorflow pour réaliser cette tâche. Tensorflow quant à lui est une bibliothèque Python open source d’apprentissage automatique développée par Google. Google est donc indirectement un acteur de ce projet.

=Modèle utilisé=

Time-Frequency Masking
Spleeter utilise une technique appelée Time-Frequency Masking (T-F Masking).

Les différentes pistes musicales (ou stems) d'une musique mélangeant plusieurs musiques sont réparties sur tout le spectre des fréquences audibles (20 à 2000 Hz) et chacune de ces pistes correspond à une gamme de fréquences.

C'est-à-dire que les voix, la batterie, les basses, etc. occupent différentes bandes de fréquences.

Ainsi, en utilisant le Time-Frequency Masking, les fréquences qui correspondent à une piste particulière peuvent être filtrées du mélange.

Ainsi, en filtrant chaque piste, nous nous retrouvons dans les pistes séparées de la piste mélangée donnée en entrée.

Deep Learning & Réseaux de neurones
Afin d'éviter de créer les masques manuellement, Spleeter utilise le Deep Learning et les réseaux de neurones pour créer ces masques.

Pour rappel, le deep learning est une technique d'apprentissage automatique qui utilise des réseaux de neurones profonds pour effectuer de la reconnaissance de motifs sur de grandes quantités de données. Un réseau de neurones est, quant à lui, un ensemble de neurones qui prennent des informations en entrée, et qui, à l’aide d’informations provenant d'autres neurones, développent des sorties automatiquement.

U-Net
Le but ici est de trouver un masque pour chaque instrument afin d’ensuite pouvoir l’appliquer sur une musique et pouvoir filtrer les fréquences et donc les différents instruments.

Pour trouver ces masques, Spleeter utilise des réseaux U-Net, un réseau par instrument et donc par filtre souhaité.

U-Net est un encodeur/décodeur CNN (Réseau de Neurones Convolutif) de 12 couches (6 couches d’encodage et 6 couches de décodage).

Le premier bloc (appelé aussi encodeur) sert à récupérer le contexte d'une image. Ce bloc est constitué d'un assemblage de couches de convolution permettant de réduire sa taille et donc d'en extraire les caractéristiques typiques de l'image. En détails, cela consiste en l'application répétée de 6 couches de convolution 5x5. Chaque couche est suivie d'une fonction d'activation ReLU et d'une batch normalization.

Le second bloc (appelé aussi décodeur) permet la localisation précise de l'information grâce aux couches de déconvolution et permet également de retrouver la taille initiale de l'image afin d'avoir un masque de la même taille que le spectrogramme d'entrée. En détails, cela consiste en l'application répétée de 6 couches de déconvolution 5x5. Chaque couche est suivie d'une fonction d'activation ReLU, d'une batch normalization et d'un Dropout. Enfin, chaque couche de déconvolution est concaténée avec la couche de convolution correspondante.

Ces réseaux U-Net ont été améliorés pendant l'entraînement de la manière suivante :

En entrée du modèle sont passées des images, ces images sont les spectrogrammes des fréquences (Fréquences en fonction du temps).

Les spectrogrammes donnés sont ceux de :

- La musique totale avec les différentes sources mélangées

- Une piste pure de chaque source

Le spectrogramme mélangé passe dans chaque réseau U-net correspondant à une source, le réseau retourne pour chacune des sources le masque correspondant. Chaque masque final est multiplié par le spectrogramme mélangé d’entrée et est calculée la fonction de perte entre le spectrogramme de chaque source pure et le spectrogramme mélangé avec chaque masque appliqué pour venir optimiser notre modèle.

Modèles pré-entraînés proposés
Spleeter se décline en plusieurs modèles pré-entrainés qui peuvent être utilisés :

- Séparation en 2 stems : Voix / Accompagnement

- Séparation en 4 stems : Voix / Bass / Drums / Autres

- Séparation en 5 stems : Voix / Bass / Drums / Piano / Autres

Le projet étant open-source, il est possible d'entraîner notre propre modèle avec nos propres musiques.

=Caractéristiques du modèle=

Temps d’entraînement : Le modèle 4 stems de Spleeter a pris 1 semaine à être entraîné sur 1 GPU.

Vitesse : Spleeter a été capable de séparer le jeu de données test musdb18 (3 heures et 27 minutes d’audio) en 4 stems en moins de 2 minutes (incluant le temps de chargement du modèle (15s) et l’export des fichiers audio wav).

Matériel utilisé :

- GeForce RTX 2080 GPU

- 1 double Intel Xeon Gold 6134 CPU @ 3.20GHz (le CPU est utilisé pour le chargement des fichiers de mixage et l'exportation des fichiers uniquement)

=Projets utilisant Spleeter=

Spleeter a trouvé une utilité dans différents projet. Comme par exemple :

- iZotope, dans leur fonctionnalité RX 8 qui permet de séparer la voix des musiques pour faire des acapellas.

- Steinberg, propose SpectralLayers 7, un outil pour modifier et traiter le spectre audio.

- Acon Digital, Acoustica 7 comme SpectralLayers 7 permettant de modifier le spectre audio.

- VirtualDJ utilise Spleeter dans leur outil d’isolation des pistes audio.

- Algoriddim, propose NeuralMix et djayPRO qui sont des outils pour séparer les pistes audio également.

On voit que Spleeter trouve son utilité dans des logiciels mais également pour des particuliers.

=Avantages et limites=

Spleeter est open-source, donc tout le monde peut le modifier en fonction de ce qu’il souhaite en faire. On peut entraîner ses propres modèles si par exemple on fait que du jazz et qu’on souhaite utiliser la bibliothèque que sur des musiques de jazz. Il est également gratuit et disponible pour tous. Il a un traitement des musiques qui est très rapide, ce qui permet d’avoir des résultats très vite, et il permet de séparer en plusieurs modes comme voix et instrument ou alors voix, basse, batterie et autres etc…

Cependant en point négatif on note quand même un très gros problème avec les droits d’auteurs. Car récupérer la piste de la voix ou d’un instrument ne fait pas de nous le propriétaire de celle-ci. Il y a également un manque de perfection dans la retranscription des pistes audio. Il est également nécessaire d’avoir des connaissances en programmation et notamment en python pour pouvoir prendre en main et apporter des modifications dans le projet.

=Démonstration=

Lien du Google Colab : https://colab.research.google.com/drive/1AHoE7BrXTaO2fNbFmiFe-oImh3qxSTCg?usp=sharing

=Références=

https://github.com/deezer/spleeter/

https://joss.theoj.org/papers/10.21105/joss.02154

https://rspsciencehub.com/pdf_11863_dde3b78d6792a240a229945d7c0727e7.html

https://ejhumphrey.com/assets/pdf/jansson2017singing.pdf

https://www.izotope.com/en/shop/rx-8-standard.html

https://new.steinberg.net/spectralayers/

https://acondigital.com/products/acoustica-audio-editor/

https://www.virtualdj.com/stems/

https://www.algoriddim.com/apps