多种文本检测算法性能对比及算法介绍
(https://blog.csdn.net/qq_39707285/article/details/108754444)
论文题目:Character Region Attention For Text Spotting
Character Region Attention For Text Spotting(CRAFTS),是CRAFT作者的进化版本,用作端到端的文本识别,包括文本检测+文本识别,且其中的检测效果比CRAFT还要好。了解CRAFT的可以去参考这篇文章,点击进入。
1. 关键点
端到端的文本识别(text spotter)指的是文本检测+文本识别。通常使用端到端的文本识别能够达到很好的效果,之前的text spotter算法通常把检测和识别分成两个分支,使用RoI Pooling让分支共享特征。然而采用基于注意力的解码器(识别)和表示字符区域空间信息的检测器(检测)之间存在一定的联系,因为这两个模块都需要查找字符区域的位置,如果能把这两个模块结合起来,可能会达到不错的效果。
于是,基于这个想法,就有了本文的 CRAFTS。识别器模块的损失经过检测器模块反向传播,检测模块输出的字符分数map能够帮助识别模块更好的处理字符中心点,识别模块的损失反向传播到检测模块后能够增加字符区域的定位准确性。除此之外,还有一个强化的共享阶段允许任意形状文本区域的特征校正和边界定位。
主要关键点:
- 提出端到端的网络可以检测和识别任意形状的文本
- 在校正和识别模块上,利用检测器的空间字符信息,构建了模块之间的互补关系
- 通过在网络中的所有特征中传播识别损失建立了一个单一的管道
在IC13、IC15、IC19-MLT和TotalText都取得了最佳表现
2. 算法
2.1 综述
CRAFTS可以分成3个阶段:检测阶段、共享阶段和识别阶段,详细的网络结构如图2所示。
检测阶段输入一张图片然后定位到文本框。共享阶段汇集backbone高层特征和检测器输出, 然后使用校正模块对集合特征进行校正,并将其串联在一起形成一个字符相关特征。识别阶段,基于注意的解码器使用字符相关特征预测文本标签。
2.2 检测阶段
检测器选用 CRAFT, 因为它能够表示字符区域的语义信息。CRAFT的输出是字符区域中心的概率和字符之间的关系。这个字符中心信息可以用来支持识别器中的attention模块,因为这两个模块都是为了定位字符的中心位置。为了达到更好的效果,对CRAFT进行了3处修改,分别是backbone更改、链接表示和方向估计。
-
Backbone replacement
最近的研究表明,无论是检测还是识别,ResNet50都能够得到更好的特征表示,所以替换VGG16为ResNet50。 -
Link representation
在拉丁文字中垂直文本不常见,但在东亚国家中经常出现垂直方向的文字。在之前的CRAFT中,在垂直文本上使用原始的affinity映射通常会产生错误的透视变换,从而产生无效的框坐标,所以在这部分,使用一个二值的中心线链接相邻的字符区域,以解决该问题。
在相邻字符之间生成一个宽度为 t t t的线段,作为linkmap的GT, t = m a x ( ( d 1 + d 2 ) / 2 ∗ α , 1 ) t = max((d_1 + d_2)/2 ∗ \alpha, 1) t=max((d1+d2)/2∗α,1), d 1 d_1 d1和 d 2 d_2 d2是相邻字符的对角线长度, α \alpha α是尺度系数。 使用该公式可以使中心线的宽度与字符的大小成正比。 α \alpha α设置为0.1。 -
Orientation estimation
得到一个准确的文本框方向对于文本识别是至关重要的,于是,在检测阶段增加了2个通道的输出,这两个通道用来预测字符在水平和垂直方向的角度。
生成GT部分,字符框向上的角度记为 θ b o x ∗ \theta^*_{box} θbox∗,x方向的GT记为 S c o s ∗ ( p ) = ( c o s θ + 1 ) × 0.5 S^∗_{cos}(p) = (cos \theta+1)×0.5 Scos∗(p)=(cosθ+1)×0.5,y方向的GT记为 S s i n ∗ ( p ) = ( s i n θ + 1 ) × 0.5 S^∗_{sin}(p) = (sin\theta+1)×0.5 Ssin∗(p)=(sinθ+1)×0.5。orientation map就是这两个方向上GT的结合。
orientation map的损失函数定义如下:
S
c
o
s
∗
(
p
)
S^∗_{cos}(p)
Scos∗(p) 和
S
s
i
n
∗
(
p
)
S^∗_{sin}(p)
Ssin∗(p)代表文本方向的GT,在这里,字符区域得分
S
r
∗
(
P
)
S^*_r(P)
Sr∗(P)被用作加权因子,因为它表示字符中心度的置信度。方向损失只计算字符区域,即正样本。
检测阶段最终的损失函数定义为:
L
r
L_r
Lr和
L
l
L_l
Ll分别代表字符区域loss和链接loss,
L
θ
L_\theta
Lθ是角度loss,
λ
\lambda
λ控制权重,设置为0.1。
整个网络的backbone和修改的head结构如图3所示,检测器最终输出四个通道,分别代表 character region map
S
r
S_r
Sr, character link map
S
l
S_l
Sl和两个orientation maps
S
s
i
n
S_{sin}
Ssin,
S
c
o
s
S_{cos}
Scos。
在推理阶段,获得文本BB的方法和CRAFT一样,
- 定义图像的二值map M M M,初始化为0。当 S r ( p ) > T r S_r(p)>T_r Sr(p)>Tr或者 S a ( p ) > T a S_a(p)>T_a Sa(p)>Ta时, M ( p ) M(p) M(p)值为1, T r T_r Tr和 T a T_a Ta分别表示region和affinity阈值;
- 在 M M M上执行连接组件标记(CCL);
- 得到包围每个标签对应的连接组件区域的最小外接矩形;类似于OpenCv中的connectedComponents和minAreaRect函数;
此外,还利用像素平均方案确定了文本框的方向,具体的计算公式如下,文本框的角度是根据预测的方向map上的正弦值和余弦值计算的。
θ b o x \theta _{box} θbox代表的结束文本框的角度。
2.3 共享阶段
该阶段主要包含二大模块,文本纠正模块和字符区域注意力(text region attention,CRA)模块,使用 薄板样条(TPS)变换去纠正任意形状的文本区域,文本纠正模块使用 迭代-TPS,以获得更好的文本区域表示。
典型的TPS模块输入一张单词图片,但在这里提供字符区域映射和链接映射,因为它们包含了文本区域的几何信息,使用二十个控制点来紧紧覆盖弯曲的文本区域,将这些控制点作为检测结果,转换为原始输入图像坐标。可以选择执行二维多项式拟合来平滑边界多边形,迭代-TPS和最终平滑多边形输出的例子如图4所示。
CRA模块是紧密耦合检测和识别模块的关键部件,通过简单地将校正后的字符评分图与特征表示连接起来,该模型建立了以下优点,创建检测器和识别器之间的链接允许识别损失通过检测阶段传播,这提高了字符评分图的质量;将字符区域映射附加到特征图有助于识别器更好地处理字符区域;
2.4 识别阶段
识别阶段有三个组成部分:特征提取、序列建模和预测。特征提取模块比单独的识别器更轻,因为它以高层语义特征作为输入, 模块详细架构如表1所示。 提取特征后,应用双向LSTM进行序列建模,并对基于注意力的解码器进行最终的文本预测。
在每个时间步骤中,基于注意力的识别器通过屏蔽注意力输出到特征来解码文本信息。虽然注意模块在大多数情况下都能很好地工作,但当注意点不对齐或消失时,它无法预测字符。图5展示了使用CRA模块的效果,合适的注意点能够稳健的进行文本预测。
在识别阶段的损失函数定义为:
p ( Y i ∣ X i ) p(Y_i|X_i) p(Yi∣Xi)指的是第 i i i个单词框裁剪的特征表示 Y i Y_i Yi的字符序列的生成概率。
最终的损失为
L
=
L
d
e
t
+
L
r
e
g
L=L_{det}+L_{reg}
L=Ldet+Lreg, 识别损失的总体流程如图6所示,损失通过识别阶段的权重流动,并通过字符区域注意模块向检测阶段传播。 另一方面,检测损失被用作中间损失,因此使用检测和识别损失更新检测阶段前的权重。
3. 实验
3.1 数据集
- 英文数据集
IC13、IC15和TotalText - 多语言数据集
IC19
3.2 实验结果
-
水平数据集(IC13,IC15)
-
曲形数据集(TotalText)
-
多语言数据集(IC19)
4. 结论
该论文中提出了一个端到端可训练的单管道模型,它紧密地耦合了检测和识别模块,共享阶段的字符区域注意充分利用字符区域映射,帮助识别器纠正和更好地关注文本区域。同时,设计了识别损耗通过检测阶段传播,提高了检测器的字符定位能力。此外,在共享阶段的纠正模块使弯曲文本的精细定位,并避免了手工设计后处理的需要。 实验结果验证了 CRAFTS在各种数据集上的最新性能。