StyleTTS2 - conversion texte-parole basée sur la diffusion de style et l’apprentissage antagoniste avec de grands SLM
(github.com/yl4579)- StyleTTS2 est un modèle de conversion texte-parole visant une synthèse TTS de niveau humain en exploitant la diffusion de style et l’apprentissage antagoniste basé sur de grands speech language models (SLM)
- Il modélise le style comme une variable aléatoire latente d’un diffusion model afin de générer un style adapté au texte sans parole de référence, et utilise une latent diffusion efficace tirant parti des diverses capacités de synthèse vocale du diffusion model
- Il emploie un grand SLM préentraîné comme WavLM comme discriminateur, et applique une modélisation différentiable de la durée pour permettre un apprentissage end-to-end et améliorer le naturel de la voix
- Sur le jeu de données mono-locuteur LJSpeech, il a surpassé les enregistrements humains selon l’évaluation de locuteurs natifs anglais ; sur le jeu de données multi-locuteurs VCTK, il a atteint le niveau des enregistrements humains ; le modèle entraîné sur LibriTTS affiche de meilleures performances que les modèles publics existants en adaptation zero-shot à un locuteur
- Le workflow d’entraînement et d’inférence couvre LJSpeech en mono-locuteur, VCTK et LibriTTS en multi-locuteurs, ainsi que le fine-tuning de nouveaux locuteurs à partir d’un modèle multi-locuteurs préentraîné
- L’entraînement de la première étape utilise
accelerate launch train_first.py --config_path ./Configs/config.yml, et celui de la deuxième étape utilisepython train_second.py --config_path ./Configs/config.yml - La version DDP de
train_second.pyne fonctionne pas, DP est donc actuellement utilisé, et le script de fine-tuning présente lui aussi des conditions où DDP ne fonctionne pas
- L’entraînement de la première étape utilise
- Les principales conditions d’exécution sont Python >= 3.7, l’installation de
requirements.txt, l’installation dephonemizeretespeak-ngpour exécuter la démo, ainsi que le suréchantillonnage des données LJSpeech en 24 kHz - Les modules préentraînés se composent d’un ASR pour l’alignement du texte, de JDC pour l’extracteur de hauteur, et de PL-BERT
- L’aligneur ASR est préentraîné sur les corpus anglais (LibriTTS), japonais (JVS) et chinois (AiShell)
- L’extracteur de hauteur JDC est préentraîné uniquement sur le corpus anglais (LibriTTS)
- PL-BERT est préentraîné uniquement sur le corpus anglais (Wikipedia), donc un PL-BERT pour la langue concernée est nécessaire pour les autres langues ; le PL-BERT multilingue prend en charge 14 langues
- L’inférence est fournie via
Inference_LJSpeech.ipynbpour le mono-locuteur etInference_LibriTTS.ipynbpour le multi-locuteurs, et les modèles préentraînés LJSpeech et LibriTTS peuvent être téléchargés depuis Hugging Face - La licence du code est la MIT License, et l’utilisation des modèles préentraînés est soumise à la condition d’informer l’auditeur qu’il s’agit d’une voix synthétique, ou de ne synthétiser publiquement que des voix de locuteurs pour lesquelles vous disposez des droits d’usage
1 commentaires
Commentaires sur Hacker News
J’ai créé un chatbot vocal 100 % local avec des briques open source comme StyleTTS2, Whisper et OpenHermes2-Mistral-7B, et il répond bien plus vite que ChatGPT
Au lieu d’une interaction rigide façon Siri comme avec d’autres assistants vocaux, on peut échanger d’une manière plus proche d’une vraie conversation, ce qui est assez amusant
Sur un PC gaming Windows avec un GPU Nvidia de 12 Go, et d’après les tests sur une 3060 12 Go, on peut l’installer d’un seul coup et discuter sans avoir à toucher à Python ou CUDA : https://apps.microsoft.com/detail/9NC624PBFGB7
La démo a encore des aspects bruts, comme le fait qu’il faille un casque et qu’elle se lance comme une application console, mais cela donne l’impression d’anticiper ce qui sera bientôt possible sur un PC gaming grand public avec une simple combinaison d’outils open source, et plusieurs modèles améliorés n’y sont pas encore intégrés
En particulier, j’aimerais qu’il soit possible, comme dans une conversation normale, de couper la parole et d’intervenir : par exemple interrompre l’autre s’il parle trop longtemps, ou que l’IA ponctue brièvement pendant que je parle
Si la vitesse devient supérieure au temps réel, on pourrait théoriquement commencer à ajouter ce genre de fonctions, et pour une conversation totalement naturelle, il semble aussi nécessaire d’avoir une conscience du contexte permettant à l’IA de voir le visage et les gestes pour juger si quelqu’un parle longuement
Même sur une EVGA 3080Ti 12 Go, la latence était assez importante, et il semblait retraiter plusieurs fois la même entrée après une seule prise de parole, en répétant des résultats de reconnaissance légèrement différents
Au final, il y avait aussi un problème où il entendait sa propre voix et se répondait à lui-même
J’ai testé StyleTTS2 le mois dernier et j’ai rassemblé des notes étape par étape qui pourraient aider les personnes voulant l’installer en local : https://llm-tracker.info/books/howto-guides/page/styletts-2
J’ai aussi comparé rapidement la vitesse et la qualité avec VITS et XTTS sur le modèle LJSpeech, et StyleTTS2 était plutôt bon et très rapide : https://fediverse.randomfoo.net/notice/AaOgprU715gcT5GrZ2
Je me demande si des fonctions équivalentes à l’infill ou à l’outpainting sont aussi possibles, et une synthèse vocale ultra-rapide de cette qualité pourrait avoir de nombreux usages, surtout dans le développement de jeux indépendants ou expérimentaux
L’ancre
#mambaforgedu lien ne fonctionnait pas non plusLa documentation est assez lacunaire, donc la mise en place a été un peu fastidieuse, mais au bout d’environ 20 minutes ça fonctionnait bien sur WSL Ubuntu 22.04
La qualité audio est excellente, bien meilleure que celle des autres projets open source de synthèse vocale que j’ai vus, et avec une GPU 4090 c’est extrêmement rapide
Je ne sais pas encore si ça atteint la qualité d’ElevenLabs, mais l’intérêt d’ElevenLabs tient au fait que sa grande bibliothèque de voix de haute qualité est facile à parcourir et à choisir. Dans cette bibliothèque, je n’ai pas encore trouvé comment sélectionner autre chose que la voix féminine par défaut
Le vrai point fort d’ElevenLabs, c’est le clonage de voix presque instantané à partir d’un simple échantillon de 5 minutes ; c’est bluffant, et même un peu inquiétant tant ça marche bien. J’espère que cette fonction deviendra possible en open source complet. Les services API sont trop chers pour beaucoup d’usages, et même OpenAI, relativement abordable, coûte environ 10 centimes pour générer quelques milliers de mots
/Demoet ouvrezInference_LJSpeech.ipynbouInference_LibriTTS.ipynb, cela devrait fonctionnerLa synthèse vocale se charge de l’intonation et de la prononciation, et RVC de la texture de la voix ; en combinant StyleTTS avec ce pipeline, on pourrait peut-être se rapprocher d’ElevenLabs
La synthèse de courts extraits audio est un problème à peu près résolu dans le monde de la synthèse vocale, mais dès qu’on essaie de produire des livres audio en text-to-speech, tout commence à s’effondrer
Fait amusant, les exemples de TTS2 sonnent mieux que les vrais enregistrements de référence https://styletts2.github.io/
Par exemple, dans l’exemple « Then leaving the corpse within the house [...] », l’audio de référence prononce
housed’une façon étrange, avec une intonation montante, alors que la version TTS2 paraît plus naturelleJ’aimerais utiliser ça sur divers fichiers ePub, comme des light novels japonais sans livre audio. Pour l’instant, j’utilise le TTS de Moon+ Reader sur Android, mais ça sonne assez robotique
En 2023, il n’y a aucun moyen de battre ça
Cela dit, le résultat est impressionnant, et supérieur à toutes les autres synthèses vocales
Le titre actuel sur HN est « StyleTTS2 – open-source Eleven Labs quality Text To Speech », mais le titre d’origine n’inclut pas de nom de produit spécifique, et l’article arXiv lié n’évoque pas non plus ElevenLabs
Il me semblait que ce genre de réécriture de titre était déconseillé
Si un système open source approche cette qualité, c’est forcément très notable, donc j’imagine que la plupart des gens apprécieront la comparaison. C’est d’ailleurs cette comparaison qui a attiré mon attention
Pour ceux qui ont réussi à l’utiliser, je me demande si ce clonage de voix est vraiment à la hauteur, parce que ça n’a rien à voir avec XTTSv2, et c’est encore moins au niveau d’ElevenLabs
Il ne semble pas vraiment se soucier de l’intonation, et se contente de reproduire assez correctement la hauteur et le rythme
J’ai essayé de modifier
alpha,beta,embedding scaleetdiffusion stepsde plusieurs façons ; je reconnais que c’est rapide et que la qualité sonore est correcte, mais le clonage de voix, lui, ne fonctionne pas du tout correctementXTTS a probablement aussi été entraîné sur plus de 20 langues et des millions de locuteurs
Si on a vu des millions de voix, il y en aura forcément parmi elles qui ressembleront à la vôtre ; au fond, tout se joue dans les données d’entraînement. Mais réunir et entraîner sur des données d’une telle ampleur est extrêmement difficile
alphaetbeta, et essayé plusieurs extraits audio, mais j’ai eu exactement le même résultatLa qualité est vraiment absurdement bonne, à un niveau qui était presque inimaginable au début des années 2000
Il y a des possibilités intéressantes pour le jeu vidéo, avec des LLM qui jouent des personnages et ce genre de synthèse vocale qui donne une voix aux PNJ
Aujourd’hui, les simulateurs de golf ont des oiseaux qui chantent, de l’herbe qui bouge et un gameplay réaliste, mais il n’y a absolument aucun humain, ce qui leur donne une légère ambiance post-apocalyptique
C’est très différent des petites piques plaisantes d’un vrai parcours ou du bruit du public lors d’un grand tournoi, donc l’ajout de bavardages basés sur des LLM semble idéal
Je viens d’essayer rapidement le notebook Colab, et la qualité semble très bonne ; il prend aussi en charge le clonage vocal
J’aimerais l’essayer, mais je commence vraiment à en avoir assez de devoir créer un
venvà chaque fois juste pour installer des dépendances torchJe me demande comment les autres gèrent ça. S’il existe un moyen simple pour que plusieurs
venvpartagent un environnement torch commun — je sais qu’on peut le faire manuellement, mais je voudrais savoir s’il existe des outils pour aiderLe flux de travail consiste à lancer
nix flake init -t github:dialohq/flake-templates#python, puis à entrer avecnix develop -c $SHELL, et à exécuterpoetry installetpoetry activatedepuis le hook de shell de l’environnement de développement nixJe me demande s’il y aura un jour une sorte de place de marché LoRA pour les modèles de synthèse vocale, comme Civitai
https://github.com/microsoft/LoRA