GCNv2_SLAM-CPU详细安装教程(ubuntu18.04)

GCNv2_SLAM-CPU详细安装教程-ubuntu18.04

  • 前言
  • 一、安装第三方库
    • 1.安装Pangolin
    • 2.安装OpenCV
    • 3.安装Eigen
    • 4.安装Pytorch(c++)
  • 二、安装以及运行GCNv2_SLAM
    • 1.安装编译GCNv2_SLAM
    • 2.单目模式运行演示案例
  • 总结

前言

paper:https://arxiv.org/pdf/1902.11046.pdf
githup::https://github.com/jiexiong2016/GCNv2_SLAM?tab=readme-ov-file
最近在ubuntu18.04上配置GCNv2_SLAM运行环境时踩了很多坑,在这期间查阅了很多资料和博客,于是想对安装过程进行总结,方便自己反复查阅以及分享经验避免大家重复踩坑。
博主是用docker在ubuntu18.04容器中安装的GCNv2_SLAM,已经打包成docker的镜像文件分享给大家。

因为博主的显卡安装不了低版本的cuda,对应低版本的pytorch只能使用cpu,因此暂时讲解cpu版本的安装教程

# 查看ubuntu版本号
lsb_release -a


安装前的准备:安装cmake、git 、gcc 和g++

# 更新apt库,更新软件列表
sudo apt-get update

apt-get源修改参考

# 安装git,用于从Github上克隆项目到本地
sudo apt-get install git
# 安装cmake,用于程序的编译
sudo apt-get install cmake
# 安装gcc和g++,安装c和c++编译器
sudo apt-get install gcc g++

一、安装第三方库

# 建立一个GCNv2_SLAM的文件夹,建议将所有的第三方库以及GCNv2_SLAM源码都放入其中
mkdir GCNv2_SLAM

可能需要安装百度云:

# 安装百度云,xxx.deb是自己下载的版本
sudo dpkg -i baidunetdisk_4.17.7_amd64.deb

1.安装Pangolin

Pangolin是对OpenGL进行封装的轻量级的OpenGL输入/输出和视频显示的库。
1.安装依赖项

sudo apt-get install libgl1-mesa-dev
sudo apt-get install libglew-dev
sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev
sudo apt-get install libpython2.7-dev

2.安装 Pangolin
通过链接或通过git下载Pangolin源码(不推荐,问题很多)

# 需要科学上网
git clone --recursive https://github.com/stevenlovegrove/Pangolin.git

强烈推荐Pangolin 0.6(稳定版) 提取码:45bo

# 解压并重命名为Pangolin
unzip Pangolin-0.6.zip && mv Pangolin-0.6 Pangolin
# 开始编译和安装
cd Pangolin
mkdir build && cd build 
cmake -DCPP11_NO_BOOST=1 ..
sudo make install

3.验证安装是否完成

# 验证
cd ../examples/HelloPangolin
mkdir build && cd build
cmake ..
make
./HelloPangolin

若安装成功,则会弹出以下窗口:

2.安装OpenCV

可以参考该链接
1.安装依赖项

# 解决:Unmet dependencies.Try'apt--fix-broken install'with no packages(or specify a solution)
sudo apt --fix-broken install
sudo apt-get update
sudo apt-get upgradesudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev
sudo apt-get install libtiff5.dev libswscale-dev# 解决:add-apt-repository: command not found
sudo apt-get install software-properties-commonsudo apt-get update
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt-get update
sudo apt-get install libjasper1 libjasper-dev

2.安装 OpenCV3.4.5
OpenCV3.4.5源码 提取码:m27t (可在Github仓库右侧的Releases里找大于2.4.3版本的OpenCV)

# 解压并重命名为opencv
tar -xvf opencv-3.4.5.tar.gz && mv opencv-3.4.5 opencv
# 开始编译和安装
cd opencv
mkdir build && cd build 
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
# 4线程数量,根据电脑性能选择合适的数字
make -j4
sudo make install

