Skip to content
Snippets Groups Projects
Select Git revision
  • main
1 result

mso3_4-be2_cgan

  • Forked from Dellandrea Emmanuel / MSO_3_4-TD2
    9 commits behind, 1 commit ahead of the upstream repository.
    user avatar
    Advitam66 authored
    e606c10d
    History

    GAN & cGAN tutorial.

    Le but de ce BE est de se familiariser avec les GAN. Deux types d'architectures sont mises en place ici, à savoir un Deep Convulotional GAN (DC-GAN) et un Conditional GAN (cGAN).

    DC-GAN

    On cherche ici à réutiliser un réseau entrainé à générer des visages de célébrité pour lui apprendre à générer des chiffres manuscrits. Le dataset utilisé pour ça est le MNIST dataset.

    On récupère le code présent sur le site https://pytorch.org/tutorials/beginner/dcgan_faces_tutorial.html. Il nous faut ensuite modifier le jeu de données utilisé et qulques paramètres comme le nombre de channels car on passe d'image codées en RGB à des niveaux de gris.

    Sont ensuite entrainés succéssivement le générateur et le discriminateur.

    Le graphique ci-dessus montre bien les apprentissages successifs des deux parties de l'architecture. Les résultats obtenus sont présentés sur l'image suivante :

    Même si tous les échantillons ne sont pas réussis, l'allure générale est plutôt satisfaisante. Un apprentissage plus long permettrait probablement d'obtenir de très bons résultats.

    Conditional GAN

    La deuxième partie de ce BE porte sur un conditional GAN. Le but n'est plus de générer une image à partir d'un simple bruit mais d'également prendre en compte une image d'entrée. Plus précisémment, on souhaite produire une image réaliste de facade correspondant à une esquisse très simple. On dispose pour cela d'un jeu de données de couples d'images avec une telle esquisse et une photo réelle. L'image suivante en donne un exemple : La structure du générateur est plus complexe que précédemment, on utilise un U-net qui consite à appliquer un encoder et un décodeur à l'image de départ tout en réalisant des connections entre les couches corresponantes de l'encodeur et du décodeur. Cela a l'avantage de capter des schémas de données à différentes échelles spatiales et d'éviter des problèmes de perte d'information ou de vanishing gradient.

    L'architecture choisie est précisément la suivante :

    Le discriminateur est quant à lui un PatchGAN, une succession de couches convolutives.

    Maintenant que l'architecture est construite, il faut définir une erreur qui va permettre un apprentissage. On forme une loss function à partir de 2 erreurs différentes. La première correspond à l'erreur de classification du discriminateur. C'est une erreur binaire qui est inversée pour le discriminateur et le générateur (si le discrimateur a juste c'est une erreur du côté du générateur). Ensuite on rajoute une erreur pixel à pixel entre l'image du générateur et la vraie image associée à une esquisse. La combinaison de ces 2 erreurs permet de générer les images de facades correspondant aux esquisses.

    La suite du projet n'a pas été réussie à cause d'un problème dans l'entrainement des réseaux. La partie évaluation des résultats n'a donc pas pu être réalisée.