Skip to content

keyber/Single-Image-Super-Resolution

Repository files navigation

Single-Image-Super-Resolution

Repo du stage d'été de M1 (2018-2019) dans l'équipe MLIA (encadrant Patrick Gallinari)

Carnet de bord

  • semaine du 27/05 (début du stage de Keyvan)

    • Lecture d'articles de recherche (GAN, GAN conditionnel, SRGAN, Amortized MAP Inference for image SR)
    • Téléchargement de celebA
    • Tuto DCGAN pytorch
  • semaine du 03/06

    • Implémentation de SRGAN
      • adverserial loss: Generator et Disciminator customisables
      • content loss via MaskedVGG (concaténation de VGG22, VG54, ...)
      • initialisation par défaut de PyTorch, on peut utiliser une MSE pendant 1 epoch comme initialisation Résultats SRGANx2
    • Exécution du code sur GPU
    • Sauvegarde des réseaux entraînés
    • Lecture de AmbientGAN et de l'article d'Emmanuel
    • téléchargement de MNIST (base de données plus simple pour les modèles). Pas pratique au final car images trop petites (et un seul channel)
  • 10/06

    • Début de prise en main du framework d'Emmanuel (privé) qui se sert de:
      • Ignite (pour ne pas avoir à écrire la boucle d'entraînement et logger les résultats)
      • Sacred (pour sauvegarder les configs utilisées)
  • 17/06

    • Emmanuel nous présente son modèle de super résolution (qui se base sur AmbientGAN)
    • Implémentation du modèle en partant de notre code du SRGAN
    • Début d'implémentations de SRGAN et du modèle d'Emmanuel sur le framework d'Emmanuel
  • 24/06

    • Téléchargement et entraînement sur la base de données flickr8k
    • Implémentation de SRGAN sur le framework d'Emmanuel
    • Tentatives (infructueuses) d'entraînement du réseau en x4:
      • La loss D est toujours très faible
      • La loss G augmente parfois énormément puis stagne pendant une centaine d'itérations puis redescent
    • Lecture d'articles et tutos sur les améliorations que l'on peut d'implémenter sur notre réseau
  • 01/07

    • La dernière features map de G avant upsampling était de taille 64, elle passe à 256 comme dans l'article de SRGAN
    • Améliorations (infructueuses) pour entraînement x4:
      • Initialisation de G en utilisant seulement une MSE pendant une epoch, puis entraînement du discriminateur uniquement (moins d'une epoch pour éviter le sur-apprentissage)
      • real_label = .9 (au lieu de 1) pour que D ne soit pas sûr de lui
      • Sauvegarde des anciennes images générées pour réentrainer D dessus
      • Normalisation des gradients à 1 (c'est en fait mieux sans)
      • spectralNorm dans G et D
      • features map pour la content loss extraites avant activation
    • Le calcul de lr par interpolation de hr, on dépasse un peu de [-1, 1]. On seuille les images dans [-1, 1].
    • En partant d'un mếme réseau (avec un dataset non mélangé), deux entraînements donnent des images complètement différentes, on peut mettre torch.backends.cudnn.deterministic = True et torch.backends.cudnn.benchmark = False
  • 08/07

    • Implémentation d'une méthode assurant des résultats corrects: augmentation graduelle du poids de la loss adversaire (par rapport à la content loss) tant que cela améliore le rendu.

    • Création d'un script de visualisation des résultats Résultats SRGANx4 (1ère ligne : LR SR HR UR 2ème ligne : interpolation bicubique de l'image d'au dessus)

    • Lecture de ESRGAN. Améliorations potentielles :

      • architecture de G
      • relativistic D
      • enlever les BatchNorm
  • 15/07

    • Progressive Generator:
      • Un réseau x4 = x2x2 est constitué de toutes les couches d'un réseau x2 plus une couche d'upscale. 90% des poids d'un réseau x4 peuvent être chargés à partir d'un réseau x2. Le réseau est dans ce cas bien meilleur qu'un réseau x4 entraîné 'from scratch' (pour une même durée d'entraînement).
      • On peut geler toutes les couches à part celle rajoutée afin d'aller plus vite
      • Implémenté via "load_state_dict(strict=False)". Il y a des bugs e.g. pytorch/pytorch#22545.
      • Sûrement à cause des bugs (et donc l'absence de spectralNorm de bout en bout), le réseau donne de moins bons résultats
      • Les images de celeba sont trop petites pour le x8. La MSE est floue, le GAN invente un visage: Flou Invente
    • Modèle supervisé ou non: Architecture
      • Les résultats sont meilleurs avec supervision, le mode non-supervisé est utile si on n'a pas accès à un dataset d'images en haute qualité
  • 22/07

    • Progressive Generator sans load_state_dict(strict=False)
    • Tentatives d'entraînement x4 en non-supervisé
    • Tentatives d'entraînement x8 en supervisé
    • Rédaction du compte rendu

todo

  • ajouter des tests
  • ajouter des métriques
  • télécharger la même base de données que dans l'article pour pouvoir comparer
  • entraîner un réseau x8
  • Progressive G et D

About

Generate higher resolution images

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages