


https://www.nerfacc.com/
[Berita] 2023/04/04. Jika Anda menggunakan nerfacc <= 0.3.5 dan ingin bermigrasi ke versi terbaru kami ( nerfacc >= 0.5.0 ), silakan periksa changelog tentang cara bermigrasi.
NERFACC adalah kotak alat akselerasi Pytorch NERF untuk pelatihan dan inferensi. Ini fokus pada pengambilan sampel yang efisien dalam pipa rendering volumetrik bidang pancaran, yang bersifat universal dan plug-and-play untuk sebagian besar nerf. Dengan modifikasi minimal pada basis kode yang ada, NERFACC memberikan percepatan yang signifikan dalam melatih berbagai makalah NERF baru -baru ini. Dan itu adalah antarmuka Python murni dengan API fleksibel!

Ketergantungan : Harap instal Pytorch terlebih dahulu.
Cara Easist adalah menginstal dari PYPI. Dengan cara ini ia akan membangun kode CUDA pada run pertama (JIT).
pip install nerfacc
Atau instal dari sumber. Dengan cara ini akan membangun kode CUDA selama instalasi.
pip install git+https://github.com/nerfstudio-project/nerfacc.git
Kami juga menyediakan roda pra-built yang mencakup kombinasi utama Pytorch + Cuda yang didukung oleh Pytorch resmi.
# 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 |
|---|---|---|---|---|---|
| Obor 1.11.0 | ✅ | ✅ | |||
| Obor 1.12.0 | ✅ | ✅ | |||
| Obor 1.13.0 | ✅ | ✅ | |||
| obor 2.0.0 | ✅ | ✅ |
Untuk versi NERFACC sebelumnya, silakan periksa di sini pada roda pra-buatan yang didukung.
Gagasan NERFACC adalah untuk melakukan pengambilan sampel volumetrik yang efisien dengan penaksir yang murah secara komputasi untuk menemukan permukaan. Jadi NERFACC dapat bekerja dengan bidang Radiance yang ditentukan pengguna. Untuk mencolokkan pipa rendering NERFACC ke kode Anda dan menikmati akselerasi, Anda hanya perlu mendefinisikan dua fungsi dengan bidang Radience Anda.
sigma_fn : Hitung kepadatan pada setiap sampel. Ini akan digunakan oleh estimator (misalnya, nerfacc.OccGridEstimator , nerfacc.PropNetEstimator ) untuk menemukan permukaan.rgb_sigma_fn : Hitung warna dan kepadatan pada setiap sampel. Ini akan digunakan oleh nerfacc.rendering untuk melakukan rendering volumetrik yang dapat dibedakan. Fungsi ini akan menerima gradien untuk memperbarui bidang Radiance Anda.Contoh sederhana adalah seperti ini:
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 () Sebelum menjalankan contoh skrip itu, silakan periksa skrip tentang dataset mana yang dibutuhkan, dan unduh dataset terlebih dahulu. Anda bisa menggunakan --data_root untuk menentukan jalur.
# clone the repo with submodules.
git clone --recursive git://github.com/nerfstudio-project/nerfacc/Lihat Benchmarking Lengkap di sini: https://www.nerfacc.com/en/stable/examples/static.html
NGP instan pada dataset nerf-sintetis dengan kinerja yang lebih baik dalam 4,5 menit.
# 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_syntheticInstan-NGP pada dataset MIP-BERF 360 dengan kinerja yang lebih baik dalam 5 menit.
# 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 pada dataset NERF-sintetis dalam satu jam.
# Occupancy Grid Estimator
python examples/train_mlp_nerf.py --scene lego --data_root data/nerf_syntheticTensorf di Tanks & Kuil dan Kumpulan Dataset Sintetis NERF (plugin di basis kode resmi).
cd benchmarks/tensorf/
# (set up the environment for that repo)
bash script.sh nerfsyn-nerfacc-occgrid 0
bash script.sh tt-nerfacc-occgrid 0Lihat Benchmarking Lengkap di sini: https://www.nerfacc.com/en/stable/examples/dynamic.html
T-nerf pada dataset d-nerf dalam satu jam.
# Occupancy Grid Estimator
python examples/train_mlp_tnerf.py --scene lego --data_root data/dnerfK-plan pada dataset D-NerF (plugin di basis kode resmi).
cd benchmarks/kplanes/
# (set up the environment for that repo)
bash script.sh dnerf-nerfacc-occgrid 0Tineuvox pada dataset Hypernerf dan D-nerf (plugin di basis kode resmi).
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 0Lihat Benchmarking Lengkap di sini: https://www.nerfacc.com/en/stable/examples/camera.html
Barf pada dataset nerf-sintetis (plugin di basis kode resmi).
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 }
}