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:
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
🙂