Crie lentes para o Snapchat usando pix2pix

Meu artigo anterior tem quase o mesmo título, com a única diferença que criei lentes para o Snapchat usando algoritmos dlib e openCV, e hoje quero mostrar como você pode obter o resultado usando o aprendizado de máquina. Essa abordagem permitirá não se envolver no projeto manual do algoritmo, mas obter a imagem final diretamente da rede neural.


Aqui está o que temos:



O que é pix2pix?


Essa é uma maneira de converter uma imagem em uma imagem usando redes de contenção (geralmente conhecidas como pix2pix).


O nome "pix2pix" significa que a rede é treinada para converter a imagem de entrada em sua imagem de saída correspondente. Aqui estão exemplos de tais transformações:



O recurso mais interessante do pix2pix é sua versatilidade . Em vez de criar um novo algoritmo ou um novo modelo para cada uma das tarefas acima, basta usar diferentes conjuntos de dados para treinar a rede.


Diferentemente das abordagens usadas anteriormente, o pix2pix aprende a resolver problemas muito mais rapidamente e com um conjunto de treinamento menor. Por exemplo, os resultados abaixo foram obtidos ao treinar usando a GPU Pascal Titan X em um conjunto de dados de 400 pares de imagens e em menos de duas horas.



Como o pix2pix funciona?


O pix2pix usa duas redes neurais aprendendo em paralelo:


  1. Gerador
  2. Discriminador

O gerador tenta gerar uma imagem de saída a partir dos dados de treinamento de entrada e o discriminador tenta determinar se o resultado é real ou gerado.


Quando o gerador produz imagens indistinguíveis (discriminadoras) das reais, começamos a treinar o discriminador nelas e nas imagens reais. Quando o discriminador consegue distinguir imagens reais das geradas, novamente começamos a treinar o gerador para que ele aprenda novamente a enganar o discriminador.


Tal "corrida armamentista" leva ao fato de que fica difícil para uma pessoa distinguir imagens reais das geradas.


Prática


Treinaremos nosso gerador de filtro para o Snapchat em imagens de 256x256 (tamanhos grandes exigirão mais memória de vídeo). Para criar um conjunto de dados, use o código do tutorial anterior .


Baixei muitas imagens de rosto e apliquei um filtro “Thug Life Glasses” em cada uma delas. Acontecerá algo como estes pares:



Para criar o modelo, use o repositório pix2pix baseado no TensorFlow. Clone e instale o Tensorflow.


O comando para iniciar o treinamento será o seguinte:


python pix2pix.py --mode train --output_dir dir_to_save_checkpoint --max_epochs 200 --input_dir dir_with_training_data --which_direction AtoB 

O parâmetro which_direction define a direção do treinamento. AtoB significa que queremos transformar a imagem A (esquerda, sem óculos) na imagem B (direita, com óculos). A propósito, observe que o pix2pix pode aprender com êxito como restaurar a imagem original de uma imagem com um filtro, basta alterar a direção do treinamento.


Você pode monitorar o progresso do treinamento usando o tensorboard, para o qual você precisa executar o comando:


 tensorboard --logdir=dir_to_save_checkpoint 

Assim que você perceber que os resultados nos dados de treinamento se tornaram muito bons, você poderá interromper o treinamento e testar o modelo em dados arbitrários. Você pode continuar o treinamento a partir do último ponto de controle da seguinte maneira:


 python pix2pix.py --mode train --output_dir dir_to_save_checkpoint --max_epochs 200 --input_dir dir_with_training_data --which_direction AtoB --checkpoint dir_of_saved_checkpoint 

Conclusão


O advento das redes generativas do tipo pix2pix abre grandes perspectivas de uma solução universal e simples para todos os tipos de tarefas de processamento de imagem.



Source: https://habr.com/ru/post/pt483310/


All Articles