Skip to content

Latest commit

 

History

History
195 lines (134 loc) · 12.4 KB

README_ESP.md

File metadata and controls

195 lines (134 loc) · 12.4 KB

Instant Neural Graphics Primitives

¿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

Requisitos:

  • 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ía pip. Se puede resolver instalando OpenEXR desde aquí.
  • (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"

Compilación (Windows & Linux)

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

Entrenamiento interactivo y renderizado

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 y SDF->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.

NeRF fox

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.

SDF armadillo

instant-ngp$ ./build/testbed --scene data/sdf/armadillo.obj

Imagen de Einstein

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

Procesador de volumen

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

Enlaces de Python

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!

Solución de problemas de errores de compilación

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.

Thanks

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!

Licencia y Citación

@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.