[PYTHON] J'ai essayé d'implémenter StarGAN (1)

J'ai essayé d'implémenter StarGAN sur Linux

Cette fois, j'ai essayé d'implémenter StarGAN. Fondamentalement, nous allons l'implémenter en fonction du code publié sur github. Sur cette page, nous expliquerons et implémenterons un papier léger. J'aimerais le faire la prochaine fois que je l'appliquerai en utilisant mon propre ensemble de données.

--À propos de StarGAN Super facile --Implémentation sous Linux

C'est facile, mais je vais l'expliquer en fonction des deux éléments ci-dessus.

Super facile à propos de StarGAN

Papier: https://arxiv.org/abs/1711.09020

** StarGAN ** est un type de Generative Adversarial Netwok (GAN) qui permet la conversion entre différents domaines ** CycleGAN ** et GAN avec apprentissage de classification multi-classes ** AC-GAN C'est une combinaison de **.

** CycleGAN ** ne peut effectuer de conversion de domaine qu'entre deux domaines. Afin de réaliser une conversion de domaine entre deux ou plusieurs domaines k, k (k-1) générateurs doivent être formés. C'est pratiquement possible, mais ennuyeux. コメント 2020-05-22 234300.png Cette image est tirée du papier, mais si k = 4, cela signifie que 4 * 3 = 12 générateurs sont nécessaires.

Pour résoudre un tel problème, StarGAN a introduit un algorithme qui convertit plusieurs domaines avec un seul générateur. コメント 2020-05-22 234328.png Si vous avez 5 domaines, ils ressembleront à l'image ci-dessus. Il a une forme d'étoile. C'est pourquoi c'est StarGAN. D'une manière ou d'une autre, vous pouvez chatouiller votre cœur.

Il y avait une explication polie autres articles, donc je vais la partager. (Je ne peux plus expliquer)

Implémentation sous Linux

Code public https://github.com/yunjey/StarGAN

Environnement de montage

Implémenté dans un ensemble de données public

Tout d'abord, clonez git dans n'importe quel répertoire. Puis passez au répertoire StarGAN /. Cette fois, nous allons télécharger le jeu de données CelebA et le jeu de données RaFD qui ont également été utilisés dans l'article.

$ git clone https://github.com/yunjey/StarGAN.git
$ cd StarGAN/
$ bash download.sh celeba

Le téléchargement est terminé.

  .
  .
  .
  inflating: ./data/celeba/images/072137.jpg  
  inflating: ./data/celeba/images/027742.jpg  
  inflating: ./data/celeba/images/188764.jpg  
  inflating: ./data/celeba/list_attr_celeba.txt 

Cet ensemble de données appelé ensemble de données CelebA est ici Est publié.

Cet ensemble de données contient 202 599 images faciales en couleur de célébrités mesurant 178 x 218 pixels. En plus de cela, 40 types d'attributs sont attribués à chaque image. Par exemple, Black_Hair, Blonde_Hair, Brown_Hair, Male, Young, etc. Pour plus d'informations, veuillez consulter ici.

コメント 2020-05-22 215619.png

Le répertoire de téléchargement contiendra une image comme celle ci-dessus et un fichier txt appelé list_attr_celeba.txt avec les attributs de chaque image. Le contenu ici est

