Eine Op-for-Op-Pytorch-Neuimplementierung von DeepMinds Biggan-Modell mit den vorgeborenen Gewichten von DeepMind.
Dieses Repository enthält eine Op-for-Op-Pytorch-Neuimplementierung von DeepMinds Biggan, das mit dem Papier mit großem Umfang GaN-Training für die natürliche Bildsynthese von High-Fidelity-Bild von Andrew Brock, Jeff Donahue und Karen Simonyan veröffentlicht wurde.
Diese Pytorch -Implementierung von Biggan ist von DeepMind mit den vorgenannten 128x128-, 256x256- und 512x512 -Modellen versehen. Wir bieten auch die Skripte zur Herunterladen und Konvertierung dieser Modelle aus den TensorFlow -Hub -Modellen.
Diese Neuauflagen erfolgt aus dem RAW-Berechnungsdiagramm der TensorFlow-Version und verhalten sich ähnlich wie die TensorFlow-Version (Varianz der Ausgangsdifferenz der Reihenfolge von 1E-5).
Diese Implementierung enthält derzeit nur den Generator, da die Gewichte des Diskriminators nicht freigegeben wurden (obwohl die Struktur des Diskriminators dem Generator sehr ähnlich ist, sodass er ziemlich leicht hinzugefügt werden kann. Sagen Sie mir, ob Sie eine PR dazu erledigen möchten, ich würde gerne helfen.)
Dieses Repo wurde auf Python 3.6 und Pytorch 1.0.1 getestet
Pytorch Pretrained Biggan kann wie folgt aus PIP installiert werden:
pip install pytorch-pretrained-bigganWenn Sie einfach mit dem Gan spielen möchten, sollte dies ausreichen.
Wenn Sie die Conversion -Skripte und die ImageNet -Dienstprogramme verwenden möchten, sind zusätzliche Anforderungen erforderlich, insbesondere TensorFlow und NLTK. Um alle Anforderungen zu installieren, verwenden Sie bitte die Datei full_requirements.txt :
git clone https://github.com/huggingface/pytorch-pretrained-BigGAN.git
cd pytorch-pretrained-BigGAN
pip install -r full_requirements.txtDieses Repository bietet einen direkten und einfachen Zugriff auf die vorbereiteten "Deep" -Versionen von Biggan für 128-, 256- und 512 Pixel -Resolutionen, wie in der zugehörigen Veröffentlichung beschrieben. Hier finden Sie einige Details zu den Modellen:
BigGAN-deep-128 : Ein 50,4-m-Parametermodell erzeugt 128x128 Pixel-Bilder, das Modell Dump Gewicht 201 MB,BigGAN-deep-256 : Ein 55,9-m-Parametermodell erzeugt 256x256 Pixel Bilder, das Modell Dump Gewicht 224 MB,BigGAN-deep-512 : A 56,2m Parameter Modell erzeugt 512 x 512 Pixel Bilder, das Modell Dump Gewicht 225 MB.Weitere Informationen zu den Architekturen finden Sie in Anhang B des Papiers.
Alle Modelle umfassen vorbereitete Stapel-Norm-Statistiken für 51 Kürzungswerte zwischen 0 und 1 (siehe Anhang C.1 in der Arbeit für Details).
Hier finden Sie ein schnelles Beispiel für BigGAN mit einem vorgebildeten Modell.
Weitere Informationen zu diesen Klassen und Methoden finden Sie im Abschnitt DOC.
import torch
from pytorch_pretrained_biggan import ( BigGAN , one_hot_from_names , truncated_noise_sample ,
save_as_images , display_in_terminal )
# OPTIONAL: if you want to have more information on what's happening, activate the logger as follows
import logging
logging . basicConfig ( level = logging . INFO )
# Load pre-trained model tokenizer (vocabulary)
model = BigGAN . from_pretrained ( 'biggan-deep-256' )
# Prepare a input
truncation = 0.4
class_vector = one_hot_from_names ([ 'soap bubble' , 'coffee' , 'mushroom' ], batch_size = 3 )
noise_vector = truncated_noise_sample ( truncation = truncation , batch_size = 3 )
# All in tensors
noise_vector = torch . from_numpy ( noise_vector )
class_vector = torch . from_numpy ( class_vector )
# If you have a GPU, put everything on cuda
noise_vector = noise_vector . to ( 'cuda' )
class_vector = class_vector . to ( 'cuda' )
model . to ( 'cuda' )
# Generate an image
with torch . no_grad ():
output = model ( noise_vector , class_vector , truncation )
# If you have a GPU put back on CPU
output = output . to ( 'cpu' )
# If you have a sixtel compatible terminal you can display the images in the terminal
# (see https://github.com/saitoha/libsixel for details)
display_in_terminal ( output )
# Save results as png images
save_as_images ( output )


