Diffusion audio réduite Diffusion de forme d’onde ne nécessitant pas de calcul en nuage

Reduced audio diffusion. Cloudless waveform diffusion.

Généré avec Stable Diffusion

Exploration de la formation de modèles et de la génération de sons avec la diffusion de la forme d’onde audio sur un ordinateur portable grand public et un GPU avec moins de 2 Go de VRAM

Contexte

Les modèles de diffusion sont très en vogue actuellement, en particulier depuis que Stable Diffusion a fait sensation cet été. Depuis lors, d’innombrables variations et nouveaux modèles de diffusion ont été publiés dans divers contextes. Et bien que les visuels époustouflants aient volé la vedette, il y a eu un développement significatif de la diffusion liée à la musique générative.

Alimentée par la diffusion et d’autres méthodes, la musique générative a connu de nombreux succès récents, avec de nouveaux modèles publiés tout le temps. OpenAI a impressionné le monde avec les capacités de Jukebox lors de sa sortie en 2020. Mais Google a dit “Tiens mon modèle” lorsqu’il a produit le remarquable MusicLM en début d’année. Meta n’était pas loin derrière lorsqu’ils ont sorti et publié en open source MusicGen le mois dernier. Mais les grandes institutions ne sont pas les seules à participer, car des contributions très intéressantes ont également été apportées par des chercheurs indépendants tels que Riffusion (Forsgren & Martiros) et Moûsai (Schneider, et al.). En plus de ceux-ci, de nombreux autres modèles ont été publiés au cours des dernières années, chacun ayant ses avantages et ses inconvénients.

Les modèles de diffusion ont captivé tant de personnes en raison de leur remarquable capacité créative, quelque chose que de nombreux autres genres d’apprentissage automatique (ML) n’ont pas. La plupart des modèles de ML sont formés pour effectuer une tâche et leur succès peut être mesuré en termes de correct vs incorrect. Mais lorsque nous entrons dans le domaine de l’art et de la musique, comment un modèle peut-il être optimisé pour ce qui pourrait être considéré comme le meilleur ? Il pourrait bien sûr apprendre à reproduire des œuvres d’art ou de la musique célèbres, mais sans nouveauté, cela n’a aucun sens. Alors comment résoudre ce problème – injecter de la créativité dans une machine qui ne connaît que des 1 et des 0 ? La diffusion est une méthode qui offre une solution élégante à ce dilemme.

Diffusion – À 10 000 pieds

À la base, la diffusion en ML est simplement le processus d’ajout ou de suppression de bruit à un signal (pensez au bruit statique d’une vieille télévision). La diffusion avant ajoute du bruit à un signal et la diffusion inverse le supprime. Le processus avec lequel nous sommes le plus familiers est le processus de diffusion inverse, où le modèle prend du bruit, puis le “débruite” en quelque chose que les humains reconnaissent (art, musique, discours, etc.). Ce processus peut être manipulé de nombreuses manières pour servir différents objectifs.

La “créativité” dans la diffusion provient du bruit aléatoire qui déclenche le processus de débruitage. Si vous fournissez au modèle un point de départ différent à chaque fois pour débruiter en une forme d’art ou de musique, cela simule la créativité car les sorties seront toujours uniques.

Images générées avec Stable Diffusion

La méthode d’enseignement d’un modèle pour effectuer ce processus de débruitage peut être un peu contre-intuitive de prime abord. En réalité, le modèle apprend à débruiter un signal en faisant exactement le contraire – en ajoutant du bruit à un signal propre encore et encore jusqu’à ce qu’il ne reste plus que du bruit. L’idée est que si le modèle peut apprendre à prédire le bruit ajouté à un signal à chaque étape, alors il peut également prédire le bruit supprimé à chaque étape pour le processus inverse. L’élément critique pour rendre cela possible est que le bruit ajouté/supprimé doit être d’une distribution probabiliste définie (généralement gaussienne) de sorte que les étapes de bruitage/débruitage soient prévisibles et reproductibles.

Il y a beaucoup plus de détails qui entrent dans ce processus, mais cela devrait fournir une compréhension conceptuelle solide de ce qui se passe sous le capot. Si vous êtes intéressé à en savoir plus sur les modèles de diffusion (formulations mathématiques, planification, espace latent, etc.), je vous recommande de lire cet article de blog par AssemblyAI et ces documents (DDPM, Amélioration de DDPM, DDIM, Diffusion stable).

Diffusion audio minuscule

Compréhension de l’audio pour l’apprentissage automatique

