本文章是和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))
出现问题
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时的参数,但目前我还不会使用)
一路过来遇到志同道合的伙伴很开心:)