Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

NVIDIA transforme des images 2D en modèles 3D en moins de 100 ms
à l'aide d'un moteur de rendu dérivable, DIB-R

Le , par dourouc05

52PARTAGES

17  0 
Dans le développement de jeux vidéo, la création de modèles 3D prend une bonne partie du temps total, mais aussi des gens compétents. Certains ont donc eu l’idée d’automatiser cette partie, par exemple à l’aide de réseaux neuronaux, la tarte à la crème actuelle. L’idée très générale est simple : on entre une image, on ressort un modèle 3D. Un peu plus en détail, on voit déjà apparaître des zones d’ombre : on peut traiter assez facilement des images avec des réseaux neuronaux, mais quid des modèles 3D ? Quelle architecture pourrait-on utiliser pour relier les deux ? Comment effectuer l’entraînement du système ? Commençons par la troisième partie.

Quand il s’agit de transformations du genre, il est courant d’utiliser des GAN, des réseaux antagonistes génératifs : dans ce cas-ci, par exemple, un réseau neuronal crée un modèle 3D à partir d’une image 2D, un autre réseau décide si le modèle 3D correspond bien à l’image 2D. Ainsi, on dispose d’un mécanisme qui peut améliorer le générateur de modèles 3D. Cependant, comment décider si le modèle 3D correspond à l’image ? Pour ce faire, il faut utiliser un moteur de rendu, auquel on fournit le modèle 3D produit : il ressort une image, que l’on compare avec l’image d’entrée.

Et si on simplifiait la chose, en intégrant le moteur de rendu dans le réseau neuronal (au moins pendant son entraînement) ? Ainsi, on a un réseau qui prend une image en entrée, ressort un modèle 3D, qui passe dans un moteur de rendu, on calcule l’erreur du modèle en comparant l’image obtenue à la sortie du moteur de rendu avec l’image d’entrée. Il faut “juste” arriver à dériver le moteur de rendu, ce que l’on arrive à faire depuis quelques années, de manière approchée (mais de manière exacte avec du lancer de rayons). Les chercheurs introduisent cependant une nouvelle approche, DIB-R (differentiable interpolation-based renderer), avec un mélange d’interpolation locale (comme le fait tout moteur de rendu, par exemple à l’échelle d’un triangle éclairé) et d’agrégation globale.



Ensuite, quelle architecture de réseau faut-il utiliser ? Le choix des chercheurs de NVIDIA s’est porté sur un encodeur-décodeur, pour (en principe) réduire l’image à quelques paramètres très significatifs (par exemple : oiseau, petit, jaune). L’encodeur peut donc notamment effectuer une tâche de reconnaissance d’objet.



Comment représenter un modèle 3D ? Les chercheurs ont pris la manière la plus classique de faire : ils présupposent que le modèle peut être formé à partir d’une sphère avec une discrétisation donnée ; la sortie du modèle est la position et la couleur de chaque arête de cette sphère. D’une certaine manière, cette sortie est une “image” à six dimensions (trois pour la position, trois pour la couleur), d’où l’utilisation d’une architecture avec des convolutions pour gérer la sortie. (Pour obtenir de meilleurs résultats, les chercheurs ont aussi étendu leur travail pour générer une texture en sortie, ainsi que des informations d’éclairage.) L’arrière-plan de l’image est extrait et affiché derrière le modèle 3D.


Le résultat est une application qui peut générer des modèles 3D en moins de cent millisecondes. Ces derniers ne sont pas encore parfaits (bien que meilleurs que les approches précédentes), mais sont une bonne base pour un artiste : il peut gagner beaucoup de temps en partant de ces modèles plutôt que de zéro. Son entraînement a néanmoins pris deux jours.

Source : l’article et son supplément.

Voir aussi : le code source de DIB-R.

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de alf2010
Membre à l'essai https://www.developpez.com
Le 26/12/2019 à 10:49
Merci beaucoup pour la clarté de l'article et plus généralement pour la qualité de vos nouvelles
4  0 
Avatar de dourouc05
Responsable Qt & Livres https://www.developpez.com
Le 26/12/2019 à 18:18
Citation Envoyé par alf2010 Voir le message
Merci beaucoup pour la clarté de l'article et plus généralement pour la qualité de vos nouvelles
Merci, c'est le genre de message qui fait plaisir :) !

Citation Envoyé par tlt Voir le message
Qu'entend-on par "rendu dérivable"? Du/par transfert learning?
C'est-à-dire qu'un opérateur de dérivation peut passer à travers le moteur de rendu (vraiment au sens mathématique). Plus précisément : si on note le modèle 3D x et l'image obtenue par le moteur de rendu f(x), on veut pouvoir calculer la dérivée d'une chose comme ||f(x) - y||, c'est-à-dire une erreur sur l'image produite f(x) par rapport à l'image initiale y. Sauf que cette notation est un peu tronquée : x dépend déjà de y par rapport à une fonction assez complexe, paramétrée disons par θ. On veut calculer la dérivée de ||f(x(y, θ)) - y|| par rapport à chacun de ces paramètres θ. Or, pour y arriver, il faut une manière de dériver cette fonction f, d'où la notion de "moteur de rendu dérivable".
3  0 
Avatar de tlt
Membre actif https://www.developpez.com
Le 26/12/2019 à 9:46
Qu'entend-on par "rendu dérivable"? Du/par transfert learning?
0  0