代码链接
代码主要思想是使用神经网络(SuperPoint)提取特征点,以替代ORB SLAM2中使用的ORB特征点。
配置
1、cmake的版本
推荐11,查看cmake版本可以使用指令:
$ cmake --version
确认自己的cmake版本为11。
安装cmake11可以参考博客:https://blog.csdn.net/qq_32526087/article/details/88616116
2、安装Pangolin、OpenCV、Eigen3、DBoW3 and g2o(不要用代码Thirdparty里的,不全并且无法sudo make install)。
安装可以参考博客:https://www.cnblogs.com/hloay/p/13344073.html
3、Libtorch(大坑,博主卡在这好几天,嘤嘤嘤)
编译指令:
git clone --recursive -b v1.0.1 https://github.com/pytorch/pytorch
cd pytorch && mkdir build && cd build
python ../tools/build_libtorch.py
最开始使用的的30系列显卡,由于只支持cuda11.0以上版本(cuda11.0对应需要下载v1.7.0版本的Libtorch),编译时总是报错
显示找不到cudnn。
后来看到一条这样的帖子
于是装了v8.0.1版本的cudnn。以前一直以为cudnn版本和cuda版本一致即可,第一次发现对应同一版本的cuda还有不同的cudnn,如下图所示:
用于时间不同,以cuda11.0为例,目前有v8.0.1,v8.0.2,v8.0.3,v8.0.4四款,卸载和安装cudnn代码如下:
卸载:
$ sudo rm -rf /usr/local/cuda/include/cudnn.h
$ sudo rm -rf /usr/local/cuda/lib64/libcudnn*
安装
$ sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
$ sudo chmod a+r /usr/local/cuda/include/cudnn.h
$ sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
改装v8.0.1版本cudnn后可以成功编译,但是后面编译SuperPoint_SLAM时仍然会报错,初步估计是硬件兼容性不足,30系列显卡对Libtorch兼容性不足。实测发现这和直接从pytorch官网上下载编译好的Libtorch结果一致,编译SuperPoint_SLAM时报相同的错误。
博主能力有限,没能解决这个问题,希望网友不吝赐教。
自己的解决方案(笨办法)
拿出自己好久不用的笔记本(MX150显卡)
各软件版本:
cuda 9.2
cudnn v7.6.5
opencv 3.4.3
cmake 3.11.3
Libtorch v1.0.1
下载SuperPoint_SLAM:
git clone https://github.com/KinglittleQ/SuperPoint_SLAM.git SuperPoint_SLAM
编译:
cd SuperPoint_SLAM
chmod +x build.sh
./build.sh
第一次编译SuperPoint_SLAM里的./build.sh时会报这样一个错:
原因是找不到Torch的配置文件,修改SuperPoint_SLAM里CMakeLists.txt
set(Torch_DIR "/home/victor/pytorch/torch/lib/tmp_install/share/cmake/Torch") # libtorch
根据自己的路径做相应修改即可。
最终成功编译
然后下载词袋和kitti数据集(具体链接见:https://github.com/KinglittleQ/SuperPoint_SLAM)
词袋下载好之后解压放入Vocabulary文件中(需要自己建立):
$ cd SuperPoint_SLAM
$ mkdir Vocabulary
最后启动命令格式(以 sequence 03为例):
$ ./Examples/Monocular/mono_kitti Vocabulary/superpoint_voc.yml Examples/Monocular/KITTI03.yaml /home/victor/SuperPoint_SLAM/data_odometry_gray/dataset/sequences/03
最后一部分的/home/victor/SuperPoint_SLAM/改成自己数据集的存储路径。
运行效果
笔记本跑起来比较卡,就没有跑完,也没有作评测,原始代码中的评测结果如下: