- StyleTTS2 es un modelo de conversión de texto a voz que busca lograr síntesis TTS a nivel humano usando style diffusion y aprendizaje adversarial basado en un gran speech language model (SLM)
- Modela el estilo como una variable aleatoria latente de un diffusion model para generar un estilo adecuado al texto sin reference speech, y usa latent diffusion eficiente que aprovecha la síntesis de voz diversa del diffusion model
- Usa un gran SLM preentrenado, como WavLM, como discriminator, y aplica duration modeling diferenciable para entrenamiento end-to-end y mejoras en la naturalidad de la voz
- En el dataset de un solo hablante LJSpeech, superó a las human recordings según evaluaciones de hablantes nativos de inglés; en el dataset multihablante VCTK, igualó a las human recordings; y el modelo entrenado con LibriTTS mostró mayor rendimiento en zero-shot speaker adaptation que los modelos públicamente disponibles existentes
- Los flujos de trabajo de entrenamiento e inferencia cubren LJSpeech de un solo hablante, VCTK·LibriTTS multihablante y fine-tuning de nuevos hablantes basado en un modelo multihablante preentrenado
- Para la primera etapa de entrenamiento se usa
accelerate launch train_first.py --config_path ./Configs/config.yml; para la segunda etapa,python train_second.py --config_path ./Configs/config.yml - La versión DDP de
train_second.pyno funciona, por lo que actualmente se usa DP; el script de fine-tuning también tiene la condición de que DDP no funciona
- Para la primera etapa de entrenamiento se usa
- Los principales requisitos de ejecución son Python >= 3.7, instalación de
requirements.txt, instalación dephonemizeryespeak-ngpara ejecutar la demo, y upsampling a 24 kHz de los datos de LJSpeech - Los módulos preentrenados están compuestos por ASR para el text aligner, JDC para el pitch extractor y PL-BERT
- El ASR aligner fue preentrenado con corpus de English (LibriTTS), Japanese (JVS) y Chinese (AiShell)
- El JDC pitch extractor fue preentrenado solo con el corpus de English (LibriTTS)
- PL-BERT fue preentrenado solo con el corpus de English (Wikipedia), por lo que para otros idiomas se necesita un PL-BERT para ese idioma; multilingual PL-BERT admite 14 idiomas
- La inferencia se ofrece mediante
Inference_LJSpeech.ipynbpara un solo hablante yInference_LibriTTS.ipynbpara múltiples hablantes; los modelos preentrenados de LJSpeech y LibriTTS pueden descargarse desde Hugging Face - La licencia del código es MIT License; al usar los modelos preentrenados se deben cumplir condiciones como informar a los oyentes que se trata de voz sintetizada o sintetizar públicamente solo voces de hablantes sobre las que se tengan derechos de uso
1 comentarios
Opiniones de Hacker News
Con piezas open source como StyleTTS2, Whisper y OpenHermes2-Mistral-7B, creé un chatbot de voz 100% local, y responde mucho más rápido que ChatGPT.
Es divertido porque permite intercambiar mensajes de forma más cercana a una conversación real, no una interacción rígida al estilo Siri como otros asistentes de voz.
En una PC gamer con Windows y una GPU Nvidia de 12 GB, en las pruebas una 3060 de 12 GB, se puede instalar de una vez y conversar sin tener que tocar Python ni CUDA: https://apps.microsoft.com/detail/9NC624PBFGB7
La demo tiene partes poco pulidas, como que requiere audífonos y se ejecuta como app de consola, pero da la sensación de mostrar por adelantado lo que pronto será posible en una PC gamer común usando solo una combinación de proyectos open source, y todavía hay varios modelos mejorados que no pude incorporar.
En particular, quisiera que fueran posibles las interrupciones y solapamientos al hablar, como en una conversación normal: que yo pueda interrumpir y cortar al otro si habla demasiado, o que la IA haga breves comentarios de asentimiento mientras yo hablo.
Si la velocidad llega a ser más rápida que en tiempo real, en teoría se podría empezar a implementar algo así, y para una conversación completamente natural parece que también haría falta conciencia del contexto, donde la IA vea la cara y los gestos corporales para decidir si alguien va a hablar más tiempo.
Incluso en una EVGA 3080Ti de 12 GB, la latencia era bastante alta, y aunque hablé una sola vez, parecía procesar la misma entrada varias veces, repitiendo resultados de reconocimiento ligeramente distintos.
Al final también se notaba el problema de escucharse a sí mismo y responderse a sí mismo.
El mes pasado probé StyleTTS2 y dejé notas paso a paso que pueden ayudar a quienes quieran instalarlo localmente: https://llm-tracker.info/books/howto-guides/page/styletts-2
También comparé brevemente velocidad y calidad con VITS y XTTS usando el modelo LJSpeech, y StyleTTS2 fue bastante bueno y muy rápido: https://fediverse.randomfoo.net/notice/AaOgprU715gcT5GrZ2
Me pregunto si también son posibles funciones equivalentes a inpainting u outpainting, y esta síntesis de voz ultrarrápida con esta calidad promete muchos usos, sobre todo en el desarrollo de juegos indie y experimentales.
El ancla
#mambaforgedel enlace tampoco funcionaba.La documentación está algo dispersa, así que el proceso de dejarlo funcionando fue un poco engorroso, pero después de unos 20 minutos corrió bien en WSL Ubuntu 22.04
La calidad de audio es muy buena, mucho mejor que otros proyectos open source de síntesis de voz que he visto, y en una GPU 4090 es increíblemente rápido
Todavía no sé si llega a la calidad de ElevenLabs, pero el atractivo de ElevenLabs está en que tiene una gran biblioteca de voces de alta calidad y es fácil elegir entre ellas. En esta biblioteca todavía no encontré cómo elegir una voz distinta de la voz femenina predeterminada
El verdadero punto clave de ElevenLabs es la clonación de voz, que se hace casi al instante con una sola muestra de 5 minutos, y funciona sorprendentemente bien, incluso un poco inquietante. Espero que esta función llegue a ser posible de forma totalmente open source. Los servicios por API son demasiado caros para muchos usos, e incluso OpenAI, que es relativamente barato, cuesta alrededor de 10 centavos por generar unos miles de palabras
/Demoy abreInference_LJSpeech.ipynboInference_LibriTTS.ipynb; debería funcionarLa síntesis de voz se encarga de la entonación y la pronunciación, y RVC de la textura de la voz, así que combinar StyleTTS con este pipeline podría acercarse a ElevenLabs
La síntesis de audios cortos es un problema casi resuelto en el mundo de la síntesis de voz, pero cuando intentas crear un audiolibro con text-to-speech, las cosas empiezan a desmoronarse
Curiosamente, los ejemplos de TTS2 suenan mejor que el audio real de referencia https://styletts2.github.io/
Por ejemplo, en el ejemplo “Then leaving the corpse within the house [...]”, la voz de referencia pronuncia
housede forma rara, como con un tono ascendente, mientras que la versión de TTS2 suena más naturalMe gustaría usarlo con varios archivos ePub, como light novels japonesas que no tienen audiolibro. Ahora uso el TTS de Moon+ Reader en Android, pero suena bastante robótico
En 2023 no hay forma de ganar
Aun así, el resultado es impresionante y supera a todas las demás síntesis de voz
El título actual en HN es “StyleTTS2 – open-source Eleven Labs quality Text To Speech”, pero el título original no incluye el nombre de ningún producto en particular, y el paper de arXiv enlazado allí tampoco menciona a ElevenLabs
Tenía entendido que este tipo de edición de títulos se desaconsejaba
Si un sistema open source se acerca a esa calidad, es muy notable, así que creo que la mayoría agradecería la comparación. De hecho, esa comparación fue lo que me interesó
Me da curiosidad saber de quienes lo hayan usado con éxito, pero esta clonación de voz no se parece en nada a XTTSv2, y mucho menos llega a ElevenLabs
Parece que no le presta mucha atención a la entonación; apenas logra ajustar bastante bien el tono y el ritmo
Probé cambiar
alpha,beta,embedding scaleydiffusion stepsde varias maneras, y aunque admito que es rápido y que la calidad de audio es decente, la clonación de voz no funcionó bien en absolutoXTTS probablemente también fue entrenado con más de 20 idiomas y millones de hablantes
Si vio millones de voces, necesariamente habrá alguna parecida a la tuya, así que al final es un problema de datos de entrenamiento. Pero reunir y entrenar con datos a esa escala es muy difícil
alphaybetay subí varios clips de audio, pero obtuve el mismo resultadoLa calidad es realmente absurdamente buena, a un nivel que a principios de los 2000 habría sido casi difícil de imaginar.
Hay posibilidades interesantes en videojuegos, como que un LLM interprete a un personaje y esta síntesis de voz le dé voz a un NPC.
Hoy los simuladores de golf tienen pájaros cantando, el pasto moviéndose y un juego realista, pero no hay ni una persona, así que queda una vibra un poco postapocalíptica.
Es tan distinto a las bromas y presiones juguetonas de una ronda real, o al ruido del público en un torneo grande, que parece ideal para agregar charla basada en LLM.
Acabo de probar el notebook de Colab y la calidad parece muy buena; también admite clonación de voz.
Me dan ganas de probarlo, pero ya me estoy cansando un poco de crear un
venvcada vez que quiero instalar dependencias de torch.Me pregunto cómo lo maneja otra gente. Quisiera saber si hay una forma fácil de hacer que varios
venvcompartan un entorno torch común; manualmente se puede, pero no sé si hay alguna herramienta que ayude con eso.Mi flujo de trabajo es entrar con
nix flake init -t github:dialohq/flake-templates#python,nix develop -c $SHELL, y desde el hook de shell del entorno de desarrollo de nix ejecutarpoetry installypoetry activate.Me pregunto si aparecerá un marketplace de LoRA tipo Civitai para modelos de texto a voz.
https://github.com/microsoft/LoRA