[三维重建]CVPR2020|基于Ubuntu20.04的SurfelMeshing部署和复现
SurfelMeshing
T. Schöps, T. Sattler, M. Pollefeys, “SurfelMeshing: Online Surfel-Based Mesh Reconstruction”, PAMI 2019.
paper: https://ieeexplore.ieee.org/document/8868189
code: https://github.com/puzzlepaint/surfelmeshing
该算法是基于RGB-D数据和SLAM系统求出的相机位姿,进行基于网格的三维重建算法。
输入是RGB-D数据,位姿,相机标定数据(内参),输出三维模型。
电脑配置:2080Ti,CUDA10.1.
1、环境部署
1.1 安装Ubuntu20.04
虚拟机上ubuntu20.04不能调用GPU,安装CUDA,而surfelmesh需要调用cuda,因此在Windows的基础上重装了Ubuntu20.04。
详情可以参考:
https://blog.csdn.net/qq_41833455/article/details/117882535
前提:在安装完CUDA后我安装了Anaconda,Anaconda在该算法复现中没有用,但是会影响后的操作,因此我特别说明一下。
1.2 安装NVIDIA驱动
我试了网上很多驱动的方法,手动下载驱动等,但是最后总是有各种各样的问题,最后我找到一个教程,用附加驱动的方法.
(1)首先换源,在软件更新器里,添加aliyun的源,更改后在终端运行:**
sudo apt update
(2) 附加驱动安装驱动
点击附加驱动,刚开始的时候是默认在最下面的xserver-xorg-video-nouveau,这是ubuntu20.04自带的NVIDIA驱动,要换成其他的,我这里选了510,一般情况版本越高,能装的CUDA版本也越高,因此我选择了510,这里的版本和用的显卡有关,我用的是单张2080Ti。
选择好驱动版本之后点击应用更改,然后会等待一段时间驱动下载和安装,中途由需要点击的地方点一下就好了。安装好后重启电脑。
在这个地方,如果一个版本不能安装,就换一个点,直到安装成功。
重启电脑后,在终端(快捷键ctrl+alt+T)输入
nvidia-smi
如果显示如下界面,则NVIDIA的驱动安装成功。
参考教程:https://blog.csdn.net/weixin_51679547/article/details/124486639
注意:这样安装之后的CUDA是没有安装的,如果要继续安装CUDA做深度学习,就可以按照上述教程,但是上述教程安装的CUDA是只在conda环境里才有的,换言之,在anaconda的环境下安装的CUDA安装路径是在conda环境下的。
1.3 安装CUDA10.1
参考教程:https://blog.csdn.net/wwlswj/article/details/106364094
参考教程:http://www.lxshaw.com/tech/2022/10/30/ubuntu20-04%e5%ae%89%e8%a3%85%e5%a4%9a%e4%b8%aacuda/
(1)添加源
SurfelMeshing的githunb首页说明了使用的CUDA是10.1,所以我们要安装CUDA10.1,在nvidia-smi界面,我们已经看到了我们可以安装的最高的CUDA版本是11.6,因为CUDA是向下兼容的,因此在这个NVIDIA驱动下,我们是可以直接安装10.1的。
CUDA10.1对应的是Ubuntu18.04,因此要添加源:
输入:
sudo gedit /etc/apt/sources.list
打开后在最后加入如下代码:
deb [arch=amd64] http://archive.ubuntu.com/ubuntu focal main universe
保存后退出,在终端更新
sudo apt update
sudo apt upgrade
换源后如果遇到没有密钥不能继续下载的话,参考该教程:https://blog.csdn.net/weixin_44543463/article/details/113825319
在终端输入:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 76F1A20FF987672F
其中,recv后面的76F1A20FF987672F就是报错提示缺失的密钥,按照提示进行更改,实测有效。
(2)降级gcc-7,g+±5
Ubuntu20.04默认安装的gcc-11,g+±11,版本可以通过gcc --version,或者g++ --version查看
sudo apt-get install gcc-7 g++-7
安装完成后,系统中会存在两个版本的gcc,因此设置默认的gcc,命令如下:
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 7
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 11
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 7
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 11
用以下命令进行切换:
sudo update-alternatives --config gcc
sudo update-alternatives --config g++
设置好gcc-7后,用gcc --version查看gcc版本可以看到已经变成7了。
(3)安装CUDA10.1
CUDA10.1 Toolkit 10.1 update2 Archive
在终端输官网提示的命令。
启动安装,选择Continue,输入accept,已经安装了NVIDIA驱动的话,移动到Driver选项上,按空格取消。之后移动到install选项,回车,等待安装完成。具体参考教程:https://blog.csdn.net/wwlswj/article/details/106364094
(4)配置环境
终端输入命令
sudo gedit ~/.bashrc
在文件的末尾添加内容:
export PATH=/usr/local/cuda-10.1/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
保存并关闭文件,完成配置。
终端输入以下命令更新环境。
source ~/.bashrc
安装完CUDA10.1后,在终端输入nvcc -V,看到cuda版本已经变成10.1了。
2、SurfelMeshing复现
这部分主要参考的教程:https://blog.csdn.net/weixin_44494462/article/details/120823799
2.1 安装相关库和依赖
(1)Boost
sudo apt-get install aptitude
sudo aptitude install libboost-all-dev
(2)Eigen
sudo apt-get install libeigen3-dev
(3)OpenGL
sudo apt-get install build-essential
sudo apt-get install build-essential libgl1-mesa-dev
sudo apt-get install libglew-dev libsdl2-dev libsdl2-image-dev libglm-dev libfreetype6-dev
sudo apt-get install libglfw3-dev libglfw3
(4)GLEW
sudo apt-get install libglew-dev
(5)Qt5
sudo apt-get install qt5-default
sudo apt-get install libqt5x11extras5 (可能不用)
sudo apt-get install libqt5x11extras5-dev
2.2 数据集准备
按照Surfelmeshing官方给的提示,去TUM官网下载数据集。下载后解压,新建一个txt文档,calibration.txt,写入相机内参,用TUM RGB-D benchmark的话就是525.0 525.0 319.5 239.5。
associate,要把深度图和和彩色图联合起来,下载associate.py文件。
这里有一个地方要改,因为associate.py文件中用的是Python2.7版本,如果python版本是3以上的话,会报错:
AttributeError: 'dict_keys' object has no attribute 'remove'
解决方法:要将py文件中的报错语句:
first_keys = fist_list.keys()
second_keys = second_list.keys()
改成:
irst_keys = list(fist_list.keys())
second_keys = list(second_list.keys())
保存后
运行以下命令:
python associate.py rgb.txt depth.txt > associated.txt
会生成一个associated.txt文件
2.3 编译
下载surfelmeshing的代码后解压,进入到该文件夹后进入终端输入以下命令:
mkdir build_RelWithDebInfo
cd build_RelWithDebInfo
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_CUDA_FLAGS="-arch=sm_61" ..
make -j SurfelMeshing
编译完成后,在终端输入命令:
./build_RelWithDebInfo/applications/surfel_meshing/SurfelMeshing <dataset> <trajectory>
其中的位置写刚刚下载的数据集的文件夹位置,是相机位姿的位置,也就是下载的数据集中的groundtruth.txt文件。
参考:
./build_RelWithDebInfo/applications/surfel_meshing/SurfelMeshing ../rgbd_dataset_freiburg1_xyz groundtruth.txt --follow_input_camera false
然后屏幕上显示如下界面,则运行成功:
参考教程:Ubuntu20.04下深度学习环境配置(持续维护)
避免繁琐步骤,在Ubuntu22.04安装cuda、cudnn及pytorch_Teliq的博客-CSDN博客
【conda虚拟环境安装CUDA路径】
由于没有公钥,无法验证下列签名 :NO_PUBKEY 的解决方法
Ubuntu20.04安装多个Cuda - 超载巴赫朋克
Ubuntu 22 安装gcc7 g++7_Inverse.me的博客-CSDN博客_ubuntu安装gcc7
TUM RGBD数据集的tool-associate.py使用遇到的问题
解决类似 /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21’ not found 的问题_能量守恒洛的博客-CSDN博客
SurfelMeshing Puma 部署过程