IA e Deepfakes de Voz: Como Criamos Um?
Vivemos em uma era onde a tecnologia avança em um ritmo muito rápido. Ferramentas que antes eram exclusivas de laboratórios e especialistas agora estão ao alcance de todo mundo. Entre todos esses avanços, um dos que nos chama muito a atenção aqui na Hakai é criação de deepfakes de voz.
Um exemplo do uso malicioso dessa tecnologia foi o ocorrido em Hong Kong, onde uma empresa foi vítima de um ataque que utilizava deepfakes de voz. Os atacantes desenvolveram deepfakes de voz do CFO e de outros funcionários de uma empresa para enganar o setor financeiro e convenceram os responsáveis a transferir cerca de US$ 25,6 milhões para contas falsas. (veja mais em: https://www.cfo.com/news/deepfake-cfo-hong-kong-25-million-fraud-cyber-crime/706529/)
Mas mesmo se popularizando na internet (e, como vimos, nos ataques contra empresas também), muitos ainda não sabem como essa tecnologia funciona. Muito se fala sobre os perigos e implicações éticas dos deepfakes, mas poucos têm a oportunidade de ver todo o processo de criação em si. Pensando nisso, recentemente apresentei uma palestra interna sobre esse tema para o time da Hakai, onde demonstrei o passo a passo da criação de um deepfake de voz usando a voz do nosso fundador, Oliveira Lima. Neste post, irei compartilhar parte do conteúdo desta palestra, revelando os detalhes por trás da criação do deepfake — desde a criação da dataset do nosso alvo até o resultado final. Claro, algumas partes do áudio original não podem ser compartilhadas aqui, mas o suficiente será dividido para que vocês também possam entender o poder dessa tecnologia.
Preparando nosso modelo de IA:
Para a criação do deepfake, utilizei uma ferramenta chamada RVC (Retrieval-based Voice Conversion). Com ela poderemos criar um modelo de IA da voz do nosso alvo e também aplicar esse modelo de IA em cima de outro áudio já existente (abaixo vou compartilhar mais detalhes sobre isso)
Essa ferramenta foi desenvolvida em python e eu a escolhi por alguns motivos:
- É possível realizar todo o treinamento da IA localmente, utilizando somente os recursos do meu computador. Isso garante a segurança de todos os dados que utilizaremos.
- Ela originalmente foi desenvolvida pensando em música, ou seja, seu foco é fazer com que modelos treinados possam cantar. Por conta disso, a ferramenta não só treina a “textura” da voz do alvo, mas também identifica certos trejeitos, respirações, pitchs vocais etc.
- Como ela identifica pitchs vocais (agudos, graves etc.), o resultado do modelo tende a ser mais natural
- A ferramenta não é text to speech, mas sim speech to speech. Ou seja, nós iremos fornecer um áudio já existente e a ferramenta irá substituir a voz desse áudio pela voz do nosso modelo, mantendo trejeitos, sotaques, respirações e entre outros.
- Por último, ela também conta com uma interface web que facilita muito na produtividade e nos ajustes de detalhes.
Ferramenta RVC
Agora que temos a ferramenta e entendemos como os pontos fortes do nosso deepfake, como vamos criar nosso modelo?
Passo 1: Preparando a dataset do nosso alvo
Para iniciar a preparação da dataset do nosso alvo, precisamos encontrar algumas samples de áudio dele na internet. Por sorte, como o meu alvo é o Oliveira Lima, temos algumas aparições dele em lives da Hakai no Youtube e no Instagram. Analisando algumas das lives da Hakai, decidi utilizar a primeira live Break the Code que tivemos, onde o Oliveira faz uma introdução e finalização.
Live Hakai Break The Code
Depois de encontrar a fonte dos áudios, precisamos baixar a live e cortar exatamente os momentos que o Oliveira fala. Essa foi a parte mais manual de todo processo. No total, foi possível obter cerca de 9 minutos e meio brutos de áudio. Essa quantidade de tempo geralmente é pouca coisa, mas é interessante perceber onde podemos chegar mesmo só com essa quantidade de material.
Falas do Oliveira obtidas da Live
Com todo o áudio bruto em mãos, para facilitar o treino do nosso modelo, é interessante cortar esse grande áudio em pequenos áudios de menos de 10 segundos cada. Para isso, usei uma outra ferramenta chamada AutoSplitter que tem como objetivo tirar o silêncio do áudio e cortá-lo em pequenos pedacinhos de 10 segundos.
Ferramenta AudioSplitter cortando o audio
(Como podem ver na print, a ferramenta corta os momentos onde a energia é menos do que 0.01% por mais de 0.6 segundos.)
No final do processo, vários pequenos áudios do Oliveira foram criados, cerca de 83 arquivos no total. Novamente, geralmente isso é pouco, mas a título de demonstração, foi mais do que o suficiente.
Audios cortados do alvo
Abaixo encontram-se alguns áudios aleatórios de exemplo do resultado dos cortes:
Agora sim podemos realizar o treino do nosso modelo do Oliveira localmente utilizando a RVC.
Passo 2: Treinando nosso modelo
Com a ferramenta já no localhost utilizando a interface web para facilitar, podemos fornecer as informações de treino na aba train. Inicialmente fornecemos o nome do nosso modelo, ativamos ou desativamos diferenciação de pitch (deixei ativado para que esse modelo seja aplicável em outros casos), número de processadores que serão usados.
Step 1
Depois, especificamos a pasta onde todos os áudios cortados estão para realizar um processamento inicial clicando no botão “process data”.
Step 2
Assim que terminar de processar, especificamos qual GPU será usada para o treino e qual o algoritmo de extração será usado. Optei pelo uso do “harvest” pois, pelos meus testes, é o que apresenta uma maior qualidade de extração em troca de um maior tempo de treinamento. Após selecionar o algoritmo, basta clicar em “feature extraction” para a ferramenta realizar os preparativos iniciais com todos os áudios fornecidos anteriormente.
Step 2b
Por último, definimos o total de “epochs” que o treino irá possuir. Cada epoch passará por todos os áudios extraindo algumas informações. É interessante fornecer um número razoavelmente alto para garantir que a ferramenta possa trabalhar mais detalhadamente com os áudios fornecidos, mas também não fornecer um número tão alto, pois existe a chance da ferramenta prejudicar a qualidade e fidelidade do modelo, principalmente considerando que foram fornecidos somente 83 arquivos de áudio. Pensando nisso, optei por configurar 500 epochs e salvar um backup a cada 50 para backup caso o treino seja interrompido de forma inesperada.
Step 3
Depois disso, bastou clicar no botão “one-click training” e aguardar o treino finalizar. Informações sobre o treino podem ser obtidas no console de logs.
Console de Logs de Treino do Modelo
Passo 3: Utilizando nosso modelo para gerar o deepfake
Após o término do treinamento, o console de logs irá exibir uma mensagem de sucesso e dois arquivos serão gerados: um .pth e um .index. Ambos os arquivos são importantes para exportar o modelo de IA para outros dispositivos, dispensando a necessidade de treinar o modelo em todos os computadores toda vez que criarmos um deepfake.
Treino do Modelo Cocluído
Arquivos do Modelo Gerados
Com tudo finalizado, podemos utilizar o modelo para alterar a voz de algum áudio já existente. Essa é a parte mais importante para fazer um deepfake fiel à realidade, pois a ferramenta irá extrair todos os trejeitos do áudio fornecido e aplicar a voz do nosso modelo treinado por cima. Por exemplo: ao enviar um áudio com sotaque carioca, nosso modelo irá falar com este sotaque. O mesmo vale para um sotaque paulista, um áudio em inglês, em italiano ou com qualquer outra característica. A ferramenta sempre vai procurar somente substituir a voz do áudio que fornecemos pela voz do nosso modelo treinado.
Em ataques complexos que usam deepfakes, o alvo do deepfake é muito estudado. É estudado o jeito que ele fala, as palavras que ele usa, os assuntos que ele engaja e muito mais. Pensando nisso, entrei em contato com o irmão do Oliveira, que sabe imitar ele como ninguém e se disponibilizou a gravar um áudio para esse projeto. Essa é parte do áudio que ele gravou para o projeto:
Com nosso áudio de base e nosso modelo do Oliveira treinado, podemos criar o resultado final do deepfake.
Na interface web da ferramenta, em “model interface”, teremos todas as configurações para o deepfake. No primeiro campo coloquei o modelo já treinado (nesse caso o do Oliveira), depois, em “Transpose” é possível especificar quantas notas para cima ou para baixo o modelo irá falar em relação ao áudio base fornecido. Por exemplo: a voz masculina é 1 oitava (ou 12 notas) maior do que uma voz feminina. Então se o áudio base fornecido possuir uma voz masculina mas o modelo treinado for de uma voz feminina, seria necessário colocar -12 nesse campo para adaptar o áudio do deepfake para uma voz feminina. Opostamente, se o áudio fornecido for de uma voz feminina e o modelo de uma voz masculina, seria necessário colocar 12 no campo para adaptar da mesma forma.
Dessa forma, como o áudio fornecido era de uma voz masculina e o modelo também, não há necessidade de alterar esse valor, mantendo ele em 0. Depois de alterar esse valor, mais abaixo teremos o local de onde nosso áudio base se encontra no dispositivo e o algoritmo que será usado para substituir a voz desse áudio para a voz do nosso modelo. Mantive em harvest por geralmente apresentar uma melhor qualidade.
Ao lado existem algumas configurações mais pontuais para ajustar pequenas características no áudio final do deepfake
Assim ficaram as configurações dessa parte:
Configurações de Aplicação do Modelo no Audio
Depois disso, ao clicar em “Convert”, obtive o áudio final em minutos e esse foi o resultado:
Referência real
Deepfake
Infelizmente, o resultado final apresentado na palestra interna continha informações internas e por isso não será compartilhado integralmente por aqui, mas essa versão cortada é o suficiente para demonstrar o poder de ferramentas simples como essa. Lembrando que esse resultado foi obtido utilizando apenas 9 minutos de áudio do alvo. Ou seja, existe muito espaço para melhorias neste modelo ainda.
Extra: Reflexões e o Futuro da Identidade
Fazer deepfakes já não é uma coisa de outro mundo. Algo que antes era considerado extremamente complexo hoje está ao alcance de muitas pessoas. Todo o processo apresentado na palestra pôde ser feito em menos de 1 dia com um bom hardware para o treino do modelo. Por mais impressionante que seja, essa tecnologia carrega uma responsabilidade imensa.
A acessibilidade a esse tipo de tecnologia exige um questionamento sobre o futuro da percepção da identidade e da verdade. Se alguém pode “ser” outra pessoa em menos de 1 dia, como saberemos em quem confiar? Estes áudios podem ser usados em ataques de engenharia social, fazendo com que vítimas se sintam convencidas a trabalhar junto com um agente malicioso, sem nem saber.
Durante toda essa palestra chegamos juntos à conclusão de que o fator humano é o único elemento que pode equilibrar esse poder. Ensinar as pessoas a questionar, verificar fontes e ter consciência das possíveis manipulações se tornou mais necessário do que nunca. É possível que no futuro a confiança seja construída de uma maneira diferente e talvez o que consideramos hoje como uma prova de autenticidade, não seja suficiente para amanhã.
Por fim, espero que esse post tenha proporcionado um entendimento mais profundo sobre o tema. A tecnologia está se desenvolvendo rapidamente e aqui na Hakai estamos sempre preocupados em acompanhá-la na sua evolução e, com certeza, na sua segurança.
Obrigado pela leitura e Keep Hacking!