J'ai l'impression que c'est une décoction, mais je vais apprendre un modèle de génération automatique de Pokémon. Si vous le recherchez, certaines personnes l'ont déjà essayé sur la base du dernier modèle, StyleGAN2. Cependant, le code, l'ensemble de données et l'implémentation réels n'ont pas été publiés, je voudrais donc résumer cela dans un article.
StyleGAN2 est un modèle de génération d'images annoncé par NVIDIA. C'est un modèle de génération qui se caractérise par l'utilisation de la conversion de style et est un modèle puissant qui est actuellement SOTA pour plusieurs tâches.
Implémentation officielle de StyleGAN2 Tendances des méthodes de tâche de génération d'images
Lorsque je cherchais à savoir s'il y avait un bon ensemble de données, il y avait une personne qui a recueilli 15 000 données à l'avance et les a rendues publiques, alors j'ai utilisé cela. MonsterGAN
En outre, le [Pokemon-Image-Dataset] de Kaggle (https://www.kaggle.com/vishalsubbiah/pokemon-images-and-types) et [One-Shot-Pokemon-Images](https: // www. kaggle.com/aaronyin/oneshotpokemon) est également candidat. One-Shot-Pokemon-Images contient un jeu de données de carte Pokemon, qui contient une très grande quantité de données, donc [tâche de génération de carte Pokemon](https://devopstar.com/2019/05/21/ Il semble que cela s'applique à stylegan-pokemon-card-generator).
Il semble que Michael Friese essaie avec enthousiasme de générer des Pokémon en utilisant StyleGAN / StyleGAN2. Il semble que StyleGAN a déjà laissé un assez bon résultat.
Lorsque l'apprentissage par transfert est effectué à partir d'un modèle entraîné tel qu'un chat ou un cheval, l'apprentissage lui-même fonctionne bien et l'image générée semble refléter l'atmosphère du domaine avant le transfert. C'est vraiment emo.
Transfert de cheval
Transfert de chat
Transfert de voiture
Le résultat de la génération utilisant StyleGAN2 n'a été publié qu'à mi-chemin. C'est le résultat de l'apprentissage jusqu'à 540 kmg. Puisque je suis en train d'apprendre, j'ai l'impression qu'il y a pas mal de variations, en laissant de côté la qualité.
Je suis toujours en train d'apprendre, mais je vais vous montrer les progrès de l'apprentissage avec StyleGAN2. Puisque nous nous entraînons avec RTX1070, un modèle désordonné est impossible en raison de la taille de la mémoire. Cette fois, j'ai redimensionné tous les jeux de données en 64x64.
Aperçu du modèle
G Params OutputShape WeightShape
--- --- --- ---
latents_in - (?, 512) -
labels_in - (?, 0) -
lod - () -
dlatent_avg - (512,) -
G_mapping/latents_in - (?, 512) -
G_mapping/labels_in - (?, 0) -
G_mapping/Normalize - (?, 512) -
G_mapping/Dense0 262656 (?, 512) (512, 512)
G_mapping/Dense1 262656 (?, 512) (512, 512)
G_mapping/Dense2 262656 (?, 512) (512, 512)
G_mapping/Dense3 262656 (?, 512) (512, 512)
G_mapping/Dense4 262656 (?, 512) (512, 512)
G_mapping/Dense5 262656 (?, 512) (512, 512)
G_mapping/Dense6 262656 (?, 512) (512, 512)
G_mapping/Dense7 262656 (?, 512) (512, 512)
G_mapping/Broadcast - (?, 10, 512) -
G_mapping/dlatents_out - (?, 10, 512) -
Truncation/Lerp - (?, 10, 512) -
G_synthesis/dlatents_in - (?, 10, 512) -
G_synthesis/4x4/Const 8192 (?, 512, 4, 4) (1, 512, 4, 4)
G_synthesis/4x4/Conv 2622465 (?, 512, 4, 4) (3, 3, 512, 512)
G_synthesis/4x4/ToRGB 264195 (?, 3, 4, 4) (1, 1, 512, 3)
G_synthesis/8x8/Conv0_up 2622465 (?, 512, 8, 8) (3, 3, 512, 512)
G_synthesis/8x8/Conv1 2622465 (?, 512, 8, 8) (3, 3, 512, 512)
G_synthesis/8x8/Upsample - (?, 3, 8, 8) -
G_synthesis/8x8/ToRGB 264195 (?, 3, 8, 8) (1, 1, 512, 3)
G_synthesis/16x16/Conv0_up 2622465 (?, 512, 16, 16) (3, 3, 512, 512)
G_synthesis/16x16/Conv1 2622465 (?, 512, 16, 16) (3, 3, 512, 512)
G_synthesis/16x16/Upsample - (?, 3, 16, 16) -
G_synthesis/16x16/ToRGB 264195 (?, 3, 16, 16) (1, 1, 512, 3)
G_synthesis/32x32/Conv0_up 2622465 (?, 512, 32, 32) (3, 3, 512, 512)
G_synthesis/32x32/Conv1 2622465 (?, 512, 32, 32) (3, 3, 512, 512)
G_synthesis/32x32/Upsample - (?, 3, 32, 32) -
G_synthesis/32x32/ToRGB 264195 (?, 3, 32, 32) (1, 1, 512, 3)
G_synthesis/64x64/Conv0_up 2622465 (?, 512, 64, 64) (3, 3, 512, 512)
G_synthesis/64x64/Conv1 2622465 (?, 512, 64, 64) (3, 3, 512, 512)
G_synthesis/64x64/Upsample - (?, 3, 64, 64) -
G_synthesis/64x64/ToRGB 264195 (?, 3, 64, 64) (1, 1, 512, 3)
G_synthesis/images_out - (?, 3, 64, 64) -
G_synthesis/noise0 - (1, 1, 4, 4) -
G_synthesis/noise1 - (1, 1, 8, 8) -
G_synthesis/noise2 - (1, 1, 8, 8) -
G_synthesis/noise3 - (1, 1, 16, 16) -
G_synthesis/noise4 - (1, 1, 16, 16) -
G_synthesis/noise5 - (1, 1, 32, 32) -
G_synthesis/noise6 - (1, 1, 32, 32) -
G_synthesis/noise7 - (1, 1, 64, 64) -
G_synthesis/noise8 - (1, 1, 64, 64) -
images_out - (?, 3, 64, 64) -
--- --- --- ---
Total 27032600
D Params OutputShape WeightShape
--- --- --- ---
images_in - (?, 3, 64, 64) -
labels_in - (?, 0) -
64x64/FromRGB 2048 (?, 512, 64, 64) (1, 1, 3, 512)
64x64/Conv0 2359808 (?, 512, 64, 64) (3, 3, 512, 512)
64x64/Conv1_down 2359808 (?, 512, 32, 32) (3, 3, 512, 512)
64x64/Skip 262144 (?, 512, 32, 32) (1, 1, 512, 512)
32x32/Conv0 2359808 (?, 512, 32, 32) (3, 3, 512, 512)
32x32/Conv1_down 2359808 (?, 512, 16, 16) (3, 3, 512, 512)
32x32/Skip 262144 (?, 512, 16, 16) (1, 1, 512, 512)
16x16/Conv0 2359808 (?, 512, 16, 16) (3, 3, 512, 512)
16x16/Conv1_down 2359808 (?, 512, 8, 8) (3, 3, 512, 512)
16x16/Skip 262144 (?, 512, 8, 8) (1, 1, 512, 512)
8x8/Conv0 2359808 (?, 512, 8, 8) (3, 3, 512, 512)
8x8/Conv1_down 2359808 (?, 512, 4, 4) (3, 3, 512, 512)
8x8/Skip 262144 (?, 512, 4, 4) (1, 1, 512, 512)
4x4/MinibatchStddev - (?, 513, 4, 4) -
4x4/Conv 2364416 (?, 512, 4, 4) (3, 3, 513, 512)
4x4/Dense0 4194816 (?, 512) (8192, 512)
Output 513 (?, 1) (512, 1)
scores_out - (?, 1) -
--- --- --- ---
Total 26488833
Je suis désolé, j'ai oublié de modifier les paramètres de la grille de l'instantané et c'est foiré. .. .. C'est difficile à apprendre, donc je n'ai pas réessayé.
Exemple de jeu de données (reals.png)
Résultat de la génération (288 km: 19 heures) Les contours se forment progressivement et le contour du Pokémon qui ressemble à un type humain ou animal a été créé.
Frechet Inception Distance (FID) est émis pour contrôler si l'apprentissage progresse correctement. Jusqu'à présent, les choses vont bien. La page officielle indique que le FID est à un seul chiffre, mais il est trop cher d'en apprendre autant, alors j'arrêterai d'apprendre lorsque l'image générée me va bien de mes propres yeux.
network-snapshot- time 19m 34s fid50k 278.0748
network-snapshot- time 19m 34s fid50k 382.7474
network-snapshot- time 19m 34s fid50k 338.3625
network-snapshot- time 19m 24s fid50k 378.2344
network-snapshot- time 19m 33s fid50k 306.3552
network-snapshot- time 19m 33s fid50k 173.8370
network-snapshot- time 19m 30s fid50k 112.3612
network-snapshot- time 19m 31s fid50k 99.9480
network-snapshot- time 19m 35s fid50k 90.2591
network-snapshot- time 19m 38s fid50k 75.5776
network-snapshot- time 19m 39s fid50k 67.8876
network-snapshot- time 19m 39s fid50k 66.0221
network-snapshot- time 19m 46s fid50k 63.2856
network-snapshot- time 19m 40s fid50k 64.6719
network-snapshot- time 19m 31s fid50k 64.2135
network-snapshot- time 19m 39s fid50k 63.6304
network-snapshot- time 19m 42s fid50k 60.5562
network-snapshot- time 19m 36s fid50k 59.4038
network-snapshot- time 19m 36s fid50k 57.2236
Cette fois, j'ai étudié l'ensemble de données et les cas précédents, et j'ai écrit jusqu'au point où j'ai réellement procédé à l'apprentissage. Le code qui a fonctionné dans mon environnement et le résultat généré après plus d'apprentissage seront résumés dans la deuxième partie de l'article à une date ultérieure.
Partie 2 → Créer un Pokémon inconnu avec StyleGAN2 [Partie 2]
640kimg Une chose unique et similaire a commencé à naître
En fait, lorsque l'apprentissage a progressé jusqu'à présent, je fonctionnais sur le lecteur C, donc la capacité de données est devenue insuffisante et le modèle a été sauvegardé vide et a disparu ... Réfléchissez-y, déplacez-le vers le disque dur ajouté au détriment de la vitesse de lecture, puis réexécutez. C'est trop douloureux ... les résultats de deux jours d'apprentissage ...
Je suis désolé de n'avoir pensé à rien, mais je suis désolé pour ceux qui sympathisent avec moi ...
Lors de la sauvegarde du modèle, j'étais préoccupé par la capacité et je n'ai écrasé que le dernier à chaque fois, mais cela s'est retourné contre lui. Je vais soigneusement enregistrer le modèle sur le disque dur.
Recommended Posts