


https://www.nerfacc.com/
[Noticias] 2023/04/04. Si estuviera usando nerfacc <= 0.3.5 y le gustaría migrar a nuestra última versión ( nerfacc >= 0.5.0 ), verifique el ChangeLog sobre cómo migrar.
NERFACC es una caja de herramientas de aceleración de Nerf Pytorch para entrenamiento e inferencia. Se centra en un muestreo eficiente en la tubería de representación volumétrica de los campos de radiación, que es universal y plug-and-play para la mayoría de los NERF. Con modificaciones mínimas a las bases de código existentes, NERFACC proporciona aceleraciones significativas en el entrenamiento de varios documentos recientes de NERF. ¡Y es pura interfaz Python con API flexibles!

Dependencia : Instale primero Pytorch.
La forma fácil es instalar desde PYPI. De esta manera, construirá el código CUDA en la primera ejecución (JIT).
pip install nerfacc
O instalar desde la fuente. De esta manera, construirá el código CUDA durante la instalación.
pip install git+https://github.com/nerfstudio-project/nerfacc.git
También proporcionamos ruedas preconstruidas que cubren las principales combinaciones de Pytorch + CUDA con el apoyo de Pytorch oficial.
# 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 y Linux | cu113 | cu115 | cu116 | cu117 | cu118 |
|---|---|---|---|---|---|
| antorcha 1.11.0 | ✅ | ✅ | |||
| antorcha 1.12.0 | ✅ | ✅ | |||
| antorcha 1.13.0 | ✅ | ✅ | |||
| Torch 2.0.0 | ✅ | ✅ |
Para ver la versión anterior de NERFACC, consulte aquí las ruedas prefabricadas admitidas.
La idea de NERFACC es realizar un muestreo volumétrico eficiente con un estimador computacionalmente barato para descubrir superficies. Por lo tanto, NERFACC puede funcionar con cualquier campo Radiance definido por el usuario. Para enchufar la tubería de representación de NERFACC en su código y disfrutar de la aceleración, solo necesita definir dos funciones con su campo de radiencia.
sigma_fn : Calcule la densidad en cada muestra. Será utilizado por el estimador (p. Ej., nerfacc.OccGridEstimator , nerfacc.PropNetEstimator ) para descubrir superficies.rgb_sigma_fn : Calcule el color y la densidad en cada muestra. Será utilizado por nerfacc.rendering para realizar una representación volumétrica diferenciable. Esta función recibirá gradientes para actualizar su campo Radiance.Un ejemplo simple es como este:
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 () Antes de ejecutar esos scripts de ejemplo, verifique el script sobre qué conjunto de datos se necesita y descargue primero el conjunto de datos. Puede usar --data_root para especificar la ruta.
# clone the repo with submodules.
git clone --recursive git://github.com/nerfstudio-project/nerfacc/Ver Benchmarking completo aquí: https://www.nerfacc.com/en/stable/examples/static.html
Instant-NGP en el conjunto de datos sintético nerf con un mejor rendimiento en 4.5 minutos.
# 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 en el conjunto de datos MIP-NERF 360 con un mejor rendimiento en 5 minutos.
# 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 en el conjunto de datos sintético nerf en una hora.
# Occupancy Grid Estimator
python examples/train_mlp_nerf.py --scene lego --data_root data/nerf_syntheticTensorf en Tanks & Temple y conjuntos de datos sintéticos nerf (complemento en la base de código oficial).
cd benchmarks/tensorf/
# (set up the environment for that repo)
bash script.sh nerfsyn-nerfacc-occgrid 0
bash script.sh tt-nerfacc-occgrid 0Ver Benchmarking completo aquí: https://www.nerfacc.com/en/stable/examples/dynamic.html
T-NERF en D-NERF DataSet en una hora.
# Occupancy Grid Estimator
python examples/train_mlp_tnerf.py --scene lego --data_root data/dnerfPlanes K en D-NERF DataSet (complemento en la base de código oficial).
cd benchmarks/kplanes/
# (set up the environment for that repo)
bash script.sh dnerf-nerfacc-occgrid 0TineUvox en los conjuntos de datos Hyperner y D-NERF (complemento en la base de código oficial).
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 0Ver Benchmarking completo aquí: https://www.nerfacc.com/en/stable/examples/camera.html
Barf en el conjunto de datos sintético nerf (complemento en la base de código oficial).
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 }
}