场景文字检测技巧总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013250416/article/details/80229037

从事场景文字检测相关的工作有一段时间了,总结了一些经验技巧,下面就在此记录下来,仅供参考。

数据集篇

icdar2015数据集

由于icdar2015数据集和icdar2013数据集的训练图片均较少,因此,在训练icdar2015数据集的时候,一般融合icdar2013和icdar2015两个数据集的图片进行训练,增加鲁棒性。

 

对于标注为‘###’文本区域的处理

输入训练样本的时候,去掉标注为‘###’的文本区域。此外,由于标注集自身的问题,可能存在标注区域的面积小于<1的情况,也应该去掉。原理应该是可以减少训练噪声。

 

调试篇

快速实验网络是否work

1.在实验的过程中,常常想要实验多组参数,如不同的输入图片大小,或不同的anchor比例等。如果使用完整的数据集,完整的迭代周期,会使得训练时间过长。不妨使用完整数据集的子数据集进行训练,一般可选择原数据集的10%到20%。

2.在子数据集上得到的模型可由分别由子训练集和子测试集来检测。使用子训练集来测试,可以检验模型是否能够学到特征;使用子测试集来测试,通过比较在子训练集和子测试集上的精度,来判断模型是否过拟合。

 

 

坐标输入篇

基于水平的坐标表示方法

四点表示法:xmin,ymin,xmax,ymax

 

基于旋转的坐标表示方法

1.四边形:

1)八点表示法:x1,y1,x2,y2,x3,y3,x4,y4

2.旋转矩形框:

1)theta表示法:x,y,w,h,theta

2)h表示法:x1,y1,x2,y2,h(x1和y1为旋转矩形框左上角坐标,x2和y2为旋转矩形框右上角坐标,h为矩形框高度)

 

坐标转换

场景文字检测的常见的水平数据集有icdar2013,旋转数据集有icdar2015, rctw, msra-td500等。

旋转数据集的标注方式一般都是八点表示法,x1,y1,x2,y2,x3,y3,x4,y4,可以根据需要将该八点坐标转换为我们需要的输入格式。

1.转换成水平坐标(xmin,ymin,xmax,ymax),可以先确定该四边形的最小水平外接矩形,得到最小外接矩形的xmin,ymin,xmax,ymax。这种做法的缺点是输入训练网络的标注框面积大于实际标注框,会引入噪声。同时,输出的标注框面积也较大,影响检测精度。

2.转换为theta表示法(x,y,w,h,theta),可参考RRPN或者EAST。需要注意,应指定theta角的范围,避免需要回归的角度范围过大。

3.转换为h表示法,可参考R2CNN或者Textboxes plus plus。好处在于避免了theta表示法中-90度与90度的不确定性。

4.直接对八个点的坐标进行回归。

 

 

网络设计篇

 

浅层特征

场景文字检测中基础分类网络的浅层特征更适宜用于检测场景文字。

实现方式:直接利用浅层特征,或者对于深层特征进行downsample,再与浅层特征融合

例如:

1.WordSup: Exploiting Word Annotations for Character based Text Detection

在VGG16的基础上进行改进:

1)原图1/4大小的feature map最适合用来检测文字;

2)conv4与conv5的2倍上采样相连接;得到的feature map的2倍上采样与conv3相连接;也就是最终得到原图1/4大小的feature map。

2.Multi-oriented Scene Text Detection via Corner Localization and Region Segmentation

 

采用FPN和DSSD的思想,将特征融合网络作为基础网络。

 

池化

由于场景文字的区域变化较大,以Faster RCNN框架为例,单一的池化方式不能够充分地提取特征。可采用多种池化方式相结合的方法。

1.R2CNN: Rotational Region CNN for Orientation Robust Scene Text Detection

使用三种不同的pooling size, 7*7, 3*11, 11*3, 对axis-aligned box做RoI Pooling操作,并将通过不同池化方式得到的特征连接起来。

2.Towards End-to-end Text Spotting with Convolutional Recurrent Neural Networks

根据RoI的比例不同,选择不同的pooling size。

即:对于h*w的RoI,使用H * min(Wmax, 2Hw/h) 大小的 pooling size。其中,H 和 Wmax 都是固定的。

 

数据预处理篇

图片大小

1.训练图片大小

应当选择合适的训练图片大小。图片过小,小的文本区域的特征无法提取到;图片过大,小的文本区域被放大,会引入额外的噪声。因此,不是一味的增加图片大小就可以,可以多尝试几次。SSD框架可以尝试的图片大小如300*300,700*700等。 EAST框架可以尝试的图片大小如512*512, 768*768等。

2.测试图片大小

使用不同大小的测试图片作为输入,将检测结果进行融合,并通过nms进行抑制,也就是多尺度测试,可以提高检测的F-score值。具体融合方法可参考Textboxes

 

预训练模型

使用合成数据集SynthText得到预训练模型,再使用标准数据集进行finetuning,一般检测精度会比直接使用标准数据集训练高。

 

旋转数据集增广

对于theta表示法(x,y,w,h,theta),旋转角度theta可能会比较难学。即使是旋转数据集,里面的旋转的文本区域的数量也比较有限。那么,如何让角度学习的更加充分呢?不妨对数据集进行旋转,例如在R2CNN论文中提到,对图片进行旋转(-90,-75,-60,-45,-30,-15,0,15,30,45,60,75,90),可以增加旋转文本区域的数量。

 

持续更新......

 

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页