[PYTHON] [Introduction à StyleGAN2] Apprentissage indépendant avec 10 visages d'anime ♬

Après StyleGAN, j'ai également essayé l'apprentissage original des visages d'anime dans StyleGAN2. En conclusion, j'ai pu apprendre config-a, mais config-b à config-f ne sont pas dans un bon environnement. Cela dit, j'ai presque vu le code, je vais donc le résumer une fois. Surtout cette fois, j'ai essayé d'apprendre combien avec seulement 10 visages d'anime. 【référence】 ①NVlabs/stylegan2Comment apprendre votre propre modèle avec stylegan2

Ce que j'ai fait

·environnement ・ Apprenez avec 10 visages d'anime ・ Essayez de sortir ・ Image de sortie et image originale

·environnement

L'environnement de StyleGAN2 est le suivant

Requirements
-Les deux Linux et Windows sont pris en charge. 
・ Linux est recommandé pour des raisons de performances et de compatibilité.
・ 64-bit Python 3.6 installation. We recommend Anaconda3 with numpy 1.14.3 or newer.
・ TensorFlow 1.14 or 1.15 with GPU support. The code does not support TensorFlow 2.0.
・ Sous Windows, you need to use TensorFlow 1.14 — TensorFlow 1.15 will not work.
・ Un ou plusieurs hauts-end NVIDIA GPUs, NVIDIA drivers, CUDA 10.0 toolkit and cuDNN 7.5.・ Pour reproduire les résultats rapportés dans l'article, 
     you need an NVIDIA GPU with at least 16 GB of DRAM.
・ Utilisateurs Docker: use the provided Dockerfile to build an image with the required library dependencies.

・ StyleGAN2 s'appuie sur des opérations TensorFlow personnalisées qui sont compilées à la volée à l'aide de NVCC. 
To test that your NVCC installation is working correctly, run:
nvcc test_nvcc.cu -o test_nvcc -run
| CPU says hello.
| GPU says hello.
・ Sous Windows, the compilation requires Microsoft Visual Studio to be in PATH. 
We recommend installing Visual Studio Community Edition and adding into PATH 
using "C:\Program Files (x86)\Microsoft
VisualStudio\2019\Community\VC\Auxiliary\Build\vcvars64.bat".

Cependant, quand j'ai pensé qu'il était prêt, à l'exception de config -a, il s'est arrêté avec l'erreur suivante.

 File "C:\Users\user\Anaconda3\envs\keras-gpu\lib\site-packages\tensorflow\python\framework\tensor_shape.py", line 185, in __init__
    self._value = int(value)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'Tensor'

・ Apprenez avec 10 visages d'anime

Donc, cette fois, j'ai essayé d'apprendre avec config-a, c'est-à-dire StyleGAN. Tout d'abord, comme préparation ⓪ Sélectionnez 10 visages d'anime et Créer custom_dataset-r02.tfrecords comme auparavant

Le code est le suivant, en le modifiant pour qu'il fonctionne avec 1060. Le code complet est ci-dessous. StyleGAN2/run_training.py / Les principales parties du changement sont les suivantes ① Résolution cible = 64 Si vous le lisez avec le code suivant, l'image de taille (128,128) peut également être lue dans (64,64), et ce sera celle de la structure de réseau StyleGAN.

run_training.py


    dataset_args = EasyDict(tfrecord_dir=dataset, resolution=64)  #, resolution=64

(2) La résolution initiale est également de 64 C'est parce que StyleGAN est pGAN, donc au fur et à mesure que l'apprentissage progresse, la dimension augmente progressivement, mais cette fois cela ne fonctionne pas bien, j'ai donc adopté cela car il a commencé à converger lorsque je l'ai essayé avec la résolution cible de 64 depuis le début.

run_training.py


sched.lod_initial_resolution = 64 #8

Consultez l'intégralité du code ci-dessus pour d'autres modifications apportées à run_training.py (3) Si c'est tout, une erreur de mémoire sera générée et elle s'arrêtera, alors changez la partie suivante de dataset.py. StyleGAN2/training/dataset.py

training/dataset.py


# Load labels.
        assert max_label_size == 'full' or max_label_size >= 0
        #self._np_labels = np.zeros([1<<30, 0], dtype=np.float32)
        self._np_labels = np.zeros([1<<20, 0], dtype=np.float32)

④ À la fin, il faut du temps pour apprendre et la mémoire du disque dur semble être insuffisante, alors changez pour sortir à chaque fois StyleGAN2/training/training_loop.py

training/training_loop.py


    image_snapshot_ticks    = 1,  #50     # How often to save image snapshots? None = only save 'reals.png' and 'fakes-init.png'.
    network_snapshot_ticks  = 1, #50      # How often to save network snapshots? None = only save 'networks-final.pkl'.
...
            if network_snapshot_ticks is not None and (cur_tick % network_snapshot_ticks == 0 or done):
                #pkl = dnnlib.make_run_dir_path('network-snapshot-%06d.pkl' % (cur_nimg // 1000))
                pkl = dnnlib.make_run_dir_path('network-snapshot-.pkl')
                misc.save_pkl((G, D, Gs), pkl)

・ Essayez de sortir

Essayez de mélanger des exemples de sortie

# Example of style mixing (matches the corresponding video clip)
python run_generator.py style-mixing-example --network=./results/00007-stylegan2-custom_dataset-1gpu-config-a/network-final.pkl --row-seeds=85,100,75,458,1500 --col-seeds=55,821,1789,293 --truncation-psi=1.0

