Skip to content
Snippets Groups Projects
Commit e606c10d authored by Advitam66's avatar Advitam66
Browse files

first commit

parent 240ff403
No related branches found
No related tags found
No related merge requests found
This diff is collapsed.
# GAN & cGAN tutorial. # GAN & cGAN tutorial.
We recommand to use the notebook (.ipynb) but the Python script (.py) is also provided if more convenient for you. 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).
# How to submit your Work ? ## 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.
This work must be done individually. The expected output is a repository named gan-cgan on https://gitlab.ec-lyon.fr. It must contain your notebook (or python files) and a README.md file that explains briefly the successive steps of the project. The last commit is due before 11:59 pm on Wednesday, March 29, 2023. Subsequent commits will not be considered. 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.
\ No newline at end of file
Sont ensuite entrainés succéssivement le générateur et le discriminateur.
![](error.png)
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 :
![](chiffres.png)
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 :
![](building.png)
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 :
![](unet.png)
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.
building.png

56.4 KiB

chiffres.png

186 KiB

error.png 0 → 100644
error.png

31.6 KiB

unet.png 0 → 100644
unet.png

19.3 KiB

0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment