Tutorial: Clonando vozes com IA | so-vits-svc

  • Autor Autor gabrielher
  • Data de início Data de início
Este tópico foi traduzido automaticamente do espanhol. Ver original
Agora estou testando em um ubuntu server, instalado no meu pc, vai muito mais rápido.
Com a 3070 estou usando batch_size = 8, e epochs vou colocar 1000 (tenho 200 áudios neste teste)
Demora aproximadamente 12 segundos por epoch, vamos ver quando terminar como tudo ficou...
 
Acho que ninguém publicou um guia sobre como fazer isso, sei que existem vídeos, etc., mas aqui vou fazer um pequeno guia de como treinar esta IA para gerar a voz de quem você quiser e colocá-la para cantar, como ficou tão na moda nas últimas semanas.

Com este guia é possível obter resultados como os tão famosos do xokas, ou um de amostra que eu treinei:



Disclaimer: Guia em processo de construção e melhoria. Por enquanto sem capturas.

O que vamos utilizar?
so-vits-svc-fork

É uma versão mais simples de utilizar do so-vits-svc, que inclui uma interface gráfica (que não é necessária) e alguns scripts mais simples de utilizar na hora de preparar os dados.


Requisitos:

  • Este guia foca no Windows, no Linux será muito parecido, mas a instalação será um pouco diferente.
  • Placa de vídeo NVIDIA. Se não, você vai levar 3 semanas para ver algum resultado decente.
  • Programa para separar as vozes do resto dos sons (Por exemplo, Ultimate Vocal Remover 5)

Treinamento:
  • Placa de vídeo com pelo menos 6GB de VRAM, pode funcionar com 4GB, mas as velocidades que serão alcançadas são realmente baixas. Mas se você tiver >=10GB, muito melhor.
  • Entre 100 e 200 áudios de entre 5 e 10 segundos, da voz que queremos treinar. Que fale apenas essa voz e quanto mais limpos forem os áudios, melhor. Ou seja, que não corte palavras no final, que não se ouçam ruídos de fundo, etc.

Inferência:
- Aqui é um pouco mais baixo e com 4GB de VRAM você já pode executar o modelo sem muito problema.



Instalação:

A instalação é bastante simples, baixamos este arquivo:


Preparação dos dados:

Aqui cada um terá que fazer seu trabalho de campo, buscando um áudio no qual se ouça a voz corretamente, limpá-lo, cortá-lo.

Para isso, um possível fluxo é: Baixar um vídeo do YouTube onde fale, passá-lo pelo Ultimate Vocal Remover para eliminar músicas e sons que não sejam a voz e, uma vez que temos o áudio, cortá-lo em pedaços, com Adobe Audition ou Audacity, por exemplo.

O objetivo é acabar tendo entre 100 e 150 áudios de entre 5 e 10 segundos. Muito importante respeitar essas durações.


Treinando a IA:

NOTA: Quando algo está entre {}, como {voz}, significa que se substitua por um texto, como por exemplo o nome da pessoa. Assim projeto-{voz}, poderia ser projeto-ilitri.

Uma vez que temos tudo instalado e os áudios preparados, podemos começar a treinar nosso modelo.

Para isso, criamos uma pasta, podemos chamá-la de projeto-{voz}.

Dentro desta pasta, criaremos outra chamada dataset_raw. E dentro de dataset_raw, outra com o nome da voz.

Assim deveríamos ter projeto-{voz}/dataset_raw/{voz}

Agora abrimos um terminal na pasta projeto-{voz}, e começaremos a fazer os passos prévios ao treino.

Executaremos os comandos, um por um, quando acabar o anterior:

Cita:
svc pre-resample

svc pre-config

svc pre-hubert -fm crepe

Agora, na pasta projeto-{voz}, veremos que além de dataset_raw que havíamos criado, foram geradas outras muitas pastas.

Nos interessa configs. Entramos dentro, até encontrar um arquivo chamado config.json.

Este é o arquivo que controla como o modelo é treinado. O principal são os campos "epochs" e "batch_size".

Abrimos o arquivo config.json.

Por enquanto vamos mudar o batch size para "auto", salvamos.

Agora no terminal que tínhamos aberto antes, começamos a treinar:

Cita:

svc train -t

Agora temos que ver entre todo o texto que sai qual batch_size vai utilizando. Se sair algum erro e quebrar, deveremos ir mudando o batch_size manualmente. Começando por exemplo em 16, e baixando. Este valor dependerá da memória. Com uma placa de vídeo de 6GB e cerca de 150 áudios de 7 segundos, o batch que funciona é 6. Com mais memória, poderia ser aumentado. Questão de ir testando.

Uma vez encontrado o batch_size, podemos mudar os epochs a treinar. Os epochs são a quantidade de "treinos" a realizar.

No geral, começaremos a ver resultados decentes a partir do step 25000. Para traduzir isso para o epoch, aplicamos a seguinte fórmula: epochs = 25000 / (num_audios / batch_size)

Já aqui só resta esperar.

Se você quiser pausar o treinamento, pressionando control + c ele para, e depois voltando a executar svc train -t ele retoma pelo último checkpoint que tenha sido salvo.


Inferência (Gerando áudios):

A inferência, por sorte, é bastante mais simples que o treinamento.

Precisamos do áudio no qual queiramos substituir a voz pela da nossa IA e executá-la. Em alguns segundos teremos o resultado.

Para isso, escolhemos o áudio que queiramos substituir, passamos pelo Ultimate Vocal Remover (ou outra ferramenta que faça o mesmo), e colocamos o arquivo que esse programa gerar na pasta projeto-{voz}.

Agora executamos no terminal:

svc infer {voz} -fm crepe-tiny {arquivo_de_voz}.wav

Finalmente, ao terminar, encontraremos na mesma pasta um novo arquivo chamado {arquivo_de_voz}.out.wav

Espero que sirva para alguém. O guia ainda está em processo de construção. Falhas, melhorias, etc., serão corrigidas.

Perguntas por mensagem 🙂

É possível utilizar uma GPU amd 6700 xt de 12gb?
 
Tenho entendido que por enquanto só é possível com Nvidia (cuda)
Bom, por sorte tenho minha 3060 guardada em uma caixa, vai ser hora de montar outro PC já que não quero deixar de usar minha 6700xt
 
Obrigado pela contribuição, amigo.
 
Obrigado, já tinham me comentado sobre isso, no fim de semana vou mexer com isso,

Você sabe se para rodar isso em modo local é necessário algo específico? Com stable diffusion uso uma 3090 para usar localmente.
Você acha que os resultados são bons? Existe uma alternativa melhor a este método?
 
Você acha que os resultados são bons? Existe uma alternativa melhor a este método?
Para ser uma ferramenta gratuita, eles são muito bons. Existe outra ferramenta paga que não me lembro o nome, essa sim era melhor.

Mas depende de como você treina, por exemplo, eu utilizei um dataset de quase 2 horas de voz divididos em pouco mais de 1k arquivos de áudio. Treinei por umas 50 horas.

Deixava a noite toda treinando enquanto dormia e no dia seguinte comparava a qualidade com o arquivo de hoje com o do dia anterior. E sim, a melhora era notável.

Quando gero áudios com minha voz em inglês também funciona bem.

E não, não conheço outra alternativa gratuita, mas conforme o tempo passar vai melhorar e, como é de código aberto, tem muito mais gente tentando otimizar.
 
Para ser uma ferramenta gratuita, eles são muito bons. Existe outra ferramenta paga que não me lembro o nome, essa sim era melhor.

Mas depende de como você treina, por exemplo, eu utilizei um dataset de quase 2 horas de voz divididos em pouco mais de 1k arquivos de áudio. Treinei por umas 50 horas.

Deixava a noite toda treinando enquanto dormia e no dia seguinte comparava a qualidade com o arquivo de hoje com o do dia anterior. E sim, a melhora era notável.

Quando gero áudios com minha voz em inglês também funciona bem.

E não, não conheço outra alternativa gratuita, mas conforme o tempo passar vai melhorar e, como é de código aberto, tem muito mais gente tentando otimizar.
Você usa esta opção ou só estava testando? Vejo que é bastante viável para utilizar criando conteúdo de qualidade sem a voz parecer tão robótica. Estava pensando em usar ElevenLabs, mas acho que são inferiores a esta opção.
 
Você usa esta opção ou só estava testando? Vejo que é bastante viável para utilizar criando conteúdo de qualidade sem a voz parecer tão robótica. Estava pensando em usar ElevenLabs, mas acho que são inferiores a esta opção.
Uso essa voz e sem problemas com o YT ou o algoritmo. O primeiro vídeo que subi usando minha voz com so-vits-svc foi há 8 dias, agora tem 3,1M de views; o 2º vídeo que subi há 2 dias já tem 1,1M de visualizações.

Mas sempre vou com a ideia de que isso é temporário, de alguma maneira o YT vai perceber que são vozes de IA e vai baixar o alcance, prejudicando o canal.
 
Uso essa voz e sem problemas com o YT ou o algoritmo. O primeiro vídeo que subi usando minha voz com so-vits-svc foi há 8 dias, agora tem 3,1M de views; o 2º vídeo que subi há 2 dias já tem 1,1M de visualizações.

Mas sempre vou com a ideia de que isso é temporário, de alguma maneira o YT vai perceber que são vozes de IA e vai baixar o alcance, prejudicando o canal.
Resultados muito bons, não parece haver muitos problemas em primeiro plano.

Você verificou isso do alcance do canal? Não tinha ouvido falar diretamente de algo assim, mas vejo como algo viável.
 
Falta-me aprender muito, sem dúvida. Terminei tonta tentando entender o que fazer 😭 😭
 
Obrigado pela dica, vamos testar para ver como soa. Ainda bem que o Google Colab nos empresta GPU, embora às vezes tenhamos que esperar muito para que estejam disponíveis. Tomara que desse para compilar com Kaggle Code
 
Para ser uma ferramenta gratuita, eles são muito bons. Existe outra ferramenta paga que não me lembro o nome, essa sim era melhor.

Mas depende de como você treina, por exemplo, eu utilizei um dataset de quase 2 horas de voz divididos em pouco mais de 1k arquivos de áudio. Treinei por umas 50 horas.

Deixava a noite toda treinando enquanto dormia e no dia seguinte comparava a qualidade com o arquivo de hoje com o do dia anterior. E sim, a melhora era notável.

Quando gero áudios com minha voz em inglês também funciona bem.

E não, não conheço outra alternativa gratuita, mas conforme o tempo passar vai melhorar e, como é de código aberto, tem muito mais gente tentando otimizar.
Como você faz para gerar com sua voz em inglês?
 
Quem dera eu não tivesse um PC de pedra xd

ou pelo menos que desse para realizar pelo celular.
 
Como você faz para gerar com sua voz em inglês?
Uso um áudio em inglês, alemão, português, etc. etc. etc.
Quem dera eu não tivesse um PC de pedra xd

ou pelo menos que desse para realizar pelo celular.
Sim. É o lado ruim disso, você precisa de 12gb de VRAM para ter um trabalho que não consuma muito do seu tempo.
 
Excelente contribuição, amigo, exatamente o que eu estava procurando
 
Voltar
Topo