[PYTHON] Essayez StyleGAN avec Google Colaboratory

Aperçu

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.

1. Préparation

Sélectionnez GPU pour l'exécution de Google Colaboratory

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.

Version de TensorFlow

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

Prise en charge du GPU pour TensorFlow

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

Coopération avec Google Drive

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

Télécharger les fichiers associés à StyleGAN

!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.

2. Chargez le générateur formé

%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'))

3. Définition des variables latentes

# 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.

4. Générer et afficher une image

# 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.

image.png

5. Modifiez les paramètres et jouez

Variable latente

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')

image.png

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.

stylegan_100outputs.png

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')

image.png

image.png

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) image.png

en conclusion

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

Essayez StyleGAN avec Google Colaboratory
Utilisez music21 sur Google Colaboratory
Essayez OpenCV avec Google Colaboratory
Pandas 100 coups sur Google Colaboratory
Collaboratoire Google
Exécutez Keras sur Google Colaboratory TPU
Essayez d'exécuter Distributed TensorFlow sur Google Cloud Platform
Résumé de la configuration de Google Colaboratory
Essayez FEniCS sur Windows!
Essayez Poerty sur Windows
Essayez deepdream sur Mac
ls -R sur Google Drive
Essayez Google Mock avec C
Étudiez Python avec Google Colaboratory
Essayez d'utiliser OpenCV sur Windows
Essayez «100 coups sur la science des données» ①
Organisation de l'outil: Google Colaboratory (mise à jour 2020.2.24)
Essayez d'implémenter la régression linéaire à l'aide de Pytorch avec Google Colaboratory
Comment utiliser Google Colaboratory
Mémo d'auto-apprentissage "Deep Learning from scratch" (n ° 13) Essayez d'utiliser Google Colaboratory
Essayez d'exécuter tensorflow sur Docker + anaconda
Essayez d'utiliser Pillow sur iPython (partie 1)
Afficher plusieurs marqueurs sur Google Map
Essayez d'installer OpenAM sur Amazon Linux
Afficher l'herbe sur Google Nest Hub
Essayez d'utiliser Pillow sur iPython (partie 2)
Essayez d'implémenter k-NN par vous-même
Essayez d'utiliser ArUco avec Raspberry Pi
■ [Google Colaboratory] Utiliser l'analyse morphologique (janome)
Essayez Ajax sur la page Django
■ [Google Colaboratory] Utiliser l'analyse morphologique (MeCab)
Extraits (scraping) enregistrés dans Google Colaboratory
Essayez d'utiliser Pillow sur iPython (partie 3)
Installez le fabric sur Ubuntu et essayez
Détection des fonctionnalités OpenCV avec Google Colaboratory
100 langues de traitement frappent 2020 "pour Google Colaboratory"
Utilisez ndb.tasklet avec Google App Engine
Essayez d'exécuter Jupyter Notebook sur Mac
Essayez d'installer OpenCV 3.0 sur l'AMI
Jouez avec Turtle sur Google Colab