Optimización conjunta de topología, materiales e iluminación de observaciones de imágenes de visión múltiple como se describe en el papel que extrae modelos triangulares 3D, materiales e iluminación de imágenes.
Para los tetrahedones de marcha diferenciables, hemos adaptado el código de Kaolin de Nvidia: una biblioteca de Pytorch para acelerar la investigación de aprendizaje profundo 3D.
2023-10-20 : Agregamos una versión de la biblioteca RenderUtils escrita en Slangpy para aprovechar las capacidades de autodiff de la jerga en lugar de las extensiones CUDA con pases hacia adelante y hacia atrás manualmente elaborados. Esto simplifica el código sustancialmente, con el mismo rendimiento de tiempo de ejecución que antes. Esta versión está disponible en la rama slang de este repositorio.
2023-09-15 : Agregamos soporte para la técnica Flexicubes IsoSurfacing. Consulte la configs/bob_flexi.json para un ejemplo de uso y consulte la documentación Flexicubes para obtener más detalles.
@inproceedings{Munkberg_2022_CVPR,
author = {Munkberg, Jacob and Hasselgren, Jon and Shen, Tianchang and Gao, Jun and Chen, Wenzheng
and Evans, Alex and M"uller, Thomas and Fidler, Sanja},
title = "{Extracting Triangular 3D Models, Materials, and Lighting From Images}",
booktitle = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
month = {June},
year = {2022},
pages = {8280-8290}
}
Copyright © 2022, Nvidia Corporation. Reservados todos los derechos.
Este trabajo está disponible bajo la licencia del código fuente NVIDIA.
Para consultas comerciales, visite nuestro sitio web y envíe el formulario: Licencias de investigación de NVIDIA.
Requiere Python 3.6+, VS2019+, CUDA 11.3+ y Pytorch 1.10+
Probado en Anaconda3 con Python 3.9 y Pytorch 1.10
Instale el kit de herramientas CUDA (requerido para construir las extensiones de Pytorch). Apoyamos a CUDA 11.3 y más. Elija la versión apropiada de Pytorch compatible con el kit de herramientas CUDA instalado. A continuación se muestra un ejemplo con CUDA 11.6
conda create -n dmodel python=3.9
activate dmodel
conda install pytorch torchvision torchaudio cudatoolkit=11.6 -c pytorch -c conda-forge
pip install ninja imageio PyOpenGL glfw xatlas gdown
pip install git+https://github.com/NVlabs/nvdiffrast/
pip install --global-option="--no-networks" git+https://github.com/NVlabs/tiny-cuda-nn#subdirectory=bindings/torch
imageio_download_bin freeimage
activate dmodel
Nuestro enfoque está diseñado para GPU NVIDIA de alta gama con grandes cantidades de memoria. Para ejecutarse en GPU de rango medio, reduzca el parámetro de tamaño por lotes en los archivos .json.
Ejemplo de reconstrucción del género simple 1:
python train.py --config configs/bob.json
Visualice el progreso de la capacitación (solo admitido en Windows):
python train.py --config configs/bob.json --display-interval 20
Ejemplo de GPU múltiple (solo Linux. Experimental: todos los resultados en el papel se generaron usando una sola GPU ), usando Pytorch DDP
torchrun --nproc_per_node=4 train.py --config configs/bob.json
A continuación, mostramos el punto de partida y el resultado final. Referencias al derecho.


Los resultados se almacenarán en la carpeta out . Los modelos Spot y Bob fueron creados y lanzados al dominio público por Keenan Crane.
Ejemplos incluidos
spot.json - Extracción de un modelo 3D del modelo Spot. Geometría, materiales e iluminación de observaciones de imágenes.spot_fixlight.json : igual que el anterior pero asumiendo la iluminación del entorno conocida.spot_metal.json - Ejemplo de aprendizaje conjunto de materiales e iluminación de entorno de alta frecuencia para mostrar suma dividida.bob.json - Ejemplo simple de un modelo de género 1. También incluimos configuraciones ( nerf_*.json , nerd_*.json ) para reproducir los principales resultados del documento. Confiamos en conjuntos de datos de terceros, que son cortesía de sus respectivos autores. Tenga en cuenta que las licencias individuales se aplican a cada conjunto de datos. Para descargar automáticamente y preprocesar todos los conjuntos de datos, ejecute el script download_datasets.py :
activate dmodel
cd data
python download_datasets.py
A continuación sigue más información e instrucciones sobre cómo instalar manualmente los conjuntos de datos (en caso de que falle el script automatizado).
Nerf Synthetic DataSet Nuestros resultados de interpolación de vistas usan el conjunto de datos sintéticos del documento Nerf original. Para instalarlo manualmente, descargue el archivo del conjunto de datos sintético NERF y descompite en la carpeta nvdiffrec/data . Esto es necesario para ejecutar cualquiera de las configuraciones nerf_*.json .
Conjunto de datos NERD Utilizamos conjuntos de datos del papel Nerd, que presenta fotogrametría del mundo real y máscaras de segmentación inexactas (anotadas manualmente). Clone Los conjuntos de datos NERD que usan Git y los resuelvan a 512 x 512 píxeles utilizando el script scale_images.py . Esto es necesario para ejecutar cualquiera de las configuraciones nerd_*.json .
activate dmodel
cd nvdiffrec/data/nerd
git clone https://github.com/vork/ethiopianHead.git
git clone https://github.com/vork/moldGoldCape.git
python scale_images.py
cd docker
./make_image.sh nvdiffrec:v1
Inicie un contenedor interactivo Docker: docker run --gpus device=0 -it --rm -v /raid:/raid -it nvdiffrec:v1 bash
Docker separado: docker run --gpus device=1 -d -v /raid:/raid -w=[path to the code] nvdiffrec:v1 python train.py --config configs/bob.json