Créez des objectifs pour Snapchat en utilisant pix2pix

Mon article précédent a presque le même titre, à la seule différence que j'ai créé des objectifs pour Snapchat en utilisant algorithmiquement dlib et openCV, et aujourd'hui je veux montrer comment vous pouvez obtenir le résultat en utilisant l'apprentissage automatique. Cette approche permettra de ne pas s'engager dans la conception manuelle de l'algorithme, mais d'obtenir l'image finale directement à partir du réseau neuronal.


Voici ce que nous obtenons:



Qu'est-ce que pix2pix?


Il s'agit d'un moyen de convertir une image en une image à l'aide de réseaux de contention (communément appelés pix2pix).


Le nom "pix2pix" signifie que le réseau est formé pour convertir l'image d'entrée en son image de sortie correspondante. Voici des exemples de telles transformations:



La caractéristique la plus cool de pix2pix est sa polyvalence . Au lieu de créer un nouvel algorithme ou un nouveau modèle pour chacune des tâches ci-dessus, il suffit simplement d'utiliser différents ensembles de données pour former le réseau.


Contrairement aux approches utilisées précédemment, pix2pix apprend à résoudre les problèmes beaucoup plus rapidement et avec un ensemble d'entraînement plus petit. Par exemple, les résultats ci-dessous ont été obtenus lors d'une formation à l'aide du GPU Pascal Titan X sur un ensemble de données de 400 paires d'images et en moins de deux heures.



Comment fonctionne pix2pix?


pix2pix utilise deux réseaux de neurones apprenant en parallèle:


  1. Générateur
  2. Discriminateur

Le générateur essaie de générer l'image de sortie à partir des données d'apprentissage d'entrée et le discriminateur essaie de déterminer si le résultat est réel ou généré.


Lorsque le générateur produit des images indiscernables (discriminateur) des vraies, nous commençons à former le discriminateur sur elles et sur les images réelles. Lorsque le discriminateur réussit à distinguer les images réelles des images générées, nous recommençons à entraîner le générateur pour qu'il réapprenne à tromper le discriminateur.


Une telle «course aux armements» conduit au fait qu'il devient difficile pour une personne de distinguer les images réelles des images générées.


Pratique


Nous formerons notre générateur de filtres pour Snapchat sur des images 256x256 (les grandes tailles nécessiteront plus de mémoire vidéo). Pour créer un jeu de données, utilisez le code du didacticiel précédent .


J'ai téléchargé de nombreuses images de visages et appliqué un filtre «Thug Life Glasses» à chacune. Il en résultera quelque chose comme ces paires:



Pour créer le modèle, prenez le référentiel pix2pix basé sur TensorFlow. Clonez-le et installez Tensorflow.


La commande pour démarrer la formation sera la suivante:


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

Le paramètre which_direction définit la direction de la formation. AtoB signifie que nous voulons transformer l'image A (gauche, sans lunettes) en image B (droite, avec lunettes). À propos, notez que pix2pix peut apprendre à restaurer l'image d'origine à partir d'une image avec un filtre, il suffit de changer la direction de la formation.


Vous pouvez suivre la progression de l'entraînement à l'aide de tensorboard, pour lequel vous devez exécuter la commande:


 tensorboard --logdir=dir_to_save_checkpoint 

Dès que vous voyez que les résultats sur les données d'entraînement sont devenus assez bons, vous pouvez arrêter l'entraînement et tester le modèle sur des données arbitraires. Vous pouvez continuer l'entraînement à partir du dernier point de contrôle comme suit:


 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 

Conclusion


L'avènement des réseaux génératifs de type pix2pix ouvre de grandes perspectives pour une solution simple et universelle à toutes sortes de tâches de traitement d'image.



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


All Articles