使用docker配置DSP-SLAM

一.Docker环境配置

1.简单介绍

–docker容器技术–。
简单理解:Anaconda用于隔离不同的python环境;docker可以理解成在你的机器里面安装了一个独立的系统,因此它可以隔离不同的CUDA环境,还有着独立的文件系统,防止别人删掉你的实验和环境等。

    镜像(images)的意思就是静态的镜像文件;
    容器(container)就是一个基于镜像的活跃着的系统,可以操作的实例,我们可以进去跑代码。

2.安装nvidia-docker

  • 前置条件:你得有一张显卡。
  • docker sudo apt-get install docker。查看是否安装好:docker
  • Nvidia Driver. NVIDIA驱动官网。查看是否安装好:nvidia-smi
  • 接下来安装nvidia-docker
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \&& curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \&& curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install -y nvidia-docker2
  • sudo systemctl restart docker 重启一下docker
  • 接下来你就可以愉快的使用nvidia-docker了

3.拉取环境镜像

在此之前,我们需要了解一下docker hub的一些仓库地址。在下方给出:

  Nvidia/cuda官方docker hub
   PyTorch官方docker hub

基于此,我们可以去拉取官方仓库,可以在tag当中搜索我们所需要的版本,一般是选择devel版本,其中包含了C++/CUDA编译环境、视频解码、渲染等,会比较全面些。然后在docker镜像去配置我们的深度学习环境。就像下面这样:(因为DSP-SLAM的github上要求的cuda版本为11.3,所以最好跟官方一致)

sudo docker pull nvidia/cuda:11.3.1-cudnn8-devel-ubuntu18.04

如果想删除多余的docker image,可以使用指令

sudo docker rmi -f <id>

2.创建容器

sudo docker run -itd --runtime=nvidia --gpus all --name dspslam -v /home/lm/docker/dspslam:/home/lm/docker/dspslam --net=host --env="DISPLAY" --volume="$HOME/.Xauthority:/root/.Xauthority:rw" -e NVIDIA_DRIVER_CAPABILITIES=compute,utility,graphics -e NVIDIA_VISIBLE_DEVICES=all --privileged=true 9ac63d269265 /bin/bash

这个参数有点多,依次解释一下:

  • -it必备 d表示在背景里运行;
  • -v 磁盘挂载 本地绝对路径:容器的绝对路径;
  • --name 给你的container取个响亮的芳名;
  • --runtime 表示启用nvidia
  • --gpus 表示可以使用gpu,且为all
  • -e NVIDIA_DRIVER_CAPABILITIES=compute,utility,graphics,标红的三个缺一不可,我当初就是因为缺了第三个graphics,导致Pangolin的X11报错,OpenGL服务用不了
  • 其他参数有的是开启GUI的,有的是支持英伟达的,大家可以自行搜索,总之按照上面的指令,就会构建好一个可以使用nvidia的容器

基于ubuntu18.04建立容器,并开启GUI功能。

进入容器后,会在root命令下,到此我们便得到了一个纯净的ubuntu环境。

可以使用sudo docker ps查看正在运行的容器,sudo docker ps -a查看所有容器

当我想要退出时,输入exit退出容器,然后使用sudo docker stop dspslam来停止容器,当我想再次进入容器时,使用sudo docker start dspslam启动容器,再使用sudo docker exec -it dspslam bash进入容器

验证显卡是否可用

nvidia-smi

至此,你就获得了一个具有nvidia driver和cuda支持的docker.

查看当前cuda版本

cd /usr/local
ls

可以看到版本确为11.3

主机在每次开机之后都需要运行下面的指令,来指定允许连接的主机。

xhost +

运行之后,在docker容器内安装xarclock,运行指令

apt-get install xarclock
xarclock

运行后,会出现一个小时钟,表明docker内可以开启GUI服务。

二.Dsp-slam环境配置

1.准备代码

下载开源代码

git clone --recursive https://github.com/JingwenWang95/DSP-SLAM.git 

安装基础包

apt-get install gcc g++ cmake git

安装eigen3.4.0

因为要求版本为3.4.0,所以不建议用apt安装,这里选择源码编译安装,使用以下指令下载源码

git_clone "git clone --branch=3.4.0 --depth=1 https://gitlab.com/libeigen/eigen.git"

之后开始编译

cd eigen && mkdir build && cd build
cmake ..
make
make install

进入到/usr/local/include下,查看是否安装成功

2.安装Anaconda

提前准备好安装包

sh Anaconda3-5.3.1-Linux-x86_64.sh

 按照步骤安装即可

之后退出docker重新进入,即可自动进入base环境

3.安装Pangolin v0.6

安装依赖

