一、环境部署
1、Visual Studio 2019 安装
Visual Studio 2019 预览版发行说明 | Microsoft Docs
从上述链接下载Community 2019版并安装,界面如下
选择C++选项,右侧复选框默认,点击安装。安装完成后重启系统。
2、CUDA-Toolkit 安装
输入cmd打开命令行,输入下述命令:
nvcc --version
若报错,则未安装CUDA-Toolkit,进行如下步骤。
在命令行中输入:
nvidia-smi
返回下列表格:
右上角的CUDA Version:11.6表示GPU支持的最高CUDA版本为11.6。(若没有返回这个表格,可能是因为为安装显卡驱动,则需先安装显卡驱动)
下面进入链接进行CUDA-Toolkit下载:CUDA Toolkit Archive | NVIDIA Developer
文件大小大概是2.5G左右,耐心等待即可。
按照官方的步骤,下载完成后,双击这个可执行文件,然后跟着步骤来就好了。
点击OK
同意并继续
这里选择精简的话,将会覆盖你原来的驱动。如果你不想这样,请选择自定义。
继续安装,等待安装完成。安装完成后需要添加环境变量到你的Path
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6\bin
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6\libnvvp
重启系统之后,打开命令行输入nvcc --verison ,返回如下:
恭喜你,CUDA安装成功。
下面检验CUDA是否可以正常使用:
cd C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6\extras\demo_suite
输入deviceQuery.exe,返回如下:
输入bandwidthTest.exe,返回如下:
则CUDA检验通过!
至此,CUDA-Toolkit安装完成!
3、OpenEXR 安装
https://www.lfd.uci.edu/~gohlke/pythonlibs/#openexr
进入链接下载
下载后,先放着,后续我们pip时会用到。
4、Anaconda 安装
去官网下载:Anaconda | Anaconda Distribution
下载windows版本!!!
下载完成后打开安装程序
此处选择Just Me,Next
尽量装在C盘(若在ubuntu系统进行安装,不要安装在root下,建议安装在home下),以避免一些不必要的错误!
这里第一个选项是指将安装路径自动添加到环境变量中(不推荐)
我选择第二个选择,后续手动进行环境变量的添加即可。
Install
Finish!!
下面开始进行anaconda环境变量的配置:
搜索环境变量
点击环境变量:
双击Path:
将下列路径添加到环境变量(具体路径自己去查):
C:\Anaconda
C:\Anaconda\Scripts
C:\Anaconda\Library\mingw-w64\bin
C:\Anaconda\Library\bin
添加完之后,打开命令行输入conda,返回如下信息:
Anaconda安装完成!!!
5、OptiX 安装
前往官网下载:NVIDIA OptiX™ 光线追踪引擎 | NVIDIA Developer
选择Windows进行下载,instant-ngp要求OptiX版本必须在7.3及以上,这里选择7.5版本。
点击下载后,会要求注册会员,按照步骤加入即可。
下载完成后,按安装向导指引进行安装。
安装完成后,我们需要进行环境变量的配置:
6、相关文件复制(将CUDA下的部分文件复制到VS2019下)
copy from:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6\extras\visual_studio_integration\MSBuildExtensions
to:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\BuildCustomizations
二、Instant-ngp 部署
1、创建文件夹
这里我在C盘下创建一个名为ngp的文件夹,并进入到其中
mkdir ngp
cd ngp
2、安装 git
去下面链接下载:Git - Downloading Package
按照安装引导进行安装
将git添加到环境变量中
参考这篇博客:Git安装及环境配置(Windows10)_Agolonely的博客-CSDN博客_git windows安装配置
3、克隆项目(有坑)
git clone --recursive https://github.com/nvlabs/instant-ngp
若报错:fatal: unable to access ‘https://github.com/.......‘: OpenSSL SSL_read: Connection was reset
则需要解除ssl验证,使用以下命令:
git config --global http.sslVerify "false"
再次进行克隆即可。
若报错:error: RPC failed; curl 56 OpenSSL SSL_read: Connection was reset, errno 10054
则需要修改git的缓存大小为100M,使用以下命令:
git config --global http.postBuffer 100M
再次进行克隆即可。、
(公钥和密钥这里不用管,一般往github上上传的时候才需要用)
但是由于某211高校垃圾的网络,上述办法都不能解决问题,后面使用魔法,换源之后,去gitee上也不可以(应该是instant-ngp依赖源太多了)。
最后,找了在香港的师兄帮忙下载后传了过来..........
(晚上蹲坑的时候意外发现 淘宝可以代理下载 1G文件1米)
4、项目编译
使用下列命令检查python版本是否为3.9
python --version
若不是3.9,则使用下面命令进行安装:
conda install python=3.9
安装完成后,打开VS2019的命令行:
进入instant-ngp文件夹
使用下面命令进行编译:
cmake . -B build
cmake --build build --config RelWithDebInfo -j 16
这里就已经编译完成啦
5、虚拟环境的构建
首先,我们需要下载COLMAP
进入链接:Release 3.7 · colmap/colmap · GitHub
滑到最下面,选择下面这个进行下载(windows且已安装CUDA):
下载完成后,解压instant-ngp根目录下,并重命名为COLMAP
并将其添加到环境变量Path中去:
C:\ngp\instant-ngp\COLMAP
打开Anaconda3命令行
依次使用下列命令建立环境、激活环境,安装所需包:
conda create -n ngp python=3.9
conda activate ngp
pip install -r requirements.txt
下载过程中遇到了下载失败的问题(call timeout),重新用管理员身份打开anaconda,再次运行pip即可。
如果pip下载太慢,可以使用国内的镜像源进行加速,例如使用清华镜像源进行加速:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple package_name
进行OpenEXR的下载:
pip install pyexr
但是在我的机器上会失败,这时候就要用到之前下载的轮子了。将之前下载的轮子放在instant-ngp根目录下,然后执行命令:
pip install OpenEXR-1.3.2-cp39-cp39-win_amd64.whl
安装完成!
6、自定义数据集的构建
我们首先进入instant-ngp的根目录,将图片文件夹放到data文件夹下。如下:
然后运行如下命令(只需要把后面的image path改成自己的就行):
python scripts/colmap2nerf.py --colmap_matcher exhaustive --run_colmap --aabb_scale 16 --images <image/path>
即可在instant-ngp根目录下获得transform.json文件:
然后把文件夹结构改成如下所示:
如果显卡显存不足,可以在transform.json文件中改变aabb_scale的大小,其值越小对显卡的要求越低,但是分辨率会下降,且必须是2的整数次幂(1,2,4,8,16.........)。
然后运行如下命令进行三维重建:
<path_to_your_ngp>\instant-ngp\build\testbed.exe --scene data/<image_set_name>
重建结果如下:
但是此次部署采用的数据集是经过背景扣除后的变压器照片,在进行相机定位时,由于缺乏背景信息和变压器的对称性,导致重建出来变压器的一面。
之后单独用COLMAP进行相机的定位,结果如下:
可以看到,相机在定位时,其位姿饶了一圈又返回了。这里用到了增量式SFM的原理,后面会出相关内容的博客。
对于COLMAP的使用也会单独出一篇博客。