WorldGen : Peindre le monde une couche à la fois

Deuxième partie : Le diable est dans les détails.

Introduction

Dans l’article précédent, nous vous avons présenté un projet de génération de terrain utilisant un réseau de neurones profond basé sur GauGANCe modèle a été entraîné grâce à des données géologiques et topologiques du monde réel, dans le but de lui apprendre la délicate interdépendance existant entre la géographie et l’apparence d’un paysage observé depuis de très hautes altitudes. Précédemment, nous avons démontré d’impressionnants résultats sur des cartes similaires exclues de l’entrainement mais nous avons aussi identifié la limite de ce modèle avec des données créées à la main. Ceci est expliqué par la complexité des catégories USGS qui servent à l’entrainerQuelques étapes supplémentaires manquaient pour rendre ce modèle facile à manipuler ; nous allons donc vous expliquer dans ce deuxième article comment nous avons modifié notre réseau afin de rendre l’outil plus intuitif comme nous le souhaitions à l’origine. 

 

Simplification des catégories

Chaque service géologique fournit des métadonnées géologiques ou topographiques qui lui sont propres. Comme mentionné dans l’article précédent, nous nous basons sur deux modèles de données provenant de l’agence United States Geological Survey (USGS) : LandCover et LandSurface. 

Autre classification LandCover, utilisée par l’agence North American Land Change Monitoring System (NALCMS). @Copyright NALCMS

LandCover et LandSurface ont établi respectivement 21 et 10 catégories. Pour simplifier les catégories d’entrées saisies à la main, nous avons réduit le nombre de catégories distinctes à 7 et 5 pour chacun de ces jeux de données. Par exemple, nous avons regroupé plaines platesplaines lisses et plaines irrégulières sous une même catégorie intitulée plaines, et regroupé tous les types de forêt sous une même catégorie forêt. 

Hélas, l’inconvénient principal lié à l’utilisation de réseaux antagonistes génératifs (Generative Adversarial Networks, ou GAN) est la difficulté à en quantifier les progrès puisqu’ils ne disposent pas de fonction permettant de superviser les pertes. L’appréciation des performances du réseau consistait en des évaluations subjectives et manuelles de la qualité des images rendues avec l’inspection visuelle comme principal critère de comparaison. Simplifier les catégories serait un indéniable bénéfice pour nos artistes, mais nous étions convaincus que ce choix réduirait également les tendances de surapprentissage de notre modèle, en introduisant de la régularisation de bruit dans nos données. Comme nous le verrons plus loin, il existe un équilibre délicat entre simplifier les entrées et garder des rendus détaillés.  

À gauche, catégories LandCover d’origine (incluant une région indéfinie). À droite, catégories prétraitées, nettoyées et simplifiées. Corine LandCover (CLC) d’Europe @copyright Programme Copernicus

Nos catégories incluent des formes et des caractéristiques extrêmement complexes : il est difficile pour les utilisateur·trice·s de reproduire de tels motifs. Cela nous a encouragés à appliquer à nos entrées une série de filtres visuels, tels que les filtres médians ou filtres majoritaires, comme illustré ci-dessous. Les catégories filtrées représentent des motifs plus faciles à reproduire, et plus cohérents avec ce qu’un·e artiste est susceptible de dessiner. 

Gauche : catégories fusionnées, non filtrées. Droite : filtre médian appliqué à l’image de gauche.

Malheureusement, malgré tous nos efforts, nous n’avons pas obtenu des résultats satisfaisants en entraînant notre modèle avec des données d’entrée filtrées, notamment parce que celles-ci se superposaient avec des zones incompatibles ; par exemple lorsque deux catégories à fort contraste entraient en conflit comme pour l’eau contre terre ferme, ou zones urbaines contre forêts. En outre, notre réseau convergeait facilement vers des résultats plus approximatifs. Face au niveau de détail des images aériennes, nos résultats n’égalaient pas la précision d’une vue satellite. 

C’est pourquoi nous avons décidé d’abandonner cette idée et d’envisager d’autres options. Nous avons alors songé à mettre en place un deuxième réseau neuronal pour convertir des catégories dessinées à la main en catégories visuellement réalistes. Une idée a priori raisonnable que nous avons baptisée Label2Label et que nous évoquons plus en détail dans la section suivante. 

 

Label2Label

Bien que notre générateur de monde, appelé WorldGenfût capable de générer des terrains élaborés et de grande qualité, il lui manquait la principale caractéristique de GauGAN: une prise en main facile. Les données d’entrée utilisées pour entraîner le modèle sont complexes et nous n’avions pas trouvé comment les simplifier sans considérablement dégrader les résultats obtenus. Pour pallier ce problème, nous avons créé Label2Label, un réseau de neurones spécifiquement entraîné pour générer des catégories affichant des motifs du monde réel visibles sur les données capturées. Pour nous simplifier la tâche, nous avons réutilisé une base GauGAN pour ce nouveau modèle. Nous aurions probablement pu obtenir de meilleurs résultats à partir d’un modèle plus simple, mais nous avons estimé qu’il serait dommage de passer du temps à s’adapter à une nouvelle architecture étant donné notre savoir-faire acquis avec GauGAN.  