[Nom du dossier d'images] 1 1 -1 1 -1 1 1 ... 1 -1

Il est devenu. Il y a 1 ou -1 pour le nombre d'attributs (40). Quand il vaut 1, cela signifie que c'est l'attribut, et quand il vaut -1, cela signifie que ce n'est pas l'attribut. Gardez à l'esprit que cela doit être généré lors de l'entraînement avec votre propre ensemble de données.


** Apprentissage **

Tout d'abord, apprenons StarGAN à l'aide de l'ensemble de données CelebA.

$ python main.py --mode train --dataset CelebA --image_size 128 --c_dim 5 \
               --sample_dir stargan_celeba/samples --log_dir stargan_celeba/logs \
               --model_save_dir stargan_celeba/models --result_dir stargan_celeba/results \
               --selected_attrs Black_Hair Blond_Hair Brown_Hair Male Young

Décrit la commande. --mode: mode --dataset: ensemble de données à utiliser --image_size: taille de l'image --c_dim: Nombre de classes d'attribut --sample_dir: dossier dans lequel l'échantillon est enregistré --log_dir: dossier pour enregistrer les journaux --model_save_dir: Dossier pour enregistrer le modèle --result_dir: dossier pour enregistrer les résultats --selected_attrs: attribut que vous voulez apprendre C'est comme ça.

tester

Ensuite, nous allons tester.

$ python main.py --mode test --dataset CelebA --image_size 128 --c_dim 5 \
               --sample_dir stargan_celeba/samples --log_dir stargan_celeba/logs \
               --model_save_dir stargan_celeba/models --result_dir stargan_celeba/results \
               --selected_attrs Black_Hair Blond_Hair Brown_Hair Male Young

C'est facile à faire.


Ensuite, je voulais également télécharger les données RaFD, mais je devais postuler. Peut-être que même si vous pouvez postuler, vous ne pourrez pas non plus le publier sur cette page.

Pour ceux qui ont du mal à apprendre, nous téléchargerons le réseau appris.

$ bash download.sh pretrained-celeba-128x128

Le modèle téléchargé est enregistré dans . / Stargan_celeba_128 / models. Ensuite, utilisez la commande suivante pour effectuer la conversion d'image à l'aide du réseau formé.

$ python main.py --mode test --dataset CelebA --image_size 128 --c_dim 5 \
                 --selected_attrs Black_Hair Blond_Hair Brown_Hair Male Young \
                 --model_save_dir='stargan_celeba_128/models' \
                 --result_dir='stargan_celeba_128/results'

C'est super facile.

L'image convertie est enregistrée dans . / Stargan_celeba_128 / results. Ceci complète une implémentation simple sur un ensemble de données public. La prochaine fois, je l'appliquerai à l'ensemble de données que j'ai préparé.


Matériel de référence

Papier: https://arxiv.org/pdf/1703.10593.pdf Github:https://github.com/yunjey/StarGAN CelebA:http://mmlab.ie.cuhk.edu.hk/projects/CelebA.html 7 Changez! Changez de visage avec l'IA: https://qiita.com/uyuutosa/items/5dd9b2b80a9aaca67050

Recommended Posts

J'ai essayé d'implémenter StarGAN (1)
J'ai essayé d'implémenter PCANet
J'ai essayé d'implémenter Deep VQE
J'ai essayé de mettre en place une validation contradictoire
J'ai essayé d'implémenter PLSA en Python
J'ai essayé d'implémenter PLSA dans Python 2
J'ai essayé de déboguer.
J'ai essayé d'implémenter ADALINE en Python
J'ai essayé d'implémenter PPO en Python
J'ai essayé d'implémenter CVAE avec PyTorch
J'ai essayé d'implémenter TOPIC MODEL en Python
J'ai essayé d'implémenter le tri sélectif en python
J'ai essayé de mettre en œuvre le problème du voyageur de commerce
J'ai essayé d'apprendre PredNet
J'ai essayé d'organiser SVM.
J'ai essayé de réintroduire Linux
J'ai essayé de présenter Pylint
J'ai essayé de résumer SparseMatrix
jupyter je l'ai touché
J'ai essayé d'implémenter et d'apprendre DCGAN avec PyTorch
J'ai essayé d'implémenter Mine Sweeper sur un terminal avec python
J'ai essayé d'implémenter un pseudo pachislot en Python
J'ai essayé d'implémenter le poker de Drakue en Python
J'ai essayé d'implémenter le perceptron artificiel avec python
J'ai essayé d'implémenter GA (algorithme génétique) en Python
J'ai essayé d'implémenter Grad-CAM avec keras et tensorflow
J'ai essayé d'implémenter SSD avec PyTorch maintenant (Dataset)
J'ai essayé d'implémenter le calcul automatique de la preuve de séquence
J'ai essayé de créer l'API Quip
J'ai essayé de toucher Python (installation)
J'ai essayé d'expliquer l'ensemble de données de Pytorch
J'ai essayé l'authentification vocale Watson (Speech to Text)
J'ai touché l'API de Tesla
J'ai essayé de m'organiser à propos de MCMC.
J'ai essayé de déplacer le ballon
J'ai essayé d'estimer la section.
J'ai essayé de mettre en œuvre le modèle de base du réseau neuronal récurrent
J'ai essayé d'implémenter la détection d'anomalies par apprentissage de structure clairsemée
J'ai essayé d'implémenter un automate cellulaire unidimensionnel en Python
J'ai essayé de mettre en œuvre une évasion (type d'évitement de tromperie) avec Quantx
[Django] J'ai essayé d'implémenter des restrictions d'accès par héritage de classe.
J'ai essayé d'implémenter ListNet d'apprentissage de rang avec Chainer
J'ai essayé d'implémenter la fonction d'envoi de courrier en Python
J'ai essayé de mettre en œuvre le chapeau de regroupement de Harry Potter avec CNN
J'ai essayé d'implémenter Perceptron Part 1 [Deep Learning from scratch]
J'ai essayé d'implémenter le blackjack du jeu Trump en Python
J'ai essayé d'implémenter SSD avec PyTorch maintenant (édition du modèle)
J'ai essayé de créer un linebot (implémentation)
J'ai essayé de résumer la gestion des exceptions Python
J'ai essayé d'utiliser Azure Speech to Text.
J'ai essayé de créer un linebot (préparation)
J'ai essayé de visualiser AutoEncoder avec TensorFlow
J'ai essayé de gratter
J'ai essayé de reconnaître le mot de réveil
J'ai essayé de commencer avec Hy
J'ai essayé PyQ
[Python] J'ai essayé d'implémenter un tri stable, alors notez