[PYTHON] [Introduction à StyleGAN] J'ai joué avec "Une femme se transforme en Mayuyu" ♬

Vous pouvez maintenant apprendre le vecteur Style de l'espace latent de mappage de votre propre image. Alors, j'ai joué avec "Une femme se transforme en Mayuyu". Cette fois, il a été nécessaire d'installer dlib pour l'apprentissage de l'image de soi, et j'ai pu l'installer en toute sécurité en suivant la référence ①. En conséquence, le vecteur Style $ w $ de l'espace latent de Mayuyu a pu être obtenu, et la vidéo de transformation suivante a été créée. simple_method10_1_dr1024.gif

【référence】 ① Lorsque vous êtes bloqué avec l'installation de dlib sous Windows

Ce que j'ai fait

・ Installation de dlib ・ Prétraitement avec align_images.py ・ Mayuyu et mixage ・ Essayez "une femme se transforme en sourcils"

・ Installation de dlib

StyleGAN nécessite un prétraitement d'image avant l'apprentissage. Le code dans align_images.py a la description suivante.

Extracts and aligns all faces from images using DLib 
and a function from original FFHQ dataset preparation step
    python align_images.py /raw_images /aligned_images

Cela signifie que toutes les images de visage doivent être prétraitées dans align_images.py. Et c'était un endroit difficile pour installer ce Dlib. Cependant, comme indiqué dans la référence ① ci-dessus, cela a bien fonctionné avec la procédure suivante.

・ Prétraitement avec align_images.py

Tout ce que vous avez à faire est de mettre les données brutes dans / raw_imges et d'exécuter la commande suivante:

python align_images.py /raw_images /aligned_images

En conséquence, l'image_alignée suivante est sortie.

raw_image aligned_image
Taille 250x235 1024x1024
image mayuyu250px.jpg mayuyu250px_01.png

À ce stade, la partie du visage de l'image est découpée et agrandie à 1024x1024. En utilisant cette image, le vecteur de style mayuyu.npy de l'espace latent de mappage est appris par la commande suivante et stocké dans latent /.

python encode_images.py aligned_images/ generated_images/ latent/

・ Mayuyu et mixage

En utilisant le vecteur Style de cet espace latent, vous pouvez mélanger différentes images comme vous l'avez fait la dernière fois. Voir ci-dessous pour le code. StyleGAN/mayuyu_mix.py Cependant, les modifications apportées à $ w $ dans StyleGAN sont les suivantes.

style_ranges=[range(1,18)]+[range(2,18)]+[range(3,18)]+[range(4,18)]+[range(5,18)]+[range(6,18)]

Les résultats sont les suivants. mayuyu250px-style-mixing_case5_6.jpg Il est intéressant qu'une femme assez belle apparaisse en arrangeant avec un homme. Dans l'ensemble, les hommes en dessous de la fourchette (4,18) deviennent féminins, et d'autres personnes commencent à avoir plus de caractéristiques du côté Mayuyu que l'original. En d'autres termes, la plage (0,3) prend en charge une quantité considérable de fonctionnalités mondiales à Mayuyu.

・ Essayez "une femme se transforme en sourcils"

Donc, à la fin, j'essaierai de mixer au lieu d'échanger. Les principales parties du code sont: Le tout est placé en dessous. StyleGAN/simple_dlatents_mixing2.py

simple_dlatents_mixing2.py


    # Pick latent vector.
    rnd = np.random.RandomState(6) #5
    latents1 = rnd.randn(1, Gs.input_shape[1])
    print(latents1.shape)
    # Generate image.
    dlatents1 = Gs.components.mapping.run(latents1, None) # [seed, layer, component]
    images = Gs.components.synthesis.run(dlatents1, randomize_noise=False, **synthesis_kwargs)

    src_dlatents = np.load('./latent/mayuyu250px_01.npy')
    src_dlatents = src_dlatents.reshape(1,18,512)
    src_images = Gs.components.synthesis.run(src_dlatents, randomize_noise=False, **synthesis_kwargs)
    
    for i in range(1,101,4):
        dlatents = i/100*dlatents1+(1-i/100)*src_dlatents
        # Generate image.
        images = Gs.components.synthesis.run(dlatents, randomize_noise=False, **synthesis_kwargs)
        # Save image.
        os.makedirs(config.result_dir, exist_ok=True)
        png_filename = os.path.join(config.result_dir, 'example{}.png'.format(i))
        PIL.Image.fromarray(images[0], 'RGB').save(png_filename)

Les seuls changements apportés à ce code depuis la dernière fois sont: La forme des données d'entrée src_dlatents correspond.

    src_dlatents = np.load('./latent/mayuyu250px_01.npy')
    src_dlatents = src_dlatents.reshape(1,18,512)

De cette façon, la vidéo publiée ci-dessus a été obtenue. Pour le moment, je le republierai ci-dessous. Cette vidéo est également inversée, donc la vidéo sera continue et vous pourrez regarder Mayuyu un peu lentement.

