3 pontos por GN⁺ 2023-11-20 | 1 comentários | Compartilhar no WhatsApp
  • StyleTTS2 é um modelo de conversão de texto em fala que busca síntese TTS em nível humano usando style diffusion e aprendizado adversarial baseado em um grande speech language model (SLM)
  • Ele modela o estilo como uma variável aleatória latente de um diffusion model, gerando um estilo adequado ao texto sem fala de referência, e usa latent diffusion eficiente para aproveitar a diversidade de síntese de voz do diffusion model
  • Usa um grande SLM pré-treinado, como o WavLM, como discriminator, e aplica duration modeling diferenciável para realizar treinamento end-to-end e melhorar a naturalidade da fala
  • No dataset de locutor único LJSpeech, superou gravações humanas segundo avaliações de falantes nativos de inglês; no dataset multi-locutor VCTK, igualou as gravações humanas; e o modelo treinado no LibriTTS mostrou desempenho superior aos modelos publicamente disponíveis existentes em adaptação zero-shot de locutor
  • O fluxo de trabalho de treinamento e inferência cobre o LJSpeech de locutor único, os multi-locutor VCTK e LibriTTS, e o fine-tuning de novos locutores com base em um modelo multi-locutor pré-treinado
    • O treinamento da primeira etapa usa accelerate launch train_first.py --config_path ./Configs/config.yml, e o da segunda etapa usa python train_second.py --config_path ./Configs/config.yml
    • A versão DDP de train_second.py não funciona, então atualmente é usado DP, e o script de fine-tuning também tem condições em que o DDP não funciona
  • Os principais requisitos de execução são Python >= 3.7, instalação de requirements.txt, instalação de phonemizer e espeak-ng para executar a demo, e upsampling dos dados do LJSpeech para 24 kHz
  • Os módulos pré-treinados são compostos por ASR para o alinhador de texto, JDC para o extrator de pitch e PL-BERT
    • O alinhador ASR é pré-treinado com os corpus English (LibriTTS), Japanese (JVS) e Chinese (AiShell)
    • O extrator de pitch JDC é pré-treinado apenas com o corpus English (LibriTTS)
    • O PL-BERT é pré-treinado apenas com o corpus English (Wikipedia), então para outros idiomas é necessário um PL-BERT específico do idioma; o multilingual PL-BERT oferece suporte a 14 idiomas
  • A inferência é fornecida por Inference_LJSpeech.ipynb para locutor único e Inference_LibriTTS.ipynb para múltiplos locutores, e os modelos pré-treinados de LJSpeech e LibriTTS podem ser baixados no Hugging Face
  • A licença do código é a MIT License, e o uso dos modelos pré-treinados segue a condição de informar ao ouvinte que a voz é sintetizada ou sintetizar publicamente apenas vozes de locutores para as quais haja permissão de uso

