Jeton Orin NX 部署Superpoint-SLAM(未完待续)

0、写在前面

在上一篇博客中我在Orin上部署了GCNv2-SLAM。不过最终所有的调试都完成了之后,无法成功运行。报错提示“模型支持移动设备”,因此猜测可能是训练好的模型问题。所以我这里再尝试一次Superpoint-SLAM,看看到底是不是模型的问题。

该项目需要准备的库有libtorch、opencv、eigen、g2o、DBoW3、Pangolin,我的opencv是4.2.0的,Pangolin是0.5版本的,libtorch是1.12.0版本的,具体可以参考我之前的博客:
Jetson Orin NX+GCNv2-SLAM编译(未完待续)-CSDN博客

Jetson Orin NX + RealSense-d455 + Ubuntu20.04部署orbslam2-CSDN博客

本质上,Superpoint-SLAM和GCNv2-SLAM是同源的,都是用深度学习代替了前端提取特征点和描述子的方法,因此所用到的库和编译方法,以及编译过程中遇到的问题基本都差不多。

一、编译Superpoint-SLAM

项目源码在这里:

Superpoint-SLAMicon-default.png?t=N7T8https://gitcode.com/kinglittleq/superpoint_slam/overview?utm_source=csdn_github_accelerator&isLogin=1在Superpoint-SLAM文件夹下运行:

git clone https://github.com/KinglittleQ/SuperPoint_SLAM.git SuperPoint_SLAM

git下来项目以后,首先查看build.sh文件,查看都需要对哪些文件进行编译。

可以看到,需要编译的几个库,包括DBoW3、g2o,所以需要对这两个库的CMakeLists.txt文件进行修改。

DBoW3关于opencv部分,由于我的是4.2.0版本的,所以需要找到DBoW3的CMake文件并修改:

将
find_package(OpenCV 3.0 QUIET)
if(NOT OpenCV_FOUND)
   find_package(OpenCV 2.4.3 QUIET)
   if(NOT OpenCV_FOUND)
      message(FATAL_ERROR "OpenCV > 2.4.3 not found.")
   endif()
endif()
注释掉,并添加:
set(OpenCV_DIR "/usr/local/opencv420/lib/cmake/opencv4")
find_package(OpenCV 4.2.0 REQUIRED)

g2o不需要作任何修改

再在根目录下的CMake文件中,同样做关于Opencv的修改,并且更换libtorch的DIR,即:

opencv:

将
find_package(OpenCV 3.0 QUIET)
if(NOT OpenCV_FOUND)
   find_package(OpenCV 2.4.3 QUIET)
   if(NOT OpenCV_FOUND)
      message(FATAL_ERROR "OpenCV > 2.4.3 not found.")
   endif()
endif()
注释掉,并添加:
set(OpenCV_DIR "/usr/local/opencv420/lib/cmake/opencv4")
find_package(OpenCV 4.2.0 REQUIRED)

libtorch:具体怎么查找libtorch的路径,可以查看我的上一篇博客:

Jetson Orin NX+GCNv2-SLAM编译(未完待续)-CSDN博客

将
set(Torch_DIR "/home/deng/SP_SLAM/Thirdparty/libtorch/share/cmake/Torch")
改成
set(Torch_DIR /usr/local/lib/python3.8/dist-packages/torch/share/cmake/Torch/)

然后给build.sh增加权限并编译运行

chmod +x build.sh
./build.sh

问题:C++编译版本较低,需要将C++11修改成C++14

在Superpoint-slam的CMakeLists文件中将所有的C++11修改成C++14以使用新版本的pytorch

剩下的关于opencv的问题,在我的另外两篇博客里面都有很多记录了,这里就不再重复了,都和ORB-SLAM2的编译过程中遇到的问题相同

Jetson Orin NX + RealSense-d455 + Ubuntu20.04部署orbslam2-CSDN博客

Jetson Orin NX+GCNv2-SLAM编译(未完待续)-CSDN博客

还有这篇:

opencv3和opencv4的版本切换-CSDN博客

除了opencv版本上的问题之外,还有在编译过程中出现的内存不足的问题(我的自带内存是16g)。输入如下命令查看内存使用情况:

free

可以看到我的内存剩余是比较多的,大约12-13个g,但是依然在执行build.sh文件过程中出现了内存不足,整台设备死机的情况,因此,需要修改build.sh文件。

将最后一行对SLAM项目编译的
make -j
改成
make -jX

具体 X 是多少,需要根据自己板子的处理器内核数来决定。我的X=8。所以是make -j8。

或者可以使用swap交换空间增加内存,具体操作稍微有些复杂,所以我这边还是使用上面的方法。

由于libtorch我用的是1.12.0版本,而源码支持的是1.0.1版本,所以libtorch也会有许多api需要修改,在GCNv2-SLAM这篇博客中已经涉及了一些,不过本篇博客还是记录了一些全新的问题:

问题1:

这里说明新版的libtorch对这个函数进行了修正,除了四个参数外还有最后的参数align_corners,在先前的版本中默认为False,因此我们只需要将函数改成如下的形式:

将133行
desc = torch::grid_sampler(desc, grid, 0, 0);
改成
desc = torch::grid_sampler(desc, grid, 0, 0, false);

将263行
auto desc = torch::grid_sampler(mDesc, grid, 0, 0);
改成
auto desc = torch::grid_sampler(mDesc, grid, 0, 0, false);

编译通过:

当然,这里暂时只有单目的程序,双目的程序需要自行修改CMake文件并设置可执行文件的输出路径。

二、运行SuperpointSLAM

这里先运行一下TUM数据集试一下,在Example/Monocular文件夹下打开终端,运行可执行程序,命令基本与ORB-SLAM2相同。run.sh中给出的命令使用辞典superpoint_voc.yml.gz,暂时还没找到源码,可能需要自己训练一个字典。所以我这里先用ORB2的字典替代一下(官网给出的KITTI运行示例也是以ORB的字典为基础,字典的选择只会影响回环)。

./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt ./Examples/Monocular/TUM1.yaml /home/jetson/ORB_SLAM2/rgbd_dataset_freiburg3_long_office_household

意料之内,运行结果也是显示当前模型并不符合嵌入式板子的部署,与GCNv2-SLAM的报错相同。

有一点很不理解,这两个项目(Superpoint-SLAM和GCNv2-SLAM)理论上都是可以部署在边缘计算机上,但是我总是部署失败不知道为什么,提示当前模型并不符合移动设备,实在是不理解...希望有知情大佬能解答一下问题。

答案来了,legacy model format是因为原作者在编译的时候用的是libtorch1.0.1版本,而我的板子上libtorch自带的版本较高,所以导致模型不兼容。但是如果按照官网教程更换1.0.1版本的libtorch,又因为板子上的cudnn、cuda等版本过高编译不通过,产生一大堆的报错,很多也找不到原因,也找不到高版本对应的函数以及变量名称,实在是很难顶...

  • 21
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值