GCNv2——SLAM 复现过程 23版拯救者电脑高显卡 对应高版本CUDA和libtorch

配置

拯救者y7000p2023

显卡RTX4060(最低安装CUDA11.3)

显卡驱动 535啥的

CUDA 11.3

libtorch 1.10.0

OPENCV 3.2.0

Pangolin 0.5

Eigen 3.3.7

第一遍摸索

报找不到eigen文件

在module里面 findeigen.cmake 33行改动目录所在

macro(_eigen3_check_version)
  file(READ "${EIGEN3_INCLUDE_DIR}/Eigen/src/Core/util/Macros.h" _eigen3_version_header)

报pangolin出错

 Pangolin could not be found because dependency Eigen3 could not be found.

解决办法:

find_package(Eigen3 3.1.0 REQUIRED)
find_package(Pangolin REQUIRED)

改为:

find_package(Eigen3 3.1.0 REQUIRED NO_MODULE)
find_package(Pangolin REQUIRED)

找不到torch

Could not find a package configuration file provided by "Torch" with any of
  the following names:

    TorchConfig.cmake
    torch-config.cmake

解决办法:

findpackage前加了

set(Torch_DIR "home/zyl/software/libtorch-shared-with-deps-1.11.0+cu113/libtorch/share/cmake/Torch")

build.sh 也改了路径 还是不对

加了set(CMAKE_CXX_STANDARD 14) 最后一句改成C ++14

cuda版本不对

CMake Error at /home/zyl/software/libtorch-shared-with-deps-1.11.0+cu113/libtorch/share/cmake/Caffe2/public/cuda.cmake:49 (message):
  PyTorch requires CUDA 10.2 or above.

Ubuntu卸载CUDA

cd /usr/local/cuda-xx.x/bin/

sudo ./cuda-uninstaller

sudo rm -rf /usr/local/cuda-xx.x

并且

sudo apt-get purge nvidia-cuda*
sudo apt-get autoremove

发现此时cuda10.1 才被卸载

重新安装11.3

cudann

从cudnn复制文件到cuda中时,不止有cudnn.h了,还需要cudnn_version.h之类的,所以应该是

sudo cp cuda/include/cudnn*.h    /usr/local/cuda-11.3/include

还要赋予权限 直接把整个文件夹转作可读写了  sudo chmod -R 777 /usr/local/include/cuda-11.3/include

应该使用cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

检验安装版本

sh shell脚本一直还是说找不到cuda,但是自己写的cpp文件,包含torch头文件,明明可以正常跑通。

我尝试直接创建build文件夹进行cmake 竟然成功了 但是还不能make

ORB_SLAM安装问题error: ‘std::chrono::monotonic_clock’ has not been declared

出现这个问题的原因是C++版本之间存在区别。

在C++11版里已经没有momotonic_clock了,有steady_clock作为替代。

如果你这部分报错了,大概率你的C++是11版本,那么我们其实可以删掉这部分判断语句,只保留

std::chrono::steady_clock::time_point t1 = std::chrono::steady_clock::now();
 
 //Pass the image to the SLAM system
 SLAM.TrackMonocular(im,tframe);
 
std::chrono::steady_clock::time_point t2 = std::chrono::steady_clock::now();
 
//......

这部分就行,把monotonic_clock的代码删掉之后就能正常编译了!
 

数据模型修改

由于作者没有公布权重文件,在不用回到pytorch 1.0.1,仍然想使用pytorch1.4运行的话,需要做以下的修改:
用压缩工具软件打开gcn2_320x240.pt (不解压),在’/gcn/code/'下找到 ‘gcn.py’,定位到报错所在行(第67行):

_32 = torch.squeeze(torch.grid_sampler(input, grid, 0, 0))
~~~~~~~~~~~~~~~~~~ <--- HERE

在最后新添加一个参数’True’:

_32 = torch.squeeze(torch.grid_sampler(input, grid, 0, 0, True))

编译100%最后却出现很多pangolin的问题

差一点,显示pangolin的问题,想到应该下载0.5版本

报错参考 视觉SLAM十四讲 Ubuntu20.04 Pangolin 环境配置_pangolin-0.5-20.04_图南i的博客-CSDN博客

Ubuntu20.04中ros运行ORBSLAM2_with_pointcloud_map(采用D435相机实时运行)_总想这学习的博客-CSDN博客

这篇直接装上了 还是报pangolin的错阿

找到原因是libtorch不兼容C ++11  下载的版本不对 要Cxx11-abi的

下载链接https://download.pytorch.org/libtorch/cu113/libtorch-cxx11-abi-shared-with-deps-1.11.0%2Bcu113.zip

成功build和make

重新来一遍

1.改动torch路径

2.改C++14  加一句set(CMAKE_CXX_STANDARD 14)  最后一句也改成14

3.改代码

GCNextractor.h 第99行:

std::shared_ptr<torch::jit::script::Module> module;
//改为

  • torch::jit::script::Module module;

GCNextractor.cc 第270行:

auto output = module->forward(inputs).toTuple();
//改为
auto output = module.forward(inputs).toTuple();

4.改模型

双击打开gcn2_320x240.pt (其他pt文件同理)(无需解压)/gcn/code/'下找到 ‘gcn.py’

#原   这是因为1.3以前默认true   1.3以后默认false
_32 = torch.squeeze(torch.grid_sampler(input, grid, 0, 0))
#改为
_32 = torch.squeeze(torch.grid_sampler(input, grid, 0, 0, True))

5.编译成功,运行没反应

原来是没有数据集,还有自己拼成associations.txt

GCNv2复现-CPU_gcn2复现-CSDN博客

6. 运行了 但是段错误

换成libtorch1.10.0-cuda11.3版本 这次好些了

7. 报gcn2……_py文件错

发现问题出在第4步,只改了320x420的最后一个参数 忘记改640x480的

8.改完成功终于运行了

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值