Label2Label apprend à reproduire les détails et motifs (colonne de droite) à partir d’une cible référence (colonne du milieu) basée sur des entrées « simples » (colonne de gauche).

En itérant à l’aide de grands filtres (médians ou majoritaires), nous avons réussi à produire des catégories similaires à des coups de pinceau. Nous avons décidé de nous en servir comme références d’entrées « simples » pour ce modèle. Avec du recul, bien que nous ayons utilisé le même filtre avec les mêmes paramètres sur tous nos jeux de données, nous regrettons de ne pas y avoir appliqué divers filtres et paramètres aléatoires afin de le diversifier et qu’il prenne en compte différents types d’entrées.  

L’illustration ci-dessus montre comment le modèle apprend à réaliser des catégories complexes (à droite) à partir d’entrées « simples » (à gauche), la colonne du milieu étant la référence absolue fournie par l’USGS. Nous avons remarqué quelques effets incontrôlables, comme l’apparition importune de nouvelles catégories à certains endroits, ou la difficulté de traiter les catégories les moins larges que le filtre a tendance à faire disparaître. 

Malgré son caractère imparfait, ce modèle s’est montré assez performant pour intéresser nos utilisateur·trice·s. Il est bien sûr possible d’ajuster manuellement les résultats de Label2Label, ce qui permet de modifier et de nettoyer les catégories avant de les fournir au modèle WorldGen. 

Voici un exemple de catégories d’entrée dessinées par l’un·e de nos programmeur·euse·s, traité dans un premier temps par notre modèle Label2Label, puis soumis au modèle WorldGen. 

Illustrations LandSurface (rangée supérieure) et LandCover (rangée inférieure) dessinées à la main dans la colonne de gauche. La colonne de droite présente le résultat de notre modèle Label2Label, reproduisant des motifs basés sur nos données d’entraînement tirées du monde réel. Visuel inspiré du logo Siggraph de l’ACM Siggraph.

 

Résultat calculé par notre modèle WorldGen à partir des données dessinées à la main et modifiées via notre modèle Label2Label. Une carte topologique a également été générée, visible en aperçu dans le coin supérieur gauche. NB : cet exemple est particulièrement difficile à appréhender pour notre modèle en raison des formes géométriques très peu naturelles de nos catégories. Visuel inspiré du logo Siggraph de l’ACM Siggraph.

 

Guides visuels

Nous avons fourni aux utilisateur·trice·s un autre moyen de contrôler la création de terrains avec l’ajout d’un nouveau jeu de données basse résolution que nous appelons ancrages. Les ancrages servent de guides visuels et d’altitude sur les données générées. Les ancrages ont un impact direct sur l’esthétique des résultats comme le montrent les figures ci-dessous. Ils peuvent rappeler le mode multimodal de GauGAN puisque nous exploitons un auto-encodeur variationnel (ou VAE, pour variational autoencoder). Ces ancrages peuvent être de n’importe quelle résolution, mais nous avons obtenu de meilleurs résultats avec des entrées basse résolution. Les résultats ci-dessous utilisent des ancrages à l’échelle 1/64e des catégories d’entrée (1/8e dans chaque direction). 

Trois terrains générés à partir des mêmes catégories d’entrée, mais avec des ancrages basse résolution de différentes couleurs (en aperçu dans les coins supérieurs gauches).

 

Catégories d’entrée identiques avec différents ancrages d’altitude (coins supérieurs gauches). NB : vous remarquerez non seulement que les résultats d’altitude changent, mais aussi que les couleurs de surface suivent remarquablement bien les règles apprises par le réseau neuronal.

 

En plus des ancrages d’altitude, nous avons permis à l’utilisateur·trice de spécifier une altitude moyenne pour la région générée afin d’aider l’inférence avec une information supplémentaire. La couleur de surface et, dans une moindre mesure, l’élévation dépendent grandement de l’altitude. Par exemple, un plateau ne possède pas les mêmes caractéristiques qu’une plaine. Nous avons aidé le modèle à apprendre ces distinctions en lui fournissant l’altitude moyenne des données assimilées en cours. Et à notre grande satisfaction, cette information spécifique a notablement amélioré la convergence et l’adaptation du modèle sur différents biomes en fonction de l’altitude, comme le montre la figure ci-dessous. 

Inférence de catégories d’entrées identiques à diverses altitudes. Respectivement, altitude 0m, 1000m et 2000m.

Altitude : 0m
Altitude : 1000m
Altitude : 2000m

 

Tuiles

GauGAN étant un réseau de neurones colossal nécessitant une énorme puissance de calcul, nous ne pouvions entraîner nos modèles que sur des images en 256×256 ou 512×512, loin des formats haute définition que nous espérions. 

Générer des images en haute définition via l’apprentissage automatique est d’une difficulté notoire ; cela requiert en général une quantité impressionnante de mémoire vidéo disponible uniquement sur les cartes graphiques professionnelles. Anna Frühstück et Ibraheem Alhashim ont présenté TileGAN lors de l’évènement SIGGRAPH 2019 avec l’idée de tuiler différentes inférences dans l’espace latent. La proposition a beau être fort intéressante, nous voulions essayer une méthode plus simple dans l’espoir de conserver le détail de nos entrées complexes. 

Notre proposition consistait en des tuiles simplement accolées les unes aux autres, et soumises à une moyenne pondérée. Bien que simple, cette idée nous a fourni de bons résultats tout au long du projet, à tel point que nous avons décidé de ne pas investir davantage dans d’autres alternatives. Seule ombre au tableau : les tuiles combinées floutaient parfois des détails de l’inférence. Cet aspect était néanmoins négligeable la plupart du temps vu la complexité détaillée de nos catégories d’entrée et la stabilité générale de notre modèle. 

Chaque pixel de l’image haute définition (à droite) est une combinaison de quatre inférences différentes (au milieu), décalées d’une demi-tuile dans chaque direction (à gauche).

 

Combiner les tuiles avec une moyenne pondérée donne plus d’importance au centre des images inférées, ce qui participe également à éviter les artefacts en bordure d’image. Notons en outre que définir une altitude moyenne par tuile (cf. section précédente) améliore significativement l’uniformité entre des tuiles éloignées pouvant avoir de fortes différences d’élévation.  

Nous pouvons inférer de petites tuiles (par exemple, 256×256) et les accoler pour obtenir un résultat haute définition (par exemple, 2048×2048). Malheureusement, puisque chaque tuile est indépendante, d’innombrables artefacts apparaissent aux bordures. Nous avons donc décidé de calculer un lot de quatre inférences différentes, chacune décalée d’une demi-tuile dans les deux dimensions, puis d’appliquer une moyenne pondérée (aperçus dans les coins supérieurs droite).
Un résultat haute définition et sans aspérités, après un assemblage utilisant une moyenne pondérée centrée sur chaque sous-tuile.

 

Résultats

Après incorporation des modifications évoquées dans le présent article, notre proposition de modèle WorldGen apprend les règles délicates régissant les écosystèmes, et reproduit des vues satellites réalistes et détaillées à partir de données nouvelles en haute résolution 

Inférence sur une région nouvelle (Long Island, États-Unis), obtenue en utilisant les catégories d’entrée d’origine fournies par l’USGS.

 

Elle prend également en compte les modifications sur les cartes topologiques existantes.

Terrain généré à partir de catégories manipulées provenant de l’USGS. Vue 3D obtenue avec ipyvolume

 

Le schéma suivant détaille le processus d’apprentissage de notre réseau antagoniste génératif.

Modèle WorldGen tuilé : entraînement d’un réseau de neurones dans le but de générer des images satellites réalistes en haute définition, à partir de catégories d’entrée s’appuyant (optionnellement) sur des guides visuels basse résolution.

 

Comme nous ne pouvions pas obtenir de résultats haut de gamme en simplifiant les catégories d’entrée, nous avons élaboré un deuxième modèleLabel2Labelqui apprend à reproduire les motifs complexes des écosystèmes et cartes géologiques du monde réel. 

Label2Label est notre deuxième réseau neuronal. Son rôle est de transformer des entrées dessinées à la main en catégories disposant de motifs semblables à ceux des cartes topologiques du monde réel. Le résultat final traité via Lab2Lab a une apparence plus réaliste.

 

Conclusion

Nous avons présenté ici deux réseaux de neurones complémentaires capables de générer des terrains d’un grand réalisme en vue aérienne. Rendre intuitif ce processus a représenté un véritable défi, et nous avons encore énormément de pistes à explorer. Nous allons continuer de nous pencher sur les moyens d’améliorer les représentations de données topogéographiques et de définir nos propres catégories pour faciliter la vie des artistes, toujours dans le but d’améliorer la qualité générale de nos modèles. 

 

Auteurs

Thibault Lambert est ingénieur graphique senior en R&D et a rejoint Eidos-Montréal en 2018. Au cours des 13 dernières années, il a travaillé à la fois dans l’industrie des effets spéciaux et celle des jeux vidéo, et a eu la chance de travailler sur plusieurs films et jeux AAA à succès. Il est passionné par le graphisme en temps réel et œuvre à combler autant que possible l’écart entre le rendu hors ligne et le rendu en temps réel, apportant les technologies du temps réel à l’industrie cinématographique et reproduisant des techniques hors–ligne complexes en temps réel dans les jeux vidéo. 

Ugo Louche a rejoint Eidos-Montréal en 2019 en tant qu’expert en apprentissage automatique. Il a obtenu son doctorat en apprentissage automatique en 2016 sous la supervision du Pr Liva Ralaivola, et ses activités de recherche sont principalement axées sur l’apprentissage actif et la classification linéaire. Ugo est convaincu que l’apprentissage automatique a le potentiel de changer pour le meilleur la façon dont nous créons des jeux, en permettant aux développeur·euse·s de se concentrer sur les tâches créatives et en reléguant les tâches ennuyeuses aux AI. Il s’est engagé à faire de ce changement une réalité et son travail chez Eidos-Montréal se focalise sur tous les aspects de l’apprentissage automatique qui peuvent aider au développement de jeux. 

Llama