14
Méthode de densification d’une base d’images utilisant du Deep Learning Robin NICOLET ロバン・ニコレ Département Informatique INSA de Lyon 2016 Sous la responsabilité de : 中山英樹 (Hideki NAKAYAMA) : The University of Tokyo Stefan DUFFNER : Département Informatique Résumé: Ce PFE en recherche s'inscrit dans le cadre d'un échange académique avec l'université de Tokyo. La génération de contenu graphique en masse est très coûteuse et les jeux vidéo ne s'y trompent pas. Il est très fréquent que les éléments à caractère aléatoire partagent un petit nombre d’éléments graphiques. C'est pour faire face à cette contrainte que ce projet cherche à trouver une méthode deep learning pour créer artificiellement du contenu supplémentaire, à partir d'une collection d'images existante. Ce rapport présente deux méthodes qui tentent de répondre au problème. La première, qui dérive d'une publication précédente, sert de base pour la deuxième qui, malgré qu'elle soit inachevée, présente de bien meilleurs résultats. Mots-clés: réseaux de neurones, images, recherche Abstract: This graduation project was conducted during an academic exchange at The University of Tokyo. Mass production of graphic content is quite expensive and who knows that better than video game producers ? Frequently, one will come across randomly generated elements in a game that share the same graphic elements. This project aims to face this constraint, try and develop a deep learning method to artificially generate additional content from an existing collection of images. This report presents two methods trying to address this problem. The first one, which directly derives from a publication, becomes the foundation for the unfinished, yet already better, second method. Keywords: neural networks, images, research 1 Introduction Lorsqu’il s’agit de concevoir des environnements virtuels, la génération de contenu peut s’avérer être un enjeu de taille. Une grande partie de ce contenu est souvent généré de façon aléatoire car il ne serait pas raisonnable de produire celui-ci à la main. On peut noter le cas classique des RPG (jeux de rôle) dont les items gagnés par le joueur ont souvent des noms et des caractéristiques aléatoires. Cependant, ceux-ci partagent souvent un petit nombre d’illustrations. La raison est simple: il serait bien trop long et coûteux de créer assez d’illustrations différentes et la génération spontanée d’images de qualité est encore un problème ouvert.

Rapport de Synthese

Embed Size (px)

Citation preview

Page 1: Rapport de Synthese

Méthode de densification d’une base d’images utilisant du Deep Learning 

Robin NICOLET ロバン・ニコレ

Département Informatique

INSA de Lyon 2016

Sous la responsabilité de :

中山英樹 (Hideki NAKAYAMA) : The University of Tokyo Stefan DUFFNER : Département Informatique

Résumé: Ce PFE en recherche s'inscrit dans le cadre d'un échange académique avec l'université de Tokyo. La génération de contenu graphique en masse est très coûteuse et les jeux vidéo ne s'y trompent pas. Il est très fréquent que les éléments à caractère aléatoire partagent un petit nombre d’éléments graphiques. C'est pour faire face à cette contrainte que ce projet cherche à trouver une méthode deep learning pour créer artificiellement du contenu supplémentaire, à partir d'une collection d'images existante. Ce rapport présente deux méthodes qui tentent de répondre au problème. La première, qui dérive d'une publication précédente, sert de base pour la deuxième qui, malgré qu'elle soit inachevée, présente de bien meilleurs résultats. Mots-clés: réseaux de neurones, images, recherche Abstract: This graduation project was conducted during an academic exchange at The University of Tokyo. Mass production of graphic content is quite expensive and who knows that better than video game producers ? Frequently, one will come across randomly generated elements in a game that share the same graphic elements. This project aims to face this constraint, try and develop a deep learning method to artificially generate additional content from an existing collection of images. This report presents two methods trying to address this problem. The first one, which directly derives from a publication, becomes the foundation for the unfinished, yet already better, second method. Keywords: neural networks, images, research

1 Introduction 

Lorsqu’il s’agit de concevoir des environnements virtuels, la génération de contenu peut s’avérer être un enjeu de taille. Une grande partie de ce contenu est souvent généré de façon aléatoire car il ne serait pas raisonnable de produire celui-ci à la main. On peut noter le cas classique des RPG (jeux de rôle) dont les items gagnés par le joueur ont souvent des noms et des caractéristiques aléatoires. Cependant, ceux-ci partagent souvent un petit nombre d’illustrations. La raison est simple: il serait bien trop long et coûteux de créer assez d’illustrations différentes et la génération spontanée d’images de qualité est encore un problème ouvert.

Page 2: Rapport de Synthese

Ce constat est à l’origine de mon projet de recherche à Nayama’s Laboratory, Graduation School of Information Science and Technology, The University of Tokyo . Ce laboratoire de recherche se concentre sur le deep learning , un sous-ensemble du machine learning .

