论文:
TextSnake: A Flexible Representation for Detecting Text of Arbitrary Shapes
Face++ 2018 ECCV论文。
上图描述了目前文本检测的几种机制。
- 基于轴对齐方式的矩形框,只对水平和竖直的文本奏效,对于倾斜,弯折,曲面的文本,会引入好多背景无关区域。
- 基于旋转的矩形框,也就是(a)的基础上加入了角度信息。可以适应于倾斜的文本,但是对于弯折,曲面的文本还是回引入背景无关区域。
- 基于凸四边形的方法,依然对曲面,弯折的文本无法适应。
- 本文的基于TextSnake的方法,可以适应于各种形状的文本。本质就是凸N边形。
TextSnake算法:
黄色表示文本区域,是由一系列蓝色的圆环组件而成,这里表示为S
S(t) = {D0; D1;... ; Di;... ; Dn}
其中,n表示圆环的个数。
绿色的实线表示由圆环的中心线串联起来的文本区域的骨架。
D = (c; r; θ)
圆环D包含3个信息,圆心坐标c,半径r,绿色骨架在圆心的切线和水平坐标轴的夹角θ。
流程框架:
对于输入的一张图片,经过网络结构(FCN+FPN)后,得到7个特征图。包括2个文本区域TR(text regions),2个文本中心线TCL(text center line),1个圆环的半径radius,一个角度的余弦值cosθ,一个角度的正弦值sinθ。
Masked TCL由TR和TCL相乘得到,表示在TR区域上提取的TCL。将Masked TCL经过并查集disjoint set操作,可以得到实例分割的结果,将每个文本区域都单独分割出来。然后经过striding算法,可以得到文本区域的骨架线。再结合预测的半径,得到最终的文本检测区域。
网络结构:
网络基础结构为vgg16。网络先下采样,后续部分又进行上采样特征融合,最终预测的featuremap为原图的1/2。
推断:
根据网络得到的文本区域的实例分割的结果。
首先在实例分割的区域上任意取一点,根据该点可以做出该点的切线和法线。然后法线和实例分割的区域相交的中点就是该点中心化后的点。然后基于该点,分别左右各取一定步长,步长的式子如下面所示,
( (1/2)r × cosθ; (1/2)r × sinθ) and (- (1/2)r × cosθ; - (1/2)r × sinθ)
这样左右各得到一个新的点,再基于这2个新的点做中心化,滑动,这样一直持续,直到进行完所有的实例分割区域,输出最终的文本曲框。
推断操作中还引入了2个语意操作过滤false positive 区域。
- TCL区域的像素个数至少是平均半径的0.2倍。
- 至少一半的像素在重建文本区域应该被分类为TR。
训练label制作:
首先,label需要已知凸多边形的点的坐标。然后每2个相邻的点可以计算一个余弦距离M。
将M中的数值两两相乘,乘积最接近-1 的,说明是头尾两端。然后取头尾两端的中点作为字体骨架的两端。被该头尾分开的上下两端各取等量的散点,并将上下的散点连接起来,取连接线的中心点作为骨架点,将所有的中点连接起来,生成字体区域的骨架线。
后续再对骨架线的左右两端各缩小1/2rend的距离,rend表示TCL 在头尾两个端点处的半径。最后膨胀TCL区域1/5r,得到一个相对较宽的TCL区域。因为单独的一个点对于噪声是比较敏感的。
Loss计算:
整个loss包括分类和回归两种loss。分类的包括TR和TCL的softmax loss。回归的包括半径r,余弦cos,正弦sin的smooth L1 loss。
总结:
(1)论文的这种基于圆环组成的snake方式的文本检测思想非常novel,解决了各种曲形的文本检测问题。可以看出该方法召回率较高。