Mask R-CNN 实现中遇到的问题和解决方法

大背景:系统环境为Ubuntu 16.04,anaconda2/3,这两个安装时思路混乱,所以anaconda2和3共存时存在一些问题。有jupyter notebook。anaconda2有pytorch、tensorflow、keras,anaconda3只有pytorch

Mask R-CNN 使用了https://github.com/matterport/Mask_RCNN的代码,这套代码用jupyter notebook做前端,使用Python 3, Keras, 和 TensorFlow。所以我要在python3上配置Keras和Tensorflow,并且要在jupyter notebook里调用python3的内核。

首先是在jupyter notebook里调python3,虽然jupyter给了切换kernel的选项,但是切到python3之后调用sys.executable发现还是运行的python2,怀疑是jupyter配置的python3路径指向有问题。

jupyter对每一个内核都有一个json,python3的内核通常为/usr/local/share/jupyter/kernels/python3/kernel.json,编辑之后发现内容为:

{
     "argv": [
     "python",
     "-m",
     "ipykernel_launcher",
     "-f",
     "{connection_file}"
     ],
     "display_name": "Python 3",
     "language": "python"
 }

他调用python3的命令只是“python”,而在我的机器上“python”指向的是anaconda2,问题成功定位。将
“python”改为“/home/myusername/anaconda3/bin/python”之后问题解决。注意这里似乎不能使用“~”指代用户目录

成功在jupyter里运行python3之后就是安装需要的各种库了。pytorch好说,按照官网提示安装就可以。不过有一点要注意,如果用pip的话,如果不sudo会提示权限不够,但是如果sudo的话,实际上系统会跑去执行/usr/bin/python3,而不是anaconda的python3,这个时候要指明python的绝对路径,例如

sudo ~/anaconda3/bin/python -m pip install pytorch

同样地使用上面的方法安装tensorflow-gpu,但是import tensorflow失败,提示:

ImportError: libcudnn.so.6: cannot open shared object file: No such file or directory

原因是之前在python2里用的tensorflow似乎只用了libcudnn.so.5,所以按照https://stackoverflow.com/questions/42013316/after-building-tensorflow-from-source-seeing-libcudart-so-and-libcudnn-errors/45787225#45787225 

里的方法将缺失的libcudnn.so.6等文件补全即可。

补全了之后再尝试import tensorflow,出现了新的提示:

RuntimeWarning: compiletime version 3.5 of module 'tensorflow.python.framework.fast_tensor_util' 
does not match runtime version 3.6 

这是由于tensorflow 1.4似乎在3.6的支持上有问题,强行安装1.3即可

sudo ~/anaconda3/bin/python -m pip install tensorflow-gpu==1.3.0

解决了这个问题之后import tensorflow就没问题了。再安装keras也没问题。然后就可以git clone代码下来了。但是运行demo.ipynb时他提示没有pycocotools这个包,那我们就装吧。这个包是ms coco数据集的调用接口,并没有发布在pypi上,所以要单独下载

git clone https://github.com/pdollar/coco
cd coco/PythonAPI
make install

这个时候报错:

unable to execute 'x86_64-conda_cos6-linux-gnu-gcc': No such file or directory
error: command 'x86_64-conda_cos6-linux-gnu-gcc' failed with exit status 1

这是由于我的anaconda2版本为4.4,正好anaconda2在这个版本附近使用了奇怪的编译器名称,所以让pycocotools的setup.py和Makefile也调用了这个奇怪的编译器名字。我们打开Makefile:

all:
    # install pycocotools locally
    python setup.py build_ext --inplace
    rm -rf build 
install:
    # install pycocotools to the Python site-packages
    python setup.py build_ext install
    rm -rf build

问题同样出在直接使用“python”调用了错误的python解释器。我们也将“python”改为anaconda3的解释器绝对路径,问题解决~

 

然后代码就一切正常了,have fun~

 

如果这篇文章对你有帮助,或者没有帮助,都请留言交流~

 

 

 

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注