


https://www.nerfacc.com/
[News] 2023/04/04. Si vous utilisiez nerfacc <= 0.3.5 et que vous souhaitez migrer vers notre dernière version ( nerfacc >= 0.5.0 ), veuillez vérifier le modiage sur la façon de migrer.
NERFACC est une boîte à outils d'accélération Nerf Pytorch pour la formation et l'inférence. Il se concentre sur un échantillonnage efficace dans le pipeline de rendu volumétrique des champs de radiance, qui est universel et plug-and-play pour la plupart des nerfs. Avec des modifications minimales des bases de code existantes, NERFACC fournit des accéléreuses importantes dans la formation de divers articles Nerf récents. Et c'est une pure interface Python avec des API flexibles!

Dépendance : veuillez d'abord installer Pytorch.
La voie easiste est d'installer à partir de PYPI. De cette façon, il construira le code CUDA lors de la première exécution (JIT).
pip install nerfacc
Ou installer à partir de la source. De cette façon, il créera le code CUDA pendant l'installation.
pip install git+https://github.com/nerfstudio-project/nerfacc.git
Nous fournissons également des roues pré-construites couvrant des combinaisons majeures de Pytorch + Cuda soutenues par Pytorch officiel.
# e.g., torch 1.13.0 + cu117
pip install nerfacc -f https://nerfacc-bucket.s3.us-west-2.amazonaws.com/whl/torch-1.13.0_cu117.html
| Windows & Linux | cu113 | cu115 | cu116 | cu117 | cu118 |
|---|---|---|---|---|---|
| torche 1.11.0 | ✅ | ✅ | |||
| torche 1.12.0 | ✅ | ✅ | |||
| torche 1.13.0 | ✅ | ✅ | |||
| torche 2.0.0 | ✅ | ✅ |
Pour la version précédente de NERFACC, veuillez consulter ici les roues prédéfinies prises en charge.
L'idée du NERFACC est d'effectuer un échantillonnage volumétrique efficace avec un estimateur bon marché en calcul pour découvrir des surfaces. Ainsi, NERFACC peut fonctionner avec n'importe quel champ Radiance défini par l'utilisateur. Pour brancher le pipeline de rendu NERFACC dans votre code et profiter de l'accélération, il vous suffit de définir deux fonctions avec votre champ Radience.
sigma_fn : calculer la densité à chaque échantillon. Il sera utilisé par l'estimateur (par exemple, nerfacc.OccGridEstimator , nerfacc.PropNetEstimator ) pour découvrir des surfaces.rgb_sigma_fn : Calculez la couleur et la densité à chaque échantillon. Il sera utilisé par nerfacc.rendering pour effectuer un rendu volumétrique différenciable. Cette fonction recevra des gradients pour mettre à jour votre champ Radiance.Un exemple simple est comme ceci:
import torch
from torch import Tensor
import nerfacc
radiance_field = ... # network: a NeRF model
rays_o : Tensor = ... # ray origins. (n_rays, 3)
rays_d : Tensor = ... # ray normalized directions. (n_rays, 3)
optimizer = ... # optimizer
estimator = nerfacc . OccGridEstimator (...)
def sigma_fn (
t_starts : Tensor , t_ends : Tensor , ray_indices : Tensor
) -> Tensor :
""" Define how to query density for the estimator."""
t_origins = rays_o [ ray_indices ] # (n_samples, 3)
t_dirs = rays_d [ ray_indices ] # (n_samples, 3)
positions = t_origins + t_dirs * ( t_starts + t_ends )[:, None ] / 2.0
sigmas = radiance_field . query_density ( positions )
return sigmas # (n_samples,)
def rgb_sigma_fn (
t_starts : Tensor , t_ends : Tensor , ray_indices : Tensor
) -> Tuple [ Tensor , Tensor ]:
""" Query rgb and density values from a user-defined radiance field. """
t_origins = rays_o [ ray_indices ] # (n_samples, 3)
t_dirs = rays_d [ ray_indices ] # (n_samples, 3)
positions = t_origins + t_dirs * ( t_starts + t_ends )[:, None ] / 2.0
rgbs , sigmas = radiance_field ( positions , condition = t_dirs )
return rgbs , sigmas # (n_samples, 3), (n_samples,)
# Efficient Raymarching:
# ray_indices: (n_samples,). t_starts: (n_samples,). t_ends: (n_samples,).
ray_indices , t_starts , t_ends = estimator . sampling (
rays_o , rays_d , sigma_fn = sigma_fn , near_plane = 0.2 , far_plane = 1.0 , early_stop_eps = 1e-4 , alpha_thre = 1e-2 ,
)
# Differentiable Volumetric Rendering.
# colors: (n_rays, 3). opacity: (n_rays, 1). depth: (n_rays, 1).
color , opacity , depth , extras = nerfacc . rendering (
t_starts , t_ends , ray_indices , n_rays = rays_o . shape [ 0 ], rgb_sigma_fn = rgb_sigma_fn
)
# Optimize: Both the network and rays will receive gradients
optimizer . zero_grad ()
loss = F . mse_loss ( color , color_gt )
loss . backward ()
optimizer . step () Avant d'exécuter ces exemples de scripts, veuillez consulter le script sur quel ensemble de données est nécessaire et télécharger l'ensemble de données en premier. Vous pouvez utiliser --data_root pour spécifier le chemin.
# clone the repo with submodules.
git clone --recursive git://github.com/nerfstudio-project/nerfacc/Voir l'analyse comparative complète ici: https://www.nerfacc.com/en/stable/examples/static.html
Instant-NGP sur l'ensemble de données-synthétique NERF avec de meilleures performances en 4,5 minutes.
# Occupancy Grid Estimator
python examples/train_ngp_nerf_occ.py --scene lego --data_root data/nerf_synthetic
# Proposal Net Estimator
python examples/train_ngp_nerf_prop.py --scene lego --data_root data/nerf_syntheticInstant-NGP sur le jeu de données MIP-nerf 360 avec de meilleures performances en 5 minutes.
# Occupancy Grid Estimator
python examples/train_ngp_nerf_occ.py --scene garden --data_root data/360_v2
# Proposal Net Estimator
python examples/train_ngp_nerf_prop.py --scene garden --data_root data/360_v2Vanilla MLP Nerf sur l'ensemble de données-synthétique NERF dans une heure.
# Occupancy Grid Estimator
python examples/train_mlp_nerf.py --scene lego --data_root data/nerf_syntheticTensorf sur les réservoirs et les ensembles de données du temple et du nerf-synthétique (plugin dans la base de code officielle).
cd benchmarks/tensorf/
# (set up the environment for that repo)
bash script.sh nerfsyn-nerfacc-occgrid 0
bash script.sh tt-nerfacc-occgrid 0Voir l'analyse comparative complète ici: https://www.nerfacc.com/en/stable/examples/dynamic.html
T-nerf sur l'ensemble de données d-nerf en une heure.
# Occupancy Grid Estimator
python examples/train_mlp_tnerf.py --scene lego --data_root data/dnerfK-Planes sur D-nerf DataSet (plugin dans la base de code officielle).
cd benchmarks/kplanes/
# (set up the environment for that repo)
bash script.sh dnerf-nerfacc-occgrid 0Tineuvox sur les ensembles de données Hypernerf et D-Serf (plugin dans la base de code officielle).
cd benchmarks/tineuvox/
# (set up the environment for that repo)
bash script.sh dnerf-nerfacc-occgrid 0
bash script.sh hypernerf-nerfacc-occgrid 0
bash script.sh hypernerf-nerfacc-propnet 0Voir l'analyse comparative complète ici: https://www.nerfacc.com/en/stable/examples/camera.html
Barf sur l'ensemble de données-synthétique NERF (plugin dans la base de code officielle).
cd benchmarks/barf/
# (set up the environment for that repo)
bash script.sh nerfsyn-nerfacc-occgrid 0 @article { li2023nerfacc ,
title = { NerfAcc: Efficient Sampling Accelerates NeRFs. } ,
author = { Li, Ruilong and Gao, Hang and Tancik, Matthew and Kanazawa, Angjoo } ,
journal = { arXiv preprint arXiv:2305.04966 } ,
year = { 2023 }
}