Récemment, nous avons écrit une chronique sur Habr sur la façon dont nous avons sorti notre propre jouet en ligne. L'une des astuces qui nous a sérieusement confus était la génération d'IA d'avatars pour votre personnage «à la volée» à partir d'une photographie (tout en travaillant dans le prototype et ne faisant pas partie du jeu). En même temps, la technologie elle-même est intéressante et peut être appliquée non seulement avec nous. Comme promis, nous en parlons plus en détail et ressentons le prototype en direct!
Sous la coupe, vous pouvez également trouver: pourquoi ils ont fait un choix en faveur d'un système de formation à l'IA atypique - sans balisage de données, et pourquoi nous considérons cela comme une innovation scientifique; notre fakapy lors de la création d'avatars IA qui n'ont pas besoin d'être répétés; comment et où l'adaptation de domaine est utilisée aujourd'hui.

S'il n'y a pas de temps pour lire l'article
Nous suivons le lien pour regarder le travail de l'IA en ce moment.
Veuillez noter:
1. Le convertisseur ne fonctionne pas rapidement, alors soyez patient, une capacité de non-production est utilisée.
2. Le système a été formé uniquement dans le domaine masculin, de sorte que les photographies féminines vous laisseront des hommes, probablement efféminés. Il ne faut pas s'attendre à une similitude de portrait, car le nombre d'éléments utilisés est volontairement limité, nous en reparlerons ci-dessous.
D'où est venue l'idée de créer des avatars IA?
Elle n'est pas apparue à l'improviste. Les travaux sur l'apprentissage automatique au sein du groupe uKit durent depuis plusieurs années. Ainsi, le projet WebScore AI , qui évalue en temps réel l'attractivité visuelle du site, il y a environ un an, était ouvert à tous les arrivants et utilisé avec succès à des fins internes de l'entreprise.
L'utilisation de réseaux de neurones dans le développement de jeux est un sujet qui acquiert périodiquement un battage médiatique considérable. Rappelons No Man's Sky ou RimWorld, qui ont reçu leur part de l'attention du jeu, et pas seulement la communauté en raison de l'univers complètement généré, qui a une variabilité presque infinie selon les auteurs eux-mêmes. Certes, en réalité, la génération des mondes était procédurale, et donc cela n'a rien à voir avec les réseaux de neurones. Cependant, la tendance est évidente - le marché est prêt pour cela et attend, se frottant les mains!
Nous avons pensé que la possibilité de télécharger votre photo dans le jeu et d'obtenir immédiatement un avatar personnel qui vous ressemble le plus, que personne d'autre n'a, est amusant et peut devenir une puce intéressante et séduisante. De plus, la technologie peut clairement trouver son application en dehors du jeu.
Il convient de noter que la similitude du personnage avec une personne réelle dans Web Tycoon sera relative. Il s'agit d'une étape délibérée, car nous collecterons des avatars à partir des éléments dessinés par nos designers. Et il y a plusieurs raisons à cela. Tout d'abord, à la sortie, nous voulons obtenir des avatars de jeu dans le style du jeu, tout en préservant le plat préféré de beaucoup. Deuxièmement, nous le jouons certainement en toute sécurité, car il vous permet d'obtenir toujours une image portrait, quel que soit le téléchargement de l'utilisateur.

Après tout, tout le monde ne veut pas voir un concombre réaliste parmi ses rivaux.
Formation de modèle sans données balisées
Cette approche de l'apprentissage automatique peut être qualifiée d'innovante, car en fait, l'IA apprend sans aucune donnée marquée initiale. En raison de ce qui se passe? La clé du succès est la disponibilité d'outils pour générer des données synthétiques. Avant d'éventuelles questions: nous ne pouvons pas donner les nôtres.
Pourquoi avez-vous décidé de former notre IA de cette façon? Le balisage des données est un travail monotone et très volumineux des évaluateurs. Et si les concepteurs décident soudainement d'ajouter, par exemple, un troisième type de lunettes (au moment de la rédaction du système, il y en avait deux), vous devrez tout re-marquer, car chaque exemple précédemment marqué devient désormais potentiellement non optimal.
De plus, dans notre cas, cela valait également la peine de considérer un moment comme la subjectivité: si vous donnez 10 personnes pour collecter un avatar pour une photo, nous obtenons 10 avatars différents à la sortie. Nous avons vérifié.
Photo originale:

Et les résultats de deux concepteurs différents de notre entreprise:

Homme vs Machine
La formation n'a pas été facile. Premièrement, notre IA a capitulé à tous égards:

Si quelqu'un n'a soudainement pas compris, alors la photo originale est la même ici. AI transforme les sacs sous les yeux en lunettes de soleil. Antennes hussards en cadeau. Les vrais bourreaux de travail peuvent considérer cela comme une fonctionnalité, pas comme un bug.
Voici quelques résultats plus indicatifs.


Il n'ajoute plus de points et peut même se déguiser! Il y a certains problèmes avec la reproduction des couleurs.
Directement sur le processus de développement
Comme point de départ, nous avons pris plusieurs solutions de transfert de style prêtes à l'emploi, mais nous avons rapidement dû les abandonner, car elles ne nous convenaient pas à l'état pur. Nous avons également essayé d'utiliser des modèles génératifs par nous-mêmes, mais nous sommes rapidement arrivés à la conclusion que la plupart des solutions que nous avons trouvées n'avaient pas d'exemples de mise en œuvre ou n'avaient pas donné de résultat.
En conséquence, le premier modèle génératif réussi a été CycleGAN, que nous avons pris comme base, en le complétant selon nos besoins. Perte Perte a été appelée pour aider le CycleGAN standard. Cela a sensiblement amélioré la beauté des images résultantes.
Ci-dessous, vous pouvez voir CycleGAN en action:

