用自己的数据集训练Mask-RCNN实现过程中的坑

本文仅仅是自己实现过程的笔记记录,仅仅用来交流的。

在网上大量搜集资料后,实现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。

猜你喜欢

转载自blog.csdn.net/yql_617540298/article/details/81078405