Parler-TTS est un modèle léger de synthèse vocale (TTS) qui peut générer une parole naturelle de haute qualité dans le style d'un locuteur donné (sexe, hauteur, style de parole, etc.). Il s'agit d'une reproduction d'un travail de l'article Natural Language Guidage of High-Fidelity Text-to-Speech with Synthetic Annotations de Dan Lyth et Simon King, respectivement de Stability AI et de l'Université d'Édimbourg.
Contrairement aux autres modèles TTS, Parler-TTS est une version entièrement open source . Tous les ensembles de données, prétraitements, codes de formation et poids sont rendus publics sous licence permissive, permettant à la communauté de s'appuyer sur notre travail et de développer ses propres modèles TTS puissants.
Ce référentiel contient le code d'inférence et de formation pour Parler-TTS. Il est conçu pour accompagner le référentiel Data-Speech pour l'annotation des ensembles de données.
Important
08/08/2024 : Nous sommes fiers de publier deux nouveaux points de contrôle Parler-TTS :
Ces points de contrôle ont été formés sur 45 000 heures de données de livres audio.
De plus, le code est optimisé pour une génération beaucoup plus rapide : nous avons ajouté la compatibilité SDPA et Flash Attention 2, ainsi que la possibilité de compiler le modèle.
Parler-TTS a des dépendances légères et peut être installé sur une seule ligne :
pip install git+https://github.com/huggingface/parler-tts.git
Les utilisateurs d'Apple Silicon devront exécuter une commande de suivi pour utiliser la version nocturne de PyTorch (2.4) pour la prise en charge de bfloat16 :
pip3 install --pre torch torchaudio --index-url https://download.pytorch.org/whl/nightly/cpu
Conseil
Vous pouvez l’essayer directement dans une démo interactive ici !
Utiliser Parler-TTS est aussi simple que "bonjour". Installez simplement la bibliothèque une fois :
pip install git+https://github.com/huggingface/parler-tts.git
Parler-TTS a été formé pour générer de la parole avec des fonctionnalités qui peuvent être contrôlées avec une simple invite textuelle, par exemple :
import torch
from parler_tts import ParlerTTSForConditionalGeneration
from transformers import AutoTokenizer
import soundfile as sf
device = "cuda:0" if torch . cuda . is_available () else "cpu"
model = ParlerTTSForConditionalGeneration . from_pretrained ( "parler-tts/parler-tts-mini-v1" ). to ( device )
tokenizer = AutoTokenizer . from_pretrained ( "parler-tts/parler-tts-mini-v1" )
prompt = "Hey, how are you doing today?"
description = "A female speaker delivers a slightly expressive and animated speech with a moderate speed and pitch. The recording is of very high quality, with the speaker's voice sounding clear and very close up."
input_ids = tokenizer ( description , return_tensors = "pt" ). input_ids . to ( device )
prompt_input_ids = tokenizer ( prompt , return_tensors = "pt" ). input_ids . to ( device )
generation = model . generate ( input_ids = input_ids , prompt_input_ids = prompt_input_ids )
audio_arr = generation . cpu (). numpy (). squeeze ()
sf . write ( "parler_tts_out.wav" , audio_arr , model . config . sampling_rate )
Pour garantir la cohérence des locuteurs d’une génération à l’autre, ce point de contrôle a également été formé sur 34 locuteurs, caractérisés par leur nom. La liste complète des conférenciers disponibles comprend : Laura, Gary, Jon, Lea, Karen, Rick, Brenda, David, Eileen, Jordan, Mike, Yann, Joy, James, Eric, Lauren, Rose, Will, Jason, Aaron, Naomie, Alisa, Patrick, Jerry, Tina, Jenna, Bill, Tom, Carol, Barbara, Rebecca, Anna, Bruce, Emily.
Pour en profiter, adaptez simplement votre texte de description en précisant quel haut-parleur utiliser : Jon's voice is monotone yet slightly fast in delivery, with a very close recording that almost has no background noise.
Vous pouvez remplacer « Jon » par l'un des noms de la liste ci-dessus pour utiliser différentes caractéristiques des locuteurs. Chaque enceinte possède des qualités vocales uniques qui peuvent être exploitées pour répondre à vos besoins spécifiques. Pour des informations plus détaillées sur les performances des locuteurs avec cohérence vocale, veuillez vous référer au guide d'inférence.
import torch
from parler_tts import ParlerTTSForConditionalGeneration
from transformers import AutoTokenizer
import soundfile as sf
device = "cuda:0" if torch . cuda . is_available () else "cpu"
model = ParlerTTSForConditionalGeneration . from_pretrained ( "parler-tts/parler-tts-mini-v1" ). to ( device )
tokenizer = AutoTokenizer . from_pretrained ( "parler-tts/parler-tts-mini-v1" )
prompt = "Hey, how are you doing today?"
description = "Jon's voice is monotone yet slightly fast in delivery, with a very close recording that almost has no background noise."
input_ids = tokenizer ( description , return_tensors = "pt" ). input_ids . to ( device )
prompt_input_ids = tokenizer ( prompt , return_tensors = "pt" ). input_ids . to ( device )
generation = model . generate ( input_ids = input_ids , prompt_input_ids = prompt_input_ids )
audio_arr = generation . cpu (). numpy (). squeeze ()
sf . write ( "parler_tts_out.wav" , audio_arr , model . config . sampling_rate )
Conseils :
Nous avons mis en place un guide d'inférence pour accélérer la génération. Pensez SDPA, torch.compile et streaming !
Le dossier de formation contient toutes les informations nécessaires pour entraîner ou affiner votre propre modèle Parler-TTS. Il se compose de :
Important
TL;DR : Après avoir suivi les étapes d'installation, vous pouvez reproduire la recette de formation Parler-TTS Mini v1 avec la ligne de commande suivante :
accelerate launch ./training/run_parler_tts_training.py ./helpers/training_configs/starting_point_v1.json
Important
Vous pouvez également suivre ce guide de mise au point sur un exemple d'ensemble de données mono-haut-parleur.
Cette bibliothèque s'appuie sur un certain nombre de géants de l'open source, à qui nous souhaitons adresser nos plus chaleureux remerciements pour avoir fourni ces outils !
Un merci spécial à :
Si vous avez trouvé ce référentiel utile, pensez à citer ce travail ainsi que l'article original de Stability AI :
@misc{lacombe-etal-2024-parler-tts,
author = {Yoach Lacombe and Vaibhav Srivastav and Sanchit Gandhi},
title = {Parler-TTS},
year = {2024},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/huggingface/parler-tts}}
}
@misc{lyth2024natural,
title={Natural language guidance of high-fidelity text-to-speech with synthetic annotations},
author={Dan Lyth and Simon King},
year={2024},
eprint={2402.01912},
archivePrefix={arXiv},
primaryClass={cs.SD}
}
Les contributions sont les bienvenues, car le projet offre de nombreuses possibilités d'amélioration et d'exploration.
Nous recherchons notamment des moyens d'améliorer à la fois la qualité et la rapidité :