1 comentários

 
GN⁺ 2023-11-20
Comentários do Hacker News
  • Montei um chatbot de voz 100% local com peças open source como StyleTTS2, Whisper e OpenHermes2-Mistral-7B, e ele responde muito mais rápido que o ChatGPT
    Em vez de uma interação engessada no estilo da Siri, como outros assistentes de voz, é divertido porque permite uma troca mais próxima de uma conversa real
    Em um PC gamer com Windows e GPU Nvidia de 12GB, no teste com uma 3060 12GB, dá para instalar tudo de uma vez e conversar sem precisar mexer com Python ou CUDA: https://apps.microsoft.com/detail/9NC624PBFGB7
    O demo ainda tem arestas, como exigir fones de ouvido e rodar como aplicativo de console, mas passa a sensação de mostrar antecipadamente algo que em breve será possível em PCs gamers comuns só com a combinação de projetos open source, e ainda há vários modelos melhorados que não foram incorporados

    • Fico curioso sobre o quão difícil parece ser fazer um chatbot conversar de forma natural
      Principalmente, queria que fosse possível interromper e entrar na fala como em uma conversa normal, por exemplo quando a outra parte fala por tempo demais e eu corto, ou quando a IA dá uma resposta curta enquanto eu ainda estou falando
      Se a velocidade já estiver ficando mais rápida que o tempo real, em teoria parece possível começar a implementar esse tipo de recurso, e para uma conversa totalmente natural também parece necessário algum nível de consciência de contexto, em que a IA observa rosto e gestos para julgar se a pessoa pretende continuar falando por mais tempo
    • Testei, mas parece funcionar só com CUDA 11, e como já estou em um ambiente com CUDA 12, não pretendo bagunçar minha instalação de CUDA só para experimentar
    • Os resultados do teste foram mistos: ao instalar em um drive que não era C:\, ocorreu erro, mas ao mover para C:, funcionou normalmente
      Mesmo em uma EVGA 3080Ti 12GB, a latência foi bem alta, e parecia processar a mesma entrada várias vezes apesar de eu ter falado só uma vez, repetindo resultados de reconhecimento um pouco diferentes
      No fim, também apareceu o problema de ele ouvir a própria voz e responder a si mesmo
    • Queria saber se 12GB é o requisito mínimo. Em 8GB, deu erro de falta de memória
    • Como o Whisper não suporta streaming de entrada, imagino que a transcrição só possa ser disparada depois que a resposta completa do LLM terminar
  • Testei o StyleTTS2 no mês passado e organizei algumas notas passo a passo que podem ajudar quem for instalar localmente: https://llm-tracker.info/books/howto-guides/page/styletts-2
    Também comparei rapidamente velocidade e qualidade com VITS e XTTS usando o modelo LJSpeech, e o StyleTTS2 pareceu muito bom e muito rápido: https://fediverse.randomfoo.net/notice/AaOgprU715gcT5GrZ2

    • Inferência de 15 a 95 vezes em relação ao tempo real em uma 4090 é impressionante
      Fico curioso se também dá para fazer algo equivalente a infill ou outpainting, e uma síntese de voz ultrarrápida com essa qualidade parece ter bastante potencial de uso, especialmente em desenvolvimento de jogos indie e experimentais
    • Estou seguindo as instruções, mas, a menos que você já use isso, mamba não é mais recomendado
      A âncora #mambaforge no link também não funcionou
  • A documentação está meio esparsa, então acertar tudo deu um pouco de trabalho, mas depois de uns 20 minutos funcionou bem no WSL Ubuntu 22.04
    A qualidade do áudio é muito boa, muito melhor do que outros projetos open source de síntese de voz que já vi, e numa GPU 4090 é absurdamente rápido
    Ainda não sei se chega à qualidade do ElevenLabs, mas o atrativo do ElevenLabs está em ter uma biblioteca grande de vozes de alta qualidade e ser fácil escolher entre elas. Nesta biblioteca, ainda não encontrei uma forma de escolher outra voz além da voz feminina padrão
    O verdadeiro diferencial do ElevenLabs é a clonagem de voz, que funciona quase instantaneamente com apenas uma amostra de 5 minutos, e fica surpreendentemente boa, até um pouco assustadora. Espero que isso se torne possível de forma totalmente open source. Serviços de API são caros demais para muitos usos, e até a OpenAI, que é relativamente barata, custa cerca de 10 centavos para gerar alguns milhares de palavras

    • Este foi o processo de instalação testado no Ubuntu 22.04. O link de download do Google Drive pode ser bloqueado por excesso de downloads em 24 horas, mas se esperar um pouco deve voltar 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  
      
      Depois disso, vá para /Demo e abra Inference_LJSpeech.ipynb ou Inference_LibriTTS.ipynb que deve funcionar
    • Para clonagem de estilo, já vi uma abordagem em que a saída é “reforçada” com um pipeline de RVC depois de uma síntese de voz ajustada finamente com alta qualidade
      A síntese de voz cuida da entonação e da pronúncia, e o RVC cuida da textura da voz, então combinar o StyleTTS com esse pipeline pode aproximá-lo do ElevenLabs
    • A demo do LibriTTS clona a voz de um falante nunca visto antes com apenas um clipe de cerca de 5 segundos
    • Fico curioso se alguém testou falas longas tanto no ElevenLabs quanto no StyleTTS
      Sintetizar áudios curtos é um problema quase resolvido no mundo da síntese de voz, mas quando se tenta fazer audiolivros com conversão de texto em fala, tudo começa a desmoronar
  • Curiosamente, o exemplo do TTS2 soa melhor do que o áudio real de referência https://styletts2.github.io/
    Por exemplo, no trecho “Then leaving the corpse within the house [...]”, o áudio de referência pronuncia house de um jeito estranho, como se a entonação subisse, enquanto a versão do TTS2 soa mais natural
    Gostaria de usar isso em vários arquivos ePub, como light novels japonesas que não têm audiolivro. Hoje uso o TTS do Moon+ Reader no Android, mas ele soa bastante robótico

    • Minha primeira esposa é dubladora profissional, e vi alguém deixar uma avaliação ruim dizendo que era “obviamente IA”
      Em 2023, não tem como vencer isso
    • O ritmo está melhor, mas, pessoalmente, ainda sinto um tom metálico bem perceptível, então acho inferior a uma voz real
      Ainda assim, o resultado é impressionante e superior a qualquer outra síntese de voz
    • Fico curioso sobre como você pretende integrar isso ao ePub. Estou numa situação parecida e gostaria de usar algo assim em e-books
  • O título atual no HN é “StyleTTS2 – open-source Eleven Labs quality Text To Speech”, mas o título original não menciona nenhum produto específico, e o artigo no arXiv linkado ali também não menciona ElevenLabs
    Pelo que eu sabia, esse tipo de edição de título era desencorajado

    • O ElevenLabs é a referência em síntese de voz, e ainda não existe nada melhor
      Se um sistema open source se aproxima dessa qualidade, isso é muito digno de nota, então acho que a maioria agradece a comparação. Na prática, foi essa comparação que chamou minha atenção
    • É um título editado e também um exagero. Mesmo assim, depois de usar o StyleTTS2 diretamente, ele é de longe o melhor entre as sínteses de voz open source, então merece ficar no topo do HN por um bom tempo
    • Sim, é uma violação das diretrizes. Ao ver o título, achei que fosse um projeto aleatório no GitHub, e não um novo artigo de pesquisa
  • Para quem conseguiu usar com sucesso, fiquei com a impressão de que essa clonagem de voz é completamente diferente do XTTSv2 e muito menos ainda do ElevenLabs
    Parece não dar muita atenção à entonação, e no máximo acerta razoavelmente bem a altura e o ritmo
    Tentei mudar os valores de alpha, beta, embedding scale e diffusion steps de várias formas, e embora eu reconheça que é rápido e que a qualidade do áudio é razoável, a clonagem de voz simplesmente não funciona direito

    • O ElevenLabs é baseado no Tortoise-TTS e já foi pré-treinado com milhões de horas de dados, enquanto este modelo foi treinado apenas com o LibriTTS, de no máximo 500 horas
      O XTTS provavelmente também foi treinado com mais de 20 idiomas e milhões de falantes
      Se você viu milhões de vozes, inevitavelmente haverá uma parecida com a sua, então no fim isso é uma questão de dados de treinamento. Só que reunir e treinar com dados em escala tão grande é muito difícil
    • Se olhar a conclusão do artigo, eles admitem que a clonagem de voz ainda não é tão boa
    • Também experimentei bastante com alpha e beta e subi vários clipes de áudio, mas tive o mesmo resultado
  • A qualidade é realmente absurdamente boa, em um nível que seria quase inimaginável no começo dos anos 2000
    Há possibilidades interessantes em jogos, com um LLM assumindo personagens e esse tipo de síntese de voz dando voz a NPCs

    • Isso tem grande importância na área que me interessa, simulação de golfe
      Hoje, simuladores de golfe têm pássaros cantando, a grama balançando e a jogabilidade é realista, mas não há uma única pessoa, então fica com um clima meio pós-apocalíptico
      É muito diferente das provocações em tom de brincadeira de uma rodada real ou do som da torcida em grandes partidas, então parece perfeito para adicionar conversa fiada baseada em LLM
  • Acabei de testar o notebook no Colab, e a qualidade parece muito boa; ele também oferece suporte a clonagem de voz

    • Dei uma olhada no README, mas fiquei curioso sobre quais são os requisitos mínimos de hardware para rodar isso. Não sei se vai explodir a CPU ou o disco rígido
    • Dei uma passada rápida no GitHub, mas não encontrei: queria saber quanto tempo leva para fazer o ajuste fino em uma voz específica
  • Quero testar, mas já estou meio cansado de criar um venv toda vez para instalar dependências do torch
    Queria saber como outras pessoas lidam com isso. Se existe um jeito fácil de fazer vários venv compartilharem um ambiente torch comum; manualmente dá para fazer, mas queria saber se há alguma ferramenta que ajude nisso

    • Para configurar ambientes Python, uso nix, pego a versão do Python e o poetry, e às vezes pacotes que são difíceis de instalar com poetry, e depois resolvo o restante com poetry
      O fluxo de trabalho é nix flake init -t github:dialohq/flake-templates#python, entrar com nix develop -c $SHELL, e no shell hook do ambiente de desenvolvimento nix executar poetry install e poetry activate
    • Normalmente eu tentaria usar Docker para esse tipo de coisa, mas descobrir as dependências é difícil demais, e esse também é o principal motivo de eu acabar pulando projetos assim
    • Sinto muito esse mesmo problema. Pensei em usar contêineres de desenvolvimento com Docker e criar uma imagem base para dependências comuns, depois customizando cada novo projeto com um Dockerfile, mas não sei se existe uma alternativa melhor
    • Comigo é parecido. Uso conda e estou considerando instalar o PyTorch diretamente no ambiente base do conda
    • Se isso realmente está começando a ficar insuportável, parece que um LLM como o Copilot já deveria conseguir resolver isso no seu lugar
  • Fico curioso se vai surgir um marketplace de LoRA para modelos de texto para fala, como o Civitai
    https://github.com/microsoft/LoRA