Als ich StyleGAN mit Google Colaboratory ausprobierte, hatte ich einige Stolpersteine, daher werde ich es als Memorandum zusammenfassen.
Die Referenzwebseiten lauten wie folgt. Sobald StyleGAN ordnungsgemäß funktioniert, können Sie auf diese gut erläuterten Seiten verweisen.
Die Punkte, über die ich gestolpert bin, sind folgende.
Starten Sie Google Colaboratory, klicken Sie in der Symbolleiste oben auf dem Bildschirm auf "Laufzeit"> "Laufzeittyp ändern", geben Sie im Hardwarebeschleuniger "GPU" an und klicken Sie auf "Speichern". Dadurch wird der Laufzeittyp von CPU auf GPU umgeschaltet.
StyleGAN funktioniert mit einer etwas älteren Version von Tensorflow und muss von der neuesten Version von Tenforflow herabgestuft werden. Ab dem 5. November 2020 ist die neueste Version von Tensorflow, die in Google Colaboratory installiert ist, 2.3.0. Die Bestätigungsmethode ist wie folgt.
import tensorflow as tf
print(tf.__version__)
output
2.3.0
Laut dieser Seite
Also generally (NVlabs) Stylegan and Stylegan2 require TensorFlow 1.14 or 1.15 with GPU support.
Daher ist es notwendig, den Tensorfluss 1.14 oder 1.15 vorzubereiten. Der folgende Code installiert Tensorflow 1.15.
!pip install tensorflow==1.15
In Versionen vor 1.15 sind die TensorFlow-CPU- und GPU-Pakete getrennt. (-> "GPU-Unterstützung | TensorFlow") Daher muss ein Tensorflow vorbereitet werden, der die GPU verwenden kann. Dies kann durch Angabe von "tensorflow-gpu" gelöst werden.
!pip install tensorflow-gpu==1.15
Starten Sie zu diesem Zeitpunkt die Laufzeit einmal neu. Führen Sie danach nach Abschluss der erneuten Verbindung den folgenden Code aus. Wenn Sie dieselbe Ausgabe erhalten, sollten die GPU-Spezifikation sowie die TensorFlow-Version und das Paket korrekt vorbereitet sein.
import tensorflow as tf
print(tf.__version__)
print(tf.test.gpu_device_name())
output
1.15.0
/device:GPU:0
Verwenden wir Google Drive als Speicherort für verwandte Dateien.
from google.colab import drive
drive.mount('/content/drive')
Erstellen Sie im Voraus ein Verzeichnis, in dem Sie StyeGAN-bezogene Dateien ablegen und dorthin verschieben können.
%cd /content/drive/My Drive
!mkdir stylegans
%cd stylegans
!mkdir stylegans_dir
!git clone https://github.com/NVlabs/stylegan.git
!git clone https://github.com/NVlabs/stylegan2.git
Das verteilte trainierte Modell kann durch Angabe der URL abgerufen werden, es scheint jedoch ein Problem zu geben, dass die Laufzeit endet. Um dies zu vermeiden, laden Sie nur das erforderliche trainierte Modell separat herunter.
Da das Modell "karras2019stylegan-ffhq-1024x1024.pkl" auf dieser Seite platziert ist, nachdem Sie es auf Ihren eigenen PC, Google Drive, heruntergeladen haben Speichern Sie es direkt im stylegans-Verzeichnis von.
%cd /content/drive/My Drive/stylegans/stylegan
import os
import pickle
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
import dnnlib
import dnnlib.tflib as tflib
import config
# Initialize TensorFlow.
tflib.init_tf()
# Load pre-trained network.
*_, Gs = pickle.load(open('../karras2019stylegan-ffhq-1024x1024.pkl','rb'))
# Pick latent vector.
rnd = np.random.RandomState(210)
latents = rnd.randn(1, Gs.input_shape[1])
Wenn Sie 210 in "RandomState (210)" in eine andere Zahl ändern, werden verschiedene Bildtypen angezeigt.
# Generate image.
fmt = dict(func=tflib.convert_images_to_uint8, nchw_to_nhwc=True)
images = Gs.run(latents, None, truncation_psi=0.7, randomize_noise=True, output_transform=fmt)
plt.imshow(images[0])
plt.tick_params(labelbottom="off",bottom="off")
plt.tick_params(labelleft="off",left="off")
Wenn Sie den obigen Code ausführen, sollte ein Bild wie das folgende angezeigt werden.
Die Bilder, die durch Ändern des durch "RandomState ()" angegebenen numerischen Werts erzeugt werden, werden nebeneinander angezeigt.
plt.figure(figsize=(15,10))
for i in range(20):
rnd = np.random.RandomState(i*20+10)
latents = rnd.randn(1, Gs.input_shape[1])
plt.subplot(4,5,i+1)
fmt = dict(func=tflib.convert_images_to_uint8, nchw_to_nhwc=True)
images = Gs.run(latents, None, truncation_psi=0.7, randomize_noise=True, output_transform=fmt)
plt.title("RandomState(" + str(i*20+10) + ")")
plt.imshow(images[0])
plt.tick_params(labelbottom="off",bottom="off")
plt.tick_params(labelleft="off",left="off")
plt.axis('off')
Durch Ändern der latenten Variablen kann bestätigt werden, dass völlig unterschiedliche Bildtypen (Männer und Frauen, Erwachsene und Kinder usw.) ausgegeben werden.
Ich habe versucht, mehr Bilder zu generieren. Sie sehen, dass es erhebliche Unterschiede gibt.
truncation_psi
Ich habe truncation_psi
geändert, was als Argument von Gs.run ()
angegeben wird.
plt.figure(figsize=(30,10))
for i in range(11):
rnd = np.random.RandomState(210)
latents = rnd.randn(1, Gs.input_shape[1])
plt.subplot(1,11,i+1)
fmt = dict(func=tflib.convert_images_to_uint8, nchw_to_nhwc=True)
temp = -1 + 0.2*i
images = Gs.run(latents, None, truncation_psi=temp, randomize_noise=True, output_transform=fmt)
plt.title(str(round(-1 + 0.2*i,1)))
plt.imshow(images[0])
plt.tick_params(labelbottom="off",bottom="off")
plt.tick_params(labelleft="off",left="off")
plt.axis('off')
Ich habe zwei Bilder eingefügt, aber wenn Sie genau hinschauen, unterscheiden sich die Details wie Haare und Hintergrundmuster geringfügig. Dies liegt wahrscheinlich daran, dass randomize_noise = True
dazu beiträgt.
Für RandomState (290)
Diese Seite fasst die Schritte zusammen, mit denen StyleGAN in Google Colaboratory funktioniert. Weitere Informationen zu StyleGAN und anderen Verwendungsmöglichkeiten finden Sie bereits in vielen Artikeln und Webseiten. Lesen Sie daher diese.
Recommended Posts