Bei diesem Projekt handelt es sich um ein tiefes, konvolutionelles generatives kontradiktorisches Netzwerk, das aus einem zufälligen Samen wie Porträts, Tieren, Zeichnungen und mehr qualitativ hochwertige Bilder erstellen kann.
Das Modell ist ein Generative Adversarial Network (GAN), wie in der Arbeit Generative Adversarial Nets der Montreal University (2014) beschrieben.
Der Generator und der Diskriminator sind beide Deep Convolutional Neural Networks wie im Artikel Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks von Facebook AI Research (2015), jedoch mit einigen Verbesserungen:
Ich habe Equalized Learning Rate Layers aus dem Artikel Progressive Growing of GANs for Improved Quality, Stability, and Variation von Nvidia (2017) hinzugefügt.
Ich habe Bilinear Upsampling/Downsampling aus dem Artikel „Making Convolutional Networks Shift-Invariant Again“ von Adobe Research (2019) hinzugefügt.
Ich habe die Wavelet-Transformation aus dem Artikel SWAGAN: A Style-based Wavelet-driven Generative Model der Universität Tel-Aviv (2021) implementiert.
Ich habe eine stilbasierte Architektur mit einer konstanten Eingabe verwendet, Stile aus einem Mapping-Netzwerk und Rauschinjektion aus dem Artikel „A Style-Based Generator Architecture for Generative Adversarial Networks“ von Nvidia (2018) gelernt.
Ich habe Skip Connections aus dem Artikel MSG-GAN: Multi-Scale Gradients for Generative Adversarial Networks von TomTom und Adobe (2019) hinzugefügt.
Ich habe Residual Blocks aus dem Artikel Deep Residual Learning for Image Recognition von Microsoft Research (2015) hinzugefügt.
Ich habe die Minibatch-Standardabweichung am Ende des Diskriminators aus dem Artikel Improved Techniques for Training GANs von OpenAI (2016) hinzugefügt.
Ich habe den ursprünglichen Non-Saturating Loss aus dem Artikel Generative Adversarial Nets der Montreal University (2014) beibehalten.
Ich habe dem Generator die Pfadlängen-Regularisierung aus dem Artikel „Analyzing and Improving the Image Quality of StyleGAN“ von Nvidia (2019) hinzugefügt.
Ich habe Gradient Penalty Regularization für den Diskriminator aus dem Artikel Improved Training of Wasserstein GANs von Google Brain (2017) hinzugefügt.
Ich habe Adaptive Discriminator Augmentation (ADA) aus dem Artikel Training Generative Adversarial Networks with Limited Data von Nvidia (2020) hinzugefügt, aber die Erweiterungswahrscheinlichkeit ist nicht trainiert und muss manuell eingestellt werden (und einige Erweiterungen sind aufgrund einer fehlenden PyTorch-Implementierung deaktiviert).
Ich habe die Berechnung der Fréchet Inception Distance (FID) während des Trainings aus dem Artikel GANs Trained by a Two Time-Scale Update Rule Converge to a Local Nash Equilibrium von der Universität Linz (2017) mit dem Modul pytorch-fid hinzugefügt
Ich habe einen Projektor hinzugefügt, wie im Artikel „Analyzing and Improving the Image Quality of StyleGAN“ von Nvidia (2019)
Menschliche Gesichter 256*256 (FID: 5,97)
Tiergesichter 256*256 (FID: 6,56)
Anime-Gesichter 256*256 (FID: 3,74)
Lackierflächen 256*256 (FID: 20,32)
Die trainierten Gewichte für mehrere Datensätze sind auf Google Drive verfügbar. Sie müssen lediglich die .pt
Dateien herunterladen und im models
ablegen.
Führen Sie den folgenden Befehl aus, um die Abhängigkeiten zu installieren:
$ pip install -r requirements.txt
(Möglicherweise müssen Sie einen bestimmten Befehl für PyTorch verwenden, wenn Sie CUDA verwenden möchten.)
Zuerst müssen Sie einen Datensatz mit Bildern finden und herunterladen (weniger als 5.000 sind möglicherweise zu wenig und mehr als 150.000 sind nicht erforderlich) . Auf Kaggle und denen, die ich auf meinem Google Drive verwendet habe, finden Sie viele Datensätze.
Geben Sie dann in der Datei training/settings.py
den Pfad zum Datensatz an
Wenn Sie wie ich keine überteuerte 24-GB-GPU haben, funktionieren die Standardeinstellungen möglicherweise nicht für Sie. Sie können Folgendes versuchen:
Führen Sie die Datei training.ipynb
aus (Sie können das Training dank der Checkpoints jederzeit stoppen und später wieder aufnehmen)
Führen Sie die Datei testing.ipynb
aus, um zufällige Bilder zu generieren
Führen Sie die Datei testing/interpolation.ipynb
aus, um die Bilder eines Videos mit glatter Interpolation zu generieren
Führen Sie die Datei testing/projector.ipynb
aus, um echte Bilder in den latenten Raum zu projizieren
Führen Sie die Datei testing/style_mixing.ipynb
aus, um die Bilder eines Style-Mixing-Interpolationsvideos zu generieren
Führen Sie die Datei testing/timelapse.ipynb
aus, um die Bilder eines Trainings-Zeitraffervideos zu generieren