NeRF hiérarchique avec JAX3D pour le rendu volumétrique, la synthèse de vues inédites et la reconstruction 3D

Un nouveau jalon vient d’être franchi dans l’univers de l’intelligence artificielle.

NeRF hiérarchique avec JAX3D pour le rendu volumétrique, la synthèse de vues inédites et la reconstruction 3D

Dans ce tutoriel, nous allons créer un champ de radiance neuronal (NeRF) hiérarchique de bout en bout à l’aide de JAX, Flax, Optax et des primitives de rendu volumétrique fournies par jax3d. Nous commençons par construire un ensemble de données synthétiques multi-vues à partir d’une scène analytique contenant une géométrie volumétrique et une radiance dépendante de la vue, en utilisant les méthodes `sample_along_rays` et `volume_rendering` pour mettre en place le processus de rendu direct. Nous mettons ensuite en œuvre un NeRF avec encodage positionnel, des connexions de saut, des réseaux distincts pour les détails grossiers et fins, et un conditionnement selon la direction de la vue, suivi d’un échantillonnage hiérarchique par importance via la fonction `sample_piecewise_constant_pdf`. Nous entraînons le modèle d’IA en utilisant la compilation JIT de JAX, l’optimisation Adam, la décroissance exponentielle du taux d’apprentissage et l’écrêtage des gradients. Nous évaluons ensuite la synthèse de vues inédites à l’aide du PSNR, de la visualisation de la profondeur et de l’opacité, des diagnostics d’échantillonnage, du rendu à 360 degrés et de l’extraction géométrique par la méthode des « marching cubes ».

Point notable, nous configurons l’environnement JAX3D, installons les dépendances requises et chargeons le module `volume_rendering` directement depuis le dépôt cloné. Nous configurons les paramètres d’entraînement adaptatifs au GPU/CPU et définissons le modèle de caméra à l’aide des intrinsèques « pinhole », des poses « look-at » et du placement de caméra basé sur l’orbite. Nous générons ensuite des rayons normalisés dans l’espace mondial à partir de chaque pose de caméra, fournissant ainsi la base géométrique du pipeline de rendu.

Point notable, nous construisons une scène de référence analytique comprenant des sphères aux contours flous, un sol à motifs et une radiance spéculaire dépendante de l’angle de vue. Nous effectuons le rendu de cette scène à l’aide de l’implémentation de rendu volumique de JAX3D afin de générer des observations RVB, des valeurs de profondeur et d’opacité cohérentes pour plusieurs points de vue de caméra. Nous organisons les images obtenues en un ensemble de rayons « aplati » afin de pouvoir échantillonner efficacement des rayons aléatoires pendant l’entraînement du NeRF.

Nous mettons en œuvre la représentation NeRF en utilisant un encodage positionnel sinusoïdal tant pour les coordonnées spatiales que pour les directions d’observation. Nous utilisons un réseau neuronal multicalcul (MLP) profond de type Flax doté d’une connexion « skip » pour prédire une densité volumétrique non négative à partir de la position, tout en conditionnant les données RVB en fonction de la direction d’observation. Nous distinguons donc la géométrie, qui est indépendante de la vue, de l’apparence, qui dépend de la vue, ce qui permet au modèle d’IA de représenter à la fois la structure de la scène et les effets spéculaires.

Nous mettons en œuvre le moteur de rendu hiérarchique de base en échantillonnant d’abord des points grossiers le long de chaque rayon, puis en combinant leurs densités et leurs couleurs à l’aide de l’opérateur de rendu volumique de JAX3D. Nous convertissons ensuite les poids de rendu grossiers de ce fait obtenus en une distribution de probabilité constante par morceaux, puis nous effectuons un échantillonnage par importance de points fins supplémentaires autour des régions à forte contribution. Nous combinons et trions les échantillons grossiers et fins avant d’effectuer le rendu final du réseau fin, tout en éliminant les gradients grâce à l’opération d’échantillonnage.

Nous initialisons des réseaux NeRF indépendants, l’un grossier et l’autre fin, puis nous les optimisons conjointement à l’aide de l’algorithme Adam, en utilisant une décroissance exponentielle du taux d’apprentissage et un écrêtage global des gradients. Nous supervisons les deux étapes de rendu en les comparant aux couleurs réelles des rayons, ce qui permet au réseau grossier d’apprendre des distributions d’échantillonnage utiles tout en améliorant la reconstruction fine finale. Nous effectuons la phase d’entraînement avec la compilation JIT de JAX et surveillons le PSNR du réseau fin tout au long de l’optimisation.

Parallèlement, nous évaluons la représentation apprise à l’aide d’un rendu par segments de vues inédites et mesurons la qualité de la reconstruction à l’aide du PSNR sur un ensemble de test, ainsi que des cartes de profondeur et d’opacité. Nous visualisons comment l’échantillonnage hiérarchique concentre les échantillons fins autour des surfaces importantes, puis générons un GIF à rotation à 360 degrés afin d’examiner le champ de radiance appris sous plusieurs angles. Enfin, nous interrogeons la densité apprise sur une grille 3D et appliquons l’algorithme des « marching cubes » pour extraire une isosurface géométrique approximative.

En conclusion, nous avons présenté l’ensemble du processus de rendu inverse en apprenant un champ de densité et de radiance continu à partir d’observations synthétiques multi-vues, puis en le reconstruisant par un rendu volumique hiérarchique. Nous avons utilisé le réseau grossier pour identifier les régions informatives le long de chaque rayon et le réseau fin pour concentrer des échantillons supplémentaires autour des surfaces à forte contribution. Parallèlement, le codage de la direction de vue nous autorise de modéliser l’apparence en fonction de la vue. Au cours des dernières étapes de l’évaluation, nous avons mesuré la qualité de la reconstruction de vues inédites à l’aide du PSNR, examiné la profondeur et l’opacité apprises, visualisé le comportement de l’échantillonnage par importance, généré une orbite à 360 degrés et extrait une géométrie apprise approximative à l’aide de l’algorithme « marching cubes ». Dans l’ensemble, nous avons montré comment les composants mathématiques de jax3d s’intègrent à l’entraînement moderne des réseaux neuronaux basés sur JAX pour former un mécanisme de reconstruction NeRF à la fois compact et techniquement complet.

En quelques mots :

  • Nous effectuons la phase d’entraînement avec la compilation JIT de JAX et surveillons le PSNR du réseau fin tout au long de l’optimisation.
  • Parallèlement, le codage de la direction de vue nous autorise de modéliser l’apparence en fonction de la vue.

Il faudra attendre les retours concrets pour juger de l’impact réel.

À lire également :


Information publiée en premier lieu par MarkTechPost : MarkTechPost