MaskFusion(已开源)环境搭建与配置(16.04)

本文章是和srj同学一起讨论学习中产生的,感谢。

MaskFusion: Real-Time Recognition, Tracking and Reconstruction of Multiple Moving Objects
MaskFusion:实时多移动物体识别,跟踪和重建

GitHub地址,大佬直接参考这里,本文章也是基于作者GitHub来编译调试。

      先来介绍一下MaskFusion,不,是翻译:MaskFuison是一个实时的,物体感知的,语义并且动态的RGB-D SLAM系统,超过了只会输出几何地图的传统SLAM,MaskFusion可以在跟踪,重建时识别分割并分配环境中的语义类别标签给场景中不同的物体,甚至这些物体在镜头前自主运动时也可以做到。厉害额,动态场景的三维重建。

        当一个RGB-D相机扫描一个杂乱场景时,基于图像的实例级语义分割将创造语义物体masks(掩码?),能够实时的物体检测,并为世界地图构建一个物体级的表示。不同于之前基于识别的SLAM系统,MaskFusion不需要先验知识和可以识别处理多个独立运动的已知物体模型。也不同于近期的语义能够使SLAM系统实现体素级语义分割,MaskFusion充分利用实例级语义分割来使语义标签融入到物体感知的地图中。本文展现了增强现实应用,展示了MaskFusion地图输出的独特功能:实例感知,语义和动态。

 

搭建MaskFusion开源代码环境学习

(这里一定要打开 开源代码 中的build.sh脚本自己阅读并搭建,下文仅是参考。但是如果有一些第三方库已经安装,你需要在CMakeLists.txt中修改路径,将deps路径修改为自己的路径)

 

配置:

+ NVIDIA® GeForce® GTX 1060

+ 第八代i5

1.安装依赖项
(这里如果选择libjpeg-dev后边我会遇到一个库版本冲突,后来卸载了并安装了所需版本)

sudo apt-get update

sudo apt-get install -y \
    build-essential \
    cmake \
    freeglut3-dev \
    g++-4.9 \
    gcc-4.9 \
    git \
    libeigen3-dev \
    libglew-dev \
    libjpeg-dev \
    libsuitesparse-dev \
    libudev-dev \
    libusb-1.0-0-dev \
    openjdk-8-jdk \
    unzip \
    zlib1g-dev \
    cython3

--安装CUDA

CUDA是显卡厂商NVIDIA推出的运算平台,可参考这里。我安装的9.0版本。

Tensorflow不同版本要求与CUDA及CUDNN版本对应关系

2.搭建虚拟环境

 sudo -H pip3 install virtualenv

作者安装的virtualenv来生成虚拟环境,我用的anaconda3,如果你选择和我一样的工具,图形界面也可以安装,需要在编译生成的MaskRCNN.py中修改成这样:注释掉前边,因为在anaconda3中没有activate_this.py这个文件,你需要先进入虚拟环境再运行。

## Optionally, activate virtual environment
#if PYTHON_VE_PATH != "":
#  ve_path = os.path.join(PYTHON_VE_PATH, 'bin', 'activate_this.py')
#  exec(open(ve_path).read(), {'__file__': ve_path})

# Optionally, select GPU # this approach did not work
if "0" != "":
  os.environ["CUDA_VISIBLE_DEVICES"] = "0"
  os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"

在virtualenv配置虚拟环境(pip速度慢可修改国内源)

virtualenv python-environment
source python-environment/bin/activate
pip3 install pip --upgrade
pip3 install tensorflow-gpu==1.8.0
pip3 install scikit-image
pip3 install keras
pip3 install IPython
pip3 install h5py
pip3 install cython
pip3 install imgaug
pip3 install opencv-python
ln -s python-environment/lib/python3.5/site-packages/numpy/core/include/numpy Core/Segmentation/MaskRCNN

【安装 Tensorflow】接上边anaconda教程

到这里 Tensorflow 的安装就非常简单了,可以在系统中用 pip 也可以在 anaconda 虚拟环境中安装

  • pip 安装

    # 仅安装cpu版本 python2.x
    $ pip install tensorflow
    # python3.x
    $ pip3 install tensorflow
    # 安装gpu版本 python2.x
    $ pip install tensorflow-gpu
    # python3.x
    $ pip3 install tensorflow-gpu
  • anaconda安装

    # 激活环境
    # 下面的`$YOUR_ENV`替换成你自己的,没有的话要生成一个新的环境,可以参考下面注释的例子
    # `conda create -n tensorflow pip python=2.7 # or python=3.3, etc.`
    # 这样会构建一个名为 tensorflow,python 是2.7版本的虚拟环境
    # 换名字很简单,换python版本的话也只需要将2.7改变即可,比如改变成3.6
    $ source activate $YOUR_ENV
    # 在环境中安装tensorflow,注意这里的tfBinaryURL需要根据需求替换,后面详述
    ($YOUR_ENV)$ pip install --ignore-installed --upgrade tfBinaryURL

    tfBinaryURL 以在https://tensorflow.google.cn/install/install_linux#the_url_of_the_tensorflow_python_package选择

验证安装

终端中打开 python 解释器,运行下面命令成功即可

# Python
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))

出现问题

  • 更全面的 Tensorflow 安装页面 https://tensorflow.google.cn/install/
  • 检查硬件配置是否满足需求,GPU版本的 Tensorflow 需要计算能力在 3.5 及以上的显卡,可以在这里 https://developer.nvidia.com/cuda-gpus 查到自己的显卡计算能力
  • 在 Tensorflow 的 Github issues 里面寻找类似问题及解决方案

 

2.搭建编译依赖项(Git下载慢可修改自行搜索)

在maskfusion目录下新建deps路径,这个路径在多个CMakelists.txt文件中有写,如果一些库已经安装,请自行修改为自己的路径。

  # Build dependencies
  mkdir -p deps
  cd deps

(a) Opencv 是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上(个人建议一起安装contrib[拓展],自行搜索教程,我这里并没有按照作者的来做)

git clone --branch 3.4.1 --depth=1 https://github.com/opencv/opencv.git
  cd opencv
  mkdir -p build
  cd build
  cmake \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_INSTALL_PREFIX="`pwd`/../install" \
    \
    `# OpenCV: (building is not possible when DBUILD_opencv_video/_videoio is OFF?)` \
    -DWITH_CUDA=OFF  \
    -DBUILD_DOCS=OFF  \
    -DBUILD_PACKAGE=OFF \
    -DBUILD_TESTS=OFF  \
    -DBUILD_PERF_TESTS=OFF  \
    -DBUILD_opencv_apps=OFF \
    -DBUILD_opencv_calib3d=OFF  \
    -DBUILD_opencv_cudaoptflow=OFF  \
    -DBUILD_opencv_dnn=OFF  \
    -DBUILD_opencv_dnn_BUILD_TORCH_IMPORTER=OFF  \
    -DBUILD_opencv_features2d=OFF \
    -DBUILD_opencv_flann=OFF \
    -DBUILD_opencv_java=OFF  \
    -DBUILD_opencv_objdetect=OFF  \
    -DBUILD_opencv_python2=OFF  \
    -DBUILD_opencv_python3=OFF  \
    -DBUILD_opencv_photo=OFF \
    -DBUILD_opencv_stitching=OFF  \
    -DBUILD_opencv_superres=OFF  \
    -DBUILD_opencv_shape=OFF  \
    -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 -j8
  cd ../build
  OpenCV_DIR=$(pwd)
  cd ../..

(b)boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一。

wget --no-clobber -O boost_1_62_0.tar.bz2 https://sourceforge.net/projects/boost/files/boost/1.62.0/boost_1_62_0.tar.bz2/download
tar -xjf boost_1_62_0.tar.bz2 > /dev/null
rm boost_1_62_0.tar.bz2
cd boost_1_62_0
mkdir -p ../boost
./bootstrap.sh --prefix=../boost
./b2 --prefix=../boost --with-filesystem install > /dev/null
cd ..
rm -r boost_1_62_0
BOOST_ROOT=$(pwd)/boost

(c)pangolin是一个用于OpenGL显示/交互以及视频输入的一个轻量级、快速开发库

git clone --depth=1 https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
git pull
mkdir -p build
cd build
cmake -DAVFORMAT_INCLUDE_DIR="" -DCPP11_NO_BOOST=ON ..
make -j8
Pangolin_DIR=$(pwd)
cd ../..

(d)OpenNI2 专注于提高和改善自然交互设备,应用软件的互操作能力。通过使用这些硬件和中间件(软件)来很方便的访问和使用一些设备。

git clone --depth=1 https://github.com/occipital/OpenNI2.git
cd OpenNI2
git pull
make -j8
cd ..

(e)freetype-gl-cpp


git clone --depth=1 --recurse-submodules https://github.com/martinruenz/freetype-gl-cpp.git
cd freetype-gl-cpp
mkdir -p build
cd build
cmake -DBUILD_EXAMPLES=OFF -DCMAKE_INSTALL_PREFIX="`pwd`/../install" -DCMAKE_BUILD_TYPE=Release ..
make -j8
make install
cd ../..

(f)DenseCRF 条件随机场


  git clone --depth=1 https://github.com/martinruenz/densecrf.git
  cd densecrf
  git pull
  mkdir -p build
  cd build
  cmake \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -fPIC" \
    ..
  make -j8
  cd ../..

 

(g)gSLICr 图像分割

  git clone --depth=1 https://github.com/carlren/gSLICr.git
  cd gSLICr
  git pull
  mkdir -p build
  cd build
  cmake \
    -DOpenCV_DIR="${OpenCV_DIR}" \
    -DCMAKE_BUILD_TYPE=Release \
    -DCUDA_HOST_COMPILER=/usr/bin/gcc-4.9 \
    -DCMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -D_FORCE_INLINES" \
    ..
  make -j8
  cd ../..

(h)MaskRCNN和数据


  git clone --depth=1 https://github.com/matterport/Mask_RCNN.git
  git clone --depth=1 https://github.com/waleedka/coco.git
  cd coco/PythonAPI
  make
  make install # Make sure to source the correct python environment first
  cd ../..
  cd Mask_RCNN
  mkdir -p data
  cd data
  wget --no-clobber https://github.com/matterport/Mask_RCNN/releases/download/v1.0/mask_rcnn_coco.h5
  cd ../..

  cd ..

3.编译运行MaskFusion

这里注意要选择自己的路径

mkdir -p build
cd build
ln -s ../deps/Mask_RCNN ./ || true 
cmake \
  -DBOOST_ROOT="${BOOST_ROOT}" \
  -DOpenCV_DIR="$(pwd)/../deps/opencv/build" \
  -DPangolin_DIR="$(pwd)/../deps/Pangolin/build/src" \
  -DMASKFUSION_PYTHON_VE_PATH="$(pwd)/../python-environment" \
  -DWITH_FREENECT2=OFF \
  ..
make -j8
cd ..

这里运行时命令我不是很清楚,大家可以讨论或指导我一下(会遇到显存不足的问题,作者有写CMAKE时的参数,但目前我还不会使用)

MaskFusion(已开源)环境搭建与配置(16.04)_第1张图片

MaskFusion(已开源)环境搭建与配置(16.04)_第2张图片

一路过来遇到志同道合的伙伴很开心:)

 

你可能感兴趣的:(slam)