ECCV2018论文:TextSnake: A Flexible Representation for Detecting Text of Arbitrary Shapes
文章链接:https://arxiv.org/abs/1807.01544
github链接:https://github.com/princewang1994/TextSnake.pytorch
记录下自己在学习弯曲文本检测中遇到的一些比较好的检测算法,如:CTD+TLOC、TextSnake、Psenet、CRAFT等等。在场景文本检测算法中,从研究场景中水平多向文本开始,到如今不断出现检测扭曲文本的算法,而且越来越多优秀的算法开始出现,这次先记录下TextSnake。。。。,在数据集(Total-Text and SCUT-CTW1500)上,获得了state-of-the-art的效果。
(a)矩形框选,(b)旋转矩形,(c)四边形,(d)蛇形(凸多边形),这也是近些年来(a、b、c)针对水平多向等文本检测的一个变化改进趋势,而(d)是本文作者提出的一种新的文本行构建形状(凸多边形),相比于其他三种形式,可以去除更多的背景无关区域,以适应各种形状文本。
TextSnake构建:
首先定义TextSnake的基本单元,圆盘(Disk),我们将任意弯曲形状(假设文字与文字之间,同一个文字的不同部分之间不会重叠)的文本描述为若干不同大小的圆盘序列,每个圆盘拥有几个属性D=(c,r,):中心c=(x,y),圆盘半径(r),圆盘方向()。所有圆盘序列的中心点连接可以构成一条中心线(text center line, TCL),具体如下图,绿色为中心线,黄色区域为文字区域(text region, TR),蓝色为每个圆盘区域,这里要注意的是,圆盘的方向θ表示的是该圆盘的中心点与下一个圆盘中心点连接线和水平方向的角度。
文本实例t可以看作是一个有序列表S(t)。S(t)={D0,D1,…,Di,…,Dn},其中Di代表第i个圆盘,n代表圆盘数。当获得S(t)后,则可可以通过构建DL模型来学习圆盘的各种集合属性,最后用于推测文字的位置和形状。
网络结构(pipeline):
基于FCN+FPN网络预测文本框,包含特征提取、特征合并、输出层三个阶段,如下图所示,主干网络(蓝色)结构为一个VGG-16/19网络,VGG分为5次下采样,最后将原图缩小为1/32大小,并开始上采样,融合下采样时的特征图:
按顺序叠加各个阶段,每个阶段由一个从上一阶段提取的特征图和相应的主干网络层组成。合并过程由下列方程定义:
第五个合并阶段之后,得到一个新的特征图,其size为原始输入图像的1/2;然后,增加上采样层和2个卷积层产生最终的像素级预测输出层P,其中最后一个卷积层为1x1的卷积把特征图映射为[B,H, W, 7]的7通道特征图P,其中H和W是原图的高和宽,B为batchsize,7通道分为:文本中心线(TCL,Text Center Line)2个通道、文本区域(TR,Text Region)2个通道,圆盘的几何属性(r、cosθ和sinθ)3个通道。
在前向传播之后,网络输出层生成TCL、TR和几何图属性。对于TCL和TR的后处理,分别采用Ttcl和Ttr值阈值操作;然后,将预测得到的TCL的mask和TR的mask做一个element-wise product得到了最终的TCL区域(利用TR与TCL的交集消除噪点),(值得借鉴一下)。
Inference:
以TCL区域的任意一个点作为起始点,做Centralizing操作(Act(a)操作),具体步骤如下
初始化:在起始点利用sin和cos画出改点位置的切线(虚线)和法线(实线)
Act(a) Centralizing: 法线部分与TCL区域第一次相交的两个点取中点作为Centraling点
Act(b) Striding: 选定Centraling点,想切线方向迈一步,步长为±r×cosθ。
Act(c) Sliding: 从初始点的左右分别都生成到末端,每次在中心点画一个圆,最后所有被圆覆盖的地方我们就作为Text预测出来。
此外文章采用了启发式的过滤规则:
1、如果TCL的mask面积不到半径的0.2倍,剔除。
2、如果最终预测出来的Text面积与TR的交集不到TR的一半,剔除。
生成标签:
文本中心线:本文方法也依赖一个前提假设,即假设文本实例是蛇形的,不会分叉到多个分支。对于蛇形文本实例,它有两个边,分别是头部和尾部,即如图7(a)中的AH和DE(底边)。头部或尾部附近的两条边是平行的,但方向相反,如图7(a)中的AB和GH。
1、确定底边:
由一组顶点{v0,v1,v2,…,vn}按顺时针或逆时针顺序表示文本实例t,确定一条边ei,i+1是底边的度量方式是旁边的两条边夹角是180度,定义一条边是底边的度量指标:
2、分割长边:
确定底边以后,他们首尾连接就得到了对应的长边,对两个边线(ABCD和HGFE)上采样相同数量的锚点,将两个长边分为相等的小段,把每个等分点相连,对应点连接后取中点,这个中点就是TCL的所在点,而连接线的长度就是圆盘的直径,两点之间连线的角度就是方向。
3、生成圆盘和TCL:
为了让TCL能够完全包括在TR中,本文作者将TCL的两端缩小1/2 r(两端TCL点的半径)像素,这可以令TCL位于TR内,并使网络更容易学习两个相邻的文本实例。又因为单点线容易产生噪声,所以本文将TCL的面积扩大1/5 r,如(c)图中的浅红色区域。
损失函数:
损失函数包括两个部分,分类loss和回归loss:
分类loss用于TR和TCL的分类,使用的是普通的Cross Entropy,而回归loss都是用了SmoothL1Loss:,其中,Lcls代表TR和TCL的分类损失,Lreg代表r、cosθ和sinθ的回归损失;Ltr和Ltcl分别是TR和TCL的交叉熵损失;Lr, Lsin和Lcos为smooth-L1损失:
实验:
本文实验效果图,具体实验参数设置等细节见论文。
TextSnake提出一种基于圆盘覆盖的文字结构表示,确实是比较新颖的,值得学习,而且文章实验效果还是很好的,但是2019年也出现许多其他优秀的算法(SPCNET等)来检测场景文本,同时简化了后处理的过程。
参考:
[1]:http://blog.prince2015.club/2019/01/06/TextSnake/
[2]: S. Long, J. Ruan, W. Zhang, X. He, W. Wu, and C. Yao.Textsnake: A flexible representation for detecting text of ar-bitrary shapes. In ECCV, pages 19–35. Springer, 2018. 2, 7,8