Ce projet est un réseau contradictoire génératif convolutionnel profond qui peut créer des images de haute qualité à partir d'une graine aléatoire comme des portraits, des animaux, des dessins et plus encore.
Le modèle est un Generative Adversarial Network (GAN) tel que décrit dans l'article Generative Adversarial Nets de l'Université de Montréal (2014).
Le générateur et le discriminateur sont tous deux des réseaux de neurones convolutifs profonds comme dans l'article Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks de Facebook AI Research (2015), mais avec quelques améliorations :
J'ai ajouté des couches de taux d'apprentissage égalisé à partir du document Progressive Growing of GANs for Improvement Quality, Stability, and Variation de Nvidia (2017)
J'ai ajouté le suréchantillonnage/le sous-échantillonnage bilinéaire à partir de l'article Making Convolutional Networks Shift-Invariant Again d' Adobe Research (2019)
J'ai implémenté Wavelet Transform à partir de l'article SWAGAN : A Style-based Wavelet-driven Generative Model de l'Université de Tel-Aviv (2021)
J'ai utilisé une architecture basée sur le style avec une entrée constante , des styles appris à partir d'un réseau de cartographie et une injection de bruit tirés de l'article A Style-Based Generator Architecture for Generative Adversarial Networks de Nvidia (2018).
J'ai ajouté Skip Connections de l'article MSG-GAN : Multi-Scale Gradients for Generative Adversarial Networks de TomTom et Adobe (2019)
J'ai ajouté des blocs résiduels de l'article Deep Residual Learning for Image Recognition de Microsoft Research (2015)
J'ai ajouté l'écart type Minibatch à la fin du discriminateur à partir de l'article Techniques améliorées pour la formation des GAN par OpenAI (2016)
J'ai conservé la perte non saturée originale de l'article Generative Adversarial Nets de l' Université de Montréal (2014)
J'ai ajouté la régularisation de la longueur du chemin sur le générateur à partir de l'article Analyse et amélioration de la qualité d'image de StyleGAN par Nvidia (2019)
J'ai ajouté la régularisation de pénalité de gradient sur le discriminateur à partir de l'article Améliored Training of Wasserstein GANs by Google Brain (2017)
J'ai ajouté l'augmentation adaptative du discriminateur (ADA) à partir de l'article Training Generative Adversarial Networks with Limited Data de Nvidia (2020), mais la probabilité d'augmentation n'est pas entraînée et doit être définie manuellement (et certaines augmentations sont désactivées en raison d'une implémentation manquante de PyTorch)
J'ai ajouté le calcul de la distance de démarrage de Fréchet (FID) lors de la formation à partir de l'article Les GAN formés par une règle de mise à jour à deux échelles de temps convergent vers un équilibre de Nash local par l'Université de Linz (2017) à l'aide du module pytorch-fid
J'ai ajouté un projecteur comme dans l'article Analyse et amélioration de la qualité d'image de StyleGAN de Nvidia (2019)
Visages humains 256*256 (FID : 5,97)
Visages d'animaux 256*256 (FID : 6,56)
Visages d'anime 256*256 (FID : 3,74)
Peindre les visages 256*256 (FID : 20,32)
Les poids entraînés sur plusieurs ensembles de données sont disponibles sur Google Drive , il vous suffit de télécharger les fichiers .pt
et de les placer dans le dossier models
.
Exécutez la commande suivante pour installer les dépendances :
$ pip install -r requirements.txt
(Vous devrez peut-être utiliser une commande spécifique pour PyTorch si vous souhaitez utiliser CUDA)
Tout d’abord, vous devez rechercher et télécharger un ensemble de données d’images (moins de 5 000 peut être trop peu et plus de 150 000 n’est pas nécessaire) . Vous pouvez trouver de nombreux ensembles de données sur Kaggle et ceux que j'ai utilisés sur mon Google Drive .
Ensuite, dans le fichier training/settings.py
, spécifiez le chemin d' accès à l'ensemble de données
Si vous ne disposez pas d'un GPU de 24 Go trop cher comme moi, les paramètres par défaut risquent de ne pas fonctionner pour vous. Vous pouvez essayer de :
Exécutez le fichier training.ipynb
(vous pouvez arrêter l'entraînement à tout moment et le reprendre plus tard grâce aux points de contrôle)
Exécutez le fichier testing.ipynb
pour générer des images aléatoires
Exécutez le fichier testing/interpolation.ipynb
pour générer les images d'une vidéo d'interpolation fluide
Exécutez le fichier testing/projector.ipynb
pour projeter des images réelles dans l'espace latent
Exécutez le fichier testing/style_mixing.ipynb
pour générer les images d'une vidéo d'interpolation de mélange de styles
Exécutez le fichier testing/timelapse.ipynb
pour générer les images d'une vidéo timelapse d'entraînement