


https://www.nerfacc.com/
[Новости] 2023/04/04. Если вы использовали nerfacc <= 0.3.5 и хотели бы перейти на нашу последнюю версию ( nerfacc >= 0.5.0 ), пожалуйста, проверьте ChangeLog о том, как мигрировать.
NERFACC - это набор инструментов для ускорения NERF PYTORCH как для обучения, так и для вывода. Он фокусируется на эффективной выборке в объемном рендеринговом конвейере полей сияния, который является универсальным и подключаемым для большинства NERFS. С минимальными изменениями в существующих кодовых базах, NERFACC обеспечивает значительное ускорение при обучении различным недавним документам NERF. И это чистый интерфейс Python с гибкими API!

Зависимость : сначала установите Pytorch.
EASIST способом является установка из PYPI. Таким образом, он построит код CUDA на первом забеге (JIT).
pip install nerfacc
Или установить из источника. Таким образом, он построит код CUDA во время установки.
pip install git+https://github.com/nerfstudio-project/nerfacc.git
Мы также предоставляем предварительно построенные колеса, охватывающие основные комбинации Pytorch + CUDA, поддерживаемые официальным Pytorch.
# 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 |
|---|---|---|---|---|---|
| Факел 1.11.0 | ✅ | ✅ | |||
| Факел 1.12.0 | ✅ | ✅ | |||
| Факел 1.13.0 | ✅ | ✅ | |||
| Факел 2.0.0 | ✅ | ✅ |
Для предыдущей версии NERFACC, пожалуйста, проверьте здесь на поддерживаемых предварительно построенных колесах.
Идея NERFACC состоит в том, чтобы выполнить эффективную объемную выборку с вычислительно дешевой оценкой для обнаружения поверхностей. Таким образом, NERFACC может работать с любым пользовательским полем Radiance. Чтобы подключить конвейер рендеринга NERFACC к вашему коду и насладиться ускорением, вам нужно только определить две функции с вашим полевым полем.
sigma_fn : вычислить плотность в каждом образце. Он будет использоваться оценкой (например, nerfacc.OccGridEstimator , nerfacc.PropNetEstimator ) для обнаружения поверхностей.rgb_sigma_fn : вычислить цвет и плотность в каждом образце. Он будет использоваться nerfacc.rendering для проведения дифференцируемого объемного рендеринга. Эта функция будет получать градиенты для обновления вашего поля Radiance.Простой пример такой:
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 () Прежде чем запустить эти примеры сценарии, пожалуйста, проверьте сценарий о том, какой набор данных необходим, и сначала загрузите набор данных. Вы можете использовать --data_root , чтобы указать путь.
# clone the repo with submodules.
git clone --recursive git://github.com/nerfstudio-project/nerfacc/См. Полный анализ здесь: https://www.nerfacc.com/en/stable/examples/static.html
Instant-NGP на наборе данных NERF-синтеза с лучшей производительностью за 4,5 минуты.
# 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 на набор данных MIP-Snerf 360 с лучшей производительностью за 5 минут.
# 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 на наборе данных NERF-синтеза за час.
# Occupancy Grid Estimator
python examples/train_mlp_nerf.py --scene lego --data_root data/nerf_syntheticTensorf на резервуарах и наборах данных Temple и NERF-синтеза (плагин в официальной кодовой базе).
cd benchmarks/tensorf/
# (set up the environment for that repo)
bash script.sh nerfsyn-nerfacc-occgrid 0
bash script.sh tt-nerfacc-occgrid 0См. Полный анализ здесь: https://www.nerfacc.com/en/stable/examples/dynamic.html
T-Snerf на наборе данных D-nerf за час.
# Occupancy Grid Estimator
python examples/train_mlp_tnerf.py --scene lego --data_root data/dnerfK-планы на наборе данных D-nerf (плагин в официальной кодовой базе).
cd benchmarks/kplanes/
# (set up the environment for that repo)
bash script.sh dnerf-nerfacc-occgrid 0Tineuvox на наборах данных Hypernerf и D-Renf (плагин в официальной кодовой базе).
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 0См. Полный анализ здесь: https://www.nerfacc.com/en/stable/examples/camera.html
BARF на наборе данных NERF-синтеза (плагин в официальной кодовой базе).
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 }
}