Illustration: L’objectif est de générer des images intermédiaires.

L’objectif de recherche dans lequel s’inscrit ce projet est donc le suivant: à

partir d’un ensemble d’images restreint, générer de nouvelles images, assez différentes pour être considérées comme distinctes de celles déjà existantes mais assez ressemblantes pour tenter de conserver l’unité graphique de l’ensemble des images. On suppose que l’on a le temps et les ressources d’entraîner le réseau spécifiquement pour chaque collection d’images.

1.1 Existant : Publications en relation avec le projet 

Pour rester dans la synthèse, voici deux publications très proches de mon sujet de recherche.

● Learning to Generate Chairs, Tables and Cars with Convolutional

Networks , Dosovitskiy et al., eprint arXiv:1411.5928, 11/2014

Ce papier se concentre sur l’étude d’un réseau de neurones entraîné à produire des images de chaises à partir de plusieurs paramètres d’entrée (type de chaise, rotation, déformation, zoom, etc…).

Page 3: Rapport de Synthese

Le réseau est entraîné à produire des résultats qui sont ensuite comparés à la vraie image, générée à partir d’un modèle 3D. Les auteurs démontrent la capacité du réseau à construire une représentation intelligente (une qui permet une extrapolation) des images qu’il doit produire, en donnant des valeurs quelconques à des paramètres entraînés de façon discrète et en observant les résultats. Avec le recul, c’est de cette publication que ce projet se rapproche le plus. Et c’est sûrement de celle-ci que je partirais si commençais aujourd’hui, n’étant plus débutant en machine learning.

● Unsupervised representation learning with deep convolutional generative adversarial networks , Radford et al., eprint

arXiv:1511.06434, 11/2015 Cette publication formalise une architecture de réseaux de neurones que les auteurs nomment DCGAN (Deep Convolutional Generative Adversarial Network ). Le but est de générer des images similaires à (lire: qui se fondent dans) la masse des images disponibles. Cette méthode mets deux réseaux en duels dans un scénario de police versus faux-monnayeur, où les images sont la monnaie. Ceci mène théoriquement à un cercle vertueux et permet la génération d’images réalistes. En pratique, outre le fait que ce genre d’architecture est assez instable à entraîner, la génération d’images naturelles par cette technique ne dupe rarement un être humain plus de quelques secondes.

  

1.2 Aperçu de l’état courant du projet 

L’architecture actuelle ressemble à celle utilisée pour générer les chaises tout                     en étant pensée pour un problème moins supervisé et faisant usage de réseaux                         adversaires. Par manque de temps, l’architecture complète n’a pas pu être développée                       

Page 4: Rapport de Synthese

et donc entièrement testée. Le lecteur peut trouver des exemples d’images générées                       par cette moitié d’architecture ci­dessous (d’autres sont disponibles en annexe): 

Exemple de résultats. Sur la gauche, une transition linéaire d’une image à une autre. Sur la droite, des images “intermédiaire”.

 

Sur chaque série de résultats visible ci-dessus (18 images par série), les deux images de meilleure qualité sont les vraies images (violet). A côté, on trouve les images que le réseau a été entraîné à produire (orange). Elles sont le résultat d’un encodage qui sert de base à un réseau “peintre” qui génère une image à partir d’un encodage. Les autres images sont le résultat d’une transition linéaire uniforme du premier encodage vers le deuxième pour la partie gauche et non uniforme pour la partie droite (chaque dimension de l’encodage est interpolée aléatoirement).

Illustration. Enchaînement encodeur/paintre

Page 5: Rapport de Synthese

Les autres images sont obtenues en interpolant les encodages de façon linéaire. La suite du projet aurait pour objectif d’entraîner un réseau de neurones à interpoler deux codes afin de trouver de meilleurs résultat parmi l’ensemble des images générables par le réseau peintre.

2 Cadre détaillé du projet 

Ce projet de fin d’études est un projet qui s’inscrit dans le cadre de ma dernière année à l’INSA de Lyon au département informatique, en échange à l’Université de Tokyo. Les masters japonais étant nécessairement des masters recherche, mon projet est devenu un projet de recherche avant même de commencer, au laboratoire Nakayama dans lequel j’ai été accepté. Ce laboratoire se concentre sur la résolution de problèmes nécessitant l’utilisation de techniques de machine learning et plus précisément de deep learning.

