Windows系统下的nerfstudio复现
nerfstudio简介
nerf自从出世之后便有了各种各样的变体,比如mip-nerf,mip-nerf306等等。2023年加州大学伯克利分校(BAIR)的研究人员开发了名为 Nerfstudio 的 Python 框架,用于神经辐射场(NeRF)的开发。
配置环境
目前,因为在某实景三维中心实习需要用到nerfstudio完成项目,所以经历了这两天的环境配置踩坑之后将整个配置流程写在这里,以供有需求的人使用。Windows系统和Ubuntu系统下的安装还是有些差别的,为了方便项目开发,我单位采用Windows系统进行环境配置。配置环境中的命令,部分来自GitHub上原作者给出的,部分来此CSDN上一些老哥分享的。配置过程中,最难搞的是tinycudann的配置,我查看了很多方法,又根据自身电脑配置,将符合自己情况且可行的方法分享出来。
- 虚拟环境创建
虚拟环境中使用的torch和cuda版本如下:
python 3.8
CUDA 11.8
torch 2.1.2
torchvision 0.16.2
conda create --name nerfstudio -y python=3.8 # 创建名为nerfstudio的虚拟环境,python版本为3.8
conda activate nerfstudio # 激活该虚拟环境
pip install --upgrade pip # 将pip进行更新
进行pip更新的时候报错如图1:
仔细查看报错信息:‘ERROR: To modify pip, please run the following command: E:\Anaconda\envs\ns\python.exe -m pip install --upgrade pip’,那么我们重新执行命令:
E:\Anaconda\envs\ns\python.exe -m pip install --upgrade pip
更新完pip之后,接着需要安装torch和torchvision。使用如下命令行:
pip install torch==2.1.2+cu118 torchvision==0.16.2+cu118 --extra-index-url https://download.pytorch.org/whl/cu118
如果顺利的话,这里会正常运行,如果您也是用的和我一样的破电脑,那就会报错,如图2:
报错信息:Could not fetch URL https://download.pytorch.org/whl/cu118/torch/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host=‘download.pytorch.org’, port=443): Max retries exceeded with url: /whl/cu118/torch/ (Caused by SSLError(“Can’t connect to HTTPS URL because the SSL module is not available.”)) - skipping
如果你的电脑上有VPN的话,那就把VPN代理打开重新运行该命令,如果还是不行,那就直接将torch和torchvision包下载到本地手动安装。根据安装命令,我们导航到网址:https://download.pytorch.org/whl/cu118
(图3):
在网页上我们可以找到torch和torch vision的入口,点击torch进去下载我们需要的包,直接在该页面上ctrl+f
,然后输入2.1.2+cu118
,可以发现搜索到了以下几个包:
因为操作系统为Windows x64,环境配置为CUDA11.8、python3.8,所以我们下载的包名称为torch-2.1.2+cu118-cp38-cp38-win_amd64.whl
;同样的方法我们在torchvision的页面上搜索0.16.2+cu118
,选择下载torchvision的包名称为torchvision-0.16.2+cu118-cp38-cp38-win_amd64.whl
。
下载完之后,我们开始手动配置torch和torchvision,在自己的虚拟环境中,使用如下命令行:
cd path/to/your/download files # 将文件切换到你的下载路径
# 比如我的下载路径是C:\Users\vip\Downloads
# 那么我就要使用命令行cd C:\Users\vip\Downloads切换到下载文件中
pip install torch-2.1.2+cu118-cp38-cp38-win_amd64.whl
# 使用命令安装torch
pip install torchvision-0.16.2+cu118-cp38-cp38-win_amd64.whl
# 使用命令行安装torchvision
接下来安装cudatoolkit相关扩展,虽然我们没有直接安装CUDA11.8,但是使用如下命令行会自动安装相关的包以匹配该命令中的目标安装包:
conda install -c "nvidia/label/cuda-11.8.0" cuda-toolkit
- tinycudann编译安装
好的,接下来就是最难安装的tinycudann了,使用GitHub上原作者给的如下命令行:
pip install ninja git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch
虽然这里看起来是安装pip install ninja
,但其实需要安装的是tinycudann,即使用conda list
已经看到ninja成功安装了,但如果没有装上tinycudann还是跑不动。如果你是天选之子的话,那么这里应该是可以顺利进行的,但如果没有顺利进行的话(图4),那说明老天没开眼没把咱选上。
如果是因为连接超时的话,那可以把VPN代理打开试一试,如果没用咱就仍然下载到本地安装。根据命令行中的
git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch
,我们可以分析得到我们需要拉取的目标仓库是https://github.com/NVlabs/tiny-cuda-nn
,而我们需要安装的仓库是#subdirectory=bindings/torch
。我们直接将整个tiny-cuda-nn包从GitHub上zip download下来。然而,直接下载包会发现fmt文件夹和cutlass文件夹都是空的,所以我们还要将这两个库下载并替换到tinycudann的包中,具体操作我借鉴了这位博主的这篇博客:【深度学习】【三维重建】windows11环境配置tiny-cuda-nn详细教程。
【tinycudann的下载地址】——【fmt的下载地址】——【cutlass的下载地址】,下载好之后,做如下替换(图5,图源于所借鉴博客),并记住tinycudann的包所在位置路径:
好的,到这一步我们所需要的安装包就准备好了,接下来对tinycudann进行编译,在虚拟环境中使用命令行如下:
cd path/to/tinycudann包/tiny-cuda-nn/bindings/torch # 切换到你的tinycudann包中torch所在位置
python setup.py install # 运行编译命令
在运行python setup.py install
的时候,我的环境出现报错AttributeError: module 'importlib_metadata' has no attribute 'MetadataPathFinder'
,如图6所示:
这意味着
importlib_metadata
坏了或者是没安装,使用conda list
查看之后,发现是没安装,运行命令行安装该包;
pip install importlib_metadata
再次运行之后报错如图7,RuntimeError: Could not locate a supported Microsoft Visual C++ installation
意思是找不到Visual C++编译器的位置:
查阅了其他大佬的文章才知道tinycudann编译之前需要安装vs2019或者vs2022,如果没有安装的话在执行python setup.py install
之后会报错。没有安装VS2019或者VS2022的话,请参考文章【安装tiny-cuda-nn时报错RuntimeError: Could not locate a supported Microsoft Visual C++ installation】以及【复现nerfstudio并训练自己制作的数据集】,如果安装了却依然报同样错误的,说明可能是环境变量未配置,也请参照该文章。
然后我重新运行python setup.py install
,结果仍然报错,如图8:
内容很多,我查看了一下里面报错的信息有FAILED: E:/Anaconda/envs/ns/Lib/site-packages/tiny-cuda-nn-master/bindings/torch/build/dependencies/fmt/src/format.obj
、E:\Anaconda\envs\ns\Lib\site-packages\tiny-cuda-nn-master/dependencies/fmt/include\fmt/format-inl.h(11): fatal error C1083: 无法打开包括文件: “algorithm”: No such file or directory
、FAILED: E:/Anaconda/envs/ns/Lib/site-packages/tiny-cuda-nn-master/bindings/torch/build/dependencies/fmt/src/os.obj
、E:\Anaconda\envs\ns\Lib\site-packages\tiny-cuda-nn-master/dependencies/fmt/include\fmt/os.h(11): fatal error C1083: 无法打开包括文件: “cerrno”: No such file or directory
、E:\Anaconda\envs\nerfstudio\include\crt/host_config.h(231): fatal error C1083: 无法打开包括文件: “crtdefs.h”: No such file or directory
等等,报错信息很多,我最开始以为是缺少了os.obj、format.obj、cpp_api.obj等等文件,但后来查阅了很久才发现不是。真正原因是tinycudann需要管理员方式打开"x64 Native Tools Command Prompt for VS 2022"执行指令。直接在Windows下方的搜索栏打开该vs终端(图9)
打开VS2022终端之后,输入以下命令行:
cd /d path\to\your\tiny-cuda-nn-master\bindings\torch # 切换到你的tinycudann包的所在路径
activate your_virtual_env # 激活你的虚拟环境
python setup.py install # 运行安装命令
当我执行了这些命令之后,发现和图9报一样的错,说明还是有地方没弄对。后来我搜索了一下为什么会报错fatal error C1083: “crtdefs.h”: No such file or directory
,找到了这位博主的文章【Windows编译tiny-cuda-nn时出现fatal error C1083: “crtdefs.h”: No such file or directory】,可能是因为安装的VS设置的编译项默认为x86,与当前系统的CUDA的位数不一致。我所使用电脑为x64,应该先将路径Community/VC/Auxiliary/Build/vcvarsall.bat
下的开发环境配置为x64参数。经过everything搜索发现有两个路径的D:\Visual Studio2022(64bit)\IDE\VC\Auxiliary\Build\vcvarsall.bat
和D:\Visual Studio2022(64bit)\BuildTools\VC\Auxiliary\Build\vcvarsall.bat
,最终两个都试了之后,发现后者才是需要被配置的。还是在VS2022终端中输入:
"D:\Visual Studio2022(64bit)\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" x64 # 将VS开发环境配置为x64的
python setup.py install # 执行编译命令
等一会儿之后,出现Installed e:\anaconda\envs\ns\lib\site-packages\tinycudann-1.7-py3.8-win-amd64.egg Processing dependencies for tinycudann==1.7 Finished processing dependencies for tinycudann==1.7
表示编译成功(图10)!
- nerfstudio的安装
tinycudann编译好之后,最难做的也就弄完了,接下来我们安装nerfstudio,GitHub上原作者给出了两种方法,咱采用最简单的那种:
pip install nerfstudio
这里安装nerfstudio如果网速不佳的话会等很久很久,等安装好过后,就只有ffmpeg、colmap、hloc需要安装了。
- 数据下载和测试
按道理来说,到这一步咱就可以直接训练了,所以使用作者给出的命令来下载数据测试一下:
# Download some test data:
ns-download-data nerfstudio --capture-name=poster
结果依然超时没法下载,想着可以自己根据报错找出URL从网上手动下载吧,参考了一下这篇文章【谷歌直链下载云盘数据集,使用谷歌云盘生成直接下载的url,示例: NeRFStudio-nerfacto默认训练数据集poster下载,nerfstudio 数据集下载链接】结果却是404找不到网址。最后从别人那里找到了分享数据,但是需要会员才能下载,这就很烦。明明人家是开源数据,好家伙一放在这儿就变成了收费内容,damn这太知网了!!!!我将该测试数据以链接的形式贴在文章的末尾,有需要的自取!
弄好数据之后,运行作者给的命令行:
# Train model
ns-train nerfacto --data data/nerfstudio/poster
好的,单位的破电脑稳定输出给我来个报错(图11),ImportError: DLL load failed while importing _ssl: 找不到指定的程序。
:
网上给出了很多解决方法,各位可以对照着试一试,比如:
1.环境变量配置有问题的,参照这篇文章【importerror: dll load failed while importing _ssl: 找不到指定的程序。问题解决记录】
2.文件缺失,需要复制替换的,参照【ImportError: DLL load failed while importing _ssl: 找不到指定的程序】
3.需要重装openssl的【参考这篇】
4.需要更改python版本的,看看这个【解决fastapi项目使用conda新创建的虚拟环境报错:ImportError: DLL load failed while importing _ssl: 找不到指定的模块】
我将网上的方法都试过了,并且重装两次虚拟环境,都没有用。后来单位这边催我,只好先将后面的包安装了,没想到在装完colmap之后这个问题自己就解决了:
# 安装ffmpeg
conda install -c conda-forge ffmpeg
# 安装colmap
conda install -c conda-forge colmap
conda install -c conda-forge mpir
# 安装hloc
cd .. # 切换到上级目录
git clone --recursive https://github.com/cvg/Hierarchical-Localization/
cd Hierarchical-Localization/ # 克隆仓库
python -m pip install -e . # 安装编译
安装完之后,就可以正常运行测试数据了,只是需要下载一个权重,等权重下载好出现图12的样子就说明已经可以了。
点击图12中的http://localhost:7007
之后,出现web界面(图13):
Acknowledge
好的,到这里说明nerfstudio已经复现成功了!网上有很多老哥都分享了自己的安装过程,其实大多数操作都相同,只是因为大家各自所使用的环境、系统等等因素不同,需要我们自己动态地对该过程出现的问题进行调整。我只是众多可行方法中的一种,大家选择合适自己的方法即可,感谢文中所引用文章作者做出的贡献!
Conclusion
搭建好环境之后,就需要将其应用到项目中了,后续我可能会继续更新如何将nerfstudio用于重建自己的数据集,以及记录我第一次实习经历和第一次项目落地经历。
Data Available
链接:https://pan.baidu.com/s/1jnRJ7fL-MOpnPFiAdkkzdA
提取码:x18r
下载好之后,请在你的nerfstudio项目文件夹中data/nerfstudio/poster
路径下,然后运行ns-train nerfacto --data data/nerfstudio/poster
。