大背景:系统环境为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~
如果这篇文章对你有帮助,或者没有帮助,都请留言交流~