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
这些基于Ubuntu的深度学习环境配置我在另一篇博客中有详细说明,在这里不在赘述,参考如下资料即可。
另一篇博客地址:
Ubuntu16.04配置Mask-RCNN环境
CUDA历史版本下载:
https://developer.nvidia.com/cuda-toolkit-archive
Cudnn历史版本下载:
https://developer.nvidia.com/rdp/cudnn-archive
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文件,如下图所示。
发现里面并没有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
命令执行后会报错从报错信息可以发现,是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
发生如下错误:
错误知识时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中的这两项去除掉。
显示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安装成功。
git clone https://github.com/waleedka/coco.git
cd coco/PythonAPI
make
sudo make install
下载源代码:
将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,执行结果如下图所示,安装成功。
开始编译:
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
重新编译
sh ./build.sh
配置完成。
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官网上直接运行就可以了,应该不会出现什么错误了。