DeepFake e uma experiência


Aprendizado de máquina é sem dúvida um dos assuntos mais falados ultimamente e uma tendência forte do mercado mundial que vem crescendo e melhorando a cada dia, com suas inúmeras aplicabilidades. Um ramo de Aprendizado de máquina que vem ganhando grande destaque é a aprendizagem profunda, e como tudo na internet sempre existe o lado negro. A algum tempo um usuário chamado DeepFake postou no reddit vídeos muito convincentes, mas falsos trocando rostos de pessoas no vídeo por rostos de celebridades utilizando algoritmos de aprendizagem profunda, isso mesmo que está pensando era conteúdo adulto. Como pode-se imaginar teve um sucesso enorme e o qual essa pratica ganhou o nome de seu criador ficando conhecida como DeepFake.

Como funciona?

O deepfake é composto por um autoencoder, uma rede neural profunda que aprende a compactar dados da camada de entrada em um código menor e descompactar esse código reconstruindo a entrada.

Na representação acima do núcleo do deepfake há 3 elementos e como são treinados.

1-Passamos uma imagem (distorcida) da pessoa A e tentamos reconstruir com o decodificador da pessoa A.

2 -Passamos uma imagem (distorcida) da pessoa B e tentamos reconstruir com o decodificador da pessoa B.

Esse processo é repetido inúmeras vezes até que cada decodificador possa criar seu rosto respectivo.

3 -A magia acontece aqui, passamos uma imagem da pessoa A mas tentamos reconstruir com o decodificador da pessoa B.

Resumindo nosso algoritmo aprende a gerar imagens a partir de exemplos. Observem o poder do deekfake.

Mão no Código

Ao pesquisar na internet como todo e bom estudante, cheguei a uma publicação do Oberoi o qual teve o trabalho de facilitar toda a parte complicada de tratamento das imagens para treinamento com um PLUS obtendo imagem diretamente de um vídeo do youtube e disponibilizando de bom coração para o uso da comunidade no repositório. A técnica aplicada por ele aumenta o tempo de processamento pois o algoritmo baixa os vídeos processa frame a frame procurando o rosto que queremos e prepara a imagem para o treinamento, mas se tempo e hardware não forem um problema para você é com certeza de grande ajuda.

Como é de se esperar um algoritmo deste nível necessita de inúmeras bibliotecas e dependências e aqui começamos nossa jornada. Quando falamos em rodar um deepfake um grande fator é a GPU, deepfake é um processamento pesado que necessita de recursos para que tenha um resultado em um tempo satisfatório, mas é claro tudo é possível se você tiver paciência. Devido no momento não ter uma GPU potente disponível e a curiosidade de usar novas ferramentas a primeira tentativa de execução do algoritmo foi feita no Google Colaboratory , que se trata de um ‘Jupyter notebook’ da google com uma GPU grátis e claro como todo serviço gratuito tem suas limitações e desvantagens, como instalações de dependências especificas, espaço em disco e após um tempo ocioso o notebook expira e perde todas as informações como dependências e arquivos em disco além da grande dificuldade de manipular seus diretórios. Após perder várias vezes o processamento fui para Google Cloud.

Especificações da VM:

· 30GB RAM

· 8 vCPUs

· 1 x NVIDIA Tesla K80

· Ubunto 16.04

Tentado facilitar utilizei cloud launcher que monta uma instância com um ambiente praticamente preparado para executarmos nosso código. Tudo aparentava funcionando perfeitamente durante o pré-processamento após processar os vídeos e partir para o treinamento simplesmente não funcionava, inúmeras tentativas, pesquisas e horas foram gastas até descobrir que o código não executava com o CUDA 9 (vem por padrão neste launcher) apesar da versão 1.5 do TensorFlow ser compatível e sim com CUDA 8. Após essa experiência amarga decidi realizar a montagem do ambiente manualmente (o que eu deveria ter feito desde o começo). E aqui iniciamos outra batalha com a instalação das dependências e bibliotecas as quais ressalto cmake, dlib e o CUDA 8 mas nada que uma boa leitura nas documentações oficiais e uma pesquisa pela comunidade não resolva, a montagem do ambiente para a perfeita execução do código é algo bem trabalhoso.

Com o ambiente em pleno funcionamento partimos para a execução do algoritmo. Para meu experimento utilizei o famoso Ragnar de Vikings e um conhecido que tem uma semelhança com o mesmo e claro com o consentimento da cobaia. Como é de se esperar não havia vídeos suficientes com minha cobaia no YouTube e os que existiam estão em 360p com isso em mente foi feito a primeira tentativa com um total de 20k de imagens em torno de 10k para cada, após 50 horas de treinamento descobri que a qualidade da imagem tem grande peso. Vejam o resultado e tirem suas conclusões.

Como pode ser observado foi gerado um borrão mas podemos ver algumas características da cobaia, realizei outras tentativas melhorando o vídeo, escolhendo as melhoras imagens geradas para treinamento e sempre resultando no mesmo. A última tentativa foi gravar um vídeo da cobaia em boa qualidade e utiliza-lo, em algumas publicações na internet dizem que apenas 300–500 imagens já obteria um resultado interessante gravei apenas 1m de vídeo o que após o processamento gerou cerca de 1200 imagens totalizando 11k na última tentativa. Com 72h de treinamento observei que o Loss não era mais reduzido ficando entre 1100–1200 para os 2 modelos o que podemos atribuir a falta de imagens suficientes para o treinamento, devido a isso decidi encerrar a experiência, mas ainda sim satisfeito com o resultado e com toda aprendizagem adquirida. Abaixo resultado final.

Faça você também

1-Utilize pessoas que tenham grande quantidade material de qualidade para obtenção das imagens e procure utilizar vídeos que tenha várias posições dos rostos, pois é comum acontecer no deepfake um defeito visual quando o rosto vira ou é mostrado em uma posição que não foi treinada o suficiente.

2-Utilize o melhor hardware que conseguir principalmente GPU.

3-Não se prenda a minha experiência, o que deu errado para mim, pode dar certo para você.

4-Não utilize deepfake para o lado obscuro da força

Espero que tenha esta publicação ajude novos aventureiros na busca do conhecimento sobre deepfake e lembre-se tudo o que fizer a responsabilidade é inteiramente sua.

Para nosso projeto foi utilizado como base o projeto do Gaurav Oberoi (https://hackernoon.com/exploring-deepfakes-20c9947c22d9)

Source: Deep Learning on Medium