En bref, le machine learning , ou apprentissage automatique en français, concerne l’ensemble des techniques algorithmiques essayant de réaliser des programmes qui apprennent et “comprennent” des concepts plus ou moins abstraits, souvent dans le but de réagir plus intelligemment face à des situations nouvelles. Reconnaissance d’écritures, vocale, d’images, prédiction météo, de recherche, d’entrée clavier, etc… autant d’exemples tout à fait illustrateur de problèmes qui sont “résolus” avec tes techniques de machine learning . Le deep learning , ou apprentissage en profondeur, concerne l’ensemble des méthodes tentant de représenter le problème avec un haut niveau d’abstraction. Typiquement, les données d’entrées vont être traitées en plusieurs fois, réduisant à chaque étape la quantité d’information transmise. Chaque niveau doit alors apprendre comment condenser l’information pour ne garder que ce qui est important pour le problème. En pratique, on constate que ce genre d’architecture, couplé à la montée en puissance des machines, a révolutionné le machine learning ces dernière années, en surpassant beaucoup d’autres méthodes, notamment en reconnaissance vocale et d’images.

De par la nature de ma présence à l’Université de Tokyo et le fonctionnement

de mon laboratoire, il m’est revenu la tâche de choisir mon propre sujet de projet. A l’issue de ma recherche de sujet et de la lecture de nombreuses publications, et suite à l’approbation collective de mon laboratoire et de l’école, me voici alors lancé sur le problème qu’est la génération d’images.

J’ai décidé de travailler principalement sur des sprites de jeux vidéo. Sprite est un mot venant de l’anglais, utilisé dans le jeu vidéo pour désigner un élément graphique à l’écran, possédant possiblement plusieurs états ou non. Dans ce document sprite fera référence à ce genre d’images:

Page 6: Rapport de Synthese

Exemples de sprites des jeux Pokémon, utilisés pour ce projet.

J’ai fait le choix de travailler sur des sprites de jeux vidéo exclusivement car premièrement le jeu vidéo est une de mes passions, et deuxièmement car la taille des images est une grande contrainte. La quantité de variables nécessaire pour générer des images augmente considérablement avec la taille de celles-ci, augmentant les durées de calcul déjà très importantes.

J’ai choisi les sprites des jeux Pokémon pour leur abondance, leur qualité et le fait que la plupart sont découpable en un carré de 64x64 pixels (px) en ne perdant pas ou peu d’information. Toutes les images utilisées ou générées au cours du projet ont la même taille de 64 64px sur 4 canaux: rouge, vert, bleu, alpha/opacité (RGBA).

3 Evolution du projet 

Au début du projet je suis parti sur une architecture de type DCGAN (cf. deuxième publication dans l’introduction). Comme j’étais débutant en machine learning, une bonne partie du début du PFE a été consacrée à comprendre, apprendre les mécanismes en jeu et essayer d’adapter l’architecture à mon problème.

Macro-architecture du DCGAN.

L’architecture de type DCGAN fait intervenir deux réseaux, le générateur et le discriminateur. Le générateur génère des images à partir d’une source d’entropie, dans notre cas un vecteur à N dimensions dont les valeurs sont comprises entre 0 et 1. Ces images générées sont appelées contrefaçons . Ce générateur est composé de plusieurs couches déconvolutives avec rectification. Le discriminateur, qui est chargé de discerner les contrefaçons des vraies images,

Page 7: Rapport de Synthese

prend en entrée une image et donne en sortie un vecteur à deux dimensions (contrefaçon ou pas) dont chacune contient un score; le plus haut score l’emporte.

On peut noter que le générateur peut être considéré comme une fonction d’un ensemble Z, d’où sont pris les vecteurs aléatoires, vers l’ensemble des images RGBA. L’objectif de l’entraînement est alors de modifier les paramètres du générateur pour que l’ensemble généré soit compris dans “l’ensemble des images visuellement correct” par rapport à notre problème, qui est un sous-ensemble de l’ensemble de toutes les images.

Premiers résultats du DCGAN.

Pas encore de gestion de l’opacité (bleu).

En mettant de côté le fond bleu et la qualité médiocre des premiers résultats,

les images générées par un DCGAN sur des ensembles d’images variées sont souvent incompréhensibles pour un humain. Ce type de réseau est très bon pour générer des visages ou des nombres, car il existe souvent des centaines voir milliers d’images très similaires. Dans notre cas, ou le cas d’une banque d’images naturelles comme CIFAR, les images, même si elles sont rangées par classe, sont très variées. Il est souvent très rare dans ce genre de cas de générer des images cohérentes pour un humain. Cependant, le point fort du DCGAN et que les résultats peuvent se révéler très créatifs.

 

   

Page 8: Rapport de Synthese

3.1 Modifications du CGAN 

Ma première tentative d’amélioration des images générées consistait à introduire un mappage des vraies images dans les résultats. Le raisonnement derrière est que les vraies images sont par définition incluses dans l’ensemble des images correctes.

