Die offiziell inoffizielle Pytorch -Biggan -Implementierung des Autors.

Dieses Repo enthält Code für das 4-8 GPU-Training von Biggans aus großem Umfang GaN-Training für die natürliche Bildsynthese von High Fidelity von Andrew Brock, Jeff Donahue und Karen Simonyan.
Dieser Code stammt von Andy Brock und Alex Andonian.
Sie brauchen:
Erstens können Sie optional eine vorverarbeitete HDF5-Version Ihres Zieldatensatzes für schnellere E/A vorbereiten. Im Folgenden (oder nicht) benötigen Sie die Inception -Momente, die zur Berechnung von FID erforderlich sind. Diese können sowohl durch Modifizierung und Laufen erfolgen
sh scripts/utils/prepare_data.sh Dies wird standardmäßig von Ihrem ImageNet -Trainingssatz angenommen, der in den Root data in diesem Verzeichnis heruntergeladen wird und den zwischengespeicherten HDF5 bei der Auflösung von 128x128 Pixel vorbereitet.
Im Ordner Skripts gibt es mehrere Bash -Skripte, die Biggans mit unterschiedlichen Chargengrößen trainieren. In diesem Code wird davon ausgegangen, dass Sie keinen Zugriff auf einen vollständigen TPU-Pod haben, und entsprechend wird Mega-Batches mithilfe von Gradientenakkumulation (Mittelwertabsolventen über mehrere Minibatches und nur einen Optimiererschritt nach N-Akkumulationen) gefälscht. Standardmäßig trainiert das Drehbuch des Schriftzugs launch_BigGAN_bs256x8.sh ein Biggan-Modell in voller Größe mit einer Stapelgröße von 256 und 8 Gradientenakkumulationen für eine Gesamtgröße von 2048. Auf 8xv100 mit vollem Präzisionstraining (keine Tensor-Kerne) dauert dieses Skript bis zu 150K-Iterationen 15 Tage.
Sie müssen zunächst die maximale Chargengröße finden, die Ihr Setup unterstützen kann. Die hier bereitgestellten vorgeborenen Modelle wurden auf 8xv100 (jeweils 16 GB VRAM) trainiert, was etwas mehr unterstützen kann als der standardmäßige BS256. Sobald Sie dies ermittelt haben, sollten Sie das Skript so ändern, dass die Stapelgröße die Anzahl der Gradientenakkumulationen gleich der gewünschten Gesamtstapelgröße entspricht (Biggan standardmäßig bis 2048).
Beachten Sie auch, dass dieses Skript den --load_in_mem arg verwendet, der die gesamte (~ 64 GB) i128.hdf5 -Datei zum schnelleren Datenladen in RAM lädt. Wenn Sie nicht genug RAM haben, um dies zu unterstützen (wahrscheinlich 96 GB+), entfernen Sie dieses Argument.

Während des Trainings gibt dieses Skript Protokolle mit Trainingsmetriken und Testmetriken aus, speichert mehrere Kopien (2 neueste und 5 höchste Punktzahl) der Modellgewichte/Optimiererparameter und produziert jedes Mal, wenn es Gewicht spart. Der Protokollordner enthält Skripte, um diese Protokolle zu verarbeiten und die Ergebnisse mit MATLAB zu zeichnen (sorry nicht sorry).
Nach dem Training kann ein Beispiel für sample.py verwendet werden, um zusätzliche Proben und Interpolationen zu produzieren, mit unterschiedlichen Abschnitten, Stapelgrößen, Anzahl der ständigen STAT -Akkumulationen usw. Das Skript sample_BigGAN_bs256x8.sh für ein Beispiel.
Standardmäßig wird alles in Gewichten/Samples/Protokollen/Datenordnern gespeichert, von denen angenommen wird, dass sie sich im selben Ordner wie dieses Repo befinden. Sie können alle diese mit dem Argument --base_root in einen anderen Basisordner verweisen oder für jeden von diesen mit ihren jeweiligen Argumenten (z. B. --logs_root ) bestimmte Stellen auswählen.
Wir schließen Skripte ein, um Biggan-Deep auszuführen, aber wir haben ein Modell mit ihnen nicht vollständig geschult. Betrachten Sie sie also ungetestet. Zusätzlich schließen wir Skripte ein, um ein Modell auf Cifar auszuführen und SA-Gan (mit EMA) und SN-Gan auf ImageNet auszuführen. Der SA-Gan-Code geht davon aus, dass Sie 4xtitanx (oder gleichwertig in Bezug auf GPU-RAM) haben und mit einer Stapelgröße von 128 und 2 Gradientenakkumulationen ausgeführt werden.
Dieses Repo verwendet das in Pytorch eingebaute Inception-Netzwerk, um IS und FID zu berechnen. Diese Bewertungen unterscheiden sich von den Bewertungen, die Sie mit dem offiziellen TF -Inception -Code erhalten würden, und dienen nur zu Überwachungszwecken! Ausführen von Sample.Py auf Ihrem Modell mit dem Argument --sample_npz und dann inception_tf13 ausführen, um den tatsächlichen Tensorflow IS zu berechnen. Beachten Sie, dass Sie TensorFlow 1.3 oder früher installiert haben müssen, da TF1.4+ das Original Code ist.
Wir enthalten zwei vorbereitete Modell -Checkpoints (mit G, D, der EMA -Kopie von G, den Optimierern und dem Zustandsdikt):
Vorbereitete Modelle für Places-365 in Kürze.
Dieses Repo enthält auch Skripte für die Portierung des ursprünglichen TFHUB -Biggan -Generators auf Pytorch. Weitere Informationen finden Sie in den Skripten im TFHUB -Ordner.

