3 points par GN⁺ 2023-11-20 | 1 commentaires | Partager sur WhatsApp
  • 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 utilise python train_second.py --config_path ./Configs/config.yml
    • La version DDP de train_second.py ne fonctionne pas, DP est donc actuellement utilisé, et le script de fine-tuning présente lui aussi des conditions où DDP ne fonctionne pas
  • Les principales conditions d’exécution sont Python >= 3.7, l’installation de requirements.txt, l’installation de phonemizer et espeak-ng pour 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.ipynb pour le mono-locuteur et Inference_LibriTTS.ipynb pour 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

 
GN⁺ 2023-11-20
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

    • Je me demande à quel point il semble difficile de faire en sorte qu’un chatbot converse naturellement
      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
    • Je l’ai lancé, mais cela semble ne fonctionner qu’avec CUDA 11, et comme je suis déjà en environnement CUDA 12, je n’ai pas l’intention de casser ma configuration CUDA juste pour tester
    • Les résultats de test ont été mitigés : une installation sur un disque autre que C:\ a provoqué des erreurs, et une fois déplacé sur C:, cela a fonctionné correctement
      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
    • Je me demande si 12 Go est la configuration minimale. Avec 8 Go, j’ai eu une erreur de mémoire insuffisante
    • Whisper ne prend pas en charge le streaming en entrée, donc j’imagine que la transcription ne peut être déclenchée qu’une fois la réponse complète du LLM terminée
  • 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

    • Une inférence 15 à 95 fois plus rapide que le temps réel sur une 4090, c’est énorme
      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
    • Je suis en train de suivre le guide, mais à moins d’être déjà utilisateur, mamba n’est plus recommandé
      L’ancre #mambaforge du lien ne fonctionnait pas non plus
  • La 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

    • Voici la procédure d’installation testée sur Ubuntu 22.04. Les liens de téléchargement Google Drive peuvent être bloqués pendant 24 heures s’il y a trop de téléchargements, mais si vous attendez un peu, ça devrait remarcher
      git clone https://github.com/yl4579/StyleTTS2.git  
      cd StyleTTS2  
      python3 -m venv venv  
      source venv/bin/activate  
      python3 -m pip install --upgrade pip  
      python3 -m pip install wheel  
      pip install -r requirements.txt  
      pip install phonemizer  
      sudo apt-get install -y espeak-ng  
      pip install gdown  
      gdown https://drive.google.com/uc?id=1K3jt1JEbtohBLUA0X75KLw36TW7U1yxq  
      7z x Models.zip  
      rm Models.zip  
      gdown https://drive.google.com/uc?id=1jK_VV3TnGM9dkrIMsdQ_upov8FrIymr7  
      7z x Models.zip  
      rm Models.zip  
      pip install ipykernel pickleshare nltk SoundFile  
      python -c "import nltk; nltk.download('punkt')"  
      pip install --upgrade jupyter ipywidgets librosa  
      python -m ipykernel install --user --name=venv --display-name="Python (venv)"  
      jupyter notebook  
      
      Ensuite, allez dans /Demo et ouvrez Inference_LJSpeech.ipynb ou Inference_LibriTTS.ipynb, cela devrait fonctionner
    • Pour le clonage de style, j’ai déjà vu une approche qui consiste à “renforcer” la sortie via un pipeline RVC après une synthèse vocale affinée pour la haute qualité
      La 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 démo LibriTTS clone la voix d’un locuteur jamais vu à partir d’un clip d’environ 5 secondes
    • Je me demande si quelqu’un a testé de longues élocutions à la fois avec ElevenLabs et StyleTTS
      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 house d’une façon étrange, avec une intonation montante, alors que la version TTS2 paraît plus naturelle
    J’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

    • Ma première épouse est comédienne voix professionnelle, et elle a vu quelqu’un laisser une mauvaise critique disant « manifestement de l’IA »
      En 2023, il n’y a aucun moyen de battre ça
    • Le rythme est meilleur, mais personnellement je trouve qu’il y a encore un timbre métallique assez net, donc ça reste inférieur à une vraie voix
      Cela dit, le résultat est impressionnant, et supérieur à toutes les autres synthèses vocales
    • Je me demande comment vous comptez l’intégrer aux ePub. J’ai un cas d’usage similaire et j’aimerais exploiter ce genre de chose pour des livres électroniques
  • 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é

    • ElevenLabs est la référence de la synthèse vocale, et rien n’est encore meilleur
      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
    • C’est un titre édité, et en plus exagéré. Cela dit, après avoir essayé StyleTTS2 moi-même, c’est de très loin la meilleure synthèse vocale open source, donc ça mérite largement de rester un moment en haut de HN
    • Oui, c’est bien une violation des guidelines. En voyant le titre, j’ai cru qu’il s’agissait d’un projet GitHub quelconque et non d’un nouvel article de recherche
  • 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 scale et diffusion steps de 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 correctement

    • ElevenLabs repose sur Tortoise-TTS et a déjà été préentraîné sur des millions d’heures de données, alors que ce modèle n’a été entraîné que sur LibriTTS, soit 500 heures au mieux
      XTTS 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
    • Si vous regardez la conclusion du papier, ils reconnaissent que le clonage de voix n’est pas encore très bon
    • J’ai beaucoup expérimenté avec alpha et beta, et essayé plusieurs extraits audio, mais j’ai eu exactement le même résultat
  • La 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

    • Cela a une grande importance dans un domaine qui m’intéresse, celui des simulateurs de golf
      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’ai parcouru le README, mais je me demande quelles sont les exigences matérielles minimales pour l’exécuter. Je ne sais pas si ça risque de faire exploser le CPU ou le disque dur
    • J’ai regardé rapidement sur GitHub sans trouver l’info, et je me demande combien de temps il faut pour affiner le modèle sur une voix particulière
  • 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 torch
    Je me demande comment les autres gèrent ça. S’il existe un moyen simple pour que plusieurs venv partagent un environnement torch commun — je sais qu’on peut le faire manuellement, mais je voudrais savoir s’il existe des outils pour aider

    • Pour configurer les environnements Python, j’utilise nix : je m’en sers pour gérer la version de Python, poetry, et parfois des paquets difficiles à installer avec poetry, puis je laisse poetry gérer le reste
      Le flux de travail consiste à lancer nix flake init -t github:dialohq/flake-templates#python, puis à entrer avec nix develop -c $SHELL, et à exécuter poetry install et poetry activate depuis le hook de shell de l’environnement de développement nix
    • En général, j’essaie d’utiliser Docker pour ce genre de choses, mais la difficulté à identifier les dépendances est aussi la principale raison pour laquelle je finis par passer mon tour sur ce type de projet
    • Je ressens souvent le même problème. J’ai envisagé d’utiliser des conteneurs de développement Docker et de créer une image de base pour les dépendances communes, puis de personnaliser chaque nouveau projet avec un Dockerfile, mais je ne sais pas s’il existe une meilleure alternative
    • Pareil pour moi. J’utilise conda et j’envisage carrément d’installer PyTorch dans mon environnement conda par défaut
    • Si ça commence vraiment à devenir pénible, on pourrait se dire qu’un LLM devrait pouvoir s’en charger à notre place, comme Copilot
  • Je 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