nerfstudio以及相关使用记录(长期更新)

NeRFStudio 是NeRF/3DGS研究和开发的集成平台。 提供了一个用户友好的界面和一系列工具,帮助研究人员和开发者更高效地构建、训练和评估 NeRF 模型。以前使用的时候用完就丢一边了,没有注意记录,现在有一个工程调用了nerfstudio,部署之余顺便专门写一篇来做完整的记录,也使他变得清晰。

官方主页:nerfstudio

GitHub主页:GitHub - nerfstudio-project/nerfstudio: A collaboration friendly studio for NeRFs

1.Ubuntu22下的部署以及报错

NeRFStudio部署是很令人头疼的事情,问题比较琐碎,必须使用NVIDIA显卡以及cuda。

1.1conda创建虚拟环境

python版本大于等于3.8,我这里使用了3.11

bash 复制代码
conda create --name nerfstudio -y python=3.11
conda activate nerfstudio
pip install --upgrade pip

1.2依赖:tiny-cuda-nn

NeRFStudio依赖tiny-cuda-nn依赖cuda,cuda的安装这里不再赘述,tiny-cuda-nn的主页在这里:GitHub - NVlabs/tiny-cuda-nn: Lightning fast C++/CUDA neural network frameworkLightning fast C++/CUDA neural network framework. Contribute to NVlabs/tiny-cuda-nn development by creating an account on GitHub.https://github.com/NVlabs/tiny-cuda-nn

1.cuda11.8

对于cuda11.8的版本,官网主页以及给出了示范:

bash 复制代码
pip install torch==2.1.2+cu118 torchvision==0.16.2+cu118 --extra-index-url https://download.pytorch.org/whl/cu118

conda install -c "nvidia/label/cuda-11.8.0" cuda-toolkit
pip install ninja git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch

2.cuda12.*

我的cuda版本当前是12.5 ,对于cuda12应该都是兼容的,所以直接进入tiny-cuda-nn的主页安装。这里作者列出来了必须要有的工具:

然后对于cuda要把路径添加进终端或者.bashrc中,我选择了添加到终端,不动系统的设置,即在终端中输入:

bash 复制代码
export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"
#PATH 是一个环境变量,用于指定系统在哪些目录中查找可执行文件。将 CUDA 的可执行文件目录(通常是 /usr/local/cuda/bin)添加到 PATH 变量中。$PATH 表示现有的 PATH 值,这样新的路径会追加到现有路径的前面,确保系统首先查找 CUDA 的工具。
#LD_LIBRARY_PATH 是一个环境变量,用于指定系统在哪些目录中查找共享库(动态链接库)。这行命令将 CUDA 的库文件目录(通常是 /usr/local/cuda/lib64)添加到 LD_LIBRARY_PATH 变量中。$LD_LIBRARY_PATH  表示现有的 LD_LIBRARY_PATH 值,这样新的路径会追加到现有路径的前面,确保系统首先查找 CUDA 的库。

我的cuda是一个软链接,link到了cuda-12.5,这里路径只要输入一个电脑里有的cuda12路径就行。

然后clone并且安装:

bash 复制代码
$ git clone --recursive https://github.com/nvlabs/tiny-cuda-nn
$ cd tiny-cuda-nn

接着cmake编译就完了:

bash 复制代码
/tiny-cuda-nn$ cmake . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo
/tiny-cuda-nn$ cmake --build build --config RelWithDebInfo -j

另外,还有一个PyTorch extension,就是cudnn那一块,可装可不装,按实际来,我安装了

bash 复制代码
pip install git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch

到这里,tinycuda就安装编译好了。下面的过程中遇到的坑:里面有的是部署其他工程时,需要安装nerfstudio,在过程中遇到的问题,也是一样的。

报错1:执行****git clone --recursive https://github.com/nvlabs/tiny-cuda-nn的时候

OSError: Unknown compute capability. Specify the target compute capabilities in the TCNN_CUDA_ARCHITECTURES environment variable or install PyTorch with the CUDA backend to detect it automatically.

这个错误是由于tiny-cuda-nn在安装时无法自动检测到CUDA架构(compute capability)导致的。tiny-cuda-nn需要知道GPU的CUDA架构才能正确编译。需要手动设置TCNN_CUDA_ARCHITECTURES环境变量,指定GPU的CUDA架构。

首先,查找你的GPU的CUDA架构版本:

nvidia-smi --query-gpu=compute_cap --format=csv

然后,根据查到的CUDA架构版本,在安装前设置环境变量。例如,如果你的GPU是NVIDIA RTX 3090,其CUDA架构是8.6,那么在当前终端里设置该变量:

export TCNN_CUDA_ARCHITECTURES=86

如果你不确定你的GPU的CUDA架构,或者想支持多种架构,可以设置多个值,用分号分隔。例如:export TCNN_CUDA_ARCHITECTURES="75;80;86"

报错2:执行git clone --recursive https://github.com/nvlabs/tiny-cuda-nn的时候

OSError: CUDA_HOME environment variable is not set. Please set it to your CUDA install root.

这个问题就是一开始的cuda路径没有成功添加进去,重新添加一下,像前面一样。添加好可以验证一下:echo PATH以及echo LD_LIBRARY_PATH

如果你确定确实添加进去了,但是,还是报这个错误,那就要检查你的pytorch版本是不是cpu的,如果是,赶紧卸了重新装吧!我这里就是犯了这样的错误,来来回回检查不知道哪里错了,因为使用了conda安装的pytorch,他先是给我装了cuda-toolkit=12.2(我本来系统就带了两个cuda版本11和12都有),然后又装了cpu版本的pytorch,真的服了。。。还是少用conda安装这两样相关的东西,里面的兼容逻辑非常神奇,不是大神不建议碰。

bash 复制代码
python

>>>import torch
>>>torch.cuda.is_available()
#如果是cpu版本,会输出False

如果不知道你的cuda路径,可以找一下:

bash 复制代码
which nvcc
whereis nvcc

报错3:执行cmake . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo

/home/lee/miniconda3/envs/relight_nerfstudio/bin/x86_64-conda-linux-gnu-c++:

No such file or directory

这是编译的过程中找不到g++,在conda环境中安装一个即可

报错4:执行pip install git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch

/home/lee/miniconda3/envs/relight_nerfstudio/compiler_compat/ld: cannot find -lcuda: No such file or directory

collect2: error: ld returned 1 exit status

error: command '/home/lee/miniconda3/envs/relight_nerfstudio/bin/x86_64-conda-linux-gnu-c++' failed with exit code 1

这个报错是编译过程中的,很长,大概有700行,ld 负责将目标文件和库文件链接在一起,生成最终的可执行文件或共享库。-lcuda 是链接器的一个选项,表示需要链接 libcuda.so 库。链接器会在默认的库路径(如 /usr/lib、/usr/local/lib 等)中查找这个库。所以这个报错是在编译过程中,链接器(ld)在尝试链接 libcuda 库时失败了,无法找到 libcuda.so 文件。

在一开始指定LD_LIBRARY_PATH的路径下,我的在这里也就是:/usr/local/cuda/lib64,在这里面寻找libcuda.so,没有找到,所以报错,但是我在安装目录中寻找了libcuda.so,发现它在又一级目录下面:/usr/local/cuda/lib64/stubs/libcuda.so。。。

所以我直接简单粗暴创建软链接放在/usr/local/cuda/lib64下:

bash 复制代码
sudo ln -s /usr/local/cuda/lib64/stubs/libcuda.so /usr/local/cuda/lib64/libcuda.so

最后重新执行,成功编译!

1.3安装 nerfstudio

推荐安装编译最新的

bash 复制代码
git clone https://github.com/nerfstudio-project/nerfstudio.git
cd nerfstudio
pip install --upgrade pip setuptools
pip install -e .

到这里nerfstudio安装完毕,这一步安装还是很顺利的,80%的问题基本都在编译tinycuda的过程中。

2.nerfstudio中的SfM

3.3DGS相关的重建

相关推荐
byxdaz10 分钟前
OpenCV实现图像分割与无缝合并
人工智能·opencv·计算机视觉
CASAIM15 分钟前
3D打印VS传统注塑:小批量生产如何选择?
3d·自动化
Firmin12345625 分钟前
使用Flask和OpenCV 实现树莓派与客户端的视频流传输与显示
python·opencv·flask
时光旅人01号40 分钟前
神经网络微调技术解析
人工智能·深度学习·神经网络
rockmelodies40 分钟前
基于Python的端口扫描器和目录扫描工具实现方案,结合机器学习进行指纹识别
人工智能·python·机器学习
是十一月末1 小时前
Opencv之掩码实现图片抠图
人工智能·python·opencv·计算机视觉·图片识别
阿_星_1 小时前
解决pip install 出现error: subprocess-exited-with-error的问题
开发语言·python·pip
AI技术控1 小时前
计算机视觉算法实战——遗留物检测检测(主页有源码)
人工智能·算法·计算机视觉
Hum8le1 小时前
CTF题目《SSRFMe》(网鼎杯 2020 玄武组)WriteUp
redis·python·安全·web安全·php
AI技术控1 小时前
计算机视觉算法实战——花卉识别(主页有源码)
人工智能·算法·计算机视觉