StyleTTS2 - conversão de texto em fala baseada em style diffusion e aprendizado adversarial com SLM de grande porte
(github.com/yl4579)- 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 usapython train_second.py --config_path ./Configs/config.yml - A versão DDP de
train_second.pynã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
- O treinamento da primeira etapa usa
- Os principais requisitos de execução são Python >= 3.7, instalação de
requirements.txt, instalação dephonemizereespeak-ngpara 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.ipynbpara locutor único eInference_LibriTTS.ipynbpara 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
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
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
C:\, ocorreu erro, mas ao mover paraC:, funcionou normalmenteMesmo 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
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
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
A âncora
#mambaforgeno link também não funcionouA 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
/Demoe abraInference_LJSpeech.ipynbouInference_LibriTTS.ipynbque deve funcionarA 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
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
housede um jeito estranho, como se a entonação subisse, enquanto a versão do TTS2 soa mais naturalGostaria 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
Em 2023, não tem como vencer isso
Ainda assim, o resultado é impressionante e superior a qualquer outra síntese de voz
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
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
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 scaleediffusion stepsde 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 direitoO 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
alphaebetae subi vários clipes de áudio, mas tive o mesmo resultadoA 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
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
Quero testar, mas já estou meio cansado de criar um
venvtoda vez para instalar dependências do torchQueria saber como outras pessoas lidam com isso. Se existe um jeito fácil de fazer vários
venvcompartilharem um ambiente torch comum; manualmente dá para fazer, mas queria saber se há alguma ferramenta que ajude nissoO fluxo de trabalho é
nix flake init -t github:dialohq/flake-templates#python, entrar comnix develop -c $SHELL, e no shell hook do ambiente de desenvolvimento nix executarpoetry installepoetry activateFico curioso se vai surgir um marketplace de LoRA para modelos de texto para fala, como o Civitai
https://github.com/microsoft/LoRA