
Gradation
Implémentation (Pytorch) du vocoder à forte vague à haute fidélité de Google Brain (papier). Première implémentation sur GitHub avec une génération de haute qualité pour les 6-itations.
Statut
Facteur en temps réel (RTF)
Nombre de paramètres : 15.810.401
| Modèle | Écurie | RTX 2080 TI | Tesla K80 | Intel Xeon 2,3 GHz * |
|---|
| 1000 itérations | + | 9.59 | - | - |
| 100 itérations | + | 0,94 | 5.85 | - |
| 50 itérations | + | 0,45 | 2.92 | - |
| 25 itérations | + | 0,22 | 1.45 | - |
| 12 itérations | + | 0.10 | 0,69 | 4.55 |
| 6 itérations | + | 0,04 | 0,33 | 2.09 |
* Remarque : Utilisé une ancienne version du processeur Intel Xeon.
À propos
Wavegrad est un modèle conditionnel pour la génération de formes d'onde en estimant les gradients de la densité de données avec la qualité d'échantillonnage de Wavenet-Simemar. Ce vocodeur n'est ni GaN, ni ne normalisant le flux, ni le modèle autorégressif classique . Le concept principal de Vocoder est basé sur les modèles probabilistes de diffusion de débroussage (DDPM), qui utilisent la dynamique Langevin et les cadres de correspondance des scores . De plus, par rapport au DDPM classique, Wavegrad réalise une convergence super-rapide (6 itérations et probablement plus bas) schéma d'échantillonnage itératif de la dynamique de la dynamique de Langevin.
Installation
- Cloner ce repo:
git clone https://github.com/ivanvovk/WaveGrad.git
cd WaveGrad
- Installation des exigences:
pip install -r requirements.txt
Entraînement
1 Préparation des données
- Faites du train et testez des files d'attente de vos données audio comme celles incluses dans le dossier
filelists . - Faire un fichier de configuration * dans le dossier
configs .
* Remarque: si vous allez changer hop_length pour STFT, assurez-vous que le produit de vos factors mise à l'échantillonnage dans la configuration est égal à votre nouveau hop_length .
2 formation GPU unique et distribuée
- Ouvrez le script
runs/train.sh et spécifiez les périphériques GPU visibles et le chemin du chemin vers votre fichier de configuration. Si vous spécifiez plus d'un GPU, la formation fonctionnera en mode distribué. - Run
sh runs/train.sh
3 Tensorboard et journalisation
Pour suivre votre processus de formation, exécutez Tensorboard par tensorboard --logdir=logs/YOUR_LOGDIR_FOLDER . Toutes les informations de journalisation et points de contrôle seront stockées dans logs/YOUR_LOGDIR_FOLDER . logdir est spécifié dans le fichier config.
4 Recherche de grille de calendrier de bruit
Une fois le modèle formé, la recherche de grille de la meilleure calendrier * pour un nombre nécessaire d'itérations dans notebooks/inference.ipynb . Le code prend en charge le parallélisme, vous pouvez donc spécifier plus d'un nombre d'emplois pour accélérer la recherche.
* Remarque : la recherche de grille est nécessaire juste pour un petit nombre d'itérations (comme 6 ou 7). Pour un nombre plus grand, essayez simplement Fibonacci Sequence benchmark.fibonacci(...) Initialisation: je l'ai utilisé pour 25 itération et cela fonctionne bien. À partir du bon programme de 25 itération, par exemple, vous pouvez créer un calendrier d'ordre supérieur en copiant des éléments.
Horaires de bruit pour le modèle pré-entraîné
- Le calendrier d'itultivants 6 a été obtenu à l'aide de la recherche de grille. Après, sur la base du schéma obtenu, à la main, j'ai trouvé une approximation légèrement meilleure.
- Le calendrier d'itultives de 7 a été obtenu de la même manière.
- Le calendrier de 12-itations a été obtenu de la même manière.
- Le calendrier de 25-itération a été obtenu en utilisant
benchmark.fibonacci(...) . - Le calendrier de 50-itations a été obtenu en répétant des éléments à partir du schéma de 25 itations.
- Le calendrier de 100 itations a été obtenu de la même manière.
- Un calendrier d'itultives de 1000 a été obtenu de la même manière.
Inférence
CLI
Mettez vos spectrogrammes de MEL dans un dossier. Faire une fileste. Ensuite, exécutez cette commande avec vos propres arguments:
sh runs/inference.sh -c < your-config > -ch < your-checkpoint > -ns < your-noise-schedule > -m < your-mel-filelist > -v " yes "
Cahier de jupyter
Plus de détails d'inférence sont fournis dans notebooks/inference.ipynb . Là, vous pouvez également trouver comment définir un calendrier de bruit pour le modèle et faire de la recherche de grille pour le meilleur schéma.
Autre
Audios générés
Des exemples d'audios générés sont fournis dans le dossier generated_samples . La dégradation de la qualité entre les inférences de 1000 it iteration et 6-itation n'est pas perceptible si elle est trouvée le meilleur calendrier pour ce dernier.
Points de contrôle pré-entraînés
Vous pouvez trouver un fichier de point de contrôle pré-entraîné * sur LJSpeech (22KHz) via ce lien Google Drive.
* Remarque : le point de contrôle téléchargé est un dict avec un seul 'model' de clé.
Détails, problèmes et commentaires importants
- Pendant la formation, WaveGrad utilise un calendrier de bruit par défaut avec 1000 itérations et des bêtas à l'échelle linéaire de la plage (1E-6, 0,01). Pour l'inférence, vous pouvez définir un autre calendrier avec moins d'itérations. Assurez-vous attentivement les bêtas, la qualité de sortie en dépend vraiment fortement.
- Par défaut, le modèle s'exécute de manière mixte. La taille du lot est modifiée par rapport à l'article (256 -> 96) car les auteurs ont formé leur modèle sur TPU.
- Après ~ 10k Itérations d'entraînement (1-2 heures) sur un seul GPU, le modèle effectue une bonne génération pour une inférence à 50 itations. Le temps de formation total est d'environ 1 à 2 jours (pour la convergence absolue).
- À un moment donné, la formation peut commencer à se comporter bizarre et folle (la perte explose), j'ai donc introduit la planification du taux d'apprentissage (LR) et l'écrasement du gradient. Si la perte explose pour vos données, essayez un peu de réduire le planificateur LR Gamma. Cela devrait aider.
- Par défaut, la longueur de houblon de votre STFT est égale de 300 (donc facteur total d'échantillonnage). D'autres cas ne sont pas testés, mais vous pouvez essayer. N'oubliez pas que ce facteur d'échantillonnage total doit être toujours égal à votre nouvelle longueur de houblon.
Historique des mises à jour
- ( Nouveau : 24/10/2020) Énorme mise à jour. Formation distribuée et support de précision mixte. Encodage positionnel plus correct. Support CLI pour l'inférence. Recherche parallèle de la grille. La taille du modèle a considérablement diminué.
- Nouvelles informations RTF pour la carte GPU Nvidia Tesla K80 (populaire dans Google Colab Service) et CPU Intel Xeon 2.3GHz.
- Énorme mise à jour. Nouvel exemple de 6-itération bien généré. Nouvelle API de réglage du calendrier de bruit. Ajout du meilleur code de recherche de grille de calendrier.
- Amélioration de la formation en introduisant le planificateur de taux d'apprentissage plus intelligent. A obtenu une synthèse à haute fidélité.
- Formation stable et inférence multi-itation. La planification du bruit à 6 i-itation est prise en charge.
- Formation stable et inférence à itération fixe avec le bruit statique de fond significatif. Tous les problèmes d'encodage de position sont résolus.
- Formation stable de modèles d'itération fixe de 25, 50 et 1000. N'a trouvé aucune mise à l'échelle linéaire (c = 5000 à partir du papier) de codage positionnel (bug).
- Formation stable de modèles d'itération fixe de 25, 50 et 1000. Codage de position de positionnel fixe. L'échantillonnage du segment parallèle est remplacé par un échantillonnage complet.
- ( Libération, d'abord sur github ). Échantillonnage du segment parallèle et codage de position de position brisé. Mauvaise qualité avec des clics de la concaténation de la génération de segments parallèles.
Références
- Nanxin Chen et al., Wavegrad: estimation des gradients pour la génération de forme d'onde
- Jonathan Ho et al., Denoising Diffusion Probabilistic Models
- Débrassement des modèles probabilistes de diffusion du dénoçage (implémentation de Tensorflow), à partir de laquelle des calculs de diffusion ont été adoptés