从事场景文字检测相关的工作有一段时间了,总结了一些经验技巧,下面就在此记录下来,仅供参考。
数据集篇
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),可以增加旋转文本区域的数量。
持续更新......