3.验证安装是否完成

# 查询OpenCV版本
pkg-config --modversion opencv
# 查询OpenCV库
pkg-config --cflags opencv
# 查询头文件目录
pkg-config --libs   opencv

# 验证
cd opencv/samples/cpp/example_cmake
cmake .
make
./opencv_example

若安装成功,则会弹出以下窗口:

3.安装Eigen

1.安装 Eigen3.3.7
建议源码安装可以下载任意大于3.1.0.版本对应的文件。

# 解压并重命名为eigen
tar -xvf eigen-3.3.7.tar.gz && mv eigen-3.3.7 eigen
# 开始编译和安装
cd eigen
mkdir build && cd build
cmake ..
make
sudo make install# 在很多程序中include时经常使用#include <Eigen/Dense>而不是使用#include <eigen3/Eigen/Dense>
# 因此安装后需要将头文件从 /usr/local/include/eigen3/ 复制到 /usr/local/include
# 后续小节会有C++测试代码说明
sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include

2.测试eigen库安装完成
在home目录下新建一个test.cp 文件用以测试。

# 建立 test 测试文件
touch test_eigen.cpp
# 用gedit打开此测试文件,添加C++代码用于测试
gedit test_eigen.cpp
# 编译后生成一个test_eigen的可执行文件
g++ test_eigen.cpp -o test_eigen
# 在test_eigen可执行文件目录下执行以下命令,证明eigen库安装完成
./test_eigen

在test_eigen.cpp文件中添加的C++测试代码。

#include <iostream>
//需要将头文件从 /usr/local/include/eigen3/ 复制到 /usr/local/include
#include <Eigen/Dense>
//using Eigen::MatrixXd;
using namespace Eigen;
using namespace Eigen::internal;
using namespace Eigen::Architecture;
using namespace std;
int main()
{cout<<"*******************1D-object****************"<<endl;Vector4d v1;v1<< 1,2,3,4;cout<<"v1=\n"<<v1<<endl;VectorXd v2(3);v2<<1,2,3;cout<<"v2=\n"<<v2<<endl;Array4i v3;v3<<1,2,3,4;cout<<"v3=\n"<<v3<<endl;ArrayXf v4(3);v4<<1,2,3;cout<<"v4=\n"<<v4<<endl;
}

4.安装Pytorch(c++)

1.选择 Pytorch的版本:进入Pytorch的githup官网地址,按照下图步骤查询所需安装的pytorch版本。

博主试过1.12.0高版本的在以后执行GCNv2_SLAM出现错误,无解降低了pytorch版本。

2.Pytorch源码编译Libtorch

# 博主选择安装1.4.0版本
git clone --recursive -b v1.4.0 https://github.com/pytorch/pytorch
cd pytorch && mkdir build && cd build
# 构建 LibTorch 库, 建议python3而不是原始命令的python执行
# 因为2版本的python可能会报错
python3 ../tools/build_libtorch.py

编译成功

