Quand j'ai essayé StyleGAN avec Google Colaboratory, j'avais quelques points d'achoppement, je vais donc le résumer sous forme de mémorandum.
Les pages Web de référence sont les suivantes. Une fois que StyleGAN fonctionne correctement, vous pouvez vous référer à ces pages bien expliquées.
Les points sur lesquels je suis tombé sont les suivants.
Démarrez Google Colaboratory, cliquez sur "Runtime"> "Change Runtime Type" dans la barre d'outils en haut de l'écran, spécifiez "GPU" dans l'accélérateur matériel et cliquez sur "Enregistrer". Cela fera passer le type d'exécution du processeur au processeur graphique.
StyleGAN fonctionne avec une version légèrement plus ancienne de tensorflow et doit être rétrogradé à partir de la dernière version de tenforflow. Depuis le 5 novembre 2020, la dernière version de tensorflow installée dans Google Colaboratory est la 2.3.0. La méthode de confirmation est la suivante.
import tensorflow as tf
print(tf.__version__)
output
2.3.0
Selon cette page
Also generally (NVlabs) Stylegan and Stylegan2 require TensorFlow 1.14 or 1.15 with GPU support.
Par conséquent, il est nécessaire de préparer tensorflow 1.14 ou 1.15. Le code ci-dessous installe tensorflow 1.15.
!pip install tensorflow==1.15
Dans les versions antérieures à 1.15, les packages CPU et GPU TensorFlow sont séparés. (-> "Assistance GPU | TensorFlow")
Par conséquent, il est nécessaire de préparer un tensorflow pouvant utiliser le GPU. Cela peut être résolu en spécifiant tensorflow-gpu
.
!pip install tensorflow-gpu==1.15
À ce stade, redémarrez le runtime une fois. Après cela, lorsque la reconnexion est terminée, exécutez le code suivant, et si vous obtenez le même résultat, la spécification du GPU et la version et le package de TensorFlow doivent être préparés correctement.
import tensorflow as tf
print(tf.__version__)
print(tf.test.gpu_device_name())
output
1.15.0
/device:GPU:0
Utilisons Google Drive comme lieu de stockage pour les fichiers associés.
from google.colab import drive
drive.mount('/content/drive')
À l'avance, créez un répertoire pour placer les fichiers liés à StyeGAN et déplacez-le là-bas.
%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
Le modèle entraîné distribué peut être obtenu en spécifiant l'URL, mais il semble y avoir un problème de fin d'exécution. Pour éviter cela, téléchargez uniquement le modèle formé requis séparément.
Comme le modèle karras2019stylegan-ffhq-1024x1024.pkl
est placé sur cette page, après l'avoir téléchargé sur votre propre PC, Google Drive Enregistrez-le directement dans le répertoire stylegans de.
%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])
Si vous remplacez 210 dans RandomState (210)
par un autre nombre, divers types d'images s'affichent.
# 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")
Si vous exécutez le code ci-dessus, vous devriez voir une image comme celle ci-dessous.
Les images générées en changeant la valeur numérique spécifiée par RandomState ()
sont affichées côte à côte.
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')
En modifiant la variable latente, il peut être confirmé que des types d'images complètement différents (hommes et femmes, adultes et enfants, etc.) sont produits.
J'ai essayé de générer plus d'images. Vous pouvez voir qu'il existe des variations considérables.
truncation_psi
J'ai changé truncation_psi
, qui est spécifié comme argument de Gs.run ()
.
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')
J'ai mis deux images, mais si vous regardez de près, les détails tels que les cheveux et le motif de fond sont légèrement différents. C'est probablement parce que randomize_noise = True
y contribue.
Pour RandomState (290)
Cette page résume les étapes pour faire fonctionner StyleGAN dans Google Colaboratory. Pour plus d'informations sur StyleGAN et d'autres façons de l'utiliser, il existe déjà de nombreux articles et pages Web, veuillez donc les consulter.
Recommended Posts