CycleGAN : pierre fondatrice de la génération non supervisée

CycleGAN : pierre fondatrice de la génération non supervisée

2019-04-14

Cet article vise à présenter une architecture fondamentale qui a fortement révolutionné les modèles génératifs, tout particulièrement selon un apprentissage non supervisé. Malgré un certain « âge » (CycleGan remonte à mars 2017), cette approche reste une pierre angulaire dans les modèles génératifs à connaître absolument si l’on désire s’intéresser au sujet. Comme pour le dernier article présentant AlphaGo [https://datalchemy.net/#/blog/alphago], la première partie vise un « grand public » là où la seconde est dédiée aux data-scientists, ingénieurs ou chercheurs ayant des bases correctes dans ce domaine.

Présentation globale.

Modèles génératifs ?

On parle de « modèles génératifs » pour qualifier les architectures de réseaux de neurones ayant pour objet de générer une donnée en respectant au mieux sa diversité et ses particularités. Une telle architecture, pendant son apprentissage, prendra en compte un dataset contenant un grand nombre d’éléments et tentera de générer de nouveaux éléments reprenant les règles haut niveau présentes dans le dataset. La majorité des exemples portent sur la génération d’images, et l’on pourra donc entraîner un tel modèle sur un datasets de photographies de visages pour créer un modèle générant de nouveaux visages.

Deux remarques : • Un bon modèle ne génèrera pas exactement la donnée présente dans le dataset d’entraînement (ce qui serait une forme d’overfit), mais de nouveaux éléments relativement originaux. • L’objectif d’un tel modèle est donc, ultimement, d’apprendre la distribution probabiliste du dataset, autrement dit, d’identifier l’ensemble des variances possibles et leurs probabilités d’une part, et l’ensemble des « constantes » d’autre part. Ainsi, à partir d’un dataset d’images de visages, un « bon » modèle apprendra que tout visage contient une bouche, un nez, des yeux, etc. Il fera facilement varier la couleur des yeux, de la peau, la forme et la couleur de la chevelure, selon les variances apprises depuis le dataset d’entraînement.

Ci-dessous un exemple de visages générés par un modèle assez ancien, le Variational AutoEncoder

variational-autoencoder-faces

Les modèles génératifs sont remontés à la surface en 2014 à partir de deux travaux qui chacun présageront d’une architecture fondamentale : les Variational AutoEncoders, de Kingma et al [https://arxiv.org/abs/1312.6114], qui offrent un canevas théorique de travail assez confortable pour une qualité plus critiquable, et les Generative Adversarial Networks (GAN) de Goodfellow et al [https://arxiv.org/abs/1406.2661]. Ces derniers sont aujourd’hui encore plus obscure dans la compréhension de leur fonctionnement, mais donnent des résultats de qualité bien supérieure.

Ci-dessous, vous pouvez visualiser des résultats de génération récents issus d’un projet de NVidia sur la génération de visages [https://arxiv.org/abs/1812.04948]

samples nvidia visages

Utilité et modèle génératif conditionnel

Sous sa forme « brute », un modèle génératif n’offre pas forcément grand intérêt dans un cadre industriel. Si ce processus est extrêmement puissant en ceci qu’il « apprend » une distribution de probabilité à partir d’un dataset, que l’on puisse générer de nouveaux éléments « originaux » n’a pas directement d’applications pratiques, excepté dans certains cas extrêmes d’enrichissement de datasets.

L’intérêt peut devenir beaucoup plus clair dès lors que l’on s’intéresse aux modèles génératifs conditionnels. Ces modèles sont toujours capables de générer de la donnée, mais à partir d’une autre information en entrée. Si de nombreuses implémentations existent de cette approche, une des plus parlantes et des plus récentes est le Pix2Pix (et son cousin, Pix2PixHD) qui exploitent les modèles génératifs pour transformer une image en une autre image et ainsi reproduisent une transformation intéressante [https://tcwang0509.github.io/pix2pixHD/]. Ainsi, par exemple, on peut entraîner un modèle à transformer une carte sémantique en photographie :

teaser 960

Les concepteurs (NVidia toujours, les esprits chagrins remarqueront que quand des chercheurs baignent dans un océan de GPUs, la recherche avance plus vite) proposent même de contrôler le processus, par exemple dans un outils qui à partir d’une carte sémantique génère les différentes variantes du visage possible :

face short

À ce stade, nous avons donc un moyen de générer un modèle capable de transformer une donnée selon une sémantique complexe. Entre autres possibilités : générer un plan à partir d’une photographie satellite, générer une estimation de profondeur de champs à partir d’une photographie, etc.

Néanmoins, un blocage apparaît alors, celui de l’apprentissage supervisé. Pour pouvoir mettre en place un tel entraînement, il nous faut un dataset de taille correcte contenant l’intégralité des correspondances. Autrement dit, si nous voulons entraîner un modèle à convertir une information depuis une forme A vers une forme B, il faudra accumuler plusieurs milliers d’exemples contenant à chaque fois l’information sous sa forme A et sous sa forme B. La création d’un tel dataset est souvent rédhibitoire en termes de coût.

CycleGAN

C’est dans ce contexte qu’intervient la publication du CycleGAN. Son objectif est similaire au pix2pix, soit, pouvoir générer à partir d’une image sa transformation dans un autre domaine. L’approche, en revanche, est radicalement différente en ceci qu’elle est non supervisée. Plus besoin d’avoir un dataset avec, pour chaque image input, le résultat voulu correspondant à cette image.

L’idée est ici d’accumuler deux datasets, un pour chaque domaine, mais sans correspondance. Par exemple, si nous désirons entraîner un modèle à convertir un paysage d’été en paysage d’hiver, nous accumulerons deux datasets contenant respectivement de nombreux paysages d’été et de nombreux paysages d’hiver, sans avoir de correspondance directe d’un paysage à l’autre. Et, par le biais d’une architecture particulière (cf partie pour data-scientists), dans certaines conditions, le modèle apprendra à générer correctement la transformation d’une donnée d’entrée nouvelle :

cyclegan teaser

De nombreux exemples sont visibles sur la page des auteurs : [https://junyanz.github.io/CycleGAN/]

Cette approche est particulièrement intéressante en ceci qu’elle évite la création onéreuse d’un dataset contenant chaque correspondance. Mais surtout, il s’agit d’un des travaux fondamentaux portant sur des approches non supervisées de génération ou transformation. Ce courant de recherche n’a pas cessé, et des travaux ont récemment proposé de la segmentation d’images, de la traduction ou de la transformation musicale sans supervision. Plus ces travaux progressent, et plus nous nous rapprochons d’une nouvelle ère où nous pourrons travailler sur des opérations complexes de réseaux de neurones sans être handicapés par ce besoin d’accumuler une large base supervisée, besoin qui souvent détruit dans l’œuf un projet intéressant d’intelligence artificielle.

CycleGan : a master of stenography.

Suite à la sortie du CycleGAN, de nombreux chercheurs ont étudié le fonctionnement de ces réseaux et leurs biais. Un travail passionnant est CycleGan, a Master of Stenography [https://arxiv.org/abs/1712.02950] où les auteurs ont observé que le CycleGAN dissimulait au sein d’une image générée assez d’information pour pouvoir regénérer l’image originale à partir de la transformation.

En effet, une des particularités du CycleGan est d’apprendre conjointement, entre deux domaines d’images (A et B, par exemple photographies et dessins), une transformation de A vers B et une transformation de B vers A. Dès lors (cf partie data-scientists), CycleGan sera encouragé pendant son apprentissage à transformer un élément de A vers B, puis à transformer le résultat de B vers A. Ci-dessous deux exemples, un de paysage d’hiver vers paysage d’été, l’autre de photographie satellite vers plan. La première colonne donne l’image de départ (dans le domaine A), la deuxième la transformation (dans le domaine B), et la troisième colonne donne la transformation de B vers le domaine de départ, A :

consistancy-sample

La question posée est de comprendre comment le réseau, à partir de l’image de plan, peut retrouver une photographie satellite avec autant de détails, détails qui étaient totalement absents de l’image de plan générée. La réponse est que CycleGan dissimule des détails de l’image originale à l’intérieur de l’image générée, et ce d’une manière imperceptible. Cette découverte n’invalide pas en soi l’intérêt du cycleGAN, mais peut être vu comme une forme de tricherie de la part du cycleGan dans sa capacité à reconstruire l’image originale depuis la transformation, en faussant en partie la compréhension que nous avions de son apprentissage. On peut voir cela comme une forme d’attaque adversariale sur ce modèle.

Présentation technique.

Public : data-scientists, chercheurs ou ingénieurs motivés

_ Pré-requis : Generative Adversarial Networks, adversarial attacks._

Modélisation du problème

Supposons que nous ayons deux domaines, X et Y, avec pour chacun un grand nombre d’éléments sans correspondance directe d’un élément vers l’autre. L’idée va être de mettre en place deux architectures de Generative Adversarial Network (GAN), chacune cherchant à générer un élément d’un domaine vers l’autre. Nous aurons ainsi : • Du domaine X vers le domaine Y, un générateur G et un discriminateur DY • Du domaine Y vers le domaine X, un générateur F et un discriminateur DX.

En première instance, la fonction de coût qui va définir l’apprentissage du modèle va reprendre la formulation d’un GAN et sa fonction de coût type. Ainsi, pour la génération de X vers Y, notre fonction de coût sera :

loss1cyclegan

Selon le jeu de minmax classique, où le premier terme encourage le discriminateur à correctement classifier des images issues du domaine Y, et le second terme encourage en même temps le générateur à « tromper » le discriminateur (lui faire classifier ses générations comme appartenant au domaine Y) et le discriminateur à ne pas classifier les images générées comme appartenant au domaine Y. Similairement, pour la génération du domaine Y vers le domaine X, une fonction de coût équivalente existera.

Avec seulement ces fonctions de coût, les mappings d’un domaine vers l’autre appris n’auraient aucune raison de créer, à partir d’une image de X, un élément de Y qui corresponde à X selon des règles sémantiques de haut niveau. Pour assurer que ce mapping soit une transformation conservant des informations importantes de l’image d’origine, une deuxième composante est rajoutée à la fonction de coût, soit la cycle consistancy. L’idée est que si l’on génère à partir d’une image x sa transformation y par le biais du générateur G, et si l’on utiliser ensuite le générateur F pour générer une transformation x’ à partir de y, on veut que x’ soit le plus proche possible de l’image d’entrée x. Prenant en compte les deux sens (X->Y->X et Y->X->Y), on obtient une deuxième composante de la fonction de coût :

loss2cyclegan

Cette logique est reprise sur le schéma ci-dessous issue de la publication :

cyclegraph

La fonction de coût finale est une somme pondérée des fonctions de coût usuelles de GANs et des fonctions de coût cycle consistancy définies plus haut, pour un apprentissage complet.

On peut noter que cette architecture peut être vue autrement, soit comme l’apprentissage de deux autoencoders, le premier étant GoF et le second FoG. Nous apprenons un autoencoder pour chacun des domains X et Y selon un apprentissage adversarial.

Implémentation

L’architecture du générateur est un réseau convolutif classique avec dans l’ordre deux convolutions avec un stride de 2, puis un certain nombre de blocs résiduels, le nombre dépendant de la dimension générée (6 blocs pour du 128x128 et 9 pour du 256x256). La technique de régularisation d’instance normalization est appliquée, comme c’est souvent le cas dans les architectures génératives.

Le discriminateur reprend lui l’architecture des PatchGANs [https://arxiv.org/pdf/1611.07004.pdf] de taille 70x70, l’intérêt étant que l’architecture est indépendante de la dimension de l’image d’entrée.

Pour l’entrainement du modèle, deux techniques particulières ont été implémentées pour stabiliser l’apprentissage :

• Dans la fonction de coût, l’expression de log-likelihood est remplacée par une distance de moindres carrés

• Le discriminateur n’est pas entraîné directement sur la dernière version du générateur, mais sur un échantillon parmi les 50 dernières images générées, ceci afin d’éviter la malédiction usuelle d’un discriminateur qui devient trop vite trop performant et détruit ainsi l’apprentissage.

En termes de pondération de la fonction de coût, la cycle consistancy est 10 fois plus importante que le coût issu de l’entraînement « classique » d’un GAN. L’optimiseur est Adam, avec un learning rate initial de 0.0002 qui décroit linéairement toutes les 100 epochs.

Ci-dessous, le graphique montre des exemples en ne gardant qu’une partie de l’architecture (donc de la fonction de coût) : uniquement le cycle, uniquement le GAN classique, GAN+Forward sans backward consistency loss, GAN+Backward sans la forward consistency loss et enfin le cycleGAN.

ablations cyclegan

Analyse

Le CycleGAN peut évidemment échouer, et prévoir les échecs d’apprentissage est un problème non trivial. Une source d’erreur peut être évidemment que l’image testée n’avait aucun équivalent proche dans le dataset d’entraînement. D’autre part, la qualité obtenue reste en deçà de la qualité issue d’un processus supervisé classique (comme Pix2Pix). Ci-dessous, certains exemples d’erreurs proposés par les auteurs. La conversion dog->cat échoue à faire autre chose que des modifications minimales sur l’image d’entrée. La horse->zebra écouhe elle car aucune image de ce type (avec un cavalier) n’existant dans le dataset :

failures

Au-delà, l’analyse CycleGan, a Master of Stenography apporte des réponses à la manière dont le réseau adresse la cycle consistancy loss. En effet, cycleGan va dissimuler dans une image générée l’information nécessaire aux détails de la reconstruction (les détails dans l’histogramme ont été accentués pour visualisation) :

stenography 1

Le phénomène est très intéressant en ceci qu’il explique comment le cycleGan adresse la contrainte de reconstruction imposée par sa fonction de coût, alors que le format « intermédiaire » contiendra beaucoup moins de détails que l’image originelle.

C’est un rappel de ce qu’un modèle, une fois la fonction de coût prête, sera « prêt à tout » pour adresser cette contrainte d’optimisation jusqu’à contourner le sujet que l’on voulait adresser. Ce point n’est pas forcément une défaillance du cycleGan dans la mesure où son utilisation est de transformer l’information d’un domaine à l’autre, là où la cycle consistency loss est une contrainte de correspondance. Mais ce comportement peut être une source de défaillance dans un modèle de ce type.

Plus intéressant, les auteurs de cette étude voient ce comportement comme un biais d’attaque adversariale. Et démontrent qu’ils peuvent modifier n’importe quelle image générée de manière à contrôler intégralement la transformation de cette image générée dans le domaine de départ. Dans le schéma ci-dessous, la ligne de droite montre que l’image donne une transformation radicalement différente de ce à quoi on pouvait s’attendre (la troisième colonne est fortement accentuée à des fins de visualisation).

adversarial cyclegan

Pour aller plus loin

L’approche CycleGan a été étendue sur des mappings de plusieurs domaines vers plusieurs domaines (Augmented cyclegan: Learning many-to-many mappings from unpaired data [https://arxiv.org/abs/1802.10151]) ou (Combogan: Unrestrained scalability for image domain translation [http://openaccess.thecvf.com/content_cvpr_2018_workshops/w13/html/Anoosheh_ComboGAN_Unrestrained_Scalability_CVPR_2018_paper.html]). La critique du CycleGan a notamment été poussée sur les applications du CycleGan a l’analyse médicale (Distribution matching losses can hallucinate features in medical image translation, Cohen et al). D’une manière générale, la génération non supervisée a été un large terrain d’expérimentations en 2018 et continue encore aujourd’hui.

Naturellement, si vous avez trouvé des erreurs ou approximations dans cet article, n’hésitez pas à nous les signaler et nous adresserons au plus vite le sujet.