DynaSLAM环境配置过程详解(Ubuntu16.04+python2.7+Tensorflow-gpu1.4.0+Keras2.0.8)

电脑硬件配置及软件安装版本说明:

CPU: i7-10750H
显卡:RTX2060
各软件安装版本:
Nvidia-Driver Version: 440.82
CUDA Version: 8.0
Cudnn Version:6.0
Python Version: 2.7.12
Eigen Version: 3.1.0
TensorFlow-gpu 1.4.0+Keras2.0.8

安装显卡驱动+CUDA8.0+Cudnn6.0:

这些基于Ubuntu的深度学习环境配置我在另一篇博客中有详细说明,在这里不在赘述,参考如下资料即可。

  • 另一篇博客地址:
    Ubuntu16.04配置Mask-RCNN环境

  • CUDA历史版本下载:
    https://developer.nvidia.com/cuda-toolkit-archive

  • Cudnn历史版本下载:
    https://developer.nvidia.com/rdp/cudnn-archive

安装ORB-SLAM2依赖

1.安装Pangolin

sudo apt-get install libglew-dev
sudo apt-get install cmake
cd [path-to-pangolin(Pangolin路径)]//打开解压后的Pangolin文件夹
mkdir build
cd build
cmake ..
make(或者用cmake --build .)
sudo make install (.h默认安装到了/usr/local/include)

2.安装OpenCV
官方网站下载OpenCV-2.4.11

sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
cd ~/opencv-2.4.11
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -DWITH_CUDA=OFF ..
make -j10
sudo make install

其中在Cmake时添加的DWITH_CUDA=OFF选项时不使用CUDA加速,由于我显卡是Turing架构的RTX2060,如果使用CUDA加速时会发生下列错误:

Unsupported gpu architecture 'compute_11'

找到Opencv/Cmake/OpenCVDetectCUDA.cmake文件,如下图所示。
DynaSLAM环境配置过程详解(Ubuntu16.04+python2.7+Tensorflow-gpu1.4.0+Keras2.0.8)_第1张图片
发现里面并没有Turing选项,在Github上的OpenCV的各版本中查找发现,包含Turing架构的最旧版本时OpenCV-3.4.4,下载下来编译不会报这个错误了,但还是会报其他错误。
3.安装Eigen3.1.0
官方网站下载源码:https://gitlab.com/libeigen/eigen/-/tree/3.1.0

cd eigen
mkdir build
cd build
cmake ..
sudo make install
sudo cp -r /usr/local/include/eigen3 /usr/include 

4.安装keras2.0.8

sudo pip2 install keras==2.0.8

命令执行后会报错DynaSLAM环境配置过程详解(Ubuntu16.04+python2.7+Tensorflow-gpu1.4.0+Keras2.0.8)_第2张图片从报错信息可以发现,是scipy安装出现错误,上网查询说新版本的scipy已经不支持python2了,所以会安装失败。
谷歌后找到了三条命令,输入之后竟然神奇的就能安装成功了,以后有时间再分析原因:

sudo apt update  
sudo apt install --no-install-recommends python2.7-minimal python2.7  
sudo apt install python-numpy python-scipy

参考网页:
网址1
网址2
再次输入命令后,发现可以成功安装:

sudo pip2 install keras==2.0.8

5.安装Tensorflow
由于此时使用的时python2.7版本,而新版本的numpy和scipy已不支持Python2,而采用pip install tensorflow-gpu==1.4.0 命令安装时会自动下载最新的numpy安装,导致安装错误。
因此需要手动安装旧版本的numpy,再下载tensorflow安装包进行手动安装

pip2 install numpy==1.16.1

点击链接下载安装包:https://mirrors.tuna.tsinghua.edu.cn/tensorflow/linux/gpu/tensorflow_gpu-1.4.0rc1-cp27-none-linux_x86_64.whl
输入命令安装tensorflow

sudo pip2 install tensorflow_gpu-1.4.0rc1-cp27-none-linux_x86_64.whl

发生如下错误:
DynaSLAM环境配置过程详解(Ubuntu16.04+python2.7+Tensorflow-gpu1.4.0+Keras2.0.8)_第3张图片错误知识时Markdown安装错误,可能时python不支持系统正在下载的最新的markdown-3.3.2版本,可以看到支持的最低版本是2.6.8,于是手动安装:

pip2 install Markdown==2.6.8

再次执行上次安装命令即可安装成功。
测试Tensorflow

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
sess.run(hello)

出现错误:

ImportError: libcusolver.so.8.0: cannot open shared object file: No such file or directory

输入下列命令解决:参考博客

sudo ldconfig /usr/local/cuda/lib64

再次测试Tensorflow,出现如下错误:

import moudle error! no moudle named mock.

运行命令安装mock即可:

pip install mock==0.8.0

再次测试Tensorflow,成功输出“Hello ,TensorFlow!", 安装完成。
安装MaskRCNN

git clone https://github.com/matterport/Mask_RCNN.git
cd Mask_RCNN
sudo pip2 install -r requirements.txt

