


https://www.nerfacc.com/
[Nachrichten] 2023/04/04. Wenn Sie nerfacc <= 0.3.5 verwenden und zu unserer neuesten Version ( nerfacc >= 0.5.0 ) migrieren möchten, überprüfen Sie bitte den Changelog, wie man migriert.
Nerfacc ist eine Pytorch -Nerf -Beschleunigungs -Toolbox für Training und Inferenz. Es konzentriert sich auf eine effiziente Probenahme in der volumetrischen Rendering-Pipeline von Radiance Fields, die für die meisten NERFs universell und plug-andplay ist. Mit minimalen Modifikationen an den vorhandenen Codebasen bietet NerFACC signifikante Beschleunigungen bei der Schulung verschiedener neuerer NERF -Papiere. Und es ist eine reine Python -Schnittstelle mit flexiblen APIs!

Abhängigkeit : Bitte installieren Sie Pytorch zuerst.
Der easistische Weg besteht darin, von PYPI zu installieren. Auf diese Weise erstellt es den CUDA -Code im ersten Lauf (JIT).
pip install nerfacc
Oder aus der Quelle installieren. Auf diese Weise erstellt er den CUDA -Code während der Installation.
pip install git+https://github.com/nerfstudio-project/nerfacc.git
Wir bieten auch vorgefertigte Räder, die wichtige Kombinationen von Pytorch + CUDA abdecken, die vom offiziellen Pytorch unterstützt werden.
# 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 |
|---|---|---|---|---|---|
| Torch 1.11.0 | ✅ | ✅ | |||
| Torch 1.12.0 | ✅ | ✅ | |||
| Torch 1.13.0 | ✅ | ✅ | |||
| Torch 2.0.0 | ✅ | ✅ |
Für die vorherige Version von Nerfacc finden Sie hier die unterstützten vorgefertigten Räder.
Die Idee von Nerfacc ist die Durchführung einer effizienten volumetrischen Probenahme mit einem rechnerisch billigen Schätzer, um Oberflächen zu entdecken. Nerfacc kann also mit jedem benutzerdefinierten Strahlungsfeld funktionieren. Um die Nerfacc -Rendering -Pipeline in Ihren Code zu schließen und die Beschleunigung zu genießen, müssen Sie nur zwei Funktionen mit Ihrem Strahlungsfeld definieren.
sigma_fn : Berechnung der Dichte bei jeder Probe. Es wird vom Schätzer (z. B. nerfacc.OccGridEstimator , nerfacc.PropNetEstimator ) verwendet, um Oberflächen zu entdecken.rgb_sigma_fn : Berechnen Sie Farbe und Dichte bei jeder Probe. Es wird von nerfacc.rendering verwendet, um eine differenzierbare volumetrische Renderung durchzuführen. Diese Funktion empfängt Gradienten, um Ihr Strahlenfeld zu aktualisieren.Ein einfaches Beispiel ist wie folgt:
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 () Bevor Sie diese Beispielskripte ausführen, überprüfen Sie bitte das Skript darüber, welcher Datensatz benötigt wird, und laden Sie zuerst den Datensatz herunter. Sie können --data_root verwenden, um den Pfad anzugeben.
# clone the repo with submodules.
git clone --recursive git://github.com/nerfstudio-project/nerfacc/Siehe vollständige Benchmarking HIER: https://www.nerfacc.com/en/stable/examples/static.html
Instant-NGP auf Nerf-synthetischer Datensatz mit einer besseren Leistung in 4,5 Minuten.
# 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 auf MIP-NERF 360-Datensatz mit einer besseren Leistung in 5 Minuten.
# 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_v2Vanille-MLP-Nerf auf Nerf-Synthese-Datensatz in einer Stunde.
# Occupancy Grid Estimator
python examples/train_mlp_nerf.py --scene lego --data_root data/nerf_syntheticTensorf on Tanks & Temple und Nerf-Synthese-Datensätze (Plugin in der offiziellen Codebasis).
cd benchmarks/tensorf/
# (set up the environment for that repo)
bash script.sh nerfsyn-nerfacc-occgrid 0
bash script.sh tt-nerfacc-occgrid 0Siehe vollständige Benchmarking HIER: https://www.nerfacc.com/en/stable/examples/dynamic.html
T-nerf auf d-nerf-Datensatz in einer Stunde.
# Occupancy Grid Estimator
python examples/train_mlp_tnerf.py --scene lego --data_root data/dnerfK-Plane auf D-NERF-Datensatz (Plugin in der offiziellen Codebasis).
cd benchmarks/kplanes/
# (set up the environment for that repo)
bash script.sh dnerf-nerfacc-occgrid 0Tineuvox auf Hypererf- und D-NERF-Datensätzen (Plugin in der offiziellen Codebasis).
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 0Siehe vollständige Benchmarking HIER: https://www.nerfacc.com/en/stable/examples/camera.html
BARF auf dem nerf-synthetischen Datensatz (Plugin in der offiziellen Codebasis).
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 }
}