Mon intérêt pour la diffusion découle du potentiel qu’elle a montré avec l’audio génératif. Traditionnellement, pour entraîner des algorithmes d’apprentissage automatique, l’audio était converti en spectrogramme, qui est essentiellement une carte de chaleur de l’énergie sonore au fil du temps. Cela était dû au fait qu’une représentation en spectrogramme était similaire à une image, avec laquelle les ordinateurs excellent, et c’était une réduction significative de la taille des données par rapport à une forme d’onde brute.

Exemple de spectrogramme d'un chanteur

Cependant, cette transformation comporte certains compromis, notamment une réduction de la résolution et une perte d’informations de phase. La phase d’un signal audio représente la position de plusieurs formes d’onde les unes par rapport aux autres. Cela peut être démontré par la différence entre une fonction sinus et une fonction cosinus. Elles représentent exactement le même signal en termes d’amplitude, la seule différence est un décalage de phase de 90° (π/2 radians) entre les deux. Pour une explication plus approfondie de la phase, consultez cette vidéo d’Akash Murthy.

Décalage de phase de 90° entre sin et cos

La phase est un concept perpétuellement difficile à saisir, même pour ceux qui travaillent dans l’audio, mais elle joue un rôle essentiel dans la création des qualités timbrales du son. Il va sans dire qu’elle ne devrait pas être jetée si facilement. Les informations de phase peuvent également être représentées techniquement sous forme de spectrogramme (la partie complexe de la transformation), tout comme l’amplitude. Cependant, le résultat est bruyant et semble visuellement aléatoire, ce qui rend difficile pour un modèle d’apprendre des informations utiles à partir de celui-ci. En raison de cet inconvénient, il y a eu un intérêt récent à s’abstenir de transformer l’audio en spectrogrammes et plutôt le laisser sous forme de forme d’onde brute pour former des modèles. Bien que cela présente ses propres défis, à la fois les informations d’amplitude et de phase sont contenues dans le signal unique d’une forme d’onde, ce qui offre à un modèle une image plus holistique du son à partir de laquelle apprendre.

Exemple de forme d'onde d'un chanteur

C’est un élément clé de mon intérêt pour la diffusion de forme d’onde, et cela a montré des résultats prometteurs pour l’audio génératif de haute qualité. Cependant, les formes d’onde sont des signaux très denses nécessitant une quantité importante de données pour représenter la gamme de fréquences que les humains peuvent entendre. Par exemple, la fréquence d’échantillonnage standard de l’industrie musicale est de 44,1 kHz, ce qui signifie que 44 100 échantillons sont nécessaires pour représenter seulement 1 seconde d’audio mono. Maintenant, doublez cela pour une lecture stéréo. En raison de cela, la plupart des modèles de diffusion de forme d’onde (qui n’utilisent pas la diffusion latente ou d’autres méthodes de compression) nécessitent une capacité GPU élevée (généralement au moins 16 Go de VRAM) pour stocker toutes les informations pendant l’entraînement.

Motivation

De nombreuses personnes n’ont pas accès à des GPU puissants et de grande capacité, ou ne veulent pas payer les frais de location de GPU cloud pour des projets personnels. Me trouvant dans cette position, mais voulant toujours explorer les modèles de diffusion de forme d’onde, j’ai décidé de développer un système de diffusion de forme d’onde qui pourrait fonctionner sur mon modeste matériel local.

Configuration matérielle

J’étais équipé d’un ordinateur portable HP Spectre de 2017 avec un processeur Intel Core i7 de 8e génération et une carte graphique GeForce MX150 avec 2 Go de VRAM – pas ce que l’on pourrait appeler une puissance pour l’entraînement de modèles d’apprentissage automatique. Mon objectif était de pouvoir créer un modèle capable de former et de produire des sorties stéréo de haute qualité (44,1 kHz) sur ce système.

Architecture du modèle

J’ai utilisé la bibliothèque audio-diffusion-pytorch d’Archinet pour construire ce modèle – merci à Flavio Schneider pour son aide dans l’utilisation de cette bibliothèque qu’il a largement développée.

Attention U-Net

L’architecture de base du modèle consiste en un U-Net avec des blocs d’attention, ce qui est standard pour les modèles de diffusion modernes. Un U-Net est un réseau neuronal qui a été initialement développé pour la segmentation d’images (2D) mais qui a été adapté à l’audio (1D) pour nos besoins avec la diffusion des formes d’ondes. L’architecture U-Net tire son nom de sa conception en forme de U.

