因为学校里有个工程实训的课程,正好老师就说让跑一下maskrcnn benchmark看看识别效果怎么样。然后我就去下了,这里来记录一下安装过程中遇到的困难和问题。本来是让试用一下seg_every_thing那个框架的,结果因为本人显存不够大所以并没有运行成功。最后下了facebookresearch的那个改良版的(?)。链接在这里:
https://github.com/facebookresearch/maskrcnn-benchmark
先从成功的配置环境开始讲,遇到的问题都在“试错”标题下。
系统:Pop_os! 19.04 https://system76.com/pop
硬件:GTX 970M
CUDA10.0、cudnn7.5.1,gcc6.5、pytorch1.1.0,pytorch-nightly
选择pop_os这个系统的原因是它是基于ubuntu的,而且自己下载好了nvidia驱动(不用再自己费劲巴拉的安装),而且我是windows10下一直都无法编译apex那个包(后面会提到),初步估计是因为我vs的版本太高了(2017的15.9.11),导致cuda环境与之不匹配(windows下因为要跑maskrcnn,所以装的是cuda9+cudnn7)。
但是要注意的是,这个系统选好了安装盘就直接在那个盘里安装了,如果装双系统的话我也不清楚,因为我自己是装在硬盘下的。这个系统确实挺友好的,反正我挺喜欢~就是有些许一些小bug,比如说没法切换大小写(我还没找到解决方法)。而且它出了18.04LTS版本的。再往下的版本是没有的,反正我翻遍了论坛和官网,pop_os是本来是有一个17.04版的,后来不提供了。
首先下载cuda10.0和cudnn7.5.1。这里借鉴了这个博主的安装过程:
https://blog.csdn.net/wanzhen4330/article/details/81699769
非常简单,下好了cuda10.0的.run文件,安装时用
sudo sh (你下的版本).run --override
就可以了。至于为啥要加override,我时因为它提示了才加,我也不知道是什么原因……(比较小白)
然后设置环境变量。我贴的那个链接真的讲的很详细!大家看一看就知道了。
然后下载cudnn的压缩包,解压完了按照上个博主的方法把文件复制过去就可以啦。
网址在这里
https://github.com/facebookresearch/maskrcnn-benchmark/blob/master/INSTALL.md
# first, make sure that your conda is setup properly with the right environment # for that, check that `which conda`, `which pip` and `which python` points to the # right path. From a clean conda env, this is what you need to do conda create --name maskrcnn_benchmark 解释:如果你在ubuntu中下好了conda,就建立一个conda的虚拟环境。我比较推荐建立虚拟环境哈,因为如果出错了你可以直接删不用耽误其他环境。当然名字你可以改 我用的语句是conda create -n mask python=3.7 conda activate maskrcnn_benchmark 解释:然后激活这个环境啦~ # this installs the right pip and dependencies for the fresh python conda install ipython # maskrcnn_benchmark and coco api dependencies pip install ninja yacs cython matplotlib tqdm opencv-python 解释:上面两个install没啥好解释的,运行就是了。 # follow PyTorch installation in https://pytorch.org/get-started/locally/ # we give the instructions for CUDA 9.0 conda install -c pytorch pytorch-nightly torchvision cudatoolkit=10.0 解释:重头戏来了!今天是5.22日,清华源是5.16关闭的,所以pytorch会下载的非常非常慢,反正我试图下载了n次,都以失败告终。 所以这里推荐一个离线下载的方式,那个博主的博文地址如下所示: https://blog.csdn.net/jasonzhoujx/article/details/83242385 ————!!!!!!!!!!!千万要看这里!!!!!!!!!!!!———— 注意,我下载的是10.0的,因为我cuda是10.0的版本,所以上面指令改成了10.0。源地址给的是cudatoolkit=9.0,千万要注意区别~ 而且上面我给的地址这个博主下的是pytorch-nightly的cpu版本的。这里下面的试错部分会说到,gpu版本的网址在这里: pytorch的 https://anaconda.org/pytorch/pytorch/files pytorch-nightly的 https://anaconda.org/pytorch/pytorch-nightly/files 然后用上面博主给的这个方法: conda install -n 环境名字 --use-local 下载的包名 就可以安装啦。 至于在链接里寻找要安装的什么版本,我到后面修改博文的时候会详细解释的~~ export INSTALL_DIR=$PWD # install pycocotools cd $INSTALL_DIR git clone https://github.com/cocodataset/cocoapi.git cd cocoapi/PythonAPI python setup.py build_ext install # install apex cd $INSTALL_DIR git clone https://github.com/NVIDIA/apex.git cd apex python setup.py install --cuda_ext --cpp_ext # install PyTorch Detection cd $INSTALL_DIR git clone https://github.com/facebookresearch/maskrcnn-benchmark.git cd maskrcnn-benchmark # the following will install the lib with # symbolic links, so that you can modify # the files if you want and won't need to # re-build it python setup.py build develop 解释:如果你上面的环境搭的正确,上述代码运行的时候就不会报错。 unset INSTALL_DIR
我跑了下面这个demo
cd demo # by default, it runs on the GPU # for best results, use min-image-size 800 python webcam.py --min-image-size 800
这个demo跑起来之后,就会弹出一个框,那个框就是你的电脑摄像头!然后他就可以通过你的电脑摄像头进行各种识别~
我因为在ubuntu下,就用手机录了个视频,渣渣画质,我就只截个图吧
到此为止,你也已经和我一样跑起来了,就祝贺你~如果有BUG,可以看我下面的试错部分有没有你遇到的一些bug
我一开始下载的是cuda9.0和cudnn7.0.5版本的。结果在我运行到
python setup.py install --cuda_ext --cpp_ext
和最后一句
python setup.py build develop
的时候报错什么nvcc的各种error。包括这个问题在我windows的环境下也会报,这个时候我意识到可能是我g++和gcc的版本太高了!
然后我降到了6.5,因为现在sudo apt-get install只能下载到6的版本了。
结果还是会报错。具体的错误我现在找不到截图了,回头有找到了再贴上来。
然后看到issues里有人是用了cuda9.2+gcc6.5运行成功了,也有人是用cuda9.0+gcc5.4运行成功了。但是我试图自己手工编译gcc5.4,报错报到我怀疑人生还各种不能解决……所以……算了算了,我就下了cuda10.0。没想到cuda10.0+gcc6.5就成功啦!
等我报错的内容找到之后我要贴上来,然后如果你们遇到同样的错误,可能就是gcc版本和cuda不合适的原因。
报错是这个
我的解决方法是,我一开始下错了pytorch-nightly本地的压缩包,下成了cpu版本的,所以一直说找不到我的GPU。后来我换成了GPU版本的,就是我上面两个链接贴的地址是GPU版本的,然后就运行成功了。
上面balabala一堆然后拉到底部是
File "/home/nova/mask-rcnn/maskrcnn-benchmark/maskrcnn_benchmark/layers/nms.py", line 3, in
from maskrcnn_benchmark import _C
ImportError: /home/nova/mask-rcnn/maskrcnn-benchmark/maskrcnn_benchmark/_C.cpython-37m-x86_64-linux-gnu.so: undefined symbol: __cudaRegisterFatBinaryEnd
我的报错和这个不一样,我当时也忘记保存了,大体问题就是没定义这个symbol。这个是我在issues里借鉴的,解决方法也是里面教我的:
cd到maskrcnn-benchmark,执行
rm -rf build
python setup.py build develop
就是把之前build的删除掉重新build一遍!
因为之前我环境搭的挺乱的吧,就遇到这个情况了。
如果有其他问题希望大家来指正和补充,我要开始研究怎么训练它了……后面如果我有想起来的还会补充的!