3.编译Libtorch过程中可能出现的错误

  • 假如git下载中途断掉,解决方案:
    # 进入目录pytorch
    cd pytorch
    # 用于初始化和更新子模块。
    git submodule update --init --recursive
    
  • 正在使用的Python版本(2.x版本)不支持。

    解决方案:使用更高的python版本。
    python3 ../tools/build_libtorch.py
    
  • 找不到名为 setuptools 的模块。

    解决方案:安装 setuptools 模块。
    # 在 Ubuntu 上安装 Python 3 版本的包管理器 pip
    sudo apt install python3-pip
    # 安装 setuptools 模块
    pip3 install setuptools
    
  • 没有安装符合要求的CMake版本。

    解决方案:更新CMake(参考教程)。
  • 找不到名为 typing_extensions yaml dataclasses 等模块。

    解决方案:安装 typing_extensions yaml dataclasses 等模块。
    pip3 install typing_extensions
    pip3 install pyyaml 
    pip3 install dataclasses
    # 需要删除build重新进行编译
    cd .. && sudo rm -rf build && mkdir build && cd build
    # 构建 LibTorch 库
    python3 ../tools/build_libtorch.py
    
  • c++: internal compiler error: Killed (program cc1plus)编译器试图使用过多内存或系统资源时,导致操作系统终止了编译器进程。


  • 解决方案1 (低性能机器不建议) :使用临时交换分区来解决,docker的ubuntu18.04容器的解决参考。
    # 创建一个大小为 30GB 的交换文件 /swapfile ,根据需要调整 bs 和 count 参数来创建不同大小的交换文件
    sudo dd if=/dev/zero of=/swapfile bs=30M count=1024
    # 更改上交换文件 /swapfile 的权限
    sudo chmod 600 /swapfile
    # mkswap 命令将指定的文件 /swapfile 标记为交换分区,并设置相应的文件系统标识
    sudo mkswap /swapfile
    # swapon 命令将指定的文件 /swapfile 作为交换空间启用,并将其添加到系统的交换空间列表中
    sudo swapon /swapfile
    # 重新打开黑框,需要删除build重新进行编译
    sudo rm -rf build && mkdir build && cd build
    # 构建 LibTorch 库
    python3 ../tools/build_libtorch.py
    # swapoff 命令将指定的交换空间文件或设备从系统中移除,并停止使用它作为虚拟内存的一部分
    sudo swapoff /swapfile
    # 删除 /swapfile 交换分区
    sudo rm /swapfile
    
    解决方案2 (低性能机器强烈建议) :还有一个方法是减少线程数量,需要修改pytorch源码pytorch/tools/setup_helpers/cmake.py:
    # 修改线程数目max_jobs,博主指定了12个
    # max_jobs 必须是string类型
    max_jobs = '12'
    

二、安装以及运行GCNv2_SLAM

1.安装编译GCNv2_SLAM

# 通过git下载GCNv2_SLAM源码,需要科学上网
git clone https://github.com/jiexiong2016/GCNv2_SLAM.git
cd GCNv2_SLAM
# 赋予shell文件运行权限
chmod +x build.sh
# 需要科学上网
# 博主根据个人电脑性修改build.sh里的torch位置,即你下载pytorch的路径
./build.sh


编译CUP版本需要几个地方:

  • 修改GCNv2_SLAM/src/GCNextractor.cc中的相关代码:

    //第一处原代码:
    const char *net_fn = getenv("GCN_PATH");
    net_fn = (net_fn == nullptr) ? "gcn2.pt" : net_fn;
    module = torch::jit::load(net_fn);
    //修改为:
    torch::DeviceType device_type;
    device_type = torch::kCPU;
    torch::Device device(device_type);
    const char *net_fn = getenv("GCN_PATH");
    net_fn = (net_fn == nullptr) ? "gcn2.pt" : net_fn;
    module = torch::jit::load(net_fn,device);//第二处原代码:
    device_type = torch::kCUDA;
    //修改为:
    device_type = torch::kCPU;
    

  • 修改GCNv2_SLAM/GCN2下gcn2_320x240.pt、gcn2_640x480.pt和gcn2_tiny_320x240.pt中的内容:

    更改以gcn2_320x240.pt为例,使用zip解压:

    unzip gcn2_320x240.pt && sudo rm -rf gcn2_320x240.pt
    

    解压完成后进入到解压文件的code目录下打开gcn.py将cuda:0修改成cpu:

    修改完成后使用zip压缩:

    zip -r gcn2_320x240.pt gcn
    

编译成功:

常见的错误

  • 这个错误会被密密麻麻的错误信息覆盖导致找不到,建议首先排查,可以在一开始报错的时候就用Ctrl+V中断:

    (博主在此前pytorch1.12.0版本是出现的错误),现在是pytorch1.4.0


    解决措施:只需要在GCNv2_SLAM/CMakeLists.txt文件修改添加:

    set(CMAKE_CXX_STANDARD 14)
    set(CMAKE_CXX_STANDARD_REQUIRED ON)
    # 修改:set_property(TARGET rgbd_gcn PROPERTY CXX_STANDARD 11)
    set_property(TARGET rgbd_gcn PROPERTY CXX_STANDARD 14)
    


  • std::shared_ptr是pytorch1.0.1版本使用的变量类型,现在博主使用的是pytorch1.4.0版本:

    解决措施:修改/GCNv2_SLAM/include/GCNextractor.h中的相关代码:

    //原代码
    std::shared_ptr<torch::jit::script::Module> module;
    //更改为
    torch::jit::script::Module module;
    

  • module已经不是指针:
    解决措施:修改GCNv2_SLAM/src/GCNextractor.cc中的相关代码:

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

  • 因为pytorch1.3以前默认true,后续版本默认false,需要修改:

    解决措施:以gcn2_320x240.pt为例,进入解压进入code目录下打开gcn.py修改内容,具有修改步骤此前内容已经阐述不再复述:

    //原代码
    _32 = torch.squeeze(torch.grid_sampler(input, grid, 0, 0))
    //修改为
    _32 = torch.squeeze(torch.grid_sampler(input, grid, 0, 0, True))
    

2.单目模式运行演示案例

TUM 数据集
数据下载链接,下载如下数据集

在GCNv2_SLAM工程下新建datasets/TUM,将数据集下载到其中。

# 新建datasets/TUM数据集文件夹
mkdir  -p datasets/TUM 
# 下载数据集到datasets/TUM文件夹内
# 解压数据集
cd datasets/TUM && tar -xvf rgbd_dataset_freiburg1_desk.tgz

需额外下载associate.py添加到数据文件夹下,注意:只能在Python2 环境下运行。

# associate.py需要numoy包
sudo apt-get install python-pip
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy# 在数据文件夹里执行命令
python associate.py rgb.txt depth.txt > associate.txt

作用是使RGD和depth的数据做一个对齐,一 一对应。

执行以下命令显示效果

cd GCN2
GCN_PATH=gcn2_320x240.pt ./rgbd_gcn ../Vocabulary/GCNvoc.bin TUM3_small.yaml /root/GCNv2_SLAM/GCNv2_SLAM/datasets/TUM/rgbd_dataset_freiburg1_desk /root/GCNv2_SLAM//GCNv2_SLAM/datasets/TUM/rgbd_dataset_freiburg1_desk/associate.txt


总结

尽可能简单、详细的介绍GCNv2_SLAM(CPU)的安装流程以及解决了安装过程中可能存在的问题。后续会根据自己学到的知识结合个人理解讲解GCNv2_SLAM的原理和代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/539762.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么要用scrapy爬虫库?而不是纯python进行爬虫?

为什么要用scrapy爬虫库&#xff1f;而不是纯python进行爬虫&#xff1f; Scrapy的优点Scrapy节省的工作使用纯Python编写爬虫的不足 Scrapy是一个使用Python编写的开源和协作的web爬虫框架&#xff0c;它被设计用于爬取网页数据并从中提取结构化数据。Scrapy的强大之处在于其广…

matlab调用nlopt时向目标函数中传入数据的案例

matlab调用nlopt时向目标函数中传入数据的案例&#xff0c;如代码所示&#xff1a; clc,clear,close allopt.algorithm NLOPT_LN_AUGLAG; opt.lower_bounds -10; opt.upper_bounds 10; opt.min_objective (x) goal_function(x,[1,2,3,4,5,6,7,8,9]); opt.xtol_rel 1e-8; …

java垃圾回收-三色标记法