apt-get install libglew-dev libgtk2.0-dev pkg-config libegl1-mesa-dev libwayland-dev libxkbcommon-dev  wayland-protocols
apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev
apt-get install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev
apt-get install libpng-dev

配置并编译

cd Pangolin-0.6
mkdir build && cd build
cmake -DCPP11_NO_BOOST=1 ..
make -j
make install

4.安装OpenCV3.4.1

接下来去opencv官网找到opencv3.4.1的源码包 

下载下来后,进行编译安装,首先需要安装一些依赖和工具

apt-get install build-essential libgtk2.0-dev libgtk-3-dev libjpeg-dev libpng-dev libvtk7-dev libtiff5-dev libjasper-dev libopenexr-dev libtbb-dev

其中安装libjasper-dev时会报错,找不到软件包

因此,首先

vi /etc/apt/sources.list

在最后一行加上

deb http://security.ubuntu.com/ubuntu xenial-security main

然后

apt-get update
apt-get install libjasper-dev

即可

依赖安装好后,进行正式编译安装

mkdir build && cd build
cmake --DCMAKE_BUILD_TYPE=Release -DWITH_CUDA=OFF -DBUILD_DOCS=OFF -DBUILD_PACKAGE=OFF -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_opencv_apps=OFF -DBUILD_opencv_calib3d=ON -DBUILD_opencv_cudaoptflow=OFF -DBUILD_opencv_dnn=OFF -DBUILD_opencv_dnn_BUILD_TORCH_IMPORTER=OFF -DBUILD_opencv_features2d=ON -DBUILD_opencv_flann=ON -DBUILD_opencv_java=ON -DBUILD_opencv_objdetect=ON -DBUILD_opencv_python2=OFF -DBUILD_opencv_python3=OFF -DBUILD_opencv_photo=ON -DBUILD_opencv_stitching=ON -DBUILD_opencv_superres=ON -DBUILD_opencv_shape=ON -DBUILD_opencv_videostab=OFF -DBUILD_PROTOBUF=OFF -DWITH_1394=OFF -DWITH_GSTREAMER=OFF -DWITH_GPHOTO2=OFF -DWITH_MATLAB=OFF -DWITH_NVCUVID=OFF -DWITH_OPENCL=OFF -DWITH_OPENCLAMDBLAS=OFF -DWITH_OPENCLAMDFFT=OFF -DWITH_TIFF=OFF -DWITH_VTK=OFF -DWITH_WEBP=OFF ..
make -j6
make install

 查看是否安装成功

pkg-config --modversion opencv

 5.安装g2o、DBoW2

进入到/dspslam/DSP-SLAM-master/Thirdparty文件夹下,找到g2o、DBoW2的文件夹,分别进行安装

安装g2o

cd g2o
mkdir build && cd build
cmake -DEigen3_DIR="$/usr/local/share/eigen3/cmake" ..
make -j6

安装DBoW2

cd DBoW2 
mkdir build && cd build
cmake ..
make -j6

6.创建python虚拟环境

按照常规来说,应该是按照build_cuda113.sh的内容来以此执行的,但是我遇到了网络连接的问题,因此我修改了coda的下载地址,更改为清华源了

参考链接
接着创建一个虚拟环境,命名为dspslam
 

conda create --name=dspslam python=3.7

接着按照environment_cuda113.yml文件的内容,挨个安装(使用conda install 安装dependencies, pip insatll pip部分),但是安装到pytorch时,遇到问题,因此果断选择采用离线安装包的方式进行安装,根据版本要求,分别下载以下三个(因为其他都能正常装),地址为

torch.whl地址

torchvision.whl地址

cudatoolkit地址

之后直接pip install xxx.whlconda install --offline xxx.tar.bz2即可,进行验证

7.安装mmdetection and mmdetection3d

pip install pycocotools==2.0.1
pip install mmcv-full==1.4.0 -f https://download.openmmlab.com/mmcv/dist/cu113/torch1.10.0/index.html
pip install mmdet==2.14.0
pip install mmsegmentation==0.14.1

然后进入DSP-SLAM/Thirdparty/下,运行指令

git clone https://github.com/JingwenWang95/mmdetection3d.git


然后

cd mmdetection3d
pip install -v -e .


中间会频繁出现几个warning警告,但是无妨,最终成功安装!

8.编译DSP-SLAM

编译DSP-SLAM

 按照build_cuda113.sh的内容,首先进入DSP-SLAM目录下

mkdir build && cd build

 sh文件里说要运行下面两条命令,是有关pybind11的,我仔细查了一下,发现他的意思就是获得当前conda虚拟环境的路径,因此我对他进行了修改(不需要执行下面两句,而是修改cmake..的参数)

