Criando Faces Fakes com Redes Neurais
Nesse artigo vou explicar uma breve introdução de como as Deep Convolutional Generative Adversarial Networks (DCGANs) funcionam, e vamos criar imagens de faces de forma muito simples.
Uma breve introdução: Gans
Para entender as Gans, nos precisamos entender dois termos: o Gerador e o Discriminador. O primeiro e responsável por criar as imagens, ele aprende uma representação e então gera imagens similares, enquanto que o discriminador aprende a discriminar se aquela imagem e fake ou real, ele olha para a image gerada e a imagem real e classifica elas como sendo reais ou fakes.
Basicamente o nosso intuito e ‘enganar’ o discriminador, com o passar da aprendizagem nosso gerador vai ser capaz de gerar imagens fakes que são muito similares com as reais, e nosso discriminador vai classifica a imagem fake como sendo real.
O que são DCGANs ?
Diferente das Gans, as DCGANs usam redes convolucionais que de longe possuem um desempenho melhor para imagens comparado as redes neurais convencionais.
Redes Neurais Convolucionais: https://medium.com/neuronio-br/entendendo-redes-convolucionais-cnns-d10359f21184
Vamos começar :
Utilizaremos o pytorch que e muito poderoso e fácil de implementar.
Começamos importando todas as bibliotecas necessarias na implementação e também as imagens.
Nessa etapa, construímos nosso conjunto de dados, utilizando o HaarCascade para detectar as faces nas imagens, recortamos somente as faces, criamos nossa classe para processar as imagens e finalizamos utilizando o dataloader para carregar as imagens.
Download do HaarCascade: https://bityli.com/Fb9FB
Coloque o arquivo do HaarCascade e passe o path correto.
Finalmente podemos criar nossas duas redes neurais, o discriminador e o gerador:
Chegamos no treinamento, vamos treinar por apenas 25 épocas não se esqueça de disponibilizar uma GPU para o treinamento, você pode utilizar o Google Colab com uma GPU.
Aqui precisamos analisar cuidadosamente, apesar de poucas épocas o nosso erro do gerador diminuiu enquanto que do nosso discriminador aparentemente não variou muito, mas aqui nosso intuito e justamente enganar nosso discriminador, precisamos fazer o erro do gerador diminuir, com um modelo mais poderosos e mais épocas o erro do discriminador pode subir.
Criando novas faces
Conclusão:
As imagens ficaram bastante ruidosas e embasadas, as imagens estão decentes podemos ver que se trata de rostos, mas não estão muito realistas.
Código completo no Google Colab.
Fontes:
As implementações foram encontradas no livro abaixo.