使用docker配置DSP-SLAM

news2024/11/25 0:33:49

一.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.coloradmin.cn/o/1600600.html

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

相关文章

Matlab方程组拟合【案例源码+视频教程】

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《复杂函数拟合案例分享》本专栏旨在提供 1.以案例的形式讲解各类复杂函数拟合的程序实现方法&#xff0c;并提供所有案例完整源码&#xff1b;2.…

记一次Mysql数据库宕机This could be because you hit a bug.

Hi I’m Shendi 今天收到消息说所有软件不能用了&#xff0c;网页都打不开&#xff0c;遇到了问题&#xff0c;于是在这里记录一下 记一次Mysql数据库宕机This could be because you hit a bug. 起因 为了节省成本&#xff0c;对于小公司而言服务器数量通常不会太多&#xff…

HTTP协议安全传输教程

HTTP协议有多个版本&#xff0c;包括但不限于HTTP/0.9、HTTP/1.0、HTTP/1.1、HTTP/2和HTTP/3。这些版本各自具有不同的特点和改进&#xff0c;以适应网络技术的发展和满足不同的需求。例如&#xff0c;HTTP/1.0使用文本格式传输数据&#xff0c;简单易用且兼容性好&#xff0c;…

OpenCV基本图像处理操作(六)——直方图与模版匹配

直方图 cv2.calcHist(images,channels,mask,histSize,ranges) images: 原图像图像格式为 uint8 或 float32。当传入函数时应 用中括号 [] 括来例如[img]channels: 同样用中括号括来它会告函数我们统幅图 像的直方图。如果入图像是灰度图它的值就是 [0]如果是彩色图像 的传入的…

热门动画插件DoTween的使用

热门动画插件DoTween的使用 做游戏基本都会用到插件&#xff0c;它能让你的效率更高&#xff0c;因为它里面都是写好了的方法&#xff0c;只要用就可以了。在众多动画插件中&#xff0c;DoTween脱颖而出&#xff0c;因为它用起来很简单也很方便&#xff0c;自然用的人就多了。…

计算机视觉动作识别——YOWO用于实时时空动作定位与识别的算法解析

摘要 时空动作定位要求将两种信息源整合到设计的架构中&#xff1a;(1) 来自先前帧的时间信息和(2) 来自关键帧的空间信息。当前的最先进方法通常使用单独的网络提取这些信息&#xff0c;并使用额外的机制进行融合以获得检测结果。YOWO是一个用于视频流中实时时空动作定位的统…

软件杯 深度学习图像修复算法 - opencv python 机器视觉

文章目录 0 前言2 什么是图像内容填充修复3 原理分析3.1 第一步&#xff1a;将图像理解为一个概率分布的样本3.2 补全图像 3.3 快速生成假图像3.4 生成对抗网络(Generative Adversarial Net, GAN) 的架构3.5 使用G(z)生成伪图像 4 在Tensorflow上构建DCGANs最后 0 前言 &#…

解剖this指针

目录 this指针的理解 1. this指针的用处 2.this指针的使用 3.this指针的使用 this指针来源 this指针的理解 通常在class定义时要用到类型变量自身时&#xff0c;因为这时候还不知道变量名&#xff08;为了通用也不可能固定实际的变量名&#xff09;&#xff0c;就用this这样…

【前端】1. HTML【万字长文】

HTML 基础 HTML 结构 认识 HTML 标签 HTML 代码是由 “标签” 构成的. 形如: <body>hello</body>标签名 (body) 放到 < > 中大部分标签成对出现. <body> 为开始标签, </body> 为结束标签.少数标签只有开始标签, 称为 “单标签”.开始标签和…

微软正式发布Copilot for Security

微软公司近日宣布&#xff0c;其备受期待的安全自动化解决方案——Copilot for Security现已全面上市&#xff0c;面向全球用户开放。这一创新工具的推出标志着微软在提升企业安全防护能力方面迈出了重要一步&#xff0c;同时也为安全专业人士提供了强大的支持。 Copilot for …