1 simple1_.png
simple3_.png simple_method10_1_dr.gif

À propos, l'image agrandie qui apparaît dans cette vidéo est jointe ci-dessous, mais savez-vous laquelle est la vraie?

1 2 3
example5.png example1.png example9.png

Résumé

・ Apprentissage du vecteur Style de la cartographie de l'espace latent de la propre image "Mayuyu" ・ J'ai essayé de mélanger en utilisant le npy obtenu ・ J'ai essayé "une femme se transforme en sourcils"

・ Apprenons enfin les personnages d'anime ・ Faisons une vidéo en mouvement

Recommended Posts

[Introduction à StyleGAN] J'ai joué avec "Une femme se transforme en Mayuyu" ♬
[Introduction à StyleGAN] J'ai joué avec "The Life of a Man" ♬
[Introduction à StyleGAN] J'ai joué avec style_mixing "Femme qui enlève ses lunettes" ♬
[Introduction au trading système] J'ai dessiné un oscillateur stochastique avec python et joué avec ♬
[Introduction à sinGAN-Tensorflow] J'ai joué avec la super-résolution "Challenge Big Imayuyu" ♬
[Introduction à Matplotlib] Axes Animation 3D: J'ai joué avec des figurines 3D Lisaju ♬
[Introduction] Je veux créer un robot Mastodon avec Python! 【Débutants】
[Introduction à RasPi4] J'ai joué avec "la conversation de langue empoisonnée d'Hiroko / Hiromi" ♪
[Introduction à AWS] J'ai joué avec des voix masculines et féminines avec Polly et Transcribe ♪
Je veux INSÉRER un DataFrame dans MSSQL
[Introduction à StyleGAN2] Apprentissage indépendant avec 10 visages d'anime ♬
Je veux faire un jeu avec Python
J'ai joué avec Diamond, un outil de collecte de métriques
Je veux écrire dans un fichier avec Python
Je veux faire la transition avec un bouton sur le ballon
Je veux escalader une montagne avec l'apprentissage par renforcement
J'ai créé un programme pour convertir des images en art ASCII avec Python et OpenCV
J'ai joué avec wordcloud!
Je veux diviser une chaîne de caractères avec hiragana
[Introduction à Pytorch] J'ai essayé de catégoriser Cifar10 avec VGG16 ♬
Je souhaite créer manuellement une légende avec matplotlib
Je veux faire fonctionner un ordinateur quantique avec Python
[Introduction à AWS] J'ai essayé de jouer avec la conversion voix-texte ♪
Je veux lier une variable locale avec lambda
J'ai essayé d'implémenter une ligne moyenne mobile de volume avec Quantx
J'ai essayé de créer automatiquement un rapport avec la chaîne de Markov
J'ai créé un package pour filtrer les séries chronologiques avec python
Je veux démarrer un environnement Jupyter avec une seule commande
J'ai créé une application de livre simple avec python + Flask ~ Introduction ~
Je veux faire une macro de clic avec pyautogui (désir)
[Chaîne de Markov] J'ai essayé de lire les citations en Python.
J'ai essayé de résoudre le problème d'optimisation des combinaisons avec Qiskit
Je veux faire une macro de clic avec pyautogui (Outlook)
Je souhaite utiliser un environnement virtuel avec jupyter notebook!
Je veux installer le package de requirements.txt avec poésie
J'ai essayé de trier une colonne FizzBuzz aléatoire avec un tri à bulles.
[Visualisation] Je veux dessiner un beau graphique avec Plotly
J'ai essayé de traduire de force des sous-titres anglais en japonais avec Udemy
J'ai essayé d'écrire dans un modèle de langage profondément appris
Introduction à l'optimisation non linéaire (I)
J'ai créé une bibliothèque qui lit facilement les fichiers de configuration avec Python
[Introduction à Python] Comment fractionner une chaîne de caractères avec la fonction split
Un mémorandum lors de l'acquisition automatique avec du sélénium
Je voulais créer une présentation intelligente avec Jupyter Notebook + nb present
Je voulais convertir ma photo de visage en un style Yuyu.
[3ème] J'ai essayé de créer un certain outil de type Authenticator avec python
[Python] Un mémo que j'ai essayé de démarrer avec asyncio
J'ai écrit un script pour vous aider à démarrer avec AtCoder à grande vitesse!
Je souhaite rechercher le texte intégral avec elasticsearch + python
J'ai essayé de faire un processus d'exécution périodique avec Selenium et Python
J'ai essayé de créer une application de notification de publication à 2 canaux avec Python
J'ai lu "Renforcer l'apprentissage avec Python de l'introduction à la pratique" Chapitre 1
Je voulais résoudre le problème ABC164 A ~ D avec Python
Sentons-nous comme un chercheur de matériaux avec python [Introduction à pymatgen]
J'ai essayé de créer des taureaux et des vaches avec un programme shell
[Introduction au style GAN] Apprentissage unique de l'animation avec votre propre machine ♬
[4th] J'ai essayé de créer un certain outil de type Authenticator avec python