L’ajout d’un buffer pour les images générées afin de pouvoir les donner au discriminateur sur plusieurs générations a aussi largement aidé à réduire les problèmes de dégénérations dans le duel discriminateur/générateur.

Macro-architecture DCGAN + mappag e + buffer

Exemples d’interpolation linéaire avec cette architecture

Le plus gros problème de cette architecture, et c’est peut être là où le manque d’expérience a frappé, est que la correction par le mappage et celle

Page 9: Rapport de Synthese

par le discriminateur se font concurrence. Un peu comme si chacun tirait la corde de son côté. Après de longues tentatives pour améliorer la viabilité de ce système, je suis passé à autre système, même en sachant que je n’aurais peut-être pas le temps de finir. C’est ce qui a mené à l’architecture actuelle.

4 Architecture actuelle  Pour la deuxième approche, j’ai essayé de pallier aux points faibles de la

précédente architecture. Premièrement, on sépare le générateur (qui change de nom pour peintre ) du discriminateur, car bien que ce soit la partie essentielle à la génération de nouveau contenu, l’instabilité de l’entraînement peut s'avérer être un vrai problème.

Nouvelle macro-architecture

On sépare donc le processus en deux temps. Premièrement on entraîne un encodeur à compresser l’information d’une image en un code transmis au réseau peintre, qui est chargé de la repeindre. L’encodeur étant une succession de couche de convolution, on devrait pouvoir avoir une information suffisamment abstraite pour nous permettre d’interpoler les différents codes.

Dans un deuxième temps, et celui-ci va rester théorique malheureusement, on entraîne un réseau mélangeur, probablement entraîné en DCGAN, dont l’objectif est d’apprendre à trouver quel chemin prendre d’un code C1 à un code C2, pour que le résultat conserve un style de qualité. Une fois ce réseau entraîné, on peut théoriquement calculer, deux composantes à la fois, n’importe quelle combinaison linéaire de plusieurs codes. Ce mélangeur peut être défini de cette façon:

Page 10: Rapport de Synthese

Où x, entre 0 et 1, représente la position de c3 entre c1 et c2, en pourcentage du chemin parcouru.

4.1 Résultat actuels 

Sans la deuxième partie prévue, les résultats sont similaires à ceux constatés par la publication sur la génération des chaises. La différence avec leur publication est principalement que l’encodage n’est pas supervisé.

Premièrement, on remarque qu’il y a bien eu un travail d’abstraction dans l’encodeur. Voici par exemple un cas d’interpolation bien réussi:

Interpolation . De gauche à droite, haut en bas. La première et dernière image sont les vraies. Adjacentes, on trouve les images sur lequel le réseau s’est

entraîné.

Pour la suite du raisonnement, on suppose qu’il n’est pas probable que

la simple transition d’une image A vers une image B soit visuellement le meilleur résultat. De plus, nous ne cherchons pas à faire du morphisme, mais à générer du contenu de qualité, en nous aidant de l’existant.

Page 11: Rapport de Synthese

5 Conclusion 

Ce PFE qui s’inscrit dans le cadre de mon échange académique à l’Université de Tokyo a été pour moi l’occasion de découvrir la recherche et le machine learning, notamment la génération d’images. La première solution développée pour répondre au problème de génération de contenu s’est révélée longue et infructueuse mais a servi de fondement, aussi bien au niveau des connaissances que de l’expérience, à une deuxième solution qui a montré de meilleurs résultats sans même être terminée. Si les objectifs de départ ne sont pas vraiment remplis, je garde en tête qu’il aurait fallu que je fasse mieux que les chercheurs qui travaillent actuellement sur le sujet, en moins de six mois, sans expérience.

Je n’ai donc pas vraiment contribué à l’avancement de la recherche dans ce domaine par la parution d’une publication, mais je repars avec de nombreux acquis, dans des compétences que je n’avais même pas.

Références  Unsupervised representation learning with deep convolutional generative adversarial networks , Radford et al., eprint arXiv:1511.06434, 11/2015 Learning to Generate Chairs, Tables and Cars with Convolutional Networks , Dosovitskiy et al., eprint arXiv:1411.5928, 11/2014

Page 12: Rapport de Synthese

ANNEXES Exemples de résultat. Pour chaque image, de gauche à droite puis de haut en bas: Sprite 1 et 9: originaux. Sprite 2 à 8: interp. uniforme. Sprite 10+: interp. aléatoire

Page 13: Rapport de Synthese
Page 14: Rapport de Synthese

Exemples sur nouvelles images. On peut se rendre de l’over-fitting présent sur les images d’avant.