使用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,一经查实,立即删除!

相关文章

高级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;是所有属于该集群的数据点的平均值。以下是…

STM32有什么高速接口吗?

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

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

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

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…

【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…

KNIME 国际化支持投票

你的投票也许能让 KNIME 中文化快一点点。 i18n 是个很搞笑的单词&#xff0c;它是英文 internationalization 国际化的缩写。18 指的是首字母i和末字母n中间有18个字母。另外还有什么 K8s 也是一样&#xff0c;中间省去了8个字母 ... 真是懒的可以。指北君还想起一个类似的笑话…

数字革命的先锋:Web3对社会的影响

引言 在信息技术飞速发展的当下&#xff0c;Web3作为一个新兴的互联网模式&#xff0c;正在逐渐改变我们的生活方式、商业模式和社会结构。本文将深入探讨Web3的核心特点、它在各个领域中的应用以及对社会产生的深远影响。 1. Web3的核心特点 1.1 去中心化 Web3强调去中心化…

记【k8s】:访问 Prometheus UI界面:kubernetes-etcd (0/1 up) Error : out of bounds

记【k8s】&#xff1a;访问 Prometheus UI界面&#xff1a;kubernetes-etcd &#xff08;0/1 up&#xff09; Error &#xff1a; out of bounds 1、报错详情2、解决方法 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 出现 “out of bound…

Synchronized锁详解(全网最细)

目录 以下知识基于HotSpot虚拟机实现 1.前置知识 1.1 锁的作用 1.2 Java中常见的锁类型 1.3 锁的重入 2.使用场景 2.1 修饰实例方法 2.1.1 用法 2.1.2 原理 2.1.3 特点 2.2 修饰静态方法 2.2.1 用法 2.2.2 原理 2.3 修饰代码块 2.3.1 用法 3.原理 3.1 对象锁 …

数字电路(四,五章总结)

四.组合逻辑电路设计 由波形图列真值表&#xff0c;之 后画出卡诺图&#xff0c;写出最简逻辑表达式。 卡诺图化简的时候圈住的部分如果某个字母有0又有1的话这个字母删掉&#xff0c;写出其他两个字母。 如下图中黄圈A有0又有1则删除A&#xff0c;这样黄圈代表BC;同理绿圈代…

SpringBoot项目基于java的教学辅助平台

采用技术 SpringBoot项目基于java的教学辅助平台的设计与实现~ 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBootMyBatis 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 页面展示效果 学生信息管理 教师信息管理 课程信息管理 科目分类管…

Pytorch入门实战 P06-调用vgg16模型,进行人脸预测

目录 1、本文内容&#xff1a; 1、内容&#xff1a; 2、简单介绍下VGG16&#xff1a; 3、相关其他模型也可以调用&#xff1a; 2、代码展示&#xff1a; 3、训练结果&#xff1a; 1、不同优化器&#xff1a; ①【使用SGD优化器】 ②【使用Adam优化器】 ③Adam 动态学…

(BERT蒸馏)TinyBERT: Distilling BERT for Natural Language Understanding

文章链接&#xff1a;https://arxiv.org/abs/1909.10351 背景 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;预训练语言模型&#xff08;如BERT&#xff09;通过大规模的数据训练&#xff0c;已在多种NLP任务中取得了卓越的性能。尽管BERT模型在语言理解和生成…

深度学习 Lecture 7 迁移学习、精确率、召回率和F1评分

一、迁移学习&#xff08;Transfer learning) 用来自不同任务的数据来帮助我解决当前任务。 场景&#xff1a;比如现在我想要识别从0到9度手写数字&#xff0c;但是我没有那么多手写数字的带标签数据。我可以找到一个很大的数据集&#xff0c;比如有一百万张图片的猫、狗、汽…

论文笔记:(INTHE)WILDCHAT:570K CHATGPT INTERACTION LOGS IN THE WILD

iclr 2024 spotlight reviewer 评分 5668 1 intro 由大型语言模型驱动的对话代理&#xff08;ChatGPT&#xff0c;Claude 2&#xff0c;Bard&#xff0c;Bing Chat&#xff09; 他们的开发流程通常包括三个主要阶段 预训练语言模型在被称为“指令调优”数据集上进行微调&…