Paper : https://arxiv.org/abs/2002.10200v2
Code : https://github.com/aim-uofa/AdelaiDet
Code : https://github.com/Yuliang-Liu/bezier_curve_text_spotting
作者交流报告会:https://www.bilibili.com/video/BV1W54y1D7ap?p=8
基于 FPN 的 Anchor-Free 的文本检测模块,连接检测和识别的采样模块,轻量级的识别模块。
使用参数化的 Bezier 曲线 自适应的拟合任意形状的文本
-
为了在图像中准确定位定向的和弯曲的场景文本,首次使用 Bezier 曲线引入了一种新的简洁的弯曲场景文本的参数化表示形式。 与标准边界框表示相比,它引入的计算开销可忽略不计。
-
提出了一种采样方法,也称为 BezierAlign,用于精确的特征对齐,因此识别分支可以自然地连接到整个结构。 通过共享主干特征,可以将识别分支设计为轻型结构。
-
方法的简单性使其可以实时执行推理。 ABCNet 在两个具有挑战性的数据集 Total-Text 和 CTW1500 上实现了最先进的性能,展示了有效性和效率上的优势
Bezier Curve Detection
c(t)=i=0∑nbiBi,n(t),0≤t≤1,(1)
n 代表角度,bi 代表第 i 个控制点,Bi,n(t) 代表伯恩斯坦基本多项式(Bernstein):
Bi,n(t)=(ni)ti(1−t)n−i,i=0,…,n,(2)
其中 (ni) 是一个二项式系数。为了用 Bezier 曲线拟合一个文本的多边形形状,从存在的数据集和实际场景中观察了多边形形状的场景文本,发现使用三次的 Bezier 曲线可以有效的拟合不同种类的多边形形状的场景文本。
基于三次 Bezier 曲线,可以把多边形场景文本的检测简化为一个使用 8 个控制点的边框回归。有四个控制点的直文本是多边形场景文本的典型情况。为了保持一致,我们在每个长边的三分点上插入了另外两个控制点。
Δx=bix−xmin,Δy=biy−ymin,(3)
xmin,ymin 分别代表四个顶点的最小 x 和最小 y 。在检测部分,使用一个有16通道的卷积层学习 Δx 和 Δy
Bezier Ground Truth Generation
给定曲线边框标注点 {pi}i=1n ,pi 代表第 i 个标注点,主要目标是获得公式(1) 中三次 Bezier 曲线的最优参数。可以简单地应用标准最小二乘法:
⎣⎢⎢⎢⎡B0,3(t0)B0,3(t1)⋮B0,3(tm)……⋱…B3,3(t0)B3,3(t1)⋮B3,3(tm)⎦⎥⎥⎥⎤⎣⎢⎢⎡bx0bx1bx2bx3by0by1by2by3⎦⎥⎥⎤=⎣⎢⎢⎢⎡px0px1⋮pxmpy0py1⋮pym⎦⎥⎥⎥⎤(4)
以下图为例,右边一项是标注点,中间一项是要求的贝塞尔曲线的控制点。为了求解控制点,需要算出系数 t ,t 通过折线段的累计长度与七个点的折线段的周长的比值来确定,根据贝塞尔的公式可以求得所有的伯恩斯坦多项式的值,又由于方程的个数大于解的个数,可以通过最小二乘法反解出四个控制点的座标值。
其中 m 是曲线边框的标注点的数量。Total-Text 和 CTW1500 ,m 分别是 5 和 7 。t 是通过使用累积长度与多边形周长之比来计算的。根据公式 (1)(4) ,把原始多边形标注转变为参数化的 Bezier 曲线。直接使用第一个和最后一个标注点作为第一和最后一个控制点。基于结构化后的 Bezier 曲线边框,可以在没有剧烈变形的情况下很容易地通过 BezierAlign 把曲线文本转为水平文本。
BezierAlign
给定输入特征图和 Bezier 曲线控制点,我们同时处理大小为 hout×wout 的矩形输出特征图的所有输出像素。
以位置 (giw,gih) 处的像素 gi 为例,可以通过以下公式计算 t:
t=woutgiw
然后使用 t 和公式 (1) 计算 Bezier 曲线的上边界点 tp 和下边界点 bp,使用 tp 和 bp ,可以通过公式 (6) 计算出索引采样点 op 的位置:
op=bp⋅houtgih+tp⋅(1−houtgih)
通过 op 的位置,我们可以轻松地应用双线性插值来计算结果。
Recognition branch
与主干网络共享特征图,设计了一个轻量级的识别分支
在 TotalText上的结果:
在 CTW1500 上的结果:
文本截取的对比: