3D视觉之三维重建Nerf实战:Ubuntu20.04部署instant-ngp 并利用自己的数据集训练 实现桌面场景的三维重建
本文详细介绍了在Ubuntu20.04系统上部署Instant-NGP并实现3D重建的完整流程。主要包括:1)安装系统依赖、NVIDIA驱动、CUDA工具包和CMake;2)编译Instant-NGP项目;3)数据准备与相机位姿生成;4)模型训练与结果导出。重点演示了如何利用自定义数据集,通过COLMAP获取相机参数并生成transforms.json文件,最终训练出高质量3D模型并导出为网格文件
前言
在计算机视觉以及自动驾驶领域,三维重建技术一直以来都是研究的热点之一。近年来,神经辐射场(NeRF)作为一种新兴的隐式三维场景表示方法,彻底改变了传统三维重建的技术路径。NeRF通过神经网络将三维场景表示为连续的辐射场函数,仅需输入稀疏的多角度图像,即可合成任意视角下的高清图像,实现照片级的三维重建效果。然而,传统NeRF方法训练速度缓慢,往往需要数天时间,限制了其实际应用范围。NVIDIA推出的Instant-NGP(Instant Neural Graphics Primitives)通过结合多分辨率哈希编码和轻量级神经网络,将训练时间从数天缩短到数秒或数分钟,同时保持了高质量的渲染效果。这一突破性进展使得NeRF技术在实际应用中的可行性大大增强。本文将以Ubuntu 20.04系统为平台,全面介绍Instant-NGP的部署流程,并重点演示如何利用自定义的桌面场景数据进行三维重建实战。通过本教程,读者将掌握从环境配置、数据准备到模型训练和结果导出的完整流程,为后续的科研和工程应用奠定基础。
一、部署instant-ngp
可参考原项目链接
https://github.com/NVlabs/instant-ngp
https://github.com/NVlabs/instant-ngp
1.安装系统依赖库
对于Ubuntu系统,打开终端,安装必要的系统开发工具和库文件
sudo apt-get update
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
2.配置NVIDIA驱动与CUDA工具包
2.1 检查并安装NVIDIA驱动
首先,验证您的GPU是否支持CUDA并且驱动是否已安装。在终端运行 nvidia-smi。如果该命令能正确输出显卡信息(如驱动版本、GPU型号),说明驱动已安装,如果未安装驱动,请根据您的Linux发行版进行安装
可通过系统工具自动安装合适的驱动。
sudo apt update
sudo apt install ubuntu-drivers-common
sudo ubuntu-drivers autoinstall # 自动推荐并安装合适的驱动
2.2 安装CUDA工具包
instant-ngp需要CUDA 10.2或更高版本,推荐安装CUDA 11.3至11.8之间的版本
访问 NVIDIA CUDA下载页。
https://developer.nvidia.com/cuda-toolkit-archive
https://developer.nvidia.com/cuda-toolkit-archive选择您的操作系统和架构,并选择runfile(local)安装方式。
在这里 我选的是cuda_11.6.0_510.39.01_linux.run 您可以作为参考

按照官网给出的命令进行安装。
wget https://developer.download.nvidia.com/compute/cuda/11.6.0/local_installers/cuda_11.6.0_510.39.01_linux.runsudo sh cuda_11.6.0_510.39.01_linux.run
在安装过程中,如果系统已安装较新的驱动,请务必取消勾选驱动安装选项,以避免冲突。
安装完成后,需要将CUDA路径添加到环境变量中。编辑您的shell配置文件(如 ~/.bashrc或 ~/.zshrc),在文件末尾添加以下行(请将/usr/local/cuda-11.6替换为您的实际CUDA安装路径)
export PATH="/usr/local/cuda-11.6/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-11.6/lib64:$LD_LIBRARY_PATH"
使环境变量生效:source ~/.bashrc。
验证安装:运行 nvcc --version检查CUDA编译器版本,运行 nvidia-smi确认驱动和GPU可被识别。
3.安装CMake
instant-ngp要求CMake版本为3.21或更高
通过包管理器安装(简单,但版本可能较旧):
sudo apt install cmake
安装最新版本(推荐):
如果包管理器提供的版本过低,可以从CMake官网下载预编译的二进制包进行安装。
访问 CMake官网下载页面
https://cmake.org/download/
https://cmake.org/download/下载适用于Linux x86_64的 .sh安装脚本(例如 cmake-3.29.0-linux-x86_64.sh)。
运行以下命令进行安装(以安装到 /usr/local为例):
chmod +x cmake-3.29.0-linux-x86_64.sh
sudo sh cmake-3.29.0-linux-x86_64.sh --prefix=/usr/local --skip-license
验证安装:cmake --version
4.编译instant-ngp
当所有环境准备好后,开始编译instant-ngp
4.1 克隆仓库
使用 --recursive参数确保同时克隆必要的子模块。
git clone --recursive https://github.com/nvlabs/instant-ngp
cd instant-ngp
4.2 使用CMake构建项目
cmake . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo
cmake --build build --config RelWithDebInfo -j
-j参数表示并行编译以加快速度。如果内存不足导致编译失败,可以移除 -j参数。
如果CMake无法自动检测到CUDA,可以尝试显式指定CUDA编译器的路径:-DCMAKE_CUDA_COMPILER=/usr/local/cuda/bin/nvcc。
5.运行与验证
运行测试场景:在项目根目录下执行以下命令,如果能看到一个图形界面并开始训练狐狸的NeRF模型,说明安装成功
./instant-ngp ./data/nerf/fox/
二、利用自己的数据集实现3D重建
1.环境准备
系统与Python环境:确保已按照之前的部署指南,安装好CUDA、CMake等系统级依赖,并成功编译Instant-NNGP。接着,创建一个独立的Python环境来管理项目相关的库,避免版本冲突
# 使用Conda创建环境(可选,但推荐)
conda create -n ngp python=3.9
conda activate ngp
# 进入instant-ngp项目根目录,安装Python依赖
cd path/to/instant-ngp
pip install -r requirements.txt
2.数据准备
视频数据:如果使用视频,建议时长在1-2分钟,拍摄时保持设备稳定、匀速移动,确保场景静止且光线充足,避免模糊和过曝。你可以使用Instant-NGP自带的脚本直接从视频处理,它会自动抽帧并调用COLMAP。
图像序列:如果已有图片,请将所有图像放在一个文件夹(例如 data/my_object/images/)下。图像应清晰,并尽可能覆盖物体或场景的各个角度。
本次实验使用 Intel RealSense D405(其他录制设备也可实现)深度摄像头录制视屏,以俯视视角绕场景一周拍摄多视角RGB 图像。理论上,NeRF 相关方法需要的多视角图像应是以目标为中心的球形区域,但在本实验中,绕行一周所获得的多视角图像足以实现透明物体的重建。
3.生成相机位姿
这是最关键的一步,目的是通过COLMAP获取每张图片在空间中的位置和角度,并生成Instant-NGP所需的transforms.json文件。
从视频开始:如果你的数据是视频,一条命令即可完成从抽帧到生成transforms.json的全过程
# 在instant-ngp根目录下执行
# --video_in: 你的视频文件路径
# --video_fps: 每秒抽帧数,通常1-2即可,目标是获得50-150张有效图片[7](@ref)
# --aabb_scale: 对于真实场景,建议从32或16开始尝试,若背景重建不完整可增大(如64, 128)[1,7](@ref)
python scripts/colmap2nerf.py --video_in data/my_video.mp4 --video_fps 2 --run_colmap --aabb_scale 32
从图片序列开始:如果你已经准备好了图片。
# 在instant-ngp根目录下执行
# --images: 你的图片文件夹路径
python scripts/colmap2nerf.py --images data/my_object/images --run_colmap --aabb_scale 32 --colmap_matcher exhaustive
本次实验采用视频,可将视频放入instant-ngp的scripts文件夹中。使用项目中提供的 scripts/colmap2nerf.py脚本将自己的照片或视频转换为instant-ngp支持的格式。
python scripts/colmap2nerf.py --video_in your_video.mp4 --video_fps 2 --run_colmap --aabb_scale 16
执行成功后,会在你的数据目录(例如 data/my_object/)下生成 transforms.json 文件。这个文件包含了相机参数和图像路径等信息。

上图是运行代码后输出针对于每张图片的相机内外参的json文件。
上图是对拍摄的视频开始了抽帧的操作,并把图片最终存于images图片当中。
4.模型训练与导出
4.1 进行训练
你可以使用编译好的可执行文件进行带图形界面的训练,方便实时预览
# 在instant-ngp根目录下执行
./instant-ngp ./data/my_object/
对于无GUI的环境(如服务器),可以使用Python脚本
python scripts/run.py --mode nerf --scene ./data/my_object --save_snapshot saved/my_object.msgpack --train
或将json文件和images文件一起拖入instant-gpg.exe中,上图是渲染后的效果
4.2 导出Mesh模型
训练完成后,可以将学习的3D场景导出为PLY或OBJ格式的网格模型。点击Mesh it可以将渲染结果网格化,点击save it可以将网格结果保存为上图的obj文件。

4.3 结果可视化
可利用MeshLab 对生成的obj模型进行结果的可视化

总结
通过本文的实战演示,我们成功在Ubuntu 20.04系统上完成了Instant-NGP的部署,并利用自定义的桌面场景数据实现了高质量的三维重建。这一完整流程涵盖了环境配置、数据准备、相机位姿估计、模型训练和网格导出等关键环节,展现了Instant-NGP在实际应用中的强大能力。在整个实践过程中,有几个关键点值得特别注意:
- 数据质量至关重要:无论是使用视频还是图像序列,拍摄时的稳定性、覆盖度和光线条件直接影响最终的重建效果。避免运动模糊、确保场景覆盖完整是获取高质量重建结果的前提。
- 参数调优需耐心:
aabb_scale等参数对重建效果有显著影响,需要根据具体场景进行调整。对于桌面等小尺度场景,通常从较小的值(如16或32)开始尝试,如重建不完整再逐步增大。 - 硬件配置影响效率:Instant-NGP高度依赖NVIDIA GPU的并行计算能力,拥有较大显存和Tensor Core的GPU(如RTX 30/40系列)可以显著提升训练速度和模型复杂度。
- 重建结果可进一步应用:导出的网格模型可以在MeshLab、Blender等软件中进行后续编辑和优化,也可用于三维打印、虚拟现实等应用场景,拓展了其实用价值。
- 随着技术的不断发展,基于NeRF的三维重建方法在重建质量、速度和适用范围上都在持续改进。未来,结合高斯泼溅(Gaussian Splatting)等新兴技术,三维重建领域将迎来更多突破性进展。
掌握Instant-NGP这一强大工具,将为我们在计算机视觉和图形学领域的深入研究和应用开发提供重要支持。希望本教程能为读者在三维重建领域的学习和实践提供有力帮助,期待大家探索出更多创新应用!
更多推荐








所有评论(0)