Bonjour, Habr! Je vous présente la traduction de l'article "
AttnGAN: Texte à grain fin à la génération d'images avec des réseaux contradictoires
génératifs attentionnels " par Tao Xu, Pengchuan Zhang, Qiuyuan Huang, Han Zhang, Zhe Gan, Xiaolei Huang, Xiaodong He.
Dans cette publication, je veux parler de mes expériences avec l'architecture AttnGAN pour générer des images à partir d'une description textuelle. Cette architecture a déjà été mentionnée sur Habré après la sortie de l'article original début 2018, et je m'intéressais à la question - à quel point sera-t-il difficile de former soi-même un tel modèle?
Description de l'architecture
Pour ceux qui ne connaissent pas AttnGAN et le GAN classique, je vais brièvement décrire l'essentiel. Le GAN classique comprend au moins 2 réseaux de neurones - un générateur et un discriminateur. La tâche du générateur est de générer des données (images, texte, audio, vidéo, etc.) qui sont «similaires» aux données réelles de l'ensemble de données. La tâche du discriminateur est d'évaluer les données générées, une tentative de les comparer avec les vraies et de les rejeter. Le résultat rejeté du travail du générateur le stimule à générer le meilleur résultat afin de «tromper» le discriminateur, qui, à son tour, apprend à mieux reconnaître les contrefaçons.
Il y a beaucoup de modifications du GAN, et les auteurs d'AttnGAN ont abordé la question de l'architecture de manière très inventive. Le modèle se compose de 9 réseaux de neurones qui sont finement réglés pour l'interaction. Cela ressemble à ceci:

Les encodeurs de texte et d'image (encodeur de texte / image) convertissent la description originale du texte et les images réelles en une sorte de représentation interne. De manière caractéristique, dans ce cas, le texte est considéré comme une séquence de mots séparés, dont la présentation est traitée avec la représentation de l'image, ce qui vous permet de comparer des mots individuels à des parties individuelles de l'image. De cette façon, le mécanisme d'attention appelé par les auteurs de l'article DAMSM est implémenté.
Fca - crée une représentation concise de la scène globale dans l'image, basée sur la description de texte entière. La valeur de C à la sortie est concaténée avec un vecteur de la distribution normale de Z, qui détermine la variabilité de la scène. Ces informations sont à la base du fonctionnement du générateur.
Le générateur est le plus grand réseau composé de trois niveaux. Chaque niveau produit des images de résolution croissante, de 64 * 64 à 256 * 256 pixels, et le résultat du travail à chaque niveau est ajusté à l'aide des réseaux d'attention Fattn, qui véhiculent des informations sur l'emplacement correct des objets individuels dans la scène. De plus, les résultats à chaque niveau sont vérifiés par trois discriminateurs travaillant séparément qui évaluent le réalisme de l'image et sa cohérence avec l'idée générale de la scène.
La formation
Pour tester l'architecture, j'ai utilisé l'ensemble de données CUB standard avec des photos et des descriptions textuelles d'oiseaux.
L'ensemble du modèle est formé en deux étapes. La première étape est la pré-formation des réseaux DAMSM, qui consiste en un encodeur de texte et d'image. Au cours de cette étape, comme décrit ci-dessus, une «carte d'attention» est créée qui ressemble à ceci:

Comme le montre la figure, DAMSM parvient à capturer très précisément la relation entre les mots individuels de la description du texte et les éléments de l'image, il est particulièrement facile pour le modèle de reconnaître les couleurs. Je dois dire que le système ne dispose d'aucune information supplémentaire sur ce qu'est «rouge», «jaune» ou «ailes», «bec». Il n'y a qu'un ensemble de textes et d'images.
La formation DAMSM se déroule sans aucun problème, le temps de formation sur cet ensemble de données est de 150-200 ères, ce qui correspond à plusieurs heures sur un GPU haute puissance.
La deuxième et principale étape est la formation du générateur à l'aide du modèle DAMSM.
Le générateur à chaque niveau génère une image de résolution plus élevée - cela ressemble à ceci:

La formation des générateurs prend beaucoup plus de temps et n'est pas toujours aussi stable, le temps de formation recommandé sur cet ensemble de données est de 300 à 600 époques, ce qui correspond à environ 4 à 8 jours sur un GPU haute puissance.
Le principal problème dans la formation du générateur, à mon avis, est le manque de métriques suffisamment bonnes qui nous permettraient d'évaluer la qualité de la formation de manière plus formelle. J'ai étudié plusieurs implémentations du score Inception, qui, en théorie, se positionne comme une métrique universelle pour de telles tâches - mais elles ne m'ont pas semblé suffisamment convaincantes. Si vous décidez de former un tel générateur, vous devrez constamment surveiller visuellement la progression de la formation, en fonction des résultats intermédiaires. Cependant, cette règle est vraie pour de telles tâches, un contrôle visuel est toujours nécessaire.
Résultats
Maintenant, la partie amusante. En utilisant le modèle formé, nous allons essayer de générer des images, nous commencerons par des phrases simples:

Essayons des descriptions plus complexes:

Toutes les descriptions de texte sont inventées, je n'ai intentionnellement pas utilisé de phrases du jeu de données pour les tests. Bien sûr, toutes ces images n'ont pas été obtenues du premier coup. Le modèle est erroné, les auteurs eux-mêmes en parlent. À mesure que le texte de description et les éléments à afficher augmentent, il devient de plus en plus difficile de maintenir le réalisme de l'ensemble de la scène. Cependant, si vous souhaitez utiliser quelque chose de similaire dans la production, par exemple, générer des images de certains objets pour un concepteur, vous pouvez former et personnaliser le système selon vos besoins, ce qui peut être assez strict.
Pour chaque description de texte, vous pouvez générer de nombreuses options d'image (y compris celles qui ne sont pas réalistes), il y aura donc toujours beaucoup de choix.
Détails techniques
Dans ce travail, j'ai utilisé un GPU basse puissance pour le prototypage et un serveur Google Cloud avec Tesla K80 installé pendant la phase de formation.
Le code source a été extrait du référentiel des auteurs de l'article et a subi une refactorisation sérieuse. Le système a été testé en Python 3.6 avec Pytorch 0.4.1
Merci de votre attention!
Article original: AttnGAN: Texte à grain fin à la génération d'images avec des réseaux contradictoires génératifs attentionnels , 2018 - Tao Xu, Pengchuan Zhang, Qiuyuan Huang, Han Zhang, Zhe Gan, Xiaolei Huang, Xiaodong He.