三色标记法 引言什么是三色标记法白色灰色黑色 三色标记过程三色标记带来的问题多标问题漏标问题 如何弥补漏标问题增量更新原始快照总结 引言 在CMS,G1这种并发的垃圾收集器收集对象时&#xff0c;假如一个对象A被GC线程标记为不可达对象&#xff0c;但是用户线程又把A对象做…

基于微信小程序的作业管理系统的设计与实现【附项目源码】分享

基于微信小程序的作业管理系统的设计与实现&#xff1a; 源码地址&#xff1a;https://download.csdn.net/download/qq_41810183/88842836 一、引言 随着移动互联网的普及和微信小程序的广泛应用&#xff0c;教育领域也在积极探索如何利用这些新技术提升教学质量和效率。本需…

基于word2vec 和 fast-pytorch-kmeans 的文本聚类实现,利用GPU加速提高聚类速度

文章目录 简介GPU加速 代码实现kmeans聚类结果kmeans 绘图函数相关资料参考 简介 本文使用text2vec模型&#xff0c;把文本转成向量。使用text2vec提供的训练好的模型权重进行文本编码&#xff0c;不重新训练word2vec模型。 直接用训练好的模型权重&#xff0c;方便又快捷 完整…

工具篇--从零开始学Git

一、git概述 1.1安裝 windows版本 官方下载&#xff08;比较慢&#xff09;&#xff1a;Git - Downloads Linux版本 ​yum install git查看git版本。 git --version 1.2创建仓库gitee 注册账号 Gitee - 基于 Git 的代码托管和研发协作平台 新建仓库 honey2024 配置 git confi…

安装kibaba

官方地址&#xff1a;Past Releases of Elastic Stack Software | Elastic 直接下载就可以 安装好了之后开始配置文件/kibana/config打开kibanba.yml server.port:5601 服务器地址 sercer.name:kibana 服务器名称 kibana.index:.kibana 索引 elasticsearch.hosts:[http://1…

Kafka是什么,以及如何使用SpringBoot对接Kafka

系列文章目录 上手第一关&#xff0c;手把手教你安装kafka与可视化工具kafka-eagle 架构必备能力——kafka的选型对比及应用场景 Kafka存取原理与实现分析&#xff0c;打破面试难关 防止消息丢失与消息重复——Kafka可靠性分析及优化实践 Kafka是什么&#xff0c;以及如何使用…

mysql 主从延迟分析

一、如何分析主从延迟 分析主从延迟一般会采集以下三类信息。 从库服务器的负载情况 为什么要首先查看服务器的负载情况呢&#xff1f;因为软件层面的所有操作都需要系统资源来支撑。 常见的系统资源有四类&#xff1a;CPU、内存、IO、网络。对于主从延迟&#xff0c;一般会…

Gitlab光速发起Merge Request

前言 在我们日常开发过程中需要经常使用到Merge Request&#xff0c;在使用过程中我们需要来回在开发工具和UI界面之前来回切换&#xff0c;十分麻烦。那有没有一种办法可以时间直接开发开工具中直接发起Merge Request呢&#xff1f; 答案是有的。 使用 Git 命令方式创建 Me…

3dmax导入模型渲染过亮---模大狮模型网

在3ds Max中导入模型后渲染过亮可能是由于以下原因导致的&#xff1a; 材质和贴图设置&#xff1a; 检查导入的模型的材质和贴图设置&#xff0c;确保它们没有过度亮度或反射。调整材质的Diffuse(漫反射)颜色和Specular(高光)属性&#xff0c;以使渲染看起来更加自然。 光源设…

操作系统——中断

目录 前置知识 ​编辑 基本概念 1.中断特点 2.PSW&#xff08;程序状态字&#xff0c;Program statement word&#xff09; 中断的作用 中断的类型 中断嵌套、中断优先级、中断屏蔽 中断响应过程 前置知识 内核程序 &#xff1a;内核是操作系统的核心部分&#xff…