WorldGen : Peindre le monde, une couche à la fois

Première partie : En fin de compte, le monde est un endroit compliqué.
Horseshoe Bend, Google Earth, ©2020 Landsat / Copernicus

 

Introduction

À Eidos-Labs, l’un de nos objectifs est d’aider nos artistes autant que nous le pouvons. Nous visons également à les décharger des tâches manuelles et répétitives, afin que toutes et tous puissent itérer plus rapidement et passer plus de temps sur des tâches présentant un véritable intérêt créatif. L’essor de l’apprentissage automatique (ML, Machine Learning) nous a naturellement amené·e·s à étudier les solutions possibles de création de contenu assistée par intelligence artificielle (IA, Intelligence Artificielle).

En 2019, Eidos-Labs a lancé un nouveau projet dans le but d’étudier les possibilités de création de paysages vastes et détaillés en 3D assistée par IA. Bien qu’il existe sur le marché plusieurs outils logiciels capables de générer des données d’élévation réalistes, aucun d’entre eux n’était capable, à notre connaissance, de générer des valeurs colorimétriques correspondantes de haute qualité. Comme nous visions des résultats réalistes, nous avons voulu tirer parti des ressources infinies fournies par les paysages de notre planète Terre. Pour traiter cette vaste quantité de données, nous avons exploré des modèles d’apprentissage profond puisqu’ils ont l’avantage d’apprendre des relations et motifs intrinsèques à partir de leurs données d’apprentissage.

 

Générateur de monde

Le dernier cri, en matière de génération de terrains virtuels, est encore l’utilisation de (nombreuses) règles procédurales permettant de construire des environnements crédibles. Mais les systèmes de ce genre peuvent être complexes à entretenir et demandent encore beaucoup de travail manuel. Notre objectif était de profiter des récentes avancées en matière d’apprentissage profond et de faire en sorte que notre réseau de neurones apprenne ces règles sans intervention humaine, au prix d’un moindre contrôle moindre des résultats. Le présent article passe en revue sur nos nombreuses tentatives pour entraîner un réseau de neurones profond à apprendre les relations complexes entre l’altitude et la flore en fonction des biomes environnants, tout en offrant un contrôle artistique intuitif des données générées.

L’altitude, en infographie, est généralement réduite à une valeur de déplacement unique représentant la hauteur de chaque pixel. Il est ainsi possible de stocker des valeurs flottantes en noir et blanc dans une texture qui peut ensuite être appliquée sur un maillage (mesh) de même dimension (voir la figure ci-dessous). Cette représentation est également appelée modèle numérique de terrain (DEM, Digital Elevation Model), terme généralement utilisé dans les systèmes d’information géographique (GIS, Geographic Information Systems). Comme on ne stocke qu’une seule valeur de déplacement par pixel, ces terrains ne sont considérés que comme des terrains en deux dimensions et demi (2,5D) plutôt qu’en trois dimensions (3D). En d’autres termes, bien que l’on capture la hauteur générale du terrain, la géographie de notre carte ne tient pas compte des éventuels renfoncements horizontaux présents.

Exemple de déplacement sur maillage en 2,5D sur le Horseshoe Bend affiché sur un maillage dans Blender. Les données sont issues du U.S. Geological Survey.

Déléguer le contrôle artistique à un réseau de neurones est l’un des aspects les plus délicats de l’apprentissage automatique. Idéalement, nous voudrions que les artistes obtiennent des résultats réalistes et détaillés à partir d’une simple ébauche.

Avant d’aborder le modèle et ses entrées, examinons d’abord les données que nous avons pu rassembler.

 

Collecte de données

L’entraînement d’un réseau de neurones demande un maximum de données de référence de haute qualité, en particulier pour un réseau de neurones profond (DNN, Deep Neural Network). C’est un fait établi : un réseau neuronal ne peut être de bonne qualité que si ses données d’apprentissage le sont également.

Après une étude exhaustive des systèmes d’information géographique, nous avons décidé de nous concentrer sur la reproduction de vues satellites et aériennes. Le United States Geological Survey (USGS) est une source fiable et de qualité qui produit, fournit et entretient des cartes géologiques et topographiques des États-Unis. Après avoir examiné de multiples ressources pour la collecte de données des GIS, nous avons décidé d’utiliser l’USGS. Ce dernier dispose de données à de nombreuses résolutions, parfois au mètre près, disponibles par le biais de son API REST.

Après avoir mis en place quelques scripts de prétraitement, nous avons pu rassembler des captures de paysages américains. Nous avons capturé au hasard des zones de 2 km x 2 km, 20 km x 20 km et 100 km x 100 km à une résolution d’image de 2K ou 4K. Comme notre priorité était l’apprentissage de topologies diverses, nous nous sommes concentré·e·s sur les terrains accidentés et les régions montagneuses plutôt que sur de grandes parcelles de paysage uniforme.

Parmi tous les choix possibles offerts par l’USGS, nous avons recueilli des données provenant des bases de données WorldImageryElevationLandCover et LandSurface.

LandCover est étroitement liée aux écosystèmes (neige/glace éternelle, forêt, prairie, zones développées, cultures, etc.), et nous permet de cerner nos biomes. Elle propose 21 catégories (que nous avons par la suite réduites à 7).

LandSurface donne des descriptions topologiques liées à l’altitude (eau, plaine, collines, montagnes, etc.). Elle propose 10 catégories (que nous avons réduites à 5).

WorldImagery et Elevation sont nos deux perspectives « cibles », c’est-à-dire aérienne et DEM.

Captures provenant de l’USGS et montrant différentes informations. Respectivement, World Imagery, Elevation, Landcover et LandSurface 

La capture de données géologiques se présente sous de nombreuses formes et s’accompagne de nombreuses difficultés. Par exemple, des cartes topologiques différentes peuvent utiliser différentes références spatiales. Nous avons parfois dû recourir à la Geospatial Data Abstraction Library (GDAL), une bibliothèque open-source, pour adapter différentes cartes à un seul et même système de référence spatiale, et obtenir ainsi des images superposables au pixel près. Étonnamment, l’USGS et d’autres agences mettent régulièrement à jour leur contenu ainsi que la manière d’y accéder. La plupart du temps, la collecte d’un nouveau lot de données impliquait donc la mise à jour de nos scripts de collecte.

Même région géographique avec deux références spatiales différentes. Gauche: Epsg4326. Droite: Epsg3857

Malheureusement, il n’existe pas de normes internationales sur les métadonnées en ce qui concerne les cartes topologiques, en particulier lorsqu’il s’agit de catégoriser des écosystèmes. L’Europe, par exemple, fournit des images plus détaillées et des catégories mieux adaptées à nos besoins que son homologue USGS. Cependant, les données altimétriques sont moins détaillées, la base LandCover utilise un ensemble distinct de catégories, et la base de données LandSurface n’a pas d’équivalent. Si nous formions un modèle fonctionnel sur la base des données de l’USGS, il serait impossible de l’essayer sur d’autres parties du monde, ou même sur des données existantes de la Lune ou d’autres planètes comme Mars. Il s’agissait d’une des idées de départ que nous voulions tester.

On remarque également que les zones urbaines sont généralement capturées en plus haute résolution et plus souvent que les zones non peuplées, ce qui ne nous aide pas vraiment pour notre projet car nous voulions nous concentrer sur les régions où la nature prédomine.

 

GauGAN

Lors de l’édition2019 de la GTC, Nvidia a dévoilé une technologie étonnante appelée GauGANCelle-ci est capable de générer des images d’un réalisme impressionnant via des réseaux antagonistes génératifs (GANGenerative Adversarial Network) à partir de simples cartes de segmentation définies par l’utilisateur (catégorie vers image). La principale contribution de l’article de recherche associé est la mise en place de la spatially-adaptive normalization (SPADE), “conditional normalization layer […] that can effectively propagate semantic information throughout the neural network”. En d’autres termes, GauGAN crée des images ou les catégories d’entrée ont une influence sur l’aspect des catégories voisines. Par exemple, une étendue d’eau aura la même couleur que le ciel et reflétera son environnement immédiat. 

Capture de l’interface de la démo en ligne du GauGAN de Nvidia, ©2019 Nvidia 

Impressionné·e·s par les résultats de cette technologie et particulièrement intéressé·e·s par la capacité de SPADE à établir des liens contextuels entre les catégories d’entrée, nous avons décidé de l’utiliser comme base pour notre réseau de neurones.  

Même si GauGAN est initialement conçu pour la génération d’images en couleurs (3 dimensions) à partir d’entrée catégorielles (N dimensions), nous voulions intégrer un canal d’altitude supplémentaire (4ème dimension). Sur la base des données obtenues de l’USGS, nous avons décidé d’utiliser LandSurface comme catégorie d’entrée pour l’altitude et LandCover pour la sortie couleur (entrée de N + M dimensions en entrées), avec une fonction de perte séparée pour les sorties d’altitude et de couleur. 

 

Prétraitement des données

Avec une idée plus précise de ce qu’il fallait faire et de quelle manière, il était temps de prétraiter les données et d’entraîner le modèle. Faute de jeu de données disponible sur Internet, nous avons dû créer notre propre ensemble de données, ce qui, finalement, a représenté pour nous une énorme quantité de travail.  

Il convient également de souligner que le modèle de référence de GauGAN demande beaucoup de mémoire et beaucoup de temps dentraînement (plusieurs jours sur un seul GPU haut de gamme), sans parler du coût supplémentaire des modifications que nous y avons apportéesEn conséquence, les périodes d’itération ont été très longues. De plus, chaque modification donnait lieu à plusieurs jours d’entraînement avant de pouvoir en évaluer le résultat. Par souci de concision, nous ne décrirons que nos expériences réussies, mais tenons à préciser que nous avons mené beaucoup d’expériences différentes, souvent infructueuses.

Les premières expériences d’entrainement ont révélé que nous devions privilégier les vues satellitaires lointaines pour plusieurs raisons : 

  • L’extraction de données (publiques et libres d’utilisation) à haute résolution est un processus complexe. 
  • La surface de la Terre est si complexe qu’aucun modèle ne pourra jamais apprendre toutes les subtilités de la nature. 
  • Le recul permet d’aplanir les détails jusqu’à ce qu’il ne reste que les détails importants. 
  • Les agences topographiques ont déjà traité des vues reculées pour en réduire le bruit (par ex. les nuages, les contrastes élevés générés par la lumière du soleil, etc.). 

Après avoir testé quelques modèles neuronaux en couleur uniquement comme pix2pixHD et ProGAN (voir la figure ci-dessous), nous sommes rapidement passé·e·s à l’entrainement d’un modèle complet basé sur GauGAN, intégrant également des données d’altitude aux données dûment prétraitées de notre ensemble de données. Nous avons appelé ce réseau de neurones WorldGen 


Résultats de ProGAN tout au long de sa formation avec nos données (vue aérienne uniquement)

 

Entrainement du modèle – Couleur

Grâce à une optimisation des hyperparamètres, nous avons pu obtenir des résultats satisfaisants en utilisant la normalisation d’instance. Voici quelques-uns de nos premiers résultats : 

Premiers résultats pour la vue aérienne seulement, avec une couche unique comme catégories d’entrée. Gauche: labels, centre: références, droite: inférences du modèle. A noter que les nuages ont disparus dans la première génération (première ligne), probablement parce qu’ils apparaissent au modèle comme des artefacts aléatoires qui ne sont pas corrélés avec ses entrées.

Voici une autre de nos premières expériences sur un petit ensemble de données européen composé de seulement 10 images différentes. Nous avons découpé de façon aléatoire des régions de 256×256 pixels à partir d’images HD pendant la formation, puis appliqué une augmentation des données par rotation et retournement aléatoires afin d’améliorer la généralisation. Ce processus est justifié car les captures sont tellement reculées que nous pouvons sans risque ignorer le fait que les montagnes, par exemple, peuvent avoir des caractéristiques différentes selon leur orientation géographique. Voici les résultats de l’inférence sur l’ensemble de l’image en 2048×2048 après cet entraînement au cadre limité : 

Tentative de surapprentissage d’un petit ensemble de données d‘entrainement provenant de Corine Landsat © 2021 Programme Copernicus

Observons à présent les résultats de l’inférence sur des données nouvelles, c’est-à-dire des parties du globe que le modèle n’a jamais vues auparavant et sur lesquelles il n’a pas été entraîné : 

Exemples de résultats inférés sur des données jamais vues auparavant.

Ces résultats de couleur de surface étaient d’une qualité étonnamment bonne compte tenu de la quantité réduite de données d‘apprentissage. Cependant, dans d’autres cas, beaucoup de problèmes et d’imperfections subsistaient, comme le montre la figure N. Par ailleurs, nos premiers résultats d’élévation n’étaient pas satisfaisants. Nous avons donc dû adapter considérablement notre modèle et itérer de nombreuses fois avant d’atteindre des résultats de meilleure qualité, comme nous le verrons dans la section suivante. 

Un exemple d’échec où notre réseau a produit des artefacts visibles, générant des motifs non réalistes

 

Entraînement du modèle – Altitude

Une partie importante de notre recherche consistait à ajouter un quatrième canal de données d’altitude en plus des trois premiers canaux représentant la couleur. L’entraînement sur les données de DEM a mis plus de temps à converger qu’avec la couleur, probablement parce que nous essayions que le modèle apprenne toutes les caractéristiques en même temps. Finalement, après de nombreuses itérations et ajustements, nous avons pu obtenir des résultats satisfaisants. Cependant, les résultats pour l’altitude souffraient de nombreuses irrégularitésgénérant des chaînes de montagnes en dents de scie. Ils ne se sont améliorés qu’après de très longues périodes d’apprentissage. Bien qu’il serait simple d’appliquer un filtre de lissage en post-traitement, nous avons choisi de ne montrer que les résultats originaux du modèle afin de donner un meilleur aperçu de notre méthodologie de recherche. 

À gauche, données d’altitude originales ; à droite, inférence de notre DNN.

Les données proviennent du jeu de données que nous avons collecté auprès de l’USGS, constitué d’environ 3000 images haute définition. Les catégories LandSurface sont superposées.

Résultats d’élévation sur un plan haute définition de 2048 par 2048. Les labels LandSurface sont superposés. Rendu avec ipyvolume.

 

Exemples de résultats finaux de l’élévation et couleur générés par notre modèle WorldGen, rendus avec ipyvolume.

 

Généralisation

Nous avons prouvé que nous pouvions entraîner un réseau de neurones de type GauGAN pour apprendre à modéliser simultanément la couleur de surface et l’élévation, avec de fortes corrélations entre ces deux composantes. Le test du modèle entrainé sur des données non apprises a donné des résultats encourageants, validant ainsi la première étape de notre projet. Néanmoins, les données d’entrée requises pour obtenir de tels résultats sont d’une complexité impressionnante, comme le montre la figure suivante. 

Catégories réelles de LandCover et LandSurface 

Il est extrêmement difficile pour un humain de synthétiser ce genre de données catégorielles, même pour des artistes qualifiés. En outre, les entrées doivent généralement respecter une certaine exactitude géotopographique que les artistes ne sont pas toujours en mesure de reproduire, ce qui rendrait notre réseau instable. Les tests d‘inférence sur des catégories simplifiées à l’extrême n’ont pas répondu à nos attentes et ont généré des résultats de qualité médiocre. En d’autres termes, notre modèle n’était capable de générer des terrains qu’à partir de lieux qui existaient déjà sur terre ; les données d’entrée dessinées à la main se sont avérées trop simplistes. 

Le test de notre modèle sur des entrées dessinées de façon naïve donne des résultats de qualité insuffisante. Gauche: entrée dessinée sur LandCover, milieu: entrée dessinée sur LandSurface, droite: inférence du modèle (image générée).

En essayant de générer des entrées catégorielles qui ressemblent davantage à la nature, les résultats se sont améliorés mais étaient encore très différents des résultats obtenus sur les données non apprises. Avertissement : les images suivantes ont été dessinées par un programmeur! 

En haut à gauche, catégories de type LandCover dessinées par un utilisateur ; en haut à droite, catégories de type LandSurface dessinées par un utilisateur ; en bas à gauche, couleur de surface inférée ; en bas à droite, altitude inférée.

 

 Vue 3D des données générées, avec ipyvolume.

Bien que des artistes talentueux ne cessent de nous étonner et pourraient certainement créer des données d’entrée réalistesce procédé demanderait énormément de temps, d’énergie et de compétences, ce qui va à l’encontre de l’objectif initial de créer un outil simple à utiliser. Les astuces et les modifications que nous avons explorées pour résoudre ce problème feront l’objet d’un prochain article de blog. 

Bien qu’il soit difficile de dessiner de nouvelles données, modifier une carte topologique existante reste relativement simple. Par curiosité, nous avons essayé de modifier les catégories d’une carte originale, par exemple en remplaçant une ville par une forêt ou des plaines par des montagnes. Nous avons eu le plaisir de constater que les résultats étaient convaincants et que cette astuce pourrait être un moyen de faire de la retouche d’image cartographique. 

Lorsque l’on modifie des catégories préexistantes, le modèle peut s’adapter et combler les lacunes, comme une forme de retouche d’image. La première ligne utilise les catégories du monde réel extraites de la Golden Gate National Recreation Area. Dans la deuxième ligne, nous remplaçons les zones « développées par l’homme » par des forêts. La troisième montre comment nous avons remplacé des montagnes par des collines.

 

Conclusion

WorldGen est un projet de recherche sur lequel nous avons travaillé à Eidos-Montréal tout au long de l’année 2019. L’objectif était de créer un outil assisté par l’apprentissage automatique permettant aux utilisateur·trice·s de créer des terrains réalistes grâce à un réseau antagoniste génératif basé sur GauGAN de Nvidia. Nous avons montré comment nous avons réussi à obtenir d’excellents résultats à partir de données aériennes et topographiques. Cependant, la création de nouvelles données d’entrée peut être une tâche difficile et va à l’encontre de notre objectif initial de créer un outil simple à utiliser et qui ne demande aucune compétence particulière. Nous discuterons plus en détail de ce problème et de nos tentatives pour y remédier dans un prochain article. 

 

 

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 horsligne complexe 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