conda_python_bin='which python'
conda_env_dir="$(dirname "$(dirname "$conda_python_bin")")"

编译DSP-SLAM(修改后的conda_env_dir我直接索引到他的路径)

cmake -DEigen3_DIR="/usr/local/share/eigen3/cmake" -DPYTHON_LIBRARIES="/root/anaconda3/envs/dspslam/lib/libpython3.7m.so" -DPYTHON_INCLUDE_DIRS="/root/anaconda3/envs/dspslam/include/python3.7m" ..

会出现warning,应该不会出现问题,继续make

准备weights和data

新建weights和data文件夹,并下载相关weights

下载链接

最后的DSP-SLAM文件结构如下

尝试运行代码

./dsp_slam Vocabulary/ORBvoc.bin configs/KITTI04-12.yaml data/kitti/07 map/kitti/

成功运行!!!

Save and visualize map

会得到三个文件

之后,根据脚本可视化

python3 extract_map_objects.py --config configs/config_kitti.json --map_dir map/kitti --voxels_dim 64

它将在map/kitti下创建一个新的目录,并将所有的网格和物体姿态存储在那里。然后,你可以通过运行以下命令来可视化重建的关节地图:

python3 visualize_map.py --config configs/config_kitti.json --map_dir map/kitti 

over

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

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

相关文章

BERT 微调中文 NER 模型

查看GPU数量和型号 import torch# 检查CUDA是否可用 if torch.cuda.is_available():print("CUDA is available!")# 还可以获取CUDA设备的数量device_count torch.cuda.device_count()print(f"Number of CUDA devices: {device_count}")# 获取第一块GPU的…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用HDR功能(C#)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用HDR功能&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机通过NEOSDK进行图像压缩的技术背景代码分析第一步&#xff1a;先引用合适的类文件第二步&#xff1a;通过NEOAPI SDK使用HDR高动态范围功能第二步&#xff1a…

设计模式学习(五)——《大话设计模式》

文章目录 设计模式学习&#xff08;五&#xff09;——《大话设计模式》UML类图主要组成元素绘制UML类图的步骤如何绘制好&#xff35;&#xff2d;&#xff2c;类图确定类定义关系使用标准符号添加注释工具选择复审与优化求反馈 UML类图和设计模式的关系根据设计模式绘制UML类…

计算机网络----由概述到ICMP

麻烦先把五个层次刻进DNA里面 应用层 传输层 网络层 数据链路层 物理层 网络层和传输层的区别 网络层:设备到设备 传输层:端口到端口&#xff0c;进程到进程 物理层: 考虑的是怎样才能在连接计算机的传输媒体上传输比特流&#xff0c; 主要考虑的是屏蔽掉不同传输媒体和通信手段…

高级IO和5种IO模型

目录 1. 高级IO1.1 IO的基本概念1.2 OS如何得知外设当中有数据可读取1.3 OS如何处理从网卡中读取到的数据包1.4 IO的步骤 2. 五种IO模型2.1 利用钓鱼来理解2.2 阻塞IO2.3 非阻塞IO2.4 信号驱动IO2.5 IO多路转接2.6 异步IO 3. 高级IO的概念3.1 同步通信 VS 异步通信3.2 阻塞 VS …

k-means聚类算法的MATLAB实现及可视化

K-means算法是一种无监督学习算法&#xff0c;主要用于数据聚类。其工作原理基于迭代优化&#xff0c;将数据点划分为K个集群&#xff0c;使得每个数据点都属于最近的集群&#xff0c;并且每个集群的中心&#xff08;质心&#xff09;是所有属于该集群的数据点的平均值。以下是…

数据仓库元数据管理

数据仓库元数据管理是数据仓库中至关重要的一环&#xff0c;它涉及到对数据仓库中的元数据进行收集、存储、组织、查询、维护和安全管理等方面的工作。本文将介绍数据仓库元数据管理的定义、分类、应用、价值、管理方案、具体实施和挑战&#xff0c;以帮助读者更好地理解和应用…

STM32有什么高速接口吗?

STM32系列微控制器在高速接口方面也提供了一些强大的功能&#xff0c;虽然没有像Zynq那样的可编程逻辑部分&#xff0c;但有一些特性值得注意。我这里有一套嵌入式入门教程&#xff0c;不仅包含了详细的视频 讲解&#xff0c;项目实战。如果你渴望学习嵌入式&#xff0c;不妨点…

【数据结构与算法】用两个栈实现一个队列

题目 用两个栈&#xff0c;实现一个队列功能 add delete length 队列 用数组可以实现队列&#xff0c;数组和队列的区别是&#xff1a;队列是逻辑结构是一个抽象模型&#xff0c;简单地可以用数组、链表实现&#xff0c;所以数组和链表是一个物理结构&#xff0c;队列是一个逻…

