Connaissez-vous cette icône?
Oui, c'est l'icône du célèbre Melville . On sait qu'il y a beaucoup de gens qui demandent à Melville de dessiner leurs personnages préférés et de les utiliser comme twitter samune, et ont gagné un grand soutien. L'icône dessinée par cette personne est souvent appelée "Mel Icon" en raison de son style unique. Exemple d'icône mel typique
(Respectivement de Yukatayu et Shun (Au 19 février 2020))
Je veux aussi une icône comme celle-ci! !! !! !! !! !! J'ai donc créé un générateur d'icônes mel par machine learning. Dans cet article, je voudrais présenter brièvement la méthode utilisée pour cela.
Pour la génération, nous utilisons une méthode appelée GAN (Generative contradictarial networks).
Cette technique combine deux choses: un réseau neuronal (Generator) qui génère des images et un réseau neuronal (Discriminator) qui identifie si les données d'entrée sont ou non une icône mel. Le Générateur essaie de générer une image qui ressemble autant que possible à une icône mel afin de tromper le Discriminateur, et le Discriminateur apprend à identifier l'image plus précisément. Au fur et à mesure que les deux réseaux de neurones s'entraînent, le générateur sera en mesure de générer des images proches de l'icône mel.
Pour que Generator puisse générer des images qui ressemblent à des icônes Mel et que Discriminator puisse identifier si l'image d'entrée est une icône Mel, apportez autant d'icônes Mel réelles que possible à l'enseignant. Vous devez créer un ensemble de données qui sera les données et l'utiliser pour la formation. J'ai donc fait le tour de Twitter, j'ai trouvé l'icône mel samune, je l'ai sauvegardée à plusieurs reprises et j'ai obtenu plus de 100 feuilles. Utilisez ceci pour apprendre.
Laissez le générateur regarder l'icône mel préparée plus tôt et apprenez à générer une image qui lui ressemble. L'image à générer est de 64 x 64 pixels, et la couleur est RVB 3 canaux. Si le générateur génère des données similaires à chaque fois, l'apprentissage ne se déroulera pas correctement, il est donc nécessaire de pouvoir générer autant de types d'images que possible. Par conséquent, entrez une séquence de nombres composée de nombres aléatoires dans le générateur pour la génération d'image. Pour cette séquence de nombres, un processus appelé "convolution de translocation" décrit plus loin est appliqué à chaque couche de convolution pour la rapprocher progressivement d'une image à 3 canaux de 64 x 64 pixels et RVB.
Pour une convolution normale, comme indiqué ci-dessous, le produit de la somme est pris et sorti tout en décalant le noyau. Dans pytorch, par exemple, il peut être implémenté avec torch.nn.Conv2d.
Source SourcePar contre, dans la convolution de translocation utilisée cette fois, le produit avec le noyau est calculé pour chaque élément, et la somme des résultats obtenus est prise. En tant qu'image, on a l'impression d'agrandir l'élément cible. Dans pytorch, par exemple, il peut être implémenté avec torch.nn.ConvTranspose2d.
SourceCette couche de convolution de translocation et la couche self_attention (décrite plus loin) se chevauchent et le nombre de canaux de sortie est de 3 dans la dernière couche. (Correspond respectivement à RVB) À partir du contenu ci-dessus, le contour du générateur que vous essayez de créer est comme indiqué dans la figure ci-dessous.
Ce générateur a un total de 5 couches de convolution de translocation, avec une couche appelée self_attention entre les 3ème et 4ème couches et entre les 4ème et 5ème couches. En regardant des pixels avec des valeurs similaires à la fois, il est possible d'évaluer l'image entière avec une quantité de calcul relativement faible.
Le générateur configuré de cette manière sort, par exemple, une telle image s'il est dans un état non appris. (Le résultat dépend du nombre de nombres aléatoires que vous entrez.) Comme il n'a pas encore été appris, seul quelque chose comme du bruit peut être émis. Cependant, en s'entraînant mutuellement avec le réseau neuronal (Discriminator) qui identifie si les données d'entrée sont une icône mel ou non, ce qui sera expliqué ci-après, il sera possible de sortir une telle image.
Demandez au discriminateur de regarder l'image générée par le générateur ci-dessus pour voir s'il s'agit d'une icône mel. Le but est de créer un outil de reconnaissance d'image. L'image d'entrée est de 64 x 64 pixels, la couleur est RVB 3 canaux et la sortie est une valeur (plage de 0 à 1) qui indique à quel point elle ressemble à une icône de mel. En tant que composition, cinq couches de pliage ordinaires sont empilées, et une couche d'auto-attention est prise en sandwich entre les troisième et quatrième couches et entre les quatrième et cinquième couches. La figure est la suivante.
Les méthodes d'apprentissage de Discriminator et Generator sont décrites ci-dessous.
Lorsqu'une image est entrée, Discriminator renvoie un nombre 0 à 1 qui indique à quel point il ressemble à une icône mel. Tout d'abord, entrez l'icône Mel réelle et définissez la sortie (valeur de 0 à 1) à ce moment-là sur $ d_ {real} $. Ensuite, entrez un nombre aléatoire dans le générateur et demandez-lui de générer une image. Lorsque cette image est entrée dans Discriminator, une valeur comprise entre 0 et 1 est également renvoyée. Appelons cela $ d_ {faux} $. Entrez les $ d_ {real} $ et $ d_ {fake} $ qui sortent de cette manière dans la fonction de perte décrite ci-dessous pour obtenir la valeur utilisée pour la propagation des erreurs.
L'une des méthodes de GAN, la «version charnière de la perte contradictoire» de SAGAN, utilise la fonction de perte décrite ci-dessous. En termes simples, cette fonction a $ l_ {i} $ et $ l_ {i} ^ {\ prime} $ comme étiquettes correctes, et $ y_ {i} $ et $ y_ {i} ^ {\ prime} $ comme discriminateur. Lorsque la valeur de sortie, $ M $, est le nombre de données par mini-lot
-\frac{1}{M}\sum_{i=1}^{M}(l_{i}min(0,-1+y_{i})+(1-l_{i}^{\prime})min(0,-1-y_{i}^{\prime}))
Est exprimé comme. [^ 1] Cette fois, $ y_ {i} = d_ {real} $, $ y_ {i} ^ {\ prime} = d_ {faux} $, $ l_ {i} = 1 $ (représentant l'icône 100% mel) , $ L_ {i} ^ {\ prime} = 0 $ (indiquant qu'il ne s'agit pas d'une icône de mel absolu)
-\frac{1}{M}\sum_{i=1}^{M}(min(0,-1+d_{real})+min(0,-1-d_{fake}))
ça ira. C'est la fonction de perte du discriminateur utilisée cette fois. Adam a été utilisé comme méthode d'optimisation pour la propagation des erreurs, et le taux d'apprentissage a été fixé à 0,0004, et le moment primaire et le moment secondaire d'Adam (taux d'atténuation exponentielle utilisé pour l'estimation du moment) ont été fixés à 0,0 et 0,9, respectivement.
Lorsqu'une séquence de nombres aléatoires est entrée, Generator essaiera de la faire ressembler autant que possible à une icône mel et de générer une image. Tout d'abord, entrez la séquence de nombres $ z_ {i} $ composée de nombres aléatoires dans le générateur pour obtenir une image. Entrez-le dans Discriminator et sortez une valeur qui montre à quel point il ressemble à une icône mel. Appelons cela $ r_ {i} $.
Dans la «version charnière de la perte contradictoire» de SAGAN, la fonction de perte du générateur est définie comme suit:
-\frac{1}{M}\sum_{i=1}^{M}r_{i}
Il semble que SAGAN soit connu pour fonctionner de manière empirique lorsqu'il est défini comme suit. [^ 1] Considérant que $ M $ est le nombre de données par mini-lot, le résultat du jugement de Discriminator est utilisé tel quel. J'ai été un peu surpris de cela, mais qu'en est-il? Adam a été utilisé comme méthode d'optimisation pour la propagation des erreurs, et le taux d'apprentissage a été fixé à 0,0001, et les moments primaire et secondaire d'Adam ont été fixés à 0,0 et 0,9, respectivement. (Identique à Discriminator sauf taux d'apprentissage)
L'image présentée ci-dessus est réimprimée, mais le générateur et le discriminateur créés précédemment sont combinés de cette manière pour former un GAN.
Apprenez à utiliser les icônes de mel réel collectées et laissez le générateur générer des icônes de mel. Gardez le nombre de données $ M $ par mini-lot à 5. Le résultat est le suivant. __impressionnant! !! !! !! !! !! !! !! !! !! !! __ __ Impressionné! !! !! !! !! !! !! !! !! !! !! __ À titre de comparaison, un exemple de données d'entrée est affiché sur le côté supérieur, et l'image réellement générée est affichée sur le côté inférieur. De plus, le résultat généré changera à chaque exécution. Personnellement, j'ai été assez surpris de pouvoir faire cela avec un code source qui n'est pas si long. GAN est vraiment génial! !! !! !! !! !! !! !!
J'ai fait quelque chose qui peut faire une si grande chose, mais il y a encore des points qui n'ont pas encore été résolus.
Le code que j'ai écrit se trouve dans ce référentiel. https://github.com/zassou65535/image_generator
Le GAN est une technique incroyablement géniale. Malgré l'effondrement du mode, nous avons pu créer quelque chose d'assez proche de l'icône Mel avec à peine près de 100 ensembles de données. Générons également une image palpitante avec GAN.
Si vous faites simplement la moyenne de toutes les icônes Mel que vous avez collectées, vous verrez l'image suivante.
[^ 1]: Apprendre en créant-Développement par PyTorch Apprentissage en profondeur
Recommended Posts