本文仅仅是自己实现过程的笔记记录,仅仅用来交流的。
在网上大量搜集资料后,实现Mask-RCNN,但是过程中还是出现了很多很多的问题,所以将过程记录如下,方便日后学习。
一、实验前准备
1. COCO数据集
COCO的 全称是Common Objects in COntext,是微软团队提供的一个可以用来进行图像识别的数据集。MS COCO数据集中的图像分为训练、验证和测试集。
COCO数据集现在有3种标注类型:object instances(目标实例), object keypoints(目标上的关键点), and image captions(看图说话),使用JSON文件存储。
2. 环境搭建
本文采用github上Mask-RCNN代码,网址:https://github.com/matterport/Mask_RCNN
安装要求按照必要的环境
Python 3.6,TensorFlow 1.8-gpu,Keras 2.1.6(这些版本是我实验中的版本)和其他常见软件包requirements.txt。
二、制作数据集
这里我们需要利用labelme来生成json文件以及yaml文件等。
1. 安装labelme
win10+python3
在cmd中使用pip安装,
pip install pillow
pip install pyqt5
pip install labelme
安装成功之后,在python安装目录下Scripts目录下可以找到labelme,如下图所示:
2. 制作数据集
双击labelme.exe可以打开绘制mask的界面,然后通过打开图片可以自己绘制,但需要注意的是如果一张图片中有很多应该标记相同标签的掩码,那么标签命名为a1,a2……以此类推。
这时需要将json文件装成dataset
在cmd中执行
需要调用的就是labelme_json_to_dataset.exe,后面加上json文件存储的路径,如上图我的路径在桌面。
执行之后,可以看到在json路径下多出了一个文件夹,里面内容如下图所示:
三、准备训练
Mask-RCNN中Mask_RCNN/samples/shapes/train_shapes.ipynb提供了如何使用自己的数据集来训练,所以我们将主要利用这个文件来训练自己的数据集,但需要更改一部分代码。我将train_shapes.ipynb拷贝下来,放置在Mask-RCNN根目录。我把代码放在https://download.csdn.net/download/yql_617540298/10546011,如有需要请下载。
如何使用服务器的gpu在本机上打开ipython过程可以参考之前的博文,地址:
https://blog.csdn.net/yql_617540298/article/details/80933242。
开始运行
(1)error1
第172行,这是需要调用os里的listdir(),更改代码:
imglist = os.listdir(img_floder)
(2)error2
from PIL import Image
(3)error3
这是由于我的图片的尺寸不一样大小,而我在代码中将图片尺寸设定为640*480,所以需要将图片的尺寸统一处理一下,使用python resize()很快可以处理完成。
(4)error4
这是由于缺少这个依赖,所以解决方案是import yaml。
(5)error5
这又是由于python2和python3的问题,将model.py中re.fullmatch()改为re.match(),重新运行,发现可以训练了。
但是执行了一段时间后,发现又报错了。
(6)error6
这是由于我计算错了,NUM_CLASSES = 1 + 3 # background + 3 shapes这是原始代码,而我这里假设有4类,那么就是需要写成NUM_CLASSES = 1 + 4。
改过之后,发现可以正常训练了。
(7)如果是python2可能出现的问题
如果需要使用python2训练,那么在python3上可以建立一个虚拟环境,或是直接使用python2的环境训练,
如果是python2,出现了错误提示util.py中import urllib.request没有request:
pip install request,但仍旧报错,发现是因为python版本的问题,更改代码from urllib2 import urlopen。