3 puntos por GN⁺ 2023-11-20 | 1 comentarios | Compartir por WhatsApp
  • 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.py no funciona, por lo que actualmente se usa DP; el script de fine-tuning también tiene la condición de que DDP no funciona
  • Los principales requisitos de ejecución son Python >= 3.7, instalación de requirements.txt, instalación de phonemizer y espeak-ng para 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.ipynb para un solo hablante y Inference_LibriTTS.ipynb para 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

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

    • Me da curiosidad qué tan difícil parece hacer que un chatbot converse con naturalidad.
      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.
    • Lo probé, pero parece que solo funciona con CUDA 11, y como ya tengo un entorno con CUDA 12, no pienso arruinar mi entorno CUDA solo para probarlo.
    • Tuve resultados mixtos en las pruebas: si lo instalaba en una unidad que no fuera C:, daba error; al moverlo a C:, funcionó correctamente.
      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.
    • Me pregunto si 12 GB es el requisito mínimo. En 8 GB me dio un error de falta de memoria.
    • Whisper no soporta streaming de entrada, así que me da la impresión de que la transcripción no puede dispararse hasta que termina toda la respuesta del LLM.
  • 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

    • ¡Inferencia de 15 a 95 veces más rápida que en tiempo real en una 4090, impresionante!
      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.
    • Estoy siguiendo la guía, pero si no eres alguien que ya lo usa, mamba ya no se recomienda.
      El ancla #mambaforge del 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

    • Este es el procedimiento de instalación que probé en Ubuntu 22.04. Los enlaces de descarga de Google Drive pueden bloquearse porque hubo demasiadas descargas en 24 horas, pero si esperas un poco deberían volver a funcionar
      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  
      
      Después ve a /Demo y abre Inference_LJSpeech.ipynb o Inference_LibriTTS.ipynb; debería funcionar
    • Para la clonación de estilo, he visto enfoques donde, después de una síntesis de voz ajustada finamente con alta calidad, se “mejora” la salida con un pipeline de RVC
      La 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 demo de LibriTTS clona la voz de un hablante no visto usando solo un clip de unos 5 segundos
    • Me pregunto si alguien probó enunciados largos tanto en ElevenLabs como en StyleTTS
      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 house de forma rara, como con un tono ascendente, mientras que la versión de TTS2 suena más natural
    Me 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

    • Mi primera esposa es actriz de voz profesional, y vi que alguien le dejó una mala reseña diciendo que era “claramente IA”
      En 2023 no hay forma de ganar
    • La sensación de ritmo es mejor, pero personalmente sigo percibiendo un tono metálico bastante claro, así que me parece inferior a una voz real
      Aun así, el resultado es impresionante y supera a todas las demás síntesis de voz
    • Me da curiosidad cómo planeas integrarlo con ePub. Estoy en una situación parecida y me gustaría aprovechar algo así para ebooks
  • 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

    • ElevenLabs es el punto de referencia de la síntesis de voz, y todavía no hay nada mejor
      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ó
    • Es un título editado y también una exageración. Aun así, al probar StyleTTS2 directamente, es por mucho la mejor síntesis de voz open source, así que merece de sobra estar un buen rato en la portada de HN
    • Sí, viola las guías. Por el título pensé que era un proyecto cualquiera de GitHub, no un nuevo paper de investigación
  • 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 scale y diffusion steps de 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 absoluto

    • ElevenLabs está basado en Tortoise-TTS y ya fue preentrenado con millones de horas de datos, mientras que este modelo fue entrenado, como mucho, solo con las 500 horas de LibriTTS
      XTTS 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
    • Si miras la conclusión del paper, admiten que la clonación de voz todavía no es tan buena
    • Experimenté mucho con alpha y beta y subí varios clips de audio, pero obtuve el mismo resultado
  • La 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.

    • Tiene mucho sentido en un área que me interesa: simulación de golf.
      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.

    • Revisé por encima el README, pero me pregunto cuáles son los requisitos mínimos de hardware para ejecutarlo. No sé si va a hacer explotar el CPU o el disco duro.
    • Miré GitHub por encima y no lo encontré, pero me pregunto cuánto tarda el fine-tuning para una voz específica.
  • Me dan ganas de probarlo, pero ya me estoy cansando un poco de crear un venv cada 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 venv compartan un entorno torch común; manualmente se puede, pero no sé si hay alguna herramienta que ayude con eso.

    • Para configurar entornos de Python uso nix: fijo la versión de Python y poetry, y a veces paquetes que son difíciles de instalar con poetry; el resto lo manejo con poetry.
      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 ejecutar poetry install y poetry activate.
    • Para cosas así normalmente intentaría usar Docker, pero entender las dependencias es tan difícil que también es una de las principales razones por las que termino dejando pasar proyectos como este.
    • Siento mucho el mismo problema. Estuve pensando en usar contenedores de desarrollo con Docker y crear una imagen base para dependencias comunes, y luego personalizar con un Dockerfile para cada proyecto nuevo, pero no sé si hay una alternativa mejor.
    • A mí me pasa algo parecido. Uso conda y estoy considerando instalar PyTorch directamente en el entorno conda base.
    • Si de verdad ya empieza a cansar, pensaría que un LLM como Copilot debería poder encargarse de eso por uno.
  • Me pregunto si aparecerá un marketplace de LoRA tipo Civitai para modelos de texto a voz.
    https://github.com/microsoft/LoRA