1. 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.
2. 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…).
3. 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
4. et donc entièrement testée. Le lecteur peut trouver des exemples d’images générées
par cette moitié d’architecture cidessous (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
5. 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:
6. 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,
7. 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.
8. 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 + mappage + 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
9. 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:
10. 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.
11. 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
12. 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
13.
14. Exemples sur nouvelles images.
On peut se rendre de l’over-fitting présent sur les images d’avant.