PixelLink:通过实例分割进行场景文本检测
原文:PixelLink: Detecting Scene Text via Instance Segmentation
摘要:许多前沿的文本检测算法都是基于深度学习的方法,依赖于边界框回归,并执行至少两种预测:文本/非文本分类和位置回归。在这些方法中,回归对边界框的获取起着关键作用。但这并不是必不可少的,因为文本/非文本预测也可以看作是一种本身包含全部位置信息的语义分割。然而,场景图像中的文本实例往往彼此之间非常接近,使得它们很难通过语义分割来分离。因此,需要实例分割来解决这个问题。本文提出了一种新的基于实例分割的场景文本检测算法-像素链接。首先将同一实例中的像素链接起来分割出不同的文本实例,然后直接从分割结果中提取文本包围框。实验表明,与基于回归的方法相比,像素链接可以在几个基准上实现更好或更可比较的性能,同时只需要更少的训练迭代轮次和更少的训练数据。
1、introduction:
ctpn, textboxes, seglink, east等文本检测算法大多基于全卷积网络,执行至少两种预测:1、文本/非文本分类。这样的预测可以被看作是在文本包围盒内的像素概率,但它们更常用于回归结果的置信度(例如,Textboxes、SegLink、East)。2、位置回归。文本实例或其分割/切片的位置被预测为相对参考框(例如TextBoxes, SegLink, CTPN)或边界框绝对位置(例如EAST)的偏移量。 在seglink等方法中,分段之间的连接也被预测。在这些预测之后的后处理主要包括将段连接在一起(例如SegLink,CTPN)或将非最大抑制应用于获得的包围框(例如TextBoxes,EAST)作为最终的输出。
然而,如前所述,文本/非文本预测不仅可以作为回归结果的可信度,而且还可以作为一个本身包含位置信息的分割分数图,直接用于获得边界框,因此,回归并不是必不可少的。而由于场景图像中的文本实例通常是非常接近的,不可能仅通过语义分割(即文本/非文本预测)来分离,因此需要在实例层进行进一步的分割。
PixelLink提出实例分割来实现文本检测,提出基于DNN进行两种像素预测:文本/非文本预测 和 link预测。1、文本实例中的像素被标为正,否则被标为负(非文本)。2、关于link的预测:每个pixel有8个近邻。对于给定的像素和它的一个邻居,如果它们位于同一实例中,它们之间的链接被标记为正的,否则为负。预测的正像素通过预测的正向链路连接在连通分量(CC)中。以这种方式实现了实例分割,每个CC表示一个检测到的文本。应用OpenCV中的minAreaRect等方法就能得到各个连通分量的边界框作为最终检测结果。
2、related work:
语义&实例分割:实例分割不仅需要标记每个像素类别,还需要区分实例。这与目标检测更相关,近来也大量使用了目标检测系统,如FCIS(R-FDN),Mask-RCNN(Faster rcnn),它们的分割结果也依赖于检测性能。
基于分割的文本检测:(2016)将检测任务作为一个语义分割问题,通过预测三种得分图:文本/非文本、字符类和字符链接方向。然后将它们分组为单词或行。(Zhang等人),文本块是从fcn预测的显着性地图中找到的,字符候选词是使用mser提取的,行或词是用手工构建的规则最终形成的。(CCTN)粗网络通过生成文本区域热图来粗略地检测文本区域,然后通过细文本网络将检测到的区域细化为文本行,该网络输出中心线区域热图和文本线区域热热图。
基于回归的文本检测: 这类检测方法大多得益于通用的目标检测的发展。CTPN,扩展anchor的概念用于预测文本的切片,再通过启发式规则连接。TextBoxes,SSD用于文本的特定实例,采用大长宽比的anchors和不规则形状的核,以适应场景文本的大纵横比特征。RRPN,在Faster-rcnn中对anchor和RooPooling增加旋转,以处理场景文本的方向。SegLink,采用SSD预测文本片段,再使用link预测将它们连接成完整的实例。EAST,执行非常密集的预测,再通过局部性的NMS进行处理。所有这些基于回归的文本检测算法同时对置信度和位置有预测。
3 通过实例分割检测文本:
其中预测的正像素通过预测的正向链接将预测的正像素连接到文本实例中,然后直接从该分割结果中提取边界框。
网络架构:和SSD和SegLink一样,使用VGG16作为特征提取器,fc6和fc7被转换为卷积层。特征融合和像素预测的方式继承自FCN。整个模型有两个独立的头,一个用于文本/非文本预测,另一个用于链接预测。两者都使用了Softmax,因此它们的输出分别有1*2=2和8*2=16通道。
论文中给出了两种网络结构:PixelLink+VGG16 2s和PixelLink+VGG16 4s 。
对于PixelLink+VGG16 2s网络结构:其融合的特征层包括:{conv2_2, conv3_3, conv4_3, conv5_3, fc_7},得到的特征图分辨率为原图的二分之一 。
对于PixelLink+VGG16 4s网络结构:其融合的特征层包括:{conv3_3,conv4_3, conv5_3, fc_7},得到的特征图分辨率为原图的四分之一 。
图片来自原论文通过设定两个不同的阈值,可以得到pixel positive集合和link positive集合,然后根据link positive将pixel positive进行连接,得到CCs(conected compoents)集合,集合中的每个元素代表的就是文本实例.这里需要特别注意:给定两个相邻的pixel positive,它们之间的link预测是由当前两个pixel双向决定的,而当前两个pixel需要连接(即两个像素属于同一个文本实例)的前提条件:two link中至少有一个link positive.连接的规则采用的是Disjoint set data structure(并查集)的方法.值得一提的是,在像素链接中,场景文本的方向不受限制。
提取文本行的bounding box
基于上述语义分割的结果(即上述的CCs),直接通过opencv的minAreaRext提取文本的带方向信息的外接矩形框(即带角度信息),具体的格式为((x,y),(w,h),θ),分别表示中心点坐标,当前bbox的宽和高,旋转角度,这一步骤导致了像素链接和基于回归的方法之间的关键区别,即通过实例分割而不是位置回归直接获得包围框。
实例分割的后处理:之所以要进行后处理,是因为在pixel进行连接的时候不可避免地会引入噪声.文中主要是对已检测的bbox通过一些简单的几何形状判断(包括bbox的宽,高,面积及宽高比等,这些主要是在对应的训练集上进行统计的出来的)进行filter.经过后处理后,可以提升文本行检出的准确率。例如,由于ic15中约99%的文本实例较短边≥10像素,因此选择10作为较短边长的阈值。
4 优化:
生成gt数据:
像素的生成规则:在文本行bbox内的pixel被标注成positive,如果存在重叠文本时,则非重叠的文本框区域内的像素被标注成positive,否则被标注成negative 。
像素间的link生成规则:给定一个像素,若其与邻域的8像素都属于同一个文本实例,则将其link标注为positive,否则标注为negative 。
这里值得注意的是:ground truth的计算是在缩放后(具体缩放的比例与其预测的feature map大小一致)的原图上进行的。
损失函数:
公式来自原论文所有图片的正负像素样本不均衡?,可以再对像素权重设计。
pixel loss :因为文本实例的尺寸不同,对每个像素赋予相同的loss权重是不合适的,这对小面积的文本行是非常不公平的(即会偏向大面积的文本行),针对上述问题,论文中提出了Instance-Balanced Cross-Entropy Loss,具体的做法是给每个文本实例相同的权重Bi(公式如下图),对于第i个面积为Si文本实,其内部的每个像素的权重为 wi=Bi/Si,
negative pixel:论文中采用OHEM来选择negative pixel.具体做法是根据negative-positive比例r (文中设置为3),文本行实例的总面积S,选择loss最大的r*S个negative pixel. 权重设为1,具体的pixel loss公式如下:
其中W为positive pixel和negative pixel的权重矩阵(分别是wi=Bi/Si和1),Lpixel_CE是文本/非文本的cross-entrpy loss。
links LOSS:只对positive pixel分别计算positive links loss和negative links loss,
reduce_sum 塌缩求和:https://blog.csdn.net/arjick/article/details/78415675
关于塌缩讲得很明白:https://www.zhihu.com/question/51325408中第二个答案,简单说就是对reduce_sum操作的axis进行求和塌缩。
网络的输出
网络的输出包括:文本/非文本( 1*2=2 )和Link预测( 8*2=16),所以对网络总的输出维度为18。注意:对于link的输出feature map,其排列的顺序为:top-left,top,top-rignt,left,right,bottom-left,bottom,bottom-right
数据增广: 和SSD相似,在SSD数据增广上增加了随机旋转步骤.具体的做法是输入图像先以0.2的概率进行随机旋转,旋转的角度范围值为[0,π=2, π,3π=2];然后在进行crop操作(面积范围在0.1-1之间,aspect ratio为0.5-2);最后统一将图像缩放到 512*512,经过数据增广后,对于文本行的短边小于10个像素的和文本实例小于20%的进行忽略.对于忽略的文本实例在计算损失函数的时候权重设置为0。
5 实现细节:
优化方法:SGD优化
动量=0.9,
weight_decay=5×10−4
vgg不是从ImageNet预训练模型中进行微调,而是通过Xavier方法随机初始化
头100次迭代中,学习速率设置为10−3,其余则固定在10−2
IC15:训练从随机初始化的VGG16模型开始,只在IC15训练集上进行。4S模型需要大约40K迭代训练,2s更长,大约60K迭代。用于后滤波的最小短边长度和面积,分别设置为10和300,对应忽略了“不关心”实例的ic15数据集99%的情况。像素和链接的阈值通过网格搜索找到并设置为(0.8,0.8)。在测试中,输入图像的大小被调整为1280×768。
MSRA-TD500:在ic15上预训练大约15k的迭代,并在td和HUST上进行大约25k迭代的微调。测试图像大小调整为768×768。像素和链接的阈值设置为(0.8,0.7)。后滤波的最小短边为15和最小面积600。
检测ic13中的水平文本:ic15的最终模型在ic13、td 500和tr400上微调,可进行大约10k的迭代。在单尺度测试中,所有图像都被调整为512×512。多尺度包括(384,384),(512,512),(768,384),(384,768),(768,768),最大长度为1600。像素和链接的阈值(0.7,0.5)用于单尺度测试,(0.6,0.5)用于多尺度测试。99%的阈值为10,300,分别用于较短的边和面积,用于后滤波。与EAST和TextBox等基于回归的方法不同,像素链接没有直接输出作为每个检测边界框的可信度,因此它的多尺度测试方案是专门设计的。特别是,不同尺度的预测映射被统一调整到所有特征图中的最大高度和最大宽度。然后,通过平均融合它们。其余步骤与单尺度测试相同。多尺度提升4-5个点,和TextBoxes差不多。
6 分析:
优势分析:PixelLin的预测层神经元只需要观察自身及其相邻像素在特征映射上的状态。换言之,Pixelink对感受野的要求最低,而且学习的任务更简单。可以从上面的假设中找到一个有用的设计深模型的指南:如果可能的话,简化深模型的任务,因为它可以使他们更快地训练,更少的数据需要。从非常有限的数据量中从头开始训练Pixelink的成功也表明文本检测比一般的对象检测要简单得多。文本检测可能更多地依赖于低层纹理特征,而不依赖于高层语义特征。
模型分析:
链接设计非常重要,因为它将语义分段转换为实例分割,这对于像素链接中相邻文本的分离是必不可少的。
不使用实例平衡(IB),并且在损失计算期间将所有正像素的权重设置为相同。 即使没有IB,像素链接也可以实现81.2的F-分数,胜过现有技术。 当使用IB时,可以获得稍微好的模型。 继续在IC13上进行实验,性能差距更明显。
图像被调整为384×384用于训练,使得召回率和精度都明显下降,这一现象与SSD是一致的。
后过滤被删除,导致召回率略有提高,但精度显著下降。?嗯哼?
2s的速度小于4s的一半,这说明了性能和速度之间的权衡。
7 总结和后续:
提出了一种新的文本检测算法,通过将同一文本实例中的像素链接到一起,进行实例分割来实现检测任务。从分割结果中直接提取检测到的文本的包围框,而不执行位置回归。由于更小的感受野和更容易学习的任务,所以可以用较少的迭代从零开始训练像素链接,同时减少迭代次数。
可尝试vgg以外其他模型,后处理部分鲁棒性差。