1. 编译环境
Ubuntu18.04 + CUDA10.0 + CUDNN7.4.1.5 (maskfusion作者用的是ubuntu16版本,用的CUDA8,个人觉得只要环境配置OK,我相信更高版本的ubuntu和CUDA都可以)
2.安装问题(就我个人的环境而言)
(1)安装cuda:建议使用.run格式的下载文件,NVIDIA官网下载时,注意后面的插件扩展包一并下载(如我的cuda_10.0.130_410.48_linux.run(1.9G)和扩展cuda_10.0.130.1_linux.run(3.3MB))
直接使用sudo sh + 下载路径下的文件名(注意给文件改可执行权限)
如我的: 用户名~/下载$ sudo sh cuda_10.0.130_410.48_linux.run
运行后,直接enter,然后除问安装驱动这个no,其余全yes。具体贴图过程网上有,然后就是环境变量设置,网上都有
(2)CUDNN:下载解压后,在该目录下用以下命令,注意cuda版本号
sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
(3)Anaconda3安装:建议官网直接下Linux最新版,不要在意python版本,只要高于自己ubuntu系统的python即可,毕竟我只用他于虚拟环境管理器,有他方便些。
如我的(python3.8.8版本的Anaconda3-2021.05-Linux-x86_64.sh),给予文件权限后, 路径下 sudo sh + Anaconda3-2021.05-Linux-x86_64.sh 然后是安装,直接enter加yes即可
3.下载mask-fusion源码(Github上直接输入maskfusion,第一个就是。大神勿喷小白教程)
关于编译问题,对 build.sh 文件进行了修改,并且删掉了最后的build,然后进行下列操作
如图,主要删除了cuda安装模块,作者写的虚拟环境创建模块和build,改动都在图中表示出来了,对照更改即可(建议有vpn这种东西,要不很容易失败)
还有其中pangolin的安装下载,建议不要用源码,因为pangolin在维护,一直在更新,不建议用最新的,将以前装成功的复制到对应的deps文件夹如图
在build.sh 文件处相应修改,如下图,注释掉git clone "pangolin ........"
其他包在有fanqiang工具下,不会报错,很快完成。
4.Anaconda下虚拟环境的创建,maskfusion代码基本在python3.6下运行不会错,至于其他的版本未试过。首先 anaconda装成功后,打开终端前面会有个(base),输入 conda deactivate即可关掉。然后创建自己的虚拟环境,输入 conda create -n + 环境名 python=
如我的 conda create -n tensorflow python=3.6.9 (PS:ubuntu自带python2.7和py3.6.9 ,为了不装其他的py以及适应maskfusion的编译条件,就直接选用py3.6,> 3.6的好像是不行的) 接着激活创建的环境 ,输入 conda activate tensorflow 在创建的环境下安装需要的包,其中我装的是 tensorflow-gpu==1.14 和 keras==2.2.5 . 输入 pip3 install tensorflow-gpu==1.14 和pip3 install keras==2.2.5 (pip3需要安装)包的安装顺序就用build.sh文件中的那样,如图选中的地方
包装好后,可用 pip list 查看安装成功否,如图
5. 在 ./build.sh 成功后,进行编译,编译指令改过,如下,其余按照build.sh进行即可(注意,都要在自己的虚拟环境中进行)
cmake
-DBOOST_ROOT="${BOOST_ROOT}"
-DOpenCV_DIR="$(pwd)/../deps/opencv/build"
-DPangolin_DIR="$(pwd)/../deps/Pangolin/build/src"
-DCUDA_HOST_COMPILER=/usr/bin/gcc
-DWITH_FREENECT2=OFF
..
主要就是把 -DMASKFUSION_PYTHON_VE_PATH="$(pwd)/../python-environment" 删掉了
编译按照上面的配置不会有错
6.运行问题(主要有两个)
使用指令跑代码,数据集在github上有,下载即可,在build下进入生成的GUI文件下,输入
./MaskFusion -run -l /home/用户名/datasets/teddy-handover.klg
(1)错误提示:cudaSafeCall() Runtime API error : invalid texture reference.
忘记截图,按照之前的搜索信息,提示如上,解决办法,找到maskfusion下Core文件,打开找到CMakeLists.txt文件,打开,注释选中的两行,如图
然后重新编译即可,可能还会遇到下面一个问题
(2)错误提示:AttributeError: 'str' object has no attribute 'decode'
解决办法,找到文件 cd /home/用户名/.local/lib/python3.6/site-packages/keras/engine
然后 sudo gedit saving.py ,打开后删掉以 .decode(‘utf-8’)结尾的语句, 如图我注释掉了
这个改掉保存即可,在运行就没错了,就出结果了
写在最后: 这过程中最大的错在于最开始未理解python的索引问题,因为我的系统下有py3.6 , py3.7, py3.8 以及py2.7。只要最开始注意到python的问题,就是先为系统指定一个固定的py,即使不用anaconda,直接装环境需要的包在指定py下也不会有错,其余编译问题都不会很难。
附上运行结果,如图