【C语言笔记】strncpy()和strcpy()的异同点

文章目录 一&#xff0c;简介二&#xff0c;相同点&#xff1a;2.1 两者都用于将一个字符串复制到另一个字符串中。2.2 它们都以源字符串的结束符 \0 结尾。 三&#xff0c;不同点&#xff1a;3.1 指定复制的最大长度&#xff1a;3.2 处理目标缓冲区溢出的方式&#xff1a;3.3 …

Docker安装SQL Server 2022

官网&#xff1a;Docker&#xff1a;为 Linux 上的 SQL Server 安装容器 - SQL Server | Microsoft Learn 1. 拉取镜像 sudo docker pull mcr.microsoft.com/mssql/server:2022-latest 2. 运行docker容器 方式一&#xff1a;不挂载数据目录 docker run -e "ACCEPT_EUL…

python借助elasticsearch实现标签匹配计数

给定一组标签 [{“tag_id”: “1”, “value”: “西瓜”}, {“tag_id”: “1”, “value”: “苹果”}]&#xff0c;我想精准匹配到现有的标签库中存在的标签并记录匹配成功的数量。 标签id(tag_id)标签名(tag_name)标签值(tag_name )1水果西瓜1水果苹果1水果橙子2动物老虎 …

用python计算一个人的BMI

1 问题 一个人的身高是1.75m和体重是80.5kg&#xff0c;根据BMI公式&#xff08;体重除以身高的平方&#xff09;帮这个人计算他的BMI指数&#xff0c;并根据BMI指数&#xff1a;低于18.5是过轻&#xff0c;18.5-25是正常&#xff0c;25-28是过重&#xff0c;28-32是肥胖&#…

Go 单元测试基本介绍

文章目录 引入一、单元测试基本介绍1.1 什么是单元测试&#xff1f;1.2 如何写好单元测试1.3 单元测试的优点1.4 单元测试的设计原则 二、Go语言测试2.1 Go单元测试概要2.2 Go单元测试基本规范2.3 一个简单例子2.3.1 使用Goland 生成测试文件2.3.2 运行单元测试2.3.3 完善测试用…

easyexcel升级3.3.4失败的经历

原本想通过easyexcel从2.2.6升级到3.3.3解决一部分问题&#xff0c;结果之前的可以用的代码&#xff0c;却无端的出现bug 1 Sheet index (1) is out of range (0…0) 什么都没有改&#xff0c;就出了问题&#xff0c;那么问题肯定出现在easyexcel版本自身.使用模板填充的方式进…

conda新建环境报错An HTTP error occurred when trying to retrieve this URL.

conda新建环境报错如下 cat .condarc #将 .condarc文件中的内容删除&#xff0c;改成下面的内容 vi .condarc channels:- defaults show_channel_urls: true default_channels:- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main- https://mirrors.tuna.tsinghua.…

权限管理Ranger详解

文章目录 一、Ranger概述与安装1、Ranger概述1.1 Ranger介绍1.2 Ranger的目标1.3 Ranger支持的框架1.4 Ranger的架构1.5 Ranger的工作原理 2、Ranger安装2.1 创建系统用户和Kerberos主体2.2 数据库环境准备2.3 安装RangerAdmin2.4 启动RangerAdmin 二、Ranger简单使用1、安装 R…

Cesium之home键开关及相机位置设置

显隐控制 设置代码中的homeButton var TDT_IMG_C "https://{s}.tianditu.gov.cn/img_c/wmts?servicewmts&requestGetTile&version1.0.0" "&LAYERimg&tileMatrixSetc&TileMatrix{TileMatrix}&TileRow{TileRow}&TileCol{TileCol}…

【Java NIO】那NIO为什么速度快?

Java IO在工作中其实不常用到&#xff0c;更别提NIO了。但NIO却是高效操作I/O流的必备技能&#xff0c;如顶级开源项目Kafka、Netty、RocketMQ等都采用了NIO技术&#xff0c;NIO也是大多数面试官必考的体系知识。虽然骨头有点难啃&#xff0c;但还是要慢慢消耗知识、学以致用哈…

# RAG | Langchain # Langchain RAG:打造Markdown文件的结构化分割解决方案

【文章简介】 在信息技术的现代背景下&#xff0c;高效地处理和分析文本数据对于知识获取和决策支持至关重要。Markdown文件因其易读性和高效性&#xff0c;在文档编写和知识共享中占据了重要地位。然而&#xff0c;传统的文本处理方法往往忽视了Markdown的结构化特性&#xff…