Um eines von DeepMinds vorgeborenen Modellen zu laden, instanziieren Sie ein BigGAN Modell mit from_pretrained() als:
model = BigGAN . from_pretrained ( PRE_TRAINED_MODEL_NAME_OR_PATH , cache_dir = None )Wo
PRE_TRAINED_MODEL_NAME_OR_PATH ist entweder:
Der Verknüpfungsname eines in der Liste ausgewählten vorgeborenen Modells von Google Ai oder OpenAI:
biggan-deep-128 : 12-Layer, 768 versteckte, 12-Heads, 110 m Parameterbiggan-deep-256 : 24-Layer, 1024 versteckte, 16-köpfige, 340m Parameterbiggan-deep-512 : 12-Layer, 768 versteckte, 12-Heads, 110 m ParameterEin Pfad oder eine URL zu einem vorbereiteten Modellarchiv mit:
config.json : eine Konfigurationsdatei für das Modell undpytorch_model.bin a pytorch Dump einer vorgebildeten Instanz von BigGAN (gerettet mit der üblichen torch.save() ). Wenn PRE_TRAINED_MODEL_NAME_OR_PATH ein Verknüpfungsname ist, werden die vorgeborenen Gewichte aus AWS S3 (siehe Links hier) heruntergeladen und in einem Cache-Ordner gespeichert, um zukünftige Downloads zu vermeiden (der Cache-Ordner kann unter ~/.pytorch_pretrained_biggan/ ) gefunden werden.
cache_dir kann ein optionaler Pfad zu einem bestimmten Verzeichnis sein, um die vorgebildeten Modellgewichte herunterzuladen und zu untersuchen.
BigGANConfig ist eine Klasse, um Biggan -Konfigurationen zu speichern und zu laden. Es ist in config.py definiert.
Hier sind einige Details zu den Attributen:
output_dim : Ausgangsauflösung des GaN (128, 256 oder 512) für die vorgebildeten Modelle,z_dim : Größe des Rauschvektors (128 für die vorgeborenen Modelle).class_embed_dim : Größe der Klasse-Einbettungsvektoren (128 für die vorgeborenen Modelle).channel_width : Größe jedes Kanals (128 für die vorgeborenen Modelle).num_classes : Anzahl der Klassen im Trainingsdatensatz wie ImageNet (1000 für die vorgebreiteten Modelle).layers : Eine Liste der Ebenendefinition. Jede Definition für eine Schicht ist ein dreifaches [Up-Sample in der Ebene? (bool), Anzahl der Eingangskanäle (int), Anzahl der Ausgangskanäle (int)]attention_layer_position : Position der Selbstbekämpfungsschicht in der Ebenenhierarchie (8 für die vorgebliebenen Modelle).eps : Epsilon-Wert für Spektral- und Stapel-Normalisierungsschichten (1E-4 für die vorgeborenen Modelle).n_stats : Anzahl der vorbereiteten Statistiken für die Stapel-Normalisierungsschichten, die verschiedenen Kürzungswerten zwischen 0 und 1 zugeordnet sind (51 für die vorgebreiteten Modelle). BigGAN ist ein Pytorch -Modell ( torch.nn.Module ) von Biggan, das in model.py definiert ist. Py. Dieses Modell umfasst die Klassenbettendings (eine lineare Schicht) und den Generator mit einer Reihe von Konvolutionen und bedingten Chargennormen. Der Diskriminator ist derzeit nicht implementiert, da keine vorgebrachten Gewichte dafür freigesetzt wurden.
Die Eingänge und die Ausgabe sind identisch mit den Eingängen und Ausgängen des Tensorflow -Modells .
Wir beschreiben sie hier.
BigGAN nimmt als Eingaben :
z : Eine Fackel.Floattensor der Form [batch_size, config.z_dim] mit Rausch, die aus einer verkürzten Normalverteilung abgetastet wurden, undclass_label : ein optionaler fackel.longtensor der Form [batch_size, sequence_length] mit den in [0, 1] ausgewählten Token -Typen -Indizes. Typ 0 entspricht einem sentence A und Typ 1 entspricht einem sentence B -Token (siehe Bert -Papier für weitere Details).truncation : Ein Schwimmer zwischen 0 (nicht umfasst) und 1. Die Kürzung des verkürzten Normalwerts zur Erstellung des Rauschvektors. Dieser Kürzungswert wird verwendet, um zwischen einem Satz vorberechtigter Statistiken (Mittelwerte und Abweichungen) für die Stapel-Norm-Schichten auszuwählen. BigGAN gibt eine Reihe von Form [batch_size, 3, Auflösung, Auflösung] aus, wobei die Auflösung je nach Modell 128, 256 oder 512 beträgt:
Wir bieten eine wenige Versorgungsmethode zur Verwendung des Modells. Sie sind in utils.py definiert.
Hier finden Sie einige Details zu diesen Methoden:
truncated_noise_sample(batch_size=1, dim_z=128, truncation=1., seed=None) :
Erstellen Sie einen verkürzten Rauschvektor.
convert_to_images(obj) :
Konvertieren Sie einen Ausgangs -Tensor von Biggan in eine Liste von Bildern.
save_as_images(obj, file_name='output') :
Konvertieren und speichern Sie einen Ausgangs -Tensor von Biggan in einer Liste gespeicherter Bilder.
file_name_{image_number}.png gespeichert display_in_terminal(obj) :
Konvertieren und zeigen Sie einen Ausgangs -Tensor von Biggan im Terminal an. Diese Funktion verwendet libsixel und arbeitet nur in einem libsissixel-kompatiblen Terminal. Weitere Informationen finden Sie unter https://github.com/saitoha/libsixel.
file_name_{image_number}.png gespeichert one_hot_from_int(int_or_list, batch_size=1) :
Erstellen Sie einen One-Hot-Vektor aus einem Klassenindex oder einer Liste von Klassenindizes.
len(int_or_list) == batch_size haben one_hot_from_names(class_name, batch_size=1) :
Erstellen Sie einen One-Hot-Vektor aus dem Namen einer ImageNet-Klasse ('Tennisball', 'Daisy', ...). Wir verwenden die WordNet -Suche von NLTK, um zu versuchen, die relevante Synset von ImageNet zu finden und die erste zu übernehmen. Wenn wir es nicht direkt finden, betrachten wir die Hyponyme und Hypernyme des Klassennamens.
Skripte zum Herunterladen und Konvertieren der Tensorflow -Modelle von TensorFlow Hub sind in ./Scripts bereitgestellt.
Die Skripte können direkt als:
./scripts/download_tf_hub_models.sh
./scripts/convert_tf_hub_models.sh