深入理解插入排序:直接插入排序与希尔排序

文章目录 深入理解插入排序&#xff1a;直接插入排序与希尔排序直接插入排序算法描述工作原理性能分析 希尔排序算法描述实现代码性能分析 比较直接插入排序与希尔排序结论 深入理解插入排序&#xff1a;直接插入排序与希尔排序 排序算法是计算机科学中的基石之一&#xff0c;…

【芯片介绍】中微半导高性能车规级MCU BAT32A233

中微半导体&#xff08;深圳&#xff09;股份有限公司已推出车规MCU新品——BAT32A233&#xff0c;该产品具有小资源、高性能、支持硬件LIN2.2接口的性能优势&#xff0c;非常适合汽车的门、窗、灯、传感器、控制面板、组合开关等小巧、灵活的部件应用场景。 BAT32A233基于Ar…

无线网络安全之WiFi Pineapple初探

背景 WiFi Pineapple&#xff08;大菠萝&#xff09;是由国外无线安全审计公司Hak5开发并售卖的一款无线安全测试神器。集合了一些功能强大的模块&#xff0c;基本可以还原钓鱼攻击的全过程。在学习无线安全时也是一个不错的工具&#xff0c;本文主要讲WiFi Pineapple基础配置…

使用SpringBoot3+Vue3开发公寓管理系统

项目介绍 公寓管理系统可以帮助公寓管理员更方便的进行管理房屋。功能包括系统管理、房间管理、租户管理、收租管理、房间家具管理、家具管理、维修管理、维修师傅管理、退房管理。 功能介绍 系统管理 用户管理 对系统管理员进行管理&#xff0c;新增管理员&#xff0c;修改…

数据分析(2)

数据分析&#xff08;2&#xff09; 本文介绍pandas的另一种数据类型DataFrame,中文叫数据框 DataFrame 定义&#xff1a; DataFrame是一个二维的矩阵数据表&#xff0c;通过行和列&#xff0c;可以定位一个值。 在某种程度上&#xff0c;可以认为DataFrame是“具有相同ind…

C语言单向链表的经典算法

1.分割链表 2.移除链表元素 3.反转链表 4.合并两个有序链表 5.链表的中间结点 6.环形链表的约瑟夫问题 1.分割链表: 1.思路&#xff1a;创建新链表&#xff0c;小链表和大链表。如图 代码如下 /*** Definition for singly-linked list.* struct ListNode {* int val…

JVM虚拟机(九)如何开启 GC 日志

目录 一、引言二、开启 GC 日志三、解析 GC 日志四、优化建议 一、引言 在 Java 应用程序的运行过程中&#xff0c;垃圾收集&#xff08;Garbage Collection&#xff0c;简称 GC&#xff09;是一个非常重要的环节。GC 负责自动管理内存&#xff0c;回收不再使用的对象所占用的…

用海外云手机高效率运营TikTok!

很多做国外社媒运营的公司&#xff0c;想要快速引流&#xff0c;往往一个账号是不够的&#xff0c;多数都是矩阵养号的方式&#xff0c;运营多个TikToK、Facebook、Instagram等账号&#xff0c;慢慢沉淀流量变现&#xff0c;而他们都在用海外云手机这款工具&#xff01; 海外云…

HTML 入门

HTML 简介 1. 什么是 HTML&#xff1f; 全称&#xff1a;HyperText Markup Language&#xff08;超文本标记语言&#xff09;。 超文本&#xff1a;暂且简单理解为 “超级的文本”&#xff0c;和普通文本比&#xff0c;内容更丰富。 标 记&#xff1a;文本要变成超文本&…

『FPGA通信接口』串行通信接口-SPI

文章目录 1.SPI简介2.控制时序3.Dual、Qual模式4.例程设计与代码解读5.SPI接口实战应用5.1时序要求5.2仿真时序图5.3代码设计 6.传送门 1.SPI简介 SPI是串行外设接口&#xff08;Serial Peripheral Interface&#xff09;的缩写&#xff0c;通常说SPI接口或SPI协议都是指SPI这…