写在前面
本文主要参考教程:tensorflow版的Mask_RCNN,这个教程也是跑通github上Mask_RCNN项目的教程,为了在避免不必要的废话和原教程可能改变之间trade off,本教程将简述主要步骤,详情请参考原教程,但是同时记录需要注意的点和一些坑。
同时考虑到各种兼容性问题,有必要说明一下我的软硬件环境:
操作系统:Windows10 家庭中文版
CPU:i5 8700 8核 8G内存
GPU:GTX 1060 6G显存
conda version:4.8.2
时间:2020-03-04 (考虑到未指定版本的包默认下载最新版本,故声明时间点)
一步一步来
1.git clone项目
关于怎么git项目,这里不再赘述。
clone后第一步去看看项目READ.md(当然在github上也可以直接看),为了节省时间,这里列出几个值得注意的地方:
- python版本要求
- 使用requirements.txt安装包和其他注意事项
这里只是提醒一下,这几点具体怎么处理我在下面会仔细阐述,不用担心。
2.conda创建好环境
- conda下载使用
conda可以快速简单地创建python环境,推荐使用,但同时考虑到conda的库不够全,推荐使用pip下载包(下面介绍的requirements.txt安装方式也是要使用pip),即“conda创建环境+pip安装包”的方式。关于conda和pip的下载使用这里不再赘述,感兴趣的可以参考我写的关于conda和pip使用的介绍:
Anaconda初探conda的基本命令使用pip安装包Python,pip,conda和Anaconda 安装好Anaconda和pip以后,做好进行永久性换上境内镜像,不然之后的install总是会报timeout错误。 - 创建python=3.5.2环境
conda创建环境需要指定
前面也看到过项目环境要求介绍: - 即Python 3.4,但是因为之前跑Keras-yolo3使用的是Python 3.5.2不想再下载其他包了,就直接使用的Python 3.5.2,(据说>=3.4都可以):
conda create -n mask_rcnn python=3.5.2
3.pip安装包
之前就注意到:
所以接下来不用按教程一个一个包单独下载,直接使用项目目录下的requirements.txt安装即可,但是经实测,有几点需要注意:
- 升级好pip:
python -m pip install --upgrade pip
- 升级好setuptools
python -m pip install --upgrade setuptools
- 使用requirements.txt安装包
看下项目目录下的requirements.txt:
经实测,我的机器上直接安装tensorflow>=1.3.0会报和tensorflow_board兼容性错误:
在requirements.txt中直接指定:
tensorflow==1.6.0
可以成功安装(这也是我跑Keras-yolo3的环境),这个问题应该不是普遍的,不报错就不用改。
回到之前,指定tensorflow版本之后,开始安装:
cd 项目目录
python -m pip install -r requirements.txt
这里记录一个“奇怪”的坑:
在windows server上使用Anaconda创建python环境安装requirements.txt时,总是报:
ERROR: Could not find a version that satisfies the requirement tensorflow==1.6.0 (from versions: none)
ERROR: No matching distribution found for tensorflow==1.6.0
更奇怪的是
python -m pip search tensorflow
也没有1.6.0的版本
pip换成Alibaba的源后,又报错:
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output
无语,最后解决:
卸载掉Anaconda32位,安装64位,pip仍使用Tsinghua的源,又ok了。完全可以找到安装1.6.0。
4.下载官方模型
下载好mask_rcnn_coco.h5,下载路径有很多,之前说的REAM.md注意点中就有:
但国内的github下载速度很慢(这个挺大,251M),可以在网上找其他的资源,我就是使用tensorflow版的Mask_RCNN给的百度网盘的链接下载的。
下载好后,放入项目目录。
5.运行demo
官方给的教程建议直接运行项目目录下/samples/demo.ipynb:
但是由于我没怎么使用过Jupyter notebook(好吧,其实我试了一下,但是Jupyter切换自己使用的kernel总是有问题,索性放弃),也为了更好的适用性,现将demo.ipynb转为demo.py:
注:ipynb转py指令 —— jupyter noconvert --to script xxx.ipynb,会在当前目录下生成xxx.py。生成后:
直接运行:demo.py:
报错:
那就安装:
python -m pip install pycocotools
又报错:
好吧,其实这是个大问题,潜藏在之前提到的注意点中:
事情是这样的:在demo.ipynb(当然现在是demo.py了,是一回事)中有这么一句:
即demo.py是调用我们之前下载官方模型——COCO weights即mask_rcnn_coco.h5文件来进行测试,而使用上面也说了:
to train or test on MS COCO install pycocotools
如果要用MS COCO进行训练或测试就必须安装pycocotools这个包,这也是为什么requirements.txt安装没有报错,运行demo.py才报错的原因 —— 你可以不使用mask_rcnn_coco.h5进行训练测试,使用自己的数据训练模型或者其他的模型,这样就不用装pycocotools包。
好了,现在知道为什么要装pycocotools了,那么安装过程中为什么又会报Microsoft Visual C++ 14.0 is required的这个错误呢?
原因其实在上面的注意点的最后一行已经说了:
安装pycocotools必须要有Microsoft Visual C++ 2015 build tools(其实就是14.0,2015对应14.0)
所以先去安装Microsoft Visual C++ 2015 build tools,这个东西网上可靠的资源还蛮少(某N上很多人利用这个公开资源赚币,嗯), 这里放上两个可靠的资源:
visualcppbuildtools_full.exevisualcppbuildtools_full.exe
安装好后,继续:
python -m pip install pycocotools
原错误消失,继续报错:
错误:
Command line error D8021 : invalid numeric argument ‘/Wno-cpp’
解决方案:
不再使用pip在线安装,采用本地编译安装:
- 下载:cocoapi(内含pycocotools):
https://github.com/cocodataset/cocoapi - 进入PythonAPI文件夹:
修改setup.py文件:
为:
到setup.py目录下,执行:
python setup.py build_ext --inplace
把生成的pycocotools放入conda相应环境下的python的库目录下——%python安装路径%\Lib\site-packages,对于当前的conda环境:
先看环境位置:
库位置:C:\Users\apple.conda\envs\mask_rcnn\Lib\site-packages,放入:
解决方案参考:
其实上面的pycocotools安装方式也是Mask_RCNN的READ.md中建议的:
6.注释掉get_ipython().run_line_magic()
安装好pycocotools后,回去运行demo.py:
python demo.py
报错:
报错:get_ipython().run_line_magic(‘matplotlib’, ‘inline’)
查资料知,这是Jupyter notebook执行的语句,将ipynb文件转为py文件执行后就会报此错,粗暴的解决方式是,直接注释掉:
再次运行,成功!
Q&A
Q1:既然直接pip install pycocotools会报错,最终还是通过本地安装 —— git cocoapi中本地生成pycocotools包,导入python库,那么我们中间的解决的报错 —— Microsoft Visual C++ 14.0是不是多余的呢? 直接本地安装不就好了?
A1:经实测,不行,如果不安装Microsoft Visual C++ 14.0,那么本地通过cocoapi安装时还是会报错。这也印证了README.md
Q2:安装Microsoft Visual C++ 14.0后,除了还有其他方式安装吗?
A2:有的
pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI
看命令大致也知道,就是将git cocoapi和pip install命令合在一起,但经实测不起作用(命令行半天没反应,不知道是在下载cocoapi还是哪里出错了),所以只放在这里作为参考
Q3:如果通过Jupyter notebook运行demo.ipynb自然下面这行不会报错:
get_ipython().run_line_magic('matplotlib', 'inline')
A3:但是要先熟悉Jupyter notebook的用法,特别是如何在Jupyter notebook中使用conda环境。
Q4:requirements.txt中tensorflow不是cpu版本的,如果想使用gpu版本的呢?
A4:见我另外一门教程Mask_RCNN入门(三)—— 使用gpu进行训练和测试