U-Net (Source: U-Net: Convolutional Networks for Biomedical Image Segmentation (Ronneberger, et. al) )

Très similaire à un autoencodeur, composé d’un encodeur et d’un décodeur, un U-Net contient également des connexions de saut à chaque niveau du réseau. Ces connexions de saut sont des connexions directes entre les couches correspondantes de l’encodeur et du décodeur, facilitant le transfert de détails fins de l’encodeur au décodeur. L’encodeur est responsable de la capture des caractéristiques importantes du signal d’entrée, tandis que le décodeur est responsable de la génération du nouvel échantillon audio. L’encodeur réduit progressivement la résolution de l’audio d’entrée, extrayant des caractéristiques à différents niveaux d’abstraction. Le décodeur prend ensuite ces caractéristiques et les remet à l’échelle, augmentant progressivement la résolution pour générer l’échantillon audio final.

Attention U-Net (Source: Attention U-Net: Learning Where to Look for the Pancreas ( Oktay, et al.) )

Ce U-Net contient également des blocs d’auto-attention aux niveaux inférieurs qui aident à maintenir la cohérence temporelle de la sortie. Il est essentiel que l’audio soit suffisamment sous-échantillonné pour maintenir l’efficacité de l’échantillonnage pendant le processus de diffusion et éviter de surcharger les blocs d’attention. Le modèle utilise la V-Diffusion, qui est une technique de diffusion inspirée de l’échantillonnage DDIM.

Pour éviter de manquer de VRAM GPU, il fallait réduire la longueur des données sur lesquelles le modèle de base devait être entraîné. Pour cette raison, j’ai décidé d’entraîner des échantillons de batterie en une seule prise en raison de leur longueur de contexte intrinsèquement courte. Après de nombreuses itérations, la longueur du modèle de base a été fixée à 32 768 échantillons à 44,1 kHz en stéréo, ce qui correspond à environ 0,75 seconde. Cela peut sembler particulièrement court, mais c’est amplement suffisant pour la plupart des échantillons de batterie.

Transformations

Pour sous-échantillonner suffisamment l’audio pour les blocs d’attention, plusieurs transformations de prétraitement ont été testées. L’espoir était que si les données audio pouvaient être sous-échantillonnées sans perdre d’informations significatives avant d’entraîner le modèle, alors le nombre de nœuds (neurones) et de couches pourrait être maximisé sans augmenter la charge mémoire du GPU.

La première transformation tentée était une version du “patching”. Initialement proposé pour les images, ce processus a été adapté à l’audio pour nos besoins. L’échantillon audio d’entrée est regroupé par des pas de temps séquentiels en morceaux qui sont ensuite transposés en canaux. Ce processus peut ensuite être inversé à la sortie du U-Net pour rétablir la longueur complète de l’audio. Cependant, le processus de désassemblage a créé des problèmes d’aliasing, ce qui a entraîné des artefacts indésirables de haute fréquence dans l’audio généré.

La deuxième transformation tentée, proposée par Schneider, s’appelle une “Transformation apprise” qui consiste en des blocs de convolution simples avec de grandes tailles de noyaux et des pas au début et à la fin du U-Net. Plusieurs tailles de noyaux et pas ont été testées (16, 32, 64) associés à des variations de modèle correspondantes pour sous-échantillonner l’audio de manière appropriée. Cependant, cela a également entraîné des problèmes d’aliasing dans l’audio généré, bien que moins prévalents que la transformation de patching.

En raison de cela, j’ai décidé que l’architecture du modèle devrait être ajustée pour prendre en compte l’audio brut sans transformations de prétraitement afin de produire des sorties de qualité suffisante.

Cela a nécessité d’étendre le nombre de couches dans le U-Net afin d’éviter une sous-échantillonnage trop rapide et de perdre des fonctionnalités importantes en cours de route. Après plusieurs itérations, la meilleure architecture a abouti à une sous-échantillonnage de seulement 2 à chaque couche. Bien que cela ait nécessité une réduction du nombre de nœuds par couche, cela a finalement produit les meilleurs résultats. Des informations détaillées sur le nombre exact de niveaux, de couches, de nœuds, de fonctionnalités d’attention, etc. du U-Net peuvent être trouvées dans le fichier de configuration du référentiel tiny-audio-diffusion sur GitHub.

Conclusion

Modèles pré-entrainés

