¿Alguna vez quisiste entrenar un modelo NeRF de un zorro en menos de 5 segundos? ¿O volar alrededor de una escena capturada de fotos de un robot de fábrica? ¡Por supuesto que quisiste!
Aquí encontrará una implementación de cuatro primitivas redes neuronales gráficas, siendo estas: campos de radiación neural (NeRF), funciones de distancia con signo (SDFs), imagenes neuronales, y volumen neuronal. En cada caso, entrenamos y renderizamos una MLP con codificación de entrada hash multiresolución usando el framework tiny-cuda-nn.
Instant Neural Graphics Primitives with a Multiresolution Hash Encoding
Thomas Müller, Alex Evans, Christoph Schied, Alexander Keller
arXiv:2201.05989 [cs.CV], Jan 2022
[ Project page ] [ Paper ] [ Video ] [ BibTeX ]
Para preguntas referentes a negocios, por favor visite nuestro sitio web y envíe el formulario: NVIDIA Research Licensing
- Una tarjeta gráfica NVidia NVIDIA GPU; Los núcleos tensoriales aumentan el rendimiento cuando están disponibles. Todos los resultados mostrados provienen de un RTX 3090.
- Un compilador capaz de manejar C++14. Se recomiendan las siguientes opciones y se han probado:
- Windows: Visual Studio 2019 (necesita también versión mínima WindowsSDK 8.1)
- Linux: GCC/G++ 7.5 or higher
- CUDA versión v10.2 o mayor y CMake v3.19 o mayor.
- (opcional) Python 3.7 o mayor para encuadernaciones interactivas. También, ejecutar
pip install -r requirements.txt
.- En algunas máquinas,
pyexr
se rehusa instalar víapip
. Se puede resolver instalando OpenEXR desde aquí.
- En algunas máquinas,
- (opcional) OptiX 7.3 o mayor para un entrenamiento SDF de malla más rápido. Establezca la variable de entorno
OptiX_INSTALL_DIR
en el directorio de instalación si no aparece automáticamente.
Si está utilizando Linux, instale los siguientes paquetes:
sudo apt-get install build-essential git python3-dev python3-pip libopenexr-dev libxi-dev \
libglfw3-dev libglew-dev libomp-dev libxinerama-dev libxcursor-dev
También recomendamos instalar CUDA y OptiX en /usr/local/
y agregar la instalación CUDA en PATH.
Por ejemplo, si posees CUDA 11.4, agrega lo siguiente a tu ~/.bashrc
export PATH="/usr/local/cuda-11.4/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-11.4/lib64:$LD_LIBRARY_PATH"
Comience clonando este repositorio y todos sus submódulos usando el siguiente comando:
$ git clone --recursive https://github.com/nvlabs/instant-ngp
$ cd instant-ngp
Luego, use CMake para compilar el proyecto: (en Windows, esto debe estar en un símbolo del sistema de desarrollador)
instant-ngp$ cmake . -B build
instant-ngp$ cmake --build build --config RelWithDebInfo -j 16
Si la compilación falla, consulte esta lista de posibles soluciones antes de abrir un issue.
Si el build tiene éxito, puedes ejecutar el software vía build/testbed
como ejecutable o usar el comando scripts/run.py
.
Si falla la detección automática de la arquitectura de la GPU (como puede suceder si tiene varias GPU instaladas), configure la variable de entorno TCNN_CUDA_ARCHITECTURES
para la GPU que le gustaría usar. La siguiente tabla enumera los valores para las GPU comunes. Si su GPU no está en la lista, consulte aquí una lista exhaustiva.
RTX 30X0 | A100 | RTX 20X0 | TITAN V / V100 | GTX 10X0 / TITAN Xp | GTX 9X0 | K80 |
---|---|---|---|---|---|---|
86 | 80 | 75 | 70 | 61 | 52 | 37 |
Este código base viene con un banco de pruebas interactivo que incluye muchas características más allá de nuestra publicación académica:
- Funciones de entrenamiento adicionales, como optimización de elementos extrínsecos e intrínsecos.
- Cubos de marcha para conversión
NeRF->Mesh
ySDF->Mesh
. - Un editor de ruta de cámara basado en spline para crear videos.
- Visualizaciones de depuración de las activaciones de cada entrada y salida de neurona.
- Y muchas más configuraciones específicas de tareas.
- Vea también nuestro video de demostración de un minuto de la herramienta.
Se proporciona una escena de prueba en este repositorio, utilizando una pequeña cantidad de fotogramas de un video de teléfono capturado casualmente.:
instant-ngp$ ./build/testbed --scene data/nerf/fox
Alternativamente, descargue cualquier escena compatible con NeRF (e.g. de la unidad de autores de NeRF). Ahora puedes ejecutar:
instant-ngp$ ./build/testbed --scene data/nerf_synthetic/lego/transforms_train.json
Para obtener más información sobre cómo preparar conjuntos de datos para su uso con nuestra implementación NeRF, consulte este documento.
instant-ngp$ ./build/testbed --scene data/sdf/armadillo.obj
instant-ngp$ ./build/testbed --scene data/image/albert.exr
Para reproducir los resultados de gigapíxeles, descargue, por ejemplo, la imagen de Tokio y conviértalo a .bin
usando el script scripts/image2bin.py
. Este formato personalizado mejora la compatibilidad y la velocidad de carga cuando la resolución es alta. Ahora puedes ejecutar:
instant-ngp$ ./build/testbed --scene data/image/tokyo.bin
Descarga el volumen nanovdb para la nube de Disney, que se deriva de aquí (CC BY-SA 3.0).
instant-ngp$ ./build/testbed --mode volume --scene data/volume/wdas_cloud_quarter.nvdb
Para realizar experimentos controlados de manera automatizada, todas las funciones del banco de pruebas interactivo (¡y más!) tienen enlaces de Python que se pueden instrumentar fácilmente.
Para ver un ejemplo de cómo se puede implementar y ampliar la aplicación ./build/testbed
desde Python, consulte ./scripts/run.py
, que admite un superconjunto de argumentos de línea de comandos que ./build/testbed
` hace.
Happy hacking!
Antes de seguir investigando, asegúrese de que todos los submódulos estén actualizados e intente compilar de nuevo.
instant-ngp$ git submodule sync --recursive
instant-ngp$ git submodule update --init --recursive
Si instant-ngp aún no se compila, actualice CUDA y su compilador a las últimas versiones que pueda instalar en su sistema. Es fundamental que actualice ambos, ya que las versiones más recientes de CUDA no siempre son compatibles con los compiladores anteriores y viceversa. Si su problema persiste, consulte la siguiente tabla de problemas conocidos.
Problem | Resolution |
---|---|
CMake error: No CUDA toolset found / CUDA_ARCHITECTURES is empty for target "cmTC_0c70f" | Windows: the Visual Studio CUDA integration was not installed correctly. Follow these instructions to fix the problem without re-installing CUDA. (#18) |
Linux: Environment variables for your CUDA installation are probably incorrectly set. You may work around the issue using cmake . -B build -DCMAKE_CUDA_COMPILER=/usr/local/cuda-<your cuda version>/bin/nvcc (#28) |
|
CMake error: No known features for CXX compiler "MSVC" | Reinstall Visual Studio & make sure you run CMake from a developer shell. (#21) |
Compile error: undefined references to "cudaGraphExecUpdate" / identifier "cublasSetWorkspace" is undefined | Update your CUDA installation (which is likely 11.0) to 11.3 or higher. (#34 #41 #42) |
Compile error: too few arguments in function call | Update submodules with the above two git commands. (#37 #52) |
Python error: No module named 'pyngp' | It is likely that CMake did not detect your Python installation and therefore did not build pyngp . Check CMake logs to verify this. If pyngp was built in a different folder than instant-ngp/build , Python will be unable to detect it and you have to supply the full path to the import statement. (#43) |
If you cannot find your problem in the table, please feel free to open an issue and ask for help.
Muchas gracias a Jonathan Tremblay y Andrew Tao por probar las primeras versiones de este código base y a Arman Toorians y Saurabh Jain por el conjunto de datos del robot de fábrica. También agradecemos a Andrew Webb por notar que uno de los números primos en el hash espacial no era realmente primo; esto se ha solucionado desde entonces.
Este proyecto hace uso de una serie de impresionantes bibliotecas de código abierto, que incluyen:
- tiny-cuda-nn for fast CUDA MLP networks
- tinyexr for EXR format support
- tinyobjloader for OBJ format support
- stb_image for PNG and JPEG support
- Dear ImGui an excellent immediate mode GUI library
- Eigen a C++ template library for linear algebra
- pybind11 for seamless C++ / Python interop
- and others! See the
dependencies
folder.
¡Muchas gracias a los autores de estos brillantes proyectos!
@article{mueller2022instant,
title = {Instant Neural Graphics Primitives with a Multiresolution Hash Encoding},
author = {Thomas M\"uller and Alex Evans and Christoph Schied and Alexander Keller},
journal = {arXiv:2201.05989},
year = {2022},
month = jan
}
Copyright © 2022, NVIDIA Corporation. All rights reserved.
This work is made available under the Nvidia Source Code License-NC. Click here to view a copy of this license.