Parler-TTS es un modelo ligero de conversión de texto a voz (TTS) que puede generar voz de alta calidad y con sonido natural en el estilo de un hablante determinado (género, tono, estilo de habla, etc.). Es una reproducción del trabajo del artículo Guía del lenguaje natural de conversión de texto a voz de alta fidelidad con anotaciones sintéticas de Dan Lyth y Simon King, de Stability AI y la Universidad de Edimburgo, respectivamente.
A diferencia de otros modelos TTS, Parler-TTS es una versión totalmente de código abierto . Todos los conjuntos de datos, el preprocesamiento, el código de entrenamiento y los pesos se publican bajo una licencia permisiva, lo que permite a la comunidad aprovechar nuestro trabajo y desarrollar sus propios modelos TTS potentes.
Este repositorio contiene el código de inferencia y entrenamiento para Parler-TTS. Está diseñado para acompañar al repositorio Data-Speech para la anotación de conjuntos de datos.
Importante
08/08/2024: Estamos orgullosos de lanzar dos nuevos puntos de control Parler-TTS:
Estos puntos de control han sido entrenados con 45.000 horas de datos de audiolibros.
Además, el código está optimizado para una generación mucho más rápida: hemos agregado compatibilidad con SDPA y Flash Attention 2, así como la capacidad de compilar el modelo.
Parler-TTS tiene dependencias livianas y se puede instalar en una línea:
pip install git+https://github.com/huggingface/parler-tts.git
Los usuarios de Apple Silicon deberán ejecutar un comando de seguimiento para utilizar la compilación nocturna de PyTorch (2.4) para compatibilidad con bfloat16:
pip3 install --pre torch torchaudio --index-url https://download.pytorch.org/whl/nightly/cpu
Consejo
¡Puedes probarlo directamente en una demostración interactiva aquí!
Usar Parler-TTS es tan simple como "bonjour". Simplemente instale la biblioteca una vez:
pip install git+https://github.com/huggingface/parler-tts.git
Parler-TTS ha sido capacitado para generar voz con funciones que se pueden controlar con un simple mensaje de texto, por ejemplo:
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 )
Para garantizar la coherencia de los hablantes entre generaciones, este punto de control también se capacitó con 34 hablantes, caracterizados por su nombre. La lista completa de oradores disponibles incluye: 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.
Para aprovechar esto, simplemente adapte su descripción de texto para especificar qué altavoz usar: Jon's voice is monotone yet slightly fast in delivery, with a very close recording that almost has no background noise.
Puede reemplazar "Jon" con cualquiera de los nombres de la lista anterior para utilizar diferentes características de los hablantes. Cada orador tiene cualidades vocales únicas que pueden aprovecharse para satisfacer sus necesidades específicas. Para obtener información más detallada sobre el rendimiento del hablante con coherencia de voz, consulte la guía de inferencia.
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 )
Consejos :
Hemos creado una guía de inferencia para acelerar la generación. ¡Piense en SDPA, torch.compile y streaming!
La carpeta de entrenamiento contiene toda la información para entrenar o ajustar su propio modelo Parler-TTS. Consta de:
Importante
TL;DR: Después de haber seguido los pasos de instalación, puede reproducir la receta de entrenamiento de Parler-TTS Mini v1 con la siguiente línea de comando:
accelerate launch ./training/run_parler_tts_training.py ./helpers/training_configs/starting_point_v1.json
Importante
También puede seguir esta guía de ajuste en un ejemplo de conjunto de datos de un solo altavoz.
Esta biblioteca se basa en una serie de gigantes del código abierto, a quienes nos gustaría extender nuestro más sincero agradecimiento por proporcionarnos estas herramientas.
Un agradecimiento especial a:
Si este repositorio le resultó útil, considere citar este trabajo y también el artículo 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}
}
Las contribuciones son bienvenidas, ya que el proyecto ofrece muchas posibilidades de mejora y exploración.
Es decir, estamos buscando formas de mejorar tanto la calidad como la velocidad: