没有复现成功,重新搞一个22.04的试试看,因为cuda的版本和pytorch不一样,导致后面的操作一直出错,但是总体的流程是没问题的
摘要
这是一个结合单目稠密SLAM和层次化体素神经辐射场的3D场景重建算法,能实时地用图像序列实现准确的辐射场构建,并且不需要位姿或深度输入。论文的核心思想是,使用一个单目稠密SLAM方法来估计相机位姿和稠密深度图以及它们的不确定度,用上述信息作为监督信号来训练NeRF场景表征。
参考【位姿估计_代码_开源复现】 在Ubuntu20.04安装并运行NeRF-SLAM-CSDN博客
一、下载NeRF源码
先下载最新的NeRF源码
https://github.com/ToniRV/NeRF-SLAM.git
二、安装Anaconda
Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
我安装了最新版本的https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2023.09-0-Linux-x86_64.sh
安装Anaconda3
bash Anaconda3-2022.10-Linux-x86_64.sh
(错误的做法,会导致ERROR1)他进去之后,要按回车,按了回车之后我不知道怎么办。第一次是第一次按回车,但是不行。然后第二次就ctrl+c,就出现了接受注意事项,输入yes就行。
后面发现正确的做法是:先按回车,一直按s,就可以下一页,然后就会出现‘yes’ or ‘no’,然后再按回车,就可以安装了。
三、加环境变量
sudo vim ~/.bashrc
//在弹出的文本末尾加上
//记得更改用户名
export PATH="/home/用户名/anaconda3/bin:$PATH"
原作者用的是gedit,我这里改为vim,我使用gedit回出现警告,后面会出现各种问题
每个人的文档都不是完全一样的,再文档的最后面加入即可。然后:wq保存退出,source一下让它生效。
source ~/.bashrc
//检验下安装成功没
conda --version
ERROR1
不出所料,出问题了
但是回过头去查看,想重新安装Anaconda的时候,又发现已经存在了
估计是一开始的安装,被我不小心按了ctrl+c导致,所以我把整个文件rm了,重新安装了一遍
ERROR2
安装Anaconda的时候,出现问题2
concurrent.futures.process._RemoteTraceback:
'''
Traceback (most recent call last):
File "concurrent/futures/process.py", line 387, in wait_result_broken_or_wakeup
File "multiprocessing/connection.py", line 256, in recv
TypeError: __init__() missing 1 required positional argument: 'msg'
'''
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "entry_point.py", line 69, in <module>
File "concurrent/futures/process.py", line 562, in _chain_from_iterable_of_lists
File "concurrent/futures/_base.py", line 609, in result_iterator
File "concurrent/futures/_base.py", line 446, in result
File "concurrent/futures/_base.py", line 391, in __get_result
concurrent.futures.process.BrokenProcessPool: A process in the process pool was terminated abruptly while the future was running or pending.
[5813] Failed to execute script 'entry_point' due to unhandled exception!
原因是:磁盘空间不足
解决方法:
VMware虚拟机Ubuntu 主分区 /dev/sda1 扩容_新建虚拟机/dev/sda重新分配主分区_liu137756的博客-CSDN博客
四、成功安装Anaconda
安装过程中,会有
我选择了yes,详情查看Linux安装anaconda3是否初始化的区别_初始化anaconda3-CSDN博客
//检验下安装成功没
conda --version
五、添加清华镜像源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
conda config --set show_channel_urls yes
六、安装依赖项
创建并激活虚拟环境
conda create -n NeRF_SLAM
conda activate NeRF_SLAM
ERROR3
错误:conda: error: argument COMMAND: invalid choice: 'activate' (choose from 'clean', 'compare', 'config', 'create', 'info', 'init', 'install', 'list', 'notices', 'package', 'remove', 'uninstall', 'rename', 'run', 'search', 'update', 'upgrade', 'build', 'content-trust', 'convert', 'debug', 'develop', 'doctor', 'index', 'inspect', 'metapackage', 'render', 'skeleton', 'repo', 'token', 'pack', 'verify', 'server', 'env')
原因:最新版anaconda,conda命令中把activate移除了
解决办法:
新命令:
source activate 环境名
退出环境还是用:
conda deactivate
七、安装pytorch
cuda对应的版本可以用nvcc -V查看
注意pytorch要下载cuda对应的版本(注意要在NeRF_SLAM下面安装,要不然会出现ERROR6)
// CUDA 11.7
conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia
//Pip install requirements:
pip install -r requirements.txt
安装过程中会出现:
The following packages will be SUPERSEDED by a higher-priority channel:
ca-certificates pkgs/main --> anaconda/pkgs/main
certifi pkgs/main --> anaconda/pkgs/main
conda pkgs/main --> anaconda/pkgs/main
Proceed ([y]/n)?
只是替换了源的优先等级。
ERROR4
ERROR: Could not open requirements file: [Errno 2] 没有那个文件或目录: 'requirements.txt'
解决办法:
1.需要先创建requirements.txt,方法:
sudo pip freeze > requirements.txt
2.重新执行命令:
sudo pip install -r requirements.txt
ERROR5
ERROR: Could not install packages due to an OSError: [Errno 2] 没有那个文件或目录: '/croot/aiobotocore_1682536655331/work'
手动删除requirement.txt文件中的下载链接
删除的办法可以参考EXCEL如何用查找替换清除特定符号后面的内容-百度经验 (baidu.com)
300多行删除确实太麻烦了,全选复制到excel里面,ctrl+f寻找,然后替换“ @ *”为“”就可以了
ERROR6
ERROR: Cannot install clyent==1.2.2 and conda-repo-cli==1.0.75 because these package versions have conflicting dependencies.
The conflict is caused by:
The user requested clyent==1.2.2
conda-repo-cli 1.0.75 depends on clyent==1.2.1
To fix this you could try to:
1. loosen the range of package versions you've specified
2. remove package versions to allow pip attempt to solve the dependency conflict
ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/topics/dependency-resolution/#dealing-with-dependency-conflicts
解决方法:修改clyent==1.2.1
ERROR7
成功了,但是warning了,
这个警告表明正在使用pip
以root
用户身份运行,这可能会导致权限问题和与系统包管理器冲突。为了避免这些问题,建议您使用虚拟环境(Virtual Environment)来管理Python包。
虚拟环境是Python的一种工具,它允许您在项目之间隔离不同的依赖关系,以及在项目中使用特定版本的包,而不会影响系统范围的Python安装。
就是因为我没有进入虚拟环境,详情查看ERROR3,如何进入虚拟环境
八、编译安装gtsam
先下载https://github.com/ToniRV/gtsam-1.git
然后替换掉NeRF_SLAM/thirdparty目录下的gtsam,改好名字,gtsam
pip install -r ./thirdparty/gtsam/python/requirements.txt
要先安装Cmake版本3.22以上的,参考 九、编译ngp
然后编译:
cmake ./thirdparty/gtsam -DGTSAM_BUILD_PYTHON=1 -B build_gtsam
cmake --build build_gtsam --config RelWithDebInfo -j2
cd build_gtsam
make python-install
cd python
python setup.py install
这里要等很久,耐心等待
九、编译ngp
要求Cmake版本在3.22以上,参考这篇博客
安装cmake3.22.6,https://cmake.org/files/v3.22/cmake-3.22.6-linux-x86_64.tar.gz,国内源:Index of /files (cmake.org)
删除旧的版本
sudo apt autoremove cmake
ERROR8(有4种cmake的错误)
error8.1 bash:/usr/bin/cmake:是一个目录
error8.2 bash:/usr/bin/cmake:没有那个文件或目录
error8.3 bash:/usr/bin/cmake:符号连接的层数过多
error8.4 ln:无法创建符号链接‘/usr/bin/cmake’:文件已存在
删除,替换为新的cmake过程中,出现的问题解决方法如下
我下载的NeRF_SLAM没有instant-ngp,所以我去作者网站自己下载一个:https://github.com/ToniRV/instant-ngp.git
还是一样,放进去NeRF_SLAM/thirdparty里面,替换掉原来的文件,记得改名字
然后,进入到NeRF_SLAM,运行以下命令
cmake ./thirdparty/instant-ngp -B build_ngp
cmake --build build_ngp --config RelWithDebInfo -j2
ERROR9
CMake Error at /home/zzq/slam/cmake-3.22.6-linux-x86_64/share/cmake-3.22/Modules/CMakeDetermineCUDACompiler.cmake:179 (message):
Failed to find nvcc.
Compiler requires the CUDA toolkit. Please set the CUDAToolkit_ROOT
variable.
Call Stack (most recent call first):
CMakeLists.txt:11 (project)
解决办法:
根据提示内容,说nvcc
没有找到,但可以通过sudo apt install nvidia-cuda-toolkit
命令安装,注意:千万不能使用sudo apt install nvidia-cuda-toolkit
命令,否则会重新安装CUDA(而且会安装NVIDIA驱动可以支持的最高版本的CUDA)!!!
其实CUDA已经安装好了,只是没有在环境变量中配置,所以找不到该命令,需要做如下操作:
1)查看CUDA的位置:
cd /usr/local
一般在/usr/local目录下会有CUDA文件夹或软链
2)打开、编辑环境变量的配置文件:
vim ~/.bashrc
在文件末尾添加:
# cuda
export LD_LIBRARY_PATH=/usr/local/cuda/lib64
export PATH=$PATH:/usr/local/cuda/bin
然后按:wq保存退出编辑模式。
3)刷新~/.bashrc文件使其生效:
source ~/.bashrc
4)重新使用nvcc命令查看CUDA版本:
输入:
nvcc -V
注意:运行到这里,与原文章不同的地方
我发现原来的文章,没有安装NeRF_SLAM所需要的依赖项。在编译instant-ngp的会报错。
所以我们要在NeRF_SLAM的目录下,再一次安装依赖项
git submodule update --init --recursive
pip install -r requirements.txt
然后返回主目录
sudo python3 setup.py install
ERROR10
The detected CUDA version (9.1) mismatches the version that was used to compile
PyTorch (10.2). Please make sure to use the same CUDA versions.
解决办法:
- 更新torch版本
- 更新CUDA版本
我选择第二种,CUDA是向下兼容的所以越高版本的CUDA越兼容低版本的 。