J’ai entrainé 4 modèles inconditionnels séparés pour produire des coups de pied, des caisses claires, des cymbales et des percussions (tous des sons de batterie). Les ensembles de données utilisés pour l’entrainement étaient de petits échantillons gratuits que j’avais collectés pour mes flux de production musicale (tous open-source). Des ensembles de données plus grands et plus variés amélioreraient la qualité et la diversité des sorties générées par chaque modèle. Les modèles ont été entraînés pendant un nombre variable d’étapes et d’époques en fonction de la taille de chaque ensemble de données.

Des modèles pré-entrainés sont disponibles en téléchargement sur Hugging Face . Consultez les progrès de l’entrainement et les échantillons de sortie enregistrés sur Weights & Biases .

Résultats

Dans l’ensemble, la qualité de la sortie est assez élevée malgré la taille réduite des modèles. Cependant, il reste encore un léger “souffle” de haute fréquence, probablement dû à la taille limitée du modèle. Cela peut être observé dans la faible quantité de bruit restant dans les formes d’onde ci-dessous. La plupart des échantillons générés sont nets, conservant les transitoires et les caractéristiques timbrales à large bande. Parfois, les modèles ajoutent du bruit supplémentaire vers la fin de l’échantillon, ce qui est probablement dû à la limite de couches et de nœuds du modèle.

Écoutez certains échantillons de sortie des modèles ici . Des exemples de sortie de chaque modèle sont montrés ci-dessous.

Discussion

En plus d’explorer les modèles de diffusion de formes d’onde sur mon matériel local, un objectif important de ce projet était de pouvoir partager cette même opportunité avec d’autres. Je voulais offrir un point d’entrée facile pour ceux qui ont des ressources limitées et qui souhaitent expérimenter avec la diffusion de formes d’onde audio. C’est pourquoi j’ai structuré le référentiel du projet pour offrir des instructions étape par étape sur la façon d’entrainer ou de peaufiner vos propres modèles ainsi que de générer de nouveaux échantillons à partir du notebook Inference.ipynb.

De plus, j’ai enregistré une vidéo tutoriel qui guide la configuration d’un environnement Anaconda et montre comment générer des échantillons uniques avec les modèles pré-entrainés.

Nous vivons une période passionnante pour l’audio génératif, en particulier avec la diffusion. J’ai appris énormément en construisant ce projet et j’ai renforcé mon optimisme quant à ce qui nous attend en matière d’IA audio. J’espère que ce projet pourra être utile à d’autres personnes souhaitant explorer le monde de l’IA audio.

Toutes les images, sauf indication contraire, sont de l’auteur.

Code tiny-audio-diffusion disponible ici : https://github.com/crlandsc/tiny-audio-diffusion

Vidéo tutoriel sur la configuration de votre environnement pour générer des échantillons avec tiny-audio-diffusion : https://youtu.be/m6Eh2srtTro

Je suis un scientifique du son spécialisé en IA/ML et en audio spatial ainsi qu’un musicien de longue date. Si vous êtes intéressé par d’autres applications d’IA audio, consultez mon article récent sur la démystification musicale .

Retrouvez-moi sur LinkedIn & GitHub et suivez mes travaux et mes recherches en cours ici : www.chrislandschoot.com

Retrouvez ma musique sur Spotify , Apple Music , YouTube , SoundCloud et d’autres plateformes de streaming en tant qu’After August .

We will continue to update IPGirl; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

AI

Aider les véhicules autonomes à prendre des décisions morales en abandonnant le dilemme du tramway

Les chercheurs de l'Université d'État de Caroline du Nord travaillent actuellement à collecter des données plus réali...

AI

Des informaticiens de l'UMass Amherst utilisent l'IA pour accélérer la vitesse de calcul de milliers de fois

Leur développement Scalene, un outil open-source pour accélérer considérablement le langage de programmation Python, ...

AI

Biais de l'IA Défis et Solutions

D'où provient le biais dans l'intelligence artificielle ? Une fois identifié, comment pouvons-nous le réduire ou l'él...

AI

Robot Booste la Recherche sur l'Énergie Solaire

Les scientifiques ont développé un nouveau robot pour faire avancer la découverte de matériaux semi-conducteurs.

AI

La structure la plus résistante connue découverte par le laboratoire de robotique autonome

Le laboratoire de recherche autonome expérimentale bayésienne en robotique de l'Université de Toronto au Canada a déc...

AI

La NASA détecte un signal de Voyager 2 après avoir perdu le contact en raison d'une commande incorrecte.

La National Aeronautics and Space Administration des États-Unis a détecté un signal de la sonde Voyager 2 plus d'une ...