此时会出现错误,打开requirements.txt
因为我们事先已经安装好TensorFlow1.4和Keras2.0.8了,为了避免在此重新安装,需要将requirements.txt中的这两项去除掉。
DynaSLAM环境配置过程详解(Ubuntu16.04+python2.7+Tensorflow-gpu1.4.0+Keras2.0.8)_第4张图片
显示cpython、matplotlib等等一些包安装错误,还有因为系统默认安装最新版本的包,其不支持python2.7,下面进行手动安装:

python2 install cpython
sudo apt-get install python-matplotlib

继续执行sudo pip2 install -r requirements.txt,发现上述两个包满足要求,但是接下来安装scikit-image时还会报错:

ImportError: No module named builtins
pip install future

上述问题可以解决,然后进行手动安装:

pip install --upgrade pip
pip install pillow ==  4.3.0
pip install scikit-image  == 0.11.3
pip install opencv-python
pip install h5py
pip install imgaug

安装imagaug时出现如下错误:

ERROR: scikit-image 0.14.5 has requirement matplotlib>=2.0.0, but you'll have matplotlib 1.5.1 which is incompatible.

运行下列命令重新安装matplotlib解决:

 pip2 install matplotlib==2.0.0

下面安装Ipython[all]包含的一些库:

pip2 install notebook
pip2 install qtconsole
pip2 install ipywidgets
pip2 install Sphinx

最后再次执行下面命令:

sudo pip2 install -r requirements.txt

发现不会报错,至此MaskRcnn安装成功。

安装pycocotools

git clone https://github.com/waleedka/coco.git
cd coco/PythonAPI
make
sudo make install

编译DynaSLAM

下载源代码:

  • 这里注意要下载含carla的branch,作者的cmakelists中包含了carla的编译配置,然而在master中删去了carla的源文件,不然编译会报错。点击链接下载正确版本的DynaSLAM
  • 下载mask_rcnn_coco.h5权重:

将coco/PythonAPI下的pycocotools文件夹和mask_rcnn_coco.h5放到Dynaslam的src/python目录下。打开Check.py,将第17行的ROOT_DIR = “src/python”,改为ROOT_DIR = “./”,保存退出。
运行命令:

python Check.py

出现下列错误:

ImportError: libcusolver.so.8.0: cannot open shared object file: No such file or directory

执行命令

sudo ldconfig /usr/local/cuda/lib64

继续python Check.py,执行结果如下图所示,安装成功。
DynaSLAM环境配置过程详解(Ubuntu16.04+python2.7+Tensorflow-gpu1.4.0+Keras2.0.8)_第5张图片
开始编译:

cd DynaSLAM
bash  build.sh

cmake DynaSLAM时出现如下错误:

has asked CMake to find a package configuration file provided by  "Qt5Widgets", but CMake did not find one.

这是因为电脑没有安装Qt,下面进行安装:
sudo apt-get install cmake qt5-default qtcreator
用qmake -v查看安装的版本
单独对DynaSLAM进行编译:

cd DynaSLAM
cd build
make -j

出现下列错误:
DynaSLAM环境配置过程详解(Ubuntu16.04+python2.7+Tensorflow-gpu1.4.0+Keras2.0.8)_第6张图片

重新编译

sh ./build.sh

配置完成。

运行DynaSLAM

DynaSLAM代码写的有些不完善,直接运行会出现错误,要进行一系列的修改:
1.DynaSLAM、/Thirdpary/DBoW2和/Thirdparty/g2o三个文件夹下的CMakeLists.txt中均有**-march=native**选项,在博客上查询,-march=native选项让编译器获取当前机器的cpu架构,并生成该架构的最优指令集,而不会生成兼容的指令集,达到优化指令集的目的。这样做的好处就是可以给程序加速,缺点是兼容性差,容易引发Segmentation Fault.
这里将-march=native删除。
参考博客:-march=native引发的segmentation fault问题
2、将Viewer.cc中Run()函数中的代码进行修改:

cv::imshow("DynaSLAM: Dynamic Frame", im_dyn);

改成下面格式

 if(!im_dyn.empty())
 {
       cv::imshow("DynaSLAM: Dynamic Frame", im_dyn);
 }

3、MaskNet.cc中SegmentDynObject()函数
将最后一句GetSegmentation(image);删除掉。
MaskNet中GetSegmentation函数定义如下:

 cv::Mat GetSegmentation(cv::Mat &image, std::string dir="no_save", std::string rgb_name="no_file");

但是这里调用时只传一个image参数,代码实际跑起来时会报错。因此需要更改,但是我在其他博客中没有看到有对这里更改的,不知他们是怎么跑起来的。
4、将DynaSLAM/src/python下的MaskRCNN.cc中ROOT_DIR改为绝对路径,将MaskSetting.yaml中py_path同样改为绝对路径,不然第三方调用会失败:

 #py_path: "./src/python/"
 py_path: "/home/shiqi/DynaSLAM/src/python/"
 #ROOT_DIR = "./src/python"
 ROOT_DIR = "/home/shiqi/DynaSLAM/src/python/"

最后按照Github官网上直接运行就可以了,应该不会出现什么错误了。

你可能感兴趣的:(Ubuntu环境搭建)