Wenn Sie unterbrochenes Training wieder aufnehmen oder ein vorgebildetes Modell fein abteilen möchten, führen Sie das gleiche Startskript aus, jedoch mit dem hinzugefügten Argument --resume . Experimentennamen werden automatisch aus der Konfiguration generiert, können jedoch mit dem Arg --experiment_name (z.
Um Ihren eigenen Datensatz vorzubereiten, müssen Sie ihn zu DataSets.py hinzufügen und die Convenience -Diktate in utils.py (dset_dict, iMsize_dict, root_dict, nclass_dict, class_per_sheet_dict) für die entsprechenden Metadaten für Ihren Datensatz ändern. Wiederholen Sie den Vorgang in prepe_data.sh (produzieren Sie optional eine vorverarbeitete HDF5 -Kopie und berechnen Sie die Inception -Momente für FID).
Standardmäßig speichert das Trainingsskript die 5 besten Checkpoints, gemessen an der Inception -Punktzahl. Für andere Datensätze als ImageNet kann der Inception -Score ein sehr schlechtes Maß an Qualität sein, sodass Sie wahrscheinlich verwenden möchten --which_best FID .
Um Ihre eigene Trainingsfunktion zu verwenden (z. B. Train a Bigvae): Ändern Sie entweder train_fns.gan_training_function oder fügen Sie einen neuen Zug Fn hinzu und fügen Sie ihn nach der if config['which_train_fn'] == 'GAN': Linie in train.py .
--num_G_SVs . Dieser Code ist von Grund auf so konzipiert, dass er als erweiterbare, hackbare Basis für den weiteren Forschungscode dient. Wir haben viel darüber nachgedacht, dass die Abstraktionen die richtige Dicke für die Forschung sind-nicht so dick, dass es undurchdringlich, aber nicht so dünn ist, dass sie nutzlos sind. Die Hauptidee ist, dass Sie, wenn Sie mit einem SOTA-Setup experimentieren und eine gewisse Änderung vornehmen möchten (probieren Sie Ihre eigene neue Verlustfunktion, Architektur, Selbstbekämpfung usw. aus), indem Sie dies einfach tun können, indem Sie Ihren Code an ein oder zwei Stellen fallen lassen, ohne sich um den Rest der Codebasis Sorgen zu machen. Dinge wie die Verwendung von Self.Which_conv und Functools.Partial in der Biggan.Py -Modelldefinition wurden berücksichtigt, ebenso wie das Design der Vererbung der Spectral Norm -Klasse.
Trotzdem ist dies eine etwas große Codebasis für ein einzelnes Projekt. Während wir versucht haben, mit den Kommentaren gründlich zu sein, können Sie bitte ein Problem oder eine Pull -Anfrage ansprechen, wenn es etwas gibt, das Sie für klarer, besser geschrieben oder besser umgestaltet haben könnten.
Möchten Sie an diesem Code arbeiten oder verbessern? Es gibt ein paar Dinge, von denen dieses Repo profitieren würde, aber die noch nicht funktionieren.
Siehe dieses Verzeichnis für ImageNet -Labels.
Wenn Sie diesen Code verwenden, zitieren Sie bitte
@inproceedings{
brock2018large,
title={Large Scale {GAN} Training for High Fidelity Natural Image Synthesis},
author={Andrew Brock and Jeff Donahue and Karen Simonyan},
booktitle={International Conference on Learning Representations},
year={2019},
url={https://openreview.net/forum?id=B1xsqj09Fm},
}
Vielen Dank an Google für die großzügigen Cloud -Kreditspenden.
Synchronisation von Jiayuan Mao und Tete Xiao.
Progress Bar ursprünglich von Jan Schlüter.
Testen Sie Metriken -Logger von VoxNet.
Pytorch -Implementierung von COV von Modar M. Alfadly.
Pytorch Fast Matrix SQRT für FID von Tsung-yu Lin und Subhransu Maji.
TensorFlow Inception-Score-Code aus OpenAs verbessertem Gan.