Ou un autre exemple, clair et familier à tous ceux qui ont utilisé au moins une fois l'application Prisma:

La principale difficulté consiste traditionnellement à faire en sorte que le modèle génératif apprenne normalement. Toute la famille de ces modèles a beaucoup de plaies plutôt caractéristiques qui, ces dernières années, ont essayé de tout résoudre: un long temps d'entraînement, un effondrement du mode, une sensibilité à l'initialisation.
Il y avait aussi des problèmes purement techniques, auxquels, en théorie, beaucoup devraient être confrontés, mais pour une raison quelconque, peu d'écrivent à ce sujet. Par exemple, nous devions effectuer un chargement parallèle rapide des données avec augmentation, et l'ensemble standard des augmentations présenté dans keras / tf / pytorch n'était pas suffisant pour nous. De plus, au départ, je voulais augmenter le CPU. L'augmentation sur le CPU a ses avantages indéniables, dont le principal, à notre avis, est la possibilité de «décharger» la carte vidéo, partageant ainsi les responsabilités entre les deux ordinateurs.
Comment résoudre les problèmes
Dans le cas de la formation des GAN, nous avons principalement travaillé sur les fonctions de perte (fonctions de perte). Nous avons donc ajouté plus de perte d'identité et de couleur. En même temps, nous avons joué avec l'architecture du générateur à l'intérieur de CycleGAN, et en conséquence nous sommes arrivés à un reznet de 12 blocs (celui d'origine était un peu court pour nous).
Dans le cas du code répétitif, nous avons écrit des wrappers de niveau supérieur sur les modèles qui nous permettent de réutiliser le code utilisé dans plusieurs modèles à la fois. Le code des générateurs de date est également généralisé de manière similaire pour les mêmes raisons.
Pour résoudre le troisième problème (chargement avec des augmentations sur le CPU), j'ai dû trouver et écrire ma propre puce, mais à ce sujet la prochaine fois. Nous dirons seulement que c'est grâce à cela que la technologie peut être utilisée avec succès pour d'autres projets qui ne sont en aucun cas associés à des avatars.
Fakapy lors de la création d'interfaces AI
L'erreur principale est une évaluation incorrecte de la complexité de la tâche. À première vue, il semble souvent qu'il existe un grand nombre de solutions prêtes à l'emploi qui vous conviennent à 99%. Ils doivent seulement être pris et transférés en toute sécurité dans votre cas. Donc, ce n'est pas comme ça. Séparément, il vaut la peine de montrer ce que l'on ressent en observant comment dans GAN, qui étudie avec succès depuis plusieurs jours, soudainement quelque chose explose, pourquoi il commence à générer du jeu complet.
Quelque chose comme ça:

Un autre facteur sérieux était qu'au début, nous avions oublié de fixer des graines aléatoires, et nous nous souvenons que les GAN sont extrêmement sensibles à l'initialisation. Un échec très honteux de notre part, comme la franchise.
Où l'adaptation de domaine est utilisée aujourd'hui
L'adaptation du domaine pénètre lentement mais sûrement dans les tâches de l'IA. Cette tendance constante est due au fait que, malgré la croissance rapide des informations disponibles dans le monde moderne, le balisage reste une tâche longue et coûteuse. Le développement du transfert d'apprentissage et sa généralisation face à l'adaptation de domaine résout ce problème.
Un exemple de l'application pratique de l'adaptation de domaine est le travail d'Apple pour étendre l'ensemble de données de photographies des yeux humains en adaptant des images générées par synthèse. Dans leur étude, ils ont montré qu'une approche efficace consiste à générer des données artificielles initialement étiquetées avec une approximation ultérieure des données réelles en utilisant des méthodes d'adaptation de domaine.

Ou voici un autre exemple intéressant. En 2017, un groupe de scientifiques a proposé une approche inhabituelle pour collecter des données sur les rues, les routes, les piétons et d'autres environnements dans lesquels les voitures autonomes devraient être placées pour leur formation.
Ils ont suggéré de prendre cette information de GTA V.

Pour cela, dans l'environnement virtuel de Grand Theft Auto V, plus de 480 000 images virtuelles marquées de la conduite normale sur autoroute ont été générées. À l'aide de ces images, le système a été formé pour lire toutes les variables de base nécessaires à la conduite autonome de base: pour déterminer la distance aux voitures et aux autres objets devant, le marquage de la bande et l'angle de conduite (course angulaire par rapport à la ligne centrale de la bande). L'accident mortel de Tesla en Floride a également été analysé.
L'avenir est NST et GAN
Est-il possible d'en parler avec confiance? Peut-être que oui. Neural Style Transfer utilise Prisma. Par analogie avec cela, de nouvelles applications sont créées, et pas seulement à des fins de divertissement. Les GAN peuvent également être utilisés comme un outil pour résoudre une grande variété de problèmes: coloration d'image, génération d'image à partir de bruit, voire génération d'image à partir de texte.
Revenons au thème de gamedev. Ici, les possibilités d'adaptation de domaine sont potentiellement illimitées: si le cas de la formation des véhicules sans pilote a été tiré des textures du monde du jeu GTA V, d'où quelque chose de très similaire aux photos du monde réel est sorti, alors absolument rien ne vous empêche de faire le contraire: générer des textures de jeu à partir d'images panoramiques de villes réelles .
L'avantage de la voiture est qu'elle ne se fatigue pas. Un ordinateur peut désormais générer un grand nombre de vues différentes en une fraction de seconde. Notre tâche est d'apprendre à le faire de manière efficace et efficiente, puis il ne reste plus qu'à séparer le grain de la balle et à en profiter.
Vous avez encore des questions? Nous nous ferons un plaisir d'y répondre dans les commentaires.