刚刚开通付费功能,好奇心驱使我试试效果,这不,前两天试了一下,感觉也没啥新奇的。我的公众号使命是记录和分享个人学习经历,不会使用付费功能的。在此也非常感谢之前给我付费的小伙伴哈,哈哈,话不多说,今天正式发布这篇文章。
MaskRCNN的理论请看其他博文、源码解析参考下面链接文章。
MaskRCNN源码解析1:整体结构概述
MaskRCNN源码解析2:特征图与anchors生成
MaskRCNN源码解析3:RPN、ProposalLayer、DetectionTargetLayer
MaskRCNN源码解析4-0:ROI Pooling 与 ROI Align理论篇
MaskRCNN源码解析4:头网络(Networks Heads)解析
MaskRCNN源码解析5:损失部分解析
目 录
一,检测分割斑马
二,检测分割印章
三,检测分割版面中的图片表格公式
最近用MaskRCNN做了一些检测小实验,主要包括检测分割斑马,检测分割印章,检测分割版面中的图片表格公式等。
一,检测分割斑马
coco数据集已经有斑马类还用斑马图片标注测试主要是为了方便跑通代码,查看效果。先是从网上下载了一些斑马,自己用labelme标注了一下,生成的数据集如下:
最后简单训练了一下,测试效果肯定是而且必须是还行:
以上目的只是为了跑通训练自己数据集的所有流程。主要过程可以看看这篇文章:https://zhuanlan.zhihu.com/p/180236787
二,检测分割印章
然后我又标注了一个稍微大一点的数据集,主要目的是为了检测印章,部分原图如下图所示:
主要是红色圆形印章,当然这种红色圆形印章通过通道分离可以很容易将印章分割出来,这里只是拿它来试试MaskRCNN的检测分割效果,所以多费点力气绕个大圈子。
印章数据集用labelme标注,并转换后的数据集(部分)如下:
训练到总的loss为0.04左右,然后测试了一下检测分割效果(图片有些隐私,非印章部分我打了马赛克):
从上面的检测效果可以看出,经过训练后,图片中的红色圆形印章很容易被检测分割出来,而且效果还行。
PS:做了版面的检测后发现原来标注数据的方式有些问题,导致一张图片上出现多个同类实例的时候,分割会出问题,之前测试图片基本是单个印章的,所以没发现这个问题[手动捂脸]。对数据标注方式做了改正后(同一张图片出现多个同类别的实例,应该标注为:印章1,印章2,印章3....),又重新训练了一下印章检测这个数据集。
总的损失下降到0.06左右,测试效果如下,这样看着舒服多了[再次手动捂脸]:
三,检测分割版面中的图片、表格、公式
经过上面两个小例子的测试,后面我又用MaskRCNN训练一下版面分析的图片,看看效果。版面分析的图片,主要检测图片、表格、公式三类。训练数据集如下,该数据集不是我人工标注的,是之前写的程序处理的结果转换成MaskRCNN 可训练的格式,人工标注太费时费力了。
前面的图片不管是斑马还是红色印章都和背景有明显的界限,所以分割起来比较容易。版面中的图片、表格、公式就不太一样了,框出的区域,除了有内容的地方,空白的地方和背景是一样的,这样的数据训练起来不太好收敛。前期尝试各种方法调试超参数,总的损失达到0.5左右就基本不下降了。测试的效果也并不是很理想。
因为版面中每张图基本都会出现多个同类型的实例,加上前面标注数据方式有点问题,所以检测效果不是太理想。后来改正了标注方式后又重新训练了一下,检测效果如下:
从上面测试结果可以看出,训练的模型对于图片和表格的检测分割效果良好,单个公式也还行,多个公式出现在一起的时候容易出现混乱,这种情况跟数据集有关系,因为数据集中对于公式的处理结果就是这样的。后续改进公式检测效果还需要从标注数据集上下功夫。