Neural Radiance Fields (NeRF)
Les champs de radiance neuronaux (NeRF) représentent une scène 3D dans un réseau neuronal entraîné sur des photos avec poses, puis génèrent de nouvelles vues par rendu volumétrique le long des rayons de la caméra.
Un champ de radiance neuronal (NeRF) représente une scène 3D sous la forme d’un réseau neuronal qui associe à toute position 3D et direction d’observation une densité et une couleur, apprises à partir d’un ensemble de photos ordinaires dont les positions des caméras sont connues. Pour rendre une vue, on projette un rayon à travers chaque pixel, on interroge le réseau aux points situés le long du rayon, puis on mélange les résultats par rendu volumique ; un NeRF entraîné montre ainsi la scène depuis des points de vue qu’aucune caméra n’a capturés. Ben Mildenhall, Pratul Srinivasan, Matthew Tancik et leurs collègues de l’UC Berkeley, de Google Research et de l’UC San Diego ont présenté cette méthode dans NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis, à ECCV 2020. Les NeRF reproduisent les reflets, les structures fines et les matériaux semi-transparents que la photogrammétrie fondée sur des maillages gère mal, et ils ont déclenché la vague de recherche sur le rendu neuronal qui a mené au Gaussian splatting.
Fonctionnement des champs de radiance neuronaux#
Le NeRF original est un perceptron multicouche sans convolutions. Il traite une position 3D encodée au moyen de 8 couches entièrement connectées de 256 canaux et produit une densité volumique ainsi qu’un vecteur de caractéristiques de 256 valeurs. Le vecteur de caractéristiques, combiné à la direction d’observation encodée, traverse une autre couche de 128 canaux qui produit une couleur RVB. La densité dépend uniquement de la position, ce qui garantit la cohérence de la géométrie d’une vue à l’autre, tandis que la couleur dépend aussi de la direction, ce qui permet de capturer les reflets spéculaires qui se déplacent lorsque la caméra bouge :
Pour rendre un pixel, NeRF échantillonne 64 points le long du rayon de la caméra avec un réseau grossier, puis 128 autres là où la première passe a trouvé de la densité, et évalue un réseau fin à tous ces points. Chaque échantillon contribue à la couleur en proportion de son opacité et de la transmittance — la fraction de lumière qui traverse les échantillons situés devant lui — et la somme pondérée donne la couleur du pixel. L’entraînement minimise la différence au carré entre les couleurs des pixels rendus et photographiés sur des lots de 4 096 rayons. Les poses des caméras proviennent généralement de logiciels de structure à partir du mouvement, comme COLMAP, et l’entraînement d’une scène nécessitait de 100 000 à 300 000 itérations, soit environ un à deux jours, sur un GPU NVIDIA V100.
Un MLP classique alimenté par des coordonnées brutes apprend des fonctions lisses et floute les détails fins ; NeRF transforme donc d’abord chaque coordonnée en sinus et cosinus à des fréquences qui doublent, avec 10 fréquences pour la position et 4 pour la direction. Ce code PyTorch ajuste le même réseau à un signal 1D strié, avec et sans cet encodage positionnel :
import torch
from torch import nn
torch.manual_seed(0)
# Color along one line through a scene, with fine detail such as a striped texture
x = torch.linspace(-1, 1, 512).unsqueeze(1)
target = torch.sin(12 * torch.pi * x) * torch.cos(3 * torch.pi * x)
# NeRF's positional encoding: sines and cosines of the coordinate at 10 doubling frequencies
freqs = 2.0 ** torch.arange(10) * torch.pi
encoded = torch.cat([torch.sin(x * freqs), torch.cos(x * freqs)], dim=1)
for name, inputs in (("raw coordinate", x), ("positional encoding", encoded)):
mlp = nn.Sequential(nn.Linear(inputs.shape[1], 256), nn.ReLU(), nn.Linear(256, 256), nn.ReLU(), nn.Linear(256, 1))
optimizer = torch.optim.Adam(mlp.parameters(), lr=1e-3)
for step in range(1000):
loss = ((mlp(inputs) - target) ** 2).mean()
optimizer.zero_grad()
loss.backward()
optimizer.step()
print(f"{name}: mean squared error {loss.item():.4f}")Il affiche raw coordinate: mean squared error 0.0870 et positional encoding: mean squared error 0.0000. La puissance moyenne du signal est de 0,25 ; le réseau alimenté par les coordonnées brutes en manque donc environ un tiers — les fines stries — tandis que le réseau avec encodage le reproduit.
Des NeRF plus rapides et plus robustes#
- Anticrénelage et scènes non bornées : Mip-NeRF rend des cônes plutôt que des rayons infiniment fins afin de supprimer le crénelage, et Mip-NeRF 360 étend cette méthode aux prises de vue à 360° non bornées.
- Vitesse : l’Instant NGP de NVIDIA remplace la majeure partie du réseau par une table de hachage multirésolution de caractéristiques apprises, réduisant l’entraînement de plusieurs jours à quelques secondes ou minutes et le rendu à quelques dizaines de millisecondes en 1920×1080.
- Photos prises dans la nature : NeRF in the Wild ajoute des représentations d’apparence propres à chaque photo et une composante transitoire distincte, ce qui permet de reconstruire proprement des collections de photos issues d’Internet malgré les changements d’éclairage et le passage de touristes.
- Texte vers 3D : DreamFusion optimise un NeRF jusqu’à ce que ses rendus soient plausibles sous tous les angles pour un modèle de diffusion 2D de génération d’images à partir de texte, créant ainsi des objets 3D à partir de requêtes sans données d’entraînement 3D.
NeRF et concepts associés#
- Gaussian splatting : représente explicitement une scène sous la forme de millions de Gaussiennes 3D et les rastérise, ce qui permet un rendu en temps réel sans évaluer de réseau pour chaque pixel. En 2023, cette méthode a égalé la qualité de Mip-NeRF 360 et a remplacé NeRF dans de nombreux outils de capture, au prix d’une consommation mémoire plus élevée.
- Photogrammétrie : construit un maillage explicite en faisant correspondre les caractéristiques entre les photos. Les maillages sont compacts et modifiables dans les logiciels 3D classiques, mais gèrent mal les surfaces brillantes, transparentes et très fines.
- Estimation de profondeur : un NeRF produit une carte de profondeur comme sous-produit — la distance attendue à laquelle chaque rayon s’arrête — mais seulement après optimisation sur de nombreuses photos posées d’une même scène. Les modèles de profondeur monoculaire prédisent la profondeur à partir d’une seule image en une propagation avant.
- Représentations neuronales implicites : NeRF est une représentation neuronale implicite spécialisée dans la radiance et la densité, au même titre que les réseaux qui stockent des images, des formes ou du son sous forme de fonctions continues.
Conditions de capture#
NeRF suppose une scène statique sous un éclairage constant, photographiée depuis de nombreux points de vue qui se chevauchent et avec des poses de caméra précises. L’article original a entraîné chaque objet synthétique sur 100 vues rendues et chaque scène réelle filmée de face sur 20 à 62 photos. Tout ce qui bouge pendant la capture, comme un passant ou une voiture, apparaît dans certaines photos et pas dans d’autres, et l’optimisation l’explique par des « éléments flottants » semi-transparents. Les modèles Ultralytics YOLO26 de segmentation d’instances masquent les personnes et les véhicules sur chaque photo, afin que les rayons traversant ces pixels puissent être exclus de l’entraînement.
Applications concrètes#
- Cinéma et production virtuelle : les lieux capturés sont reconstruits et rendus depuis de nouveaux parcours de caméra pour produire des arrière-plans photoréalistes et des références de décors.
- Robotique et simulation de conduite : les environnements enregistrés sont reconstruits afin que les équipes de véhicules autonomes et de robotique puissent rendre des vues de capteurs depuis des positions que le trajet d’origine n’a jamais empruntées.
- Visualisation de produits : quelques dizaines de photos d’un article deviennent une vue interactive que les acheteurs peuvent faire pivoter librement.
- Cartes : pour Immersive View dans Google Maps, Google a reconstruit des intérieurs de restaurants et de cafés avec NeRF à partir de photos prises avec un appareil reflex numérique, en environ une heure par établissement. En s’appuyant sur Mip-NeRF 360, les représentations d’apparence de NeRF in the Wild et le conditionnement de l’exposition de Block-NeRF, Google les a proposées sous forme de vidéos interactives à 360° suivant des itinéraires aériens sélectionnés.










