La technologie appelée GAN (Genarative Adversarial Network), qui génère de nouvelles images à partir d'images existantes par apprentissage en profondeur, est la technologie qui m'a le plus impressionné dans l'apprentissage en profondeur, mais comme l'apprentissage nécessite généralement une énorme quantité de données d'entraînement et de temps, c'est assez individuel. Je n'ai pas pu l'essayer. À ce moment-là, j'ai vu l'article suivant qui développait un GAN pouvant être généré à partir d'une seule image de formation, et je l'ai examiné.
Il s'agit d'un article soumis en mars de cette année, qui a été soumis l'année dernière.
SinGAN: Learning a Generative Model from a Single Natural Image
Cela semble être une amélioration de SinGAN (Single-Image-GAN) proposée dans.
GAN Le GAN (Hostile Generation Network) lui-même est bien connu et est expliqué sur de nombreux sites, je vais donc omettre les détails. Veuillez consulter ici. Le GAN est l'un des "modèles de génération" qui apprend la distribution des données d'entraînement et génère des données similaires. Créez un générateur qui génère de fausses données et un discriminateur qui les distingue du réel, et formez-les en alternance. Cela finira par générer des données indiscernables de la réalité. Ceci est souvent comparé à la fabrication de fausses factures. Le contrefacteur (Generator) apprend à tromper la police (Discriminator), et la police apprend à détecter le billet contrefait. Ici, les données d'entraînement sont $ \ boldsymbol {x} $, le bruit est $ z $, la distribution de probabilité est $ p (\ boldsymbol {x}) $, $ p (z) $, le générateur est $ G $ et le discriminateur est $ D. Si la probabilité que $, Discriminator identifie correctement $ \ boldsymbol {x} $ est $ D (\ boldsymbol {x}) $, et les données générées à partir de $ z $ de Generator sont $ G (z) $, la fonction objectif est la suivante. On dirait.
{\rm min}_{G}{\rm max}_{D}V(D,G)=\mathbb{E}_{\boldsymbol{x}\sim p_{data}(\boldsymbol{x})}[{\rm log}D(\boldsymbol{x})]+\mathbb{E}_{z\sim p_{z}(z)}[{\rm log}(1-D(G(z)))]
Generator confond le vrai pour un faux ($ D (\ boldsymbol {x}) \ à 0
SinGAN Le GAN conventionnel nécessite une grande quantité de données de formation pour l'apprentissage, mais SinGAN (Single-Image-GAN) est un GAN qui peut être appris à partir d'une seule image comme son nom l'indique. Les tâches de SinGAN incluent la génération d'image inconditionnelle et l'harmonisation d'image. (Voir ci-dessous)
Dans SinGAN, multiple comme indiqué sur la figure (extrait de Paper Short Summary) À l'aide du générateur, chaque générateur reçoit l'image de sortie du générateur précédent en entrée. De plus, chaque Générateur apprend individuellement, et le poids du Générateur précédent est fixé au moment de l'apprentissage. (Tout d'abord, apprenez G0, corrigez G0 et apprenez G1, corrigez G0 et G1 et apprenez G2 ...) Le point important ici est que Discriminator vous permet de voir l'image comme un patch plutôt que dans son ensemble, créant une image qui ressemble à la réalité à un moment donné mais qui est différente dans son ensemble. (Split Colosseo sur la figure)
ConSinGAN Depuis qu'il a été découvert que la méthode ci-dessus limite l'interaction entre les générateurs, la méthode nouvellement proposée est ConSinGAN (Concurrently-Single-Image-GAN) qui apprend simultanément (simultanément) sans fixer le générateur. est.
Si vous apprenez tous les générateurs en même temps, vous allez sur-adapter, donc les deux points suivants sont incorporés dans le document.
La réduction du taux d'apprentissage ici crée une variété d'images générées, de sorte que la reproductibilité de l'image d'entraînement est perdue et il y a une relation de compromis.
En réduisant le nombre de générateurs avec cette méthode d'apprentissage ConSinGAN cette fois, le temps d'apprentissage est d'environ 1/6 de celui de SinGAN et les performances sont plus élevées.
Genarator et Discriminator ont tous deux une structure dans laquelle plusieurs couches de pliage sont empilées comme le montre la figure (cité dans Paper). Ici, la carte de caractéristiques qui sera l'entrée du prochain générateur est le suréchantillonnage, puis le bruit est ajouté pour la diversité et la sortie est connectée par une connexion résiduelle afin qu'elle ne s'écarte pas de manière significative.
La fonction objectif à l'étape $ n $ est la suivante.
{\rm min}_{G_{n}}{\rm max}_{D_{n}}L_{\rm adv}(G_n,D_n)+\alpha L_{\rm rec}(G_n)
Ici, $ L_ {\ rm adv} (G_n, D_n) $ utilise la distance de Wasserstein comme fonction objectif WGAN-GP (Paper //arxiv.org/abs/1704.00028)) est un terme qui exprime la précision de l'identification, et $ L_ {\ rm rec} (G_n) $ exprime la stabilité de l'apprentissage par la distance entre l'image générée et l'image d'apprentissage. C'est un terme.
L_{\rm adv}(G_n,D_n)=\mathbb{E}_{z\sim p_{z}(z)}[D(G(z))]-\mathbb{E}_{{\boldsymbol x}\sim p_{data}}[D({\boldsymbol x})]+\lambda \mathbb{E}_{{\hat{\boldsymbol x}}\sim p_{{\hat{\boldsymbol x}}}}[(||\nabla_{{\hat{\boldsymbol x}}} D({\hat{\boldsymbol x}})||_2-1)^2]\\
L_{\rm rec}(G_n)=||G_n(x_0)-x_n||_2^2
$ \ Alpha $ est les 10 constantes par défaut, $ {\ hat {\ boldsymbol x}} $ est le point sur la ligne droite reliant les données d'entraînement et les données générées, $ \ lambda $ est la constante, $ x_n $ est l'image d'entraînement, $ x_0 $ est l'image d'entrée de $ G_n $. Cependant, l'entrée de $ L_ {\ rm adv} (G_n, D_n) $ diffère selon la tâche, par exemple, dans la génération d'image inconditionnelle, le bruit est donné, mais dans l'harmonisation d'image, l'image de formation est augmentée (découper une partie ou changer de couleur, etc. Il semble qu'il valait mieux donner une image avec (ajout de bruit).
Cette fois, j'ai essayé d'utiliser la génération d'image inconditionnelle et l'harmonisation d'image. D'autres tâches intéressantes sont mentionnées, donc si vous êtes intéressé, veuillez consulter l'article.
Unconditional Image Generation Aléatoire à l'image de la formation comme indiqué sur la figure (cité dans Short Summary) Vous pouvez ajouter du bruit $ z $ pour créer une image réaliste et inexistante tout en préservant la structure globale. (Vous pouvez voir qu'il est ajusté même si vous modifiez la taille de l'image.)
Image Harmonization Image de formation (peinture) comme indiqué sur la figure (citée de Paper Short Summary) Etc.) et harmonisez les objets ajoutés avec le style de l'image entraînée.
Avec l'harmonisation d'image, vous pouvez obtenir de meilleurs résultats en perfectionnant le modèle entraîné avec une image naïve (Naive dans la figure ci-dessus). (Ajustez la figure ci-dessus)
J'ai cloné le public GitHub et l'ai exécuté sur Google Colaboratory, qui peut utiliser le GPU gratuitement.
Setup
#Clone du référentiel
!git clone https://github.com/tohinz/ConSinGAN.git
#Installation de la bibliothèque utilisée
pip install -r requirements.txt
Sur le chemin, j'ai eu une erreur disant que la version de l'outil Colaboratory était différente, mais il n'y a pas eu de problème avec l'opération.
Unconditional Generation Placez les images d'entraînement dans Images / Generation /. J'utiliserai le pont du Rialto (rialto.jpg 1867 x 1400 pixels) qui était précédemment pris à Venise.
Unconditional_Generation
!python main_train.py --gpu 0 --train_mode generation --input_name Images/Generation/rialto.jpg
--gpu utilise le GPU (0 par défaut), --train_mode spécifie la tâche (génération, harmonisation, etc.) et --input_name spécifie le chemin de l'image d'entraînement. Bien que cela n'ait pas été changé cette fois, le taux d'apprentissage (--lr_scale) et le nombre de générateurs (--train_stage) peuvent être modifiés à volonté. Par défaut, le nombre de générateurs est de 5, et chacun apprend avec 2000 itérations. La formation a duré 69 minutes, probablement en raison de sa grande taille. Le résultat est TrainedModels / rialto / yyyy_mm_dd_hh_mm_ss_generation_train_depth_3_lr_scale_0.1_act_lrelu_0.05. Voici quelques exemples générés.
C'est un peu bruyant, mais un pont spongieux a été créé.
Image Harmonization
Associons l'image du chat avec la peinture (faire du foin). L'image d'entraînement (300 x 300 pixels hoshikusa.jpg) est à gauche, et l'image naïve (142 x 130 pixels hoshikusa_naive.jpg) est à droite. Placez-les dans Image / Harmonisation /. À l'origine, il semble placer une image de masque qui découpe la partie de l'objet à ajouter, mais je ne pouvais pas le faire, donc je le crée sans masque.
Entraînement
!python main_train.py --gpu 0 --train_mode harmonization --train_stages 3 --min_size 120 --lrelu_alpha 0.3 --niter 1000 --batch_norm --input_name Images/Harmonization/hoshikusa.jpg
Le temps de formation était de 15 minutes. Appliquez ensuite l'image naïve au modèle d'entraînement.
Évaluation
!python evaluate_model.py --gpu 0 --model_dir TrainedModels/hoshikusa/yyyy_mm_dd_hh_mm_ss_harmonization_train_depth_3_lr_scale_0.1_BN_act_lrelu_0.3 --naive_img Images/Harmonization/hoshikusa_naive.jpg
Le résultat peut être TrainedModels / hoshikusa / yyyy_mm_dd_hh_mm_ss_harmonization_train_depth_3_lr_scale_0.1_BN_act_lrelu_0.3 / Evaluation /.
La résolution est mauvaise, mais la couleur du chat sur la photo a changé. Je vais essayer de peaufiner.
Réglage fin
!python main_train.py --gpu 0 --train_mode harmonization --input_name Images/Harmonization/hoshikusa.jpg --naive_img Images/Harmonization/hoshikusa_naive.jpg --fine_tune --model_dir TrainedModels/hoshikusa/yyyy_mm_dd_hh_mm_ss_harmonization_train_depth_3_lr_scale_0.1_BN_act_lrelu_0.3
Lorsque le nombre d'itérations par défaut était de 2000 fois (11 minutes), il était intégré à la couleur d'arrière-plan comme indiqué à gauche et sur-ajusté. Le papier déclare que 500 fois est suffisant. (droite)
Convertissons la photo en style cartoon. La gauche est l'image d'entraînement (pen_building.jpg 600 x 337 pixels) et la droite est l'image naïve (pen_building_naive.jpg 283 x 213 pixels).
Quand je l'ai couru de la même manière, le résultat était le suivant (temps d'entraînement 9 minutes). La gauche est une évaluation normale et la droite est un réglage fin (100 itérations).
J'ai fait des ramen comme un dessin animé. Cette tâche semble être suffisante sans réglage fin.
Cette fois, j'ai lu un article sur ConSinGAN, qui est une version améliorée de SinGAN qui peut être générée avec une seule image de formation, en utilisant un modèle GAN qui m'intéressait personnellement. C'est amusant car il existe de nombreux modèles de technologie de génération d'images qui sont impressionnants et les résultats sont faciles à comprendre. Cependant, il est dommage que je ne puisse pas publier ce que j'ai fait avec mes images animées et dessinées préférées en raison de problèmes de droits d'auteur.
Recommended Posts