当前位置:首页 > 资讯 > 正文

训练自己的Mask-RCNN实例分割模型

首先,要进行本文试验,需具备GPU,CPU上只能看看效果,没法进行实测

图像深度学习技术的四大方向

图像深度学习算法主要而已分为4大类:1)图像识别,实现图像中单一目标的类别识别;2)目标检测:实现图像中多个目标,且目标间可能存在粘连和堆叠的情况,对图片中的所有目标范围进行定位,同时对获得的目标进行识别;3)语义分割:pixel-wise的图像识别模型,输入图像和输出标签图逐像素对应,获得原图中所有像素的类别,可以根据识别结果获得目标的轮廓,形状和类别;4)实例分割,将目标检测和语义分割进行组合,简单来说,就是先进行目标检测获得各类别的区域,在对对应区域进行语义分割。相对于语义分割的优势在于:可以对同类目标的堆叠进行分割和识别。作者将详细记录如何进行该四类模型在自己所用数据集上的训练和测试。识别,目标检测和语义分割网上已经有一些可行的教程,后续会整理一下与大家分享,本文主要记录如何训练自己的实例分割模型。

1.Mask-RCNN模型测试

https://github.com/matterport/Mask_RCNN

PS:原文中有教程,但是实测中发现,对于自己的数据还是比较不友好的,需要一定的修改,英语水平还行,又比较有耐心的可以自行尝试从该文章中进行自己的数据训练测试。

下载后的模型结构大概是这样的,有能力的尽量阅读一下README.md,里面讲了模型的一些工作原理,也介绍了该模型的用法

训练自己的Mask-RCNN实例分割模型

1)安装requiremets.txt中的要求进行需求包的安装,直接运行setup.py,可能会有一些毛病。不行的话就自己一个个装把,不费事。需求包如下,需要注意的是imgaug安装可能会失败,没找到好的解决办法,反正就一直装,运气好两三遍就可以装好了(装过两台电脑,一台2次就装好了,一台装了大概半个小时,忘了几次了),可以参考https://github.com/aleju/imgaug (建议pip和conda都试试).PS:除了文件中要求的需求包外,还需要安装pycocotools

2)先跑跑已有的模型,看看效果

 

训练自己的Mask-RCNN实例分割模型

将mask_rcnn_coco.h5放到工程的根目录下,运行samples文件夹红的demo.ipynb,获得测试结果图如下,是不是很期待在自己的数据上跑是什么效果了

训练自己的Mask-RCNN实例分割模型

2.准备自己的数据

使用VIA进行标注,不需要下载软件,直接在网页上运行http://www.robots.ox.ac.uk/~vgg/software/via/via.html

1.在Region Attributes 中新建一个类别信息,根据自己的需要进行设置

训练自己的Mask-RCNN实例分割模型

2.加载图片,进行标注,本文仅演示一下流程,就标注了3张图片

训练自己的Mask-RCNN实例分割模型

全部图片标注完成后,输出成.json格式

训练自己的Mask-RCNN实例分割模型

3.在根目录中简历一个datasets文件夹,结构如下图所示,将数据和标签json文件放到同一个文间架中(懒得标注,val中的数据是train中黏贴过去的)

训练自己的Mask-RCNN实例分割模型

3.训练自己的数据

1)在samples文件夹下新建如下几个文件(README.md可以不要,3个文件代码贴在下面,建议详细看看注释,根据自己的数据需要修改的部分也都注释出来了)

训练自己的Mask-RCNN实例分割模型

cdw.py(有几个参数需要根据数据进行修改,在代码中用中文注释出来了,详细看下英文注释有利于代码的理解)

 

inspect_cdw_data.ipynb(此模块可以看到数据加载及预处理的过程,训练之前可以先看看数据处理是否正确)

insepect_cdw_model.ipynb(查看训练好的模型效果)

这两个文件代码太长啦,主要是验证py文件中的代码正确性,不影响最终测试,就不贴了,一定要看看自己的数据处理是否正确的话可以留个邮箱我发给你

inspect_cdw_data.ipynb部分处理结果如下:

1.加载Mask图像,同一类别中的不同目标需要加以区分

训练自己的Mask-RCNN实例分割模型

2.加载到原图中,检测目标和类别是否对应,同时根据Mask轮廓尝试BoundingBox

训练自己的Mask-RCNN实例分割模型

3.生成的一系列Anchors(在训练中需要一些如右图的反例来进行惩罚)

训练自己的Mask-RCNN实例分割模型训练自己的Mask-RCNN实例分割模型

insepect_cdw_model.ipynb部分很多处理效果和上面数据处理是相似的,只是把它加载到模型中而已,代码中也有详细的注释啦

除了上述数据加载之外,后续网络处理的效果如下所示:

1.区域提取结果

训练自己的Mask-RCNN实例分割模型

2.对提取的所有区域进行识别,忽略结果为背景和置信度低于阈值的区域

训练自己的Mask-RCNN实例分割模型

3.特征提取网络输出的部分特征图

训练自己的Mask-RCNN实例分割模型

训练自己的Mask-RCNN实例分割模型

4.测试训练结果

demo_cdw.ipynb(放在samples目录下即可,放其他地方的话也可以,但是有些地方自己要改一下哦,主要几个路径改成自己实际用的就行啦)

 

在未知图片中的测试,可以看出来效果一般哈,比较只用了3张图片做训练啊,功能还是实现了的,测试一张图片360ms,在GPU上哦,笔记本CPU上要30多秒,所以没有GPU的可以看看效果,想要训练的话,请慎重。

训练自己的Mask-RCNN实例分割模型

训练自己的Mask-RCNN实例分割模型

主要参考

最新文章