项目介绍:nvdiffrec
nvdiffrec 是一款由 NVIDIA 开发的创新项目,旨在从多视角图像中优化拓扑、材质和光照,提取三角形 3D 模型。其技术细节已在论文《从图像中提取三角形 3D 模型、材质和光照》中做出详尽描述。这个项目基于 NVIDIA 的 Kaolin 库进行开发,进一步支持可微分的四面体行进算法,为 3D 深度学习研究提供了有力的加速工具。
最新动态
- 2023-10-20:nvdiffrec 新增了一个基于 slangpy 编写的 renderutils 库版本,以利用 slang 的自动微分能力,替代之前基于 CUDA 扩展的手动前向和后向传递方式。这样大大简化了代码复杂性,同时保持了以往的运行性能。
- 2023-09-15:项目中加入了对 FlexiCubes 等值面技术的支持。用户可以查看
configs/bob_flexi.json
配置文件来了解其使用示例,并参考 FlexiCubes 文档获取更多信息。
安装指南
要运行 nvdiffrec,用户需要安装 Python 3.6+、VS2019+、Cuda 11.3+ 和 PyTorch 1.10+。官方推荐使用 Anaconda 环境,在其中 nhvdiffrec 支持下列设置。
在 Windows 上的一次性设置步骤:
- 安装 Cuda 工具包,确保与所安装的 PyTorch 版本兼容。如安装 Cuda 11.6,开启 Anaconda 命令行并输入以下命令:
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
示例
项目推荐在高端 NVIDIA GPU 上运行,内存充足时表现最佳。在中端 GPU 上需要调小 .json
文件中的批量大小参数。以下是一个简单的生成环面模型的示例:
python train.py --config configs/bob.json
在 Windows 上可视化训练过程:
python train.py --config configs/bob.json --display-interval 20
项目也支持多 GPU 运行(仅限 Linux,实验性功能):
torchrun --nproc_per_node=4 train.py --config configs/bob.json
数据集
nvdiffrec 项目中附带了一些配置文件,以便用户重现论文中的主要结果。为方便使用,项目提供了一个 download_datasets.py
脚本用于自动下载和预处理所有数据集。用户也可以手动下载以下数据集:
- NeRF 合成数据集:请从 NeRF 论文的源代码库下载合成数据集。
- NeRD 数据集:使用 NeRD 论文中提供的数据集,需要手动调整至 512x512 像素的分辨率。
服务器使用(通过 Docker)
-
构建 Docker 镜像:
cd docker ./make_image.sh nvdiffrec:v1
-
启动一个交互式 Docker 容器:
docker run --gpus device=0 -it --rm -v /raid:/raid -it nvdiffrec:v1 bash
通过此项目,研究人员和开发者能够更有效地探索和开发基于图像的 3D 模型构建技术。