Optimisation conjointe de la topologie, des matériaux et de l'éclairage à partir d'observations d'images multi-visualités comme décrit dans l'article Extraction de modèles 3D triangulaires, de matériaux et d'éclairage à partir d'images.
Pour les tétradons de marche différenciables, nous avons adapté le code de Kaolin: A Pytorch Library de Nvidia pour accélérer la recherche en profondeur 3D.
2023-10-2020 : Nous avons ajouté une version de la bibliothèque RenderUtils écrite en slangpy pour tirer parti des capacités Autodiff de l'argot au lieu d'extensions de Cuda avec des passes manuellement conçues en avant et en arrière. Cela simplifie considérablement le code, avec les mêmes performances d'exécution qu'auparavant. Cette version est disponible dans la branche slang de ce dépôt.
2023-09-15 : Nous avons ajouté la prise en charge de la technique Flexicubes Isosurfaçage. Veuillez consulter les configs/bob_flexi.json pour un exemple d'utilisation et reportez-vous à la documentation Flexicubes pour plus de détails.
@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. Tous droits réservés.
Ce travail est mis à disposition sous la licence de code source NVIDIA.
Pour les demandes commerciales, veuillez visiter notre site Web et soumettre le formulaire: NVIDIA Research Licensing.
Nécessite Python 3.6+, VS2019 +, CUDA 11.3+ et Pytorch 1.10+
Testé dans Anaconda3 avec Python 3.9 et Pytorch 1.10
Installez la boîte à outils CUDA (requise pour construire les extensions de pytorch). Nous soutenons CUDA 11.3 et plus. Choisissez la version appropriée de Pytorch compatible avec la boîte à outils CUDA installée. Vous trouverez ci-dessous un exemple avec 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
Notre approche est conçue pour les GPU NVIDIA haut de gamme avec de grandes quantités de mémoire. Pour fonctionner sur des GPU de milieu de gamme, réduisez le paramètre de taille de lot dans les fichiers .json.
Exemple de reconstruction simple du genre 1:
python train.py --config configs/bob.json
Visualiser les progrès de la formation (pris en charge uniquement sur Windows):
python train.py --config configs/bob.json --display-interval 20
Exemple multi-GPU (Linux uniquement. Expérimental: Tous les résultats dans le papier ont été générés en utilisant un seul GPU ), en utilisant le DDP Pytorch
torchrun --nproc_per_node=4 train.py --config configs/bob.json
Ci-dessous, nous montrons le point de départ et le résultat final. Références à la droite.


Les résultats seront stockés dans le dossier out . Les modèles Spot et Bob ont été créés et libérés dans le domaine public par Keenan Crane.
Exemples inclus
spot.json - Extraction d'un modèle 3D du modèle SPOT. Géométrie, matériaux et éclairage à partir d'observations d'images.spot_fixlight.json - Identique à ci-dessus mais en supposant l'éclairage d'environnement connu.spot_metal.json - Exemple d'apprentissage conjoint des matériaux et l'éclairage d'environnement à haute fréquence pour présenter un sommet fendu.bob.json - Exemple simple d'un modèle de genre 1. Nous incluons également des configurations ( nerf_*.json , nerd_*.json ) pour reproduire les principaux résultats du papier. Nous comptons sur des ensembles de données tiers, qui sont gracieuseté de leurs auteurs respectifs. Veuillez noter que les licences individuelles s'appliquent à chaque ensemble de données. Pour télécharger et prétraiter automatiquement tous les ensembles de données, exécutez le script download_datasets.py :
activate dmodel
cd data
python download_datasets.py
Vous trouverez ci-dessous plus d'informations et d'instructions sur la façon d'installer manuellement les ensembles de données (au cas où le script automatisé échoue).
Nerf Synthetic Dataset Notre vue d'interpolation Résultats Utilisez l'ensemble de données synthétique à partir du papier Nerf d'origine. Pour l'installer manuellement, téléchargez l'archive de jeu de données synthétique Nerf et déziptez-le dans le dossier nvdiffrec/data . Ceci est requis pour exécuter l'une des configurations nerf_*.json .
Ensemble de données NERD Nous utilisons des ensembles de données à partir du papier nerd, qui dispose d'une photogrammétrie réelle et de masques de segmentation inexacts (annotés manuellement). Clone les ensembles de données NERD à l'aide de Git et de les redimensionner à 512 x 512 pixels Résolution à l'aide du script scale_images.py . Ceci est requis pour exécuter l'une des configurations de 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
Démarrer un conteneur Docker interactif: docker run --gpus device=0 -it --rm -v /raid:/raid -it nvdiffrec:v1 bash
Docker détaché: docker run --gpus device=1 -d -v /raid:/raid -w=[path to the code] nvdiffrec:v1 python train.py --config configs/bob.json