J'ai appris ce qui suit. grid.png En outre, le mixage StyleGAN précédent pouvait être effectué avec le code suivant. example_256_4705_50_52x11.gif Ensuite, lorsque j'ai essayé de produire 100 feuilles de manière appropriée, il a été produit comme suit. example256_1000_100.gif StyleGAN2/pretrained_example.py

・ Image de sortie et image originale

Enfin, mon intérêt principal est de joindre l'image suivante pour aider à interpréter la question de savoir si l'image ainsi générée est différente de l'original.

L'image originale 0.png 1.png 2.png 3.png 4.png
Image générée example0_11.png example1_14.png example2_79.png example3_13.png example4_91.png
L'image originale 5.png 6.png 7.png 8.png 9.png
Image générée example5_2.png example6_1.png example7_21.png example8_78.png example9_51.png

Résumé

・ J'ai pu apprendre StyleGAN avec 10 visages d'anime ・ Il peut être interprété que l'image générée contient l'image originale.

・ La prochaine fois, j'aimerais défier la haute résolution avec une machine 1080.

Recommended Posts

[Introduction à StyleGAN2] Apprentissage indépendant avec 10 visages d'anime ♬
[Introduction au style GAN] Apprentissage unique de l'animation avec votre propre machine ♬
Classez les visages d'anime avec l'apprentissage en profondeur avec Chainer
[Python] Introduction facile à l'apprentissage automatique avec python (SVM)
Introduction à l'apprentissage automatique
Classer les visages d'anime par suite / apprentissage profond avec Keras
[Mémorandum d'apprentissage] Introduction à vim
Une introduction à l'apprentissage automatique
Introduction à RDB avec sqlalchemy Ⅰ
Introduction au Deep Learning ~ Règles d'apprentissage ~
Apprentissage par renforcement profond 1 Introduction au renforcement de l'apprentissage
Super introduction à l'apprentissage automatique
Introduction au Deep Learning ~ Rétropropagation ~
Introduction à l'apprentissage automatique avec scikit-learn - De l'acquisition de données à l'optimisation des paramètres
Apprentissage automatique pour apprendre avec Nogisaka 46 et Keyakizaka 46 Partie 1 Introduction
Introduction à la rédaction de notes d'apprentissage automatique
Introduction à l'apprentissage en profondeur ~ Approximation des fonctions ~
Introduction à RDB avec sqlalchemy II
Introduction à l'apprentissage profond ~ Préparation au codage ~
Présentation de la bibliothèque d'apprentissage automatique SHOGUN
Introduction au Deep Learning ~ Dropout Edition ~
Introduction au Deep Learning ~ Propagation vers l'avant ~
Introduction à l'apprentissage profond ~ Expérience CNN ~
[Introduction à StyleGAN] J'ai joué avec "The Life of a Man" ♬
J'ai lu "Renforcer l'apprentissage avec Python de l'introduction à la pratique" Chapitre 1
Introduction au Deep Learning (2) - Essayez votre propre régression non linéaire avec Chainer-
[Introduction à StyleGAN] J'ai joué avec "Une femme se transforme en Mayuyu" ♬
J'ai lu "Renforcer l'apprentissage avec Python de l'introduction à la pratique" Chapitre 2
[Introduction à WordCloud] Jouez avec le scraping ♬
Introduction à l'apprentissage automatique: fonctionnement du modèle
[Introduction à l'apprentissage automatique] Jusqu'à ce que vous exécutiez l'exemple de code avec chainer
Introduction au Deep Learning ~ Pliage et mise en commun ~
Introduction au remplissage d'image Python Remplissage d'image à l'aide d'ImageDataGenerator
Une introduction à OpenCV pour l'apprentissage automatique
[Introduction à Python] Utilisons foreach avec Python
[Introduction à Pytorch] J'ai joué avec sinGAN ♬
[Introduction à StyleGAN] J'ai joué avec style_mixing "Femme qui enlève ses lunettes" ♬
Une introduction à Python pour l'apprentissage automatique
Introduction à TensorFlow - Explication des termes et concepts d'apprentissage automatique
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitres 11 et 12 Introduction à Pandas Matplotlib
Introduction aux tests d'hypothèses statistiques avec des modèles de statistiques
Introduction à l'intelligence artificielle avec Python 1 «Théorie des algorithmes génétiques»
[Super introduction à l'apprentissage automatique] Découvrez les didacticiels Pytorch
Une introduction à l'apprentissage automatique pour les développeurs de robots
Markov Chain Artificial Brainless avec Python + Janome (1) Introduction à Janome
Chaîne de Markov artificielle sans cervelle avec Python + Janome (2) Introduction à la chaîne de Markov
Introduction à l'intelligence artificielle avec Python 2 «Pratique de l'algorithme génétique»
Introduction à Tornado (1): Framework Web Python démarré avec Tornado
Introduction au vol en formation avec Tello edu (Python)
[Introduction à minimiser] Analyse des données avec le modèle SEIR ♬
[Super introduction à l'apprentissage automatique] Découvrez les didacticiels Pytorch
Introduction à Python avec Atom (en route)
Introduction à l'apprentissage profond ~ Fonction de localisation et de perte ~
Introduction aux modèles de retour automatique vectoriel (VAR) avec des modèles de statistiques
Introduction au modèle linéaire généralisé (GLM) par Python
[Introduction à l'application Udemy Python3 +] 9. Tout d'abord, imprimez avec print
[Pour les débutants] Introduction à la vectorisation dans l'apprentissage automatique
Introduction à MQTT (Introduction)
Introduction à Scrapy (1)