[PYTHON] J'ai joué avec des GAN simples (SinGAN) (+ j'ai également résumé les points que j'ai eu du mal à mettre en œuvre (via le chemin, la commande Linux, l'utilisation de googlecolab, etc.))

introduction

GAN: La technologie des réseaux de génération hostiles progresse de jour en jour. Même moi, qui travaille dans un système non informatique (ingénieur dans l'industrie manufacturière), est une technologie qui présente un grand intérêt. Il est préférable de l'implémenter et de jouer avec pour acquérir une compréhension plus approfondie de la technologie. Par conséquent, cette fois, j'aimerais implémenter un algorithme annoncé en 2019 appelé ** Single GANs **. Puisqu'il s'agit d'un algorithme qui génère une image composite à partir d'une seule image, c'est un article que j'ai en fait essayé de déplacer.

Cependant, il y avait quelques obstacles pour moi à mettre en œuvre ce dernier article, donc j'écris un article axé sur les difficultés.

Ce papier

Voici le papier que je veux mettre en œuvre cette fois.

SinGAN: Learning a Generative Model from a Single Natural Image https://arxiv.org/abs/1905.01164

Une seule image peut être utilisée comme données d'enseignant et une nouvelle image proche de ces données d'enseignant peut être générée. De plus, vous pouvez générer une image proche de l'image d'origine à partir d'une image manuscrite (Peinture sur image), ou superposer une autre image et la convertir dans le même style (Harmonisation).

image.png

image.png

Je ne peux pas comprendre pleinement l'explication détaillée de l'algorithme, donc j'apprécierais que vous puissiez voir les explications d'autres personnes.

[Commentaire d'article] SinGAN: Apprendre un modèle génératif à partir d'une seule image naturelle https://qiita.com/takoroy/items/27f918a2fe54954b29d6

Quand j'ai lu l'article de SinGAN, c'était incroyable https://qiita.com/yoyoyo_/items/81f0b4ca899152ac8806

Eh bien, pour l'implémenter, j'ai d'abord téléchargé l'ensemble des programmes de ce github et j'ai décompressé le fichier zip. https://github.com/tamarott/SinGAN

Passer le chemin du fichier d'environnement

À propos, lors de la mise en œuvre du contenu du papier, il est souvent instruit par une commande du terminal comme indiqué dans l'image ci-dessous.

Terminal


python -m pip install -r requirements.txt

Lorsque j'ai essayé pour la première fois d'installer les bibliothèques requises avec cela, j'ai reçu le message d'erreur suivant. 001.png

Cela signifie que python.exe n'a pas pu être démarré par la commande python = le chemin n'est pas passé. Par conséquent, il est nécessaire de définir des paramètres pour passer le chemin.

Faites un clic droit sur l'icône Windows ⇒ Définissez les paramètres (notre Windows 10 Home). image.png

Ensuite, tapez environnement dans le champ de recherche et le champ d'édition des variables d'environnement système apparaîtra. image.png

Cliquez ensuite sur Variables d'environnement dans les propriétés système. image.png

Modifiez le chemin ici. image.png Sélectionnez Nouveau et entrez le chemin du dossier dans lequel python.exe est stocké. Cela permettra au chemin de passer et de résoudre le problème. image.png

En cas de succès, vous pouvez le confirmer comme ceci.

Comprendre l'analyseur d'arguments

Ensuite, je pensais que la commande python était passée, et quand je suis passé à la suivante, une telle commande est apparue. Je comprends que j'exécute random_samples.py, mais c'est une commande avec des doubles et des tirets après cela. Après examen, cela utilise un module appelé Argument Parser qui vous permet de spécifier des arguments à partir des commandes du terminal.

URL de référence https://qiita.com/kzkadc/items/e4fc7bc9c003de1eb6d0

Terminal


python random_samples.py --input_name <training_image_file_name> --mode random_samples --gen_start_scale <generation start scale number>

Il est pratique de pouvoir le spécifier à partir de la ligne de commande, mais que dois-je faire si je veux l'utiliser avec le noyau sur vs code ou jupyter? Il a été décrit en détail à cette URL. http://flat-leon.hatenablog.com/entry/python_argparse


# 3.Analyser les paramètres de démarrage à l'aide de l'objet ArgumentParser
args = parser.parse_args()

Il semble que les paramètres au démarrage soient analysés ici, il semble donc que vous puissiez le démarrer sur le noyau en créant une liste etc. et en la passant ici.

Commencer à apprendre

Maintenant que vous connaissez le chemin du fichier et l'argument, exécutons-le. Cependant, j'ai trouvé qu'il fallait beaucoup de temps pour apprendre sur un petit PC.

Dans le premier apprentissage cette fois, environ 3 heures se sont écoulées dans la section transversale où 6 fois (à l'échelle 5) sur 9 fois (échelle 8) ont été exécutées. Après tout, vous pouvez voir que le calcul du traitement d'image, y compris le GAN, prend beaucoup de temps. Par conséquent, j'ai décidé d'utiliser le GPU de Google Colab avec obéissance ici.

Téléchargez ce dossier ensemble sur Google Drive. Ensuite, déplacez d'abord le répertoire vers ce dossier de stockage.

GoogleColab


cd  /content/drive/My Drive/SinGAN-master

Vous pouvez maintenant déplacer des fichiers .py etc. en utilisant les commandes Linux.

Génération d'images à partir du bruit (Train)

Nous apprendrons à ressembler à l'image d'origine à partir de l'image de bruit. L'étape initiale de l'apprentissage commence avec une très petite taille d'image et augmente progressivement jusqu'à la taille de l'image d'origine.

GoogleColab


!python main_train.py --input_name cows.png

Lorsque vous utilisez des commandes Linux, cela fonctionne en mettant! First. Si vous le déplacez, vous pouvez procéder très rapidement. Le calcul a été effectué en 30 minutes environ. L'installation de la bibliothèque est également très simple, donc celle qui prend beaucoup de temps de traitement est Google Colab. ..

image.png

Maintenant, comparons l'image générée avec l'image d'origine. L'augmentation du nombre d'échelles est le résultat de l'augmentation du nombre de calculs. ** Hmm, c'est indiscernable de la vraie chose. ** La taille de l'image est petite lorsque le nombre d'échelles est faible, mais elle est de la même taille pour faciliter la comparaison. En faisant cela, vous pouvez voir que l'image se transforme progressivement en une image plus claire plus proche de l'image d'origine. De plus, vous pouvez voir que non seulement la qualité de l'image s'améliore, mais aussi le placement des vaches est différent à chaque fois. Vous pouvez voir que ce n'est pas un processus qui améliore simplement la qualité de l'image.

Traitement pour ressembler à l'image d'origine à partir d'une image manuscrite (Paint to Image)

Ensuite, exécutez un programme qui ressemble à une image de données d'enseignant à partir d'une image manuscrite. Pour ce faire, vous devez d'abord former les données de l'enseignant auxquelles vous souhaitez ressembler.

GoogleColab


!python paint2image.py --input_name volacano.png --ref_name volacano3.png --paint_start_scale 1

image.png

Voyons le résultat. ** Je n'ai pas pu le reproduire correctement. ** L'image originale est en bas à droite. Et plus la valeur de start_scale est petite, plus le nombre de formations est élevé. Cette fois, j'ai l'impression que start_scale3 et 4 sont les plus proches.

Probablement, il semble difficile d'imiter si les images originales ne sont pas similaires en écriture **.

Essayez de changer la taille de l'image librement (échantillons aléatoires de tailles arbitrales)

Ensuite, la taille de l'image est modifiée en fonction de l'image d'origine.

GoogleColab


!python random_samples.py --input_name cows.png --mode random_samples_arbitrary_sizes --scale_h 5 --scale_v 4

scale_h est l'échelle horizontale et 1 indique 1x. De plus, scale_v est l'échelle verticale.

49.png

En guise de test, j'ai fait une grande image. ** Mais ça fait du mal. .. C'est devenu une image de vaches entassées dans la prairie. Excusez-moi. .. ** **

Synthétiser proche du style original (Harmonisation)

Enfin, le processus consiste à le modifier en fonction du style de l'image d'origine. Dans ce cas également, vous devez d'abord vous entraîner avec le train. Cette fois, j'ai essayé de combiner la photo que j'ai prise avec le poisson en image libre.

GoogleColab


!python harmonization.py --input_name fish.png --ref_name fish1.png --harmonization_start_scale 1

image.png

Quel gros poisson s'est transformé en un banc de poissons bleu clair comme Swimmy (ou le yowashi de Pokemon). Il doit avoir été traité sur la base du banc d'origine de poisson rouge. C'est un algorithme très intéressant.

en conclusion

En fait, j'ai bougé mes mains et joué avec des GAN simples, le dernier article du GAN. Il s'est avéré très facile à utiliser.

J'ai beaucoup appris sur la création de l'environnement lors de sa mise en œuvre. En particulier, j'ai été impressionné par le fait que Google Colab permet de déplacer facilement même des modèles avec une charge de calcul élevée et de voir les résultats. J'ai ressenti à nouveau la grandeur de Google.

Cette fois, je me suis concentré sur sa mise en œuvre et sur son utilisation, je voudrais donc approfondir ma compréhension du contenu théorique. J'ai déjà publié des articles dérivés, j'aimerais donc en savoir plus sur leur pertinence.

Recommended Posts

J'ai joué avec des GAN simples (SinGAN) (+ j'ai également résumé les points que j'ai eu du mal à mettre en œuvre (via le chemin, la commande Linux, l'utilisation de googlecolab, etc.))
J'ai eu du mal à essayer d'accéder à Hadoop3.0.0 depuis un navigateur (et ArchLinux)
Une histoire que j'ai eu du mal en essayant de créer une "application qui convertit des images comme des peintures" avec la première application Web
[Introduction à StyleGAN] J'ai joué avec "The Life of a Man" ♬