【读点论文】ABCNet: Real-time Scene Text Spotting with Adaptive Bezier-Curve...通过线性插值的扩展版用8个点去拟合不规则文本框

ABCNet: Real-time Scene Text Spotting with Adaptive Bezier-Curve Network∗

Abstract

  • 场景文本检测与识别受到越来越多的研究关注。现有的方法大致可分为两类:基于字符的和基于分割的。这些方法要么字符标注成本高昂,要么需要维护复杂的管道,这通常不适合实时应用。在这里,我们通过提出自适应贝塞尔曲线网络(ABCNet)来解决这个问题。我们的贡献有三方面:1)我们首次通过参数化的贝塞尔曲线自适应地拟合任意形状的文本。2)我们设计了一种新颖的 BezierAlign 层,用于提取具有任意形状的文本实例的精确卷积特征,与以前的方法相比,精度显着提高。3)与标准边界框检测相比,我们的贝塞尔曲线检测引入的计算开销可以忽略不计,从而使我们的方法在效率和准确性方面都更具优势。
  • 在任意形状的基准数据集 Total-Text 和 CTW1500 上进行的实验表明,ABCNet 实现了最先进的准确率,同时显著提高了速度。特别是在 Total-Text 上,我们的实时版本比最近的最先进方法快 10 倍以上,并且具有竞争力的识别准确率。代码可以在 AdelaiDet 包中找到。GitHub - aim-uofa/AdelaiDet: AdelaiDet is an open source toolbox for multiple instance-level detection and recognition tasks.
  • 论文地址:[2002.10200] ABCNet: Real-time Scene Text Spotting with Adaptive Bezier-Curve Network (arxiv.org)
  • ABCNet(Adaptive Bezier Curve Network)是一个端到端的可训练框架,用于识别任意形状的场景文本。直观的pipeline如图所示。采用了单点无锚卷积神经网络作为检测框架。移除锚定箱可以简化我们任务的检测。该算法在检测头输出特征图上进行密集预测,检测头由4个步长为1、填充为1、3×3核的叠层卷积层构成。
  • ABCNet的最大亮点在于使用了贝塞尔曲线来构成文本框,而不是使用矩形文本框,这样一来模型可以预测任意形状的文本,而且并不会增加太多的参数。

Introduction

  • 场景文本检测和识别因其在计算机视觉中的众多应用而受到越来越多的关注。尽管最近取得了巨大进展,但由于文本在大小、长宽比、字体样式、透视失真和形状方面的多样性,在野外检测和识别文本仍未得到很大解决。虽然深度学习的出现大大提高了场景文本识别任务的性能,但目前的方法与现实世界的应用相比仍然存在相当大的差距,特别是在效率方面

  • 最近,许多端到端方法 显著提高了任意形状场景文本识别的性能。然而,这些方法要么使用基于分割的方法,维护复杂的流程,要么需要大量昂贵的字符级注释。此外,几乎所有这些方法的推理速度都很慢,阻碍了实时应用的部署。因此,我们的动机是设计一个简单而有效的端到端框架,用于识别图像中的定向或弯曲场景文本 ,确保快速推理时间,同时实现与最先进方法相当甚至更好的性能。

  • 为了实现这一目标,我们提出了自适应贝塞尔曲线网络 (ABCNet),这是一个端到端可训练框架,用于任意形状的场景文本识别。ABCNet 通过简单而有效的贝塞尔曲线自适应实现任意形状的场景文本检测,与标准矩形边界框检测相比,其计算开销可以忽略不计。此外,我们设计了一个新颖的特征对齐层 BezierAlign,以精确计算曲线形状的文本实例的卷积特征,从而以几乎可以忽略不计的计算开销实现高识别精度。我们首次用参数化的贝塞尔曲线表示有向或弯曲的文本,结果证明了我们方法的有效性。我们的识别结果示例如图 1 所示。

    • 在这里插入图片描述

    • 图 1. 基于分割的结果很容易受到附近文本的影响。非参数非结构化的分割结果使得它们很难为后续的识别分支对齐特征。基于分割的结果通常需要复杂的后处理,从而影响效率。得益于参数化的贝塞尔曲线表示,我们的 ABCNet 可以产生结构化的检测区域,因此 BezierAlign 采样过程可用于自然连接识别分支。

  • 请注意,之前的方法(例如 TextAlign 和 FOTS )可以看作是 ABCNet 的特例,因为四边形边界框可以看作是具有 4 条直线边界的最简单的任意形状边界框。此外,ABCNet 可以避免复杂的变换(例如 2D 注意力 ),从而使识别分支的设计变得相当简单。我们总结我们的主要贡献如下。

    • 为了准确定位图像中的定向和弯曲场景文本,我们首次引入了一种使用贝塞尔曲线的弯曲场景文本的全新简洁参数化表示。与标准边界框表示相比,它引入的计算开销可以忽略不计。
    • 我们提出了一种采样方法,即 BezierAlign,用于精确的特征对齐,因此识别分支可以自然地连接到整体结构。通过共享骨干特征,识别分支可以设计为轻量级结构
    • 我们的方法非常简单,因此可以实时进行推理。ABCNet 在两个具有挑战性的数据集 Total-Text 和 CTW1500 上实现了最先进的性能,在有效性和效率方面都表现出色。

Related Work

  • 场景文本识别需要同时检测和识别文本,而不是只涉及一项任务。 最近,基于深度学习的方法的出现大大提高了文本识别的性能。检测和识别的性能都得到了显着提高。我们将几种具有代表性的基于深度学习的场景文本识别方法总结为以下两类。图2显示了典型作品的概述。

    • 在这里插入图片描述

    • 图 2. 与我们最相关的一些端到端场景文本识别方法的概述。在 GT(ground-truth)框内,“W”、“R”和“C”分别代表单词级注释、文本内容和字符级注释。“H”、“Q”和“P”分别表示该方法能够检测水平、四边形和任意形状的文本。“RP”表示该方法可以识别四边形框内的弯曲文本。“R”:识别;“BBox”:边界框。虚线框表示该方法无法检测到的文本形状。

  • 常规端到端场景文本识别 Li 等 提出了第一种基于深度学习的端到端可训练场景文本识别方法。该方法通过两阶段框架成功利用 RoI Pooling 将检测和识别特征结合起来,但只能识别水平和聚焦的文本。其改进版本 [Towards end-to-end text spotting in natural scenes] 显著提高了性能,但速度有限。何等 和刘等 采用无锚机制来提高训练和推理速度。它们分别使用类似的采样策略,即 Text-Align-Sampling 和 RoI-Rotate,以便从四边形检测结果中提取特征。请注意,这两种方法都无法识别任意形状的场景文本

  • 任意形状端到端场景文本识别为了检测任意形状的场景文本,提出了一种 Mask TextSpotter,它巧妙地改进了 Mask R-CNN,并使用字符级监督同时检测和识别字符和实例掩码。该方法显著提高了识别任意形状场景文本的性能。然而,字符级基本事实成本高昂,并且在实践中使用免费的合成数据很难为真实数据产生字符级基本事实。它的改进版本 [Mask textspotterv2] 大大减轻了对字符级 GT 的依赖。该方法依赖于区域提议网络,这在一定程度上限制了速度。提出了 TextNet,它预先生成四边形检测边界框,然后使用区域提议网络将检测特征输入到识别中。虽然该方法可以直接从四边形检测中识别任意形状的文本,但性能仍然有限。

  • 最近, 提出使用 RoI Masking 来聚焦任意形状的文本区域,但结果容易受到异常像素的影响。另外,分割分支增加了计算负担,拟合多边形的过程也带来了额外的时间消耗,并且分组结果通常参差不齐、不平滑。[Convolutional Character Networks] 中的工作是第一个一阶段任意形状场景文本识别方法,需要字符级真实数据进行训练。[TextDragon] 的作者提出了一种新颖的采样方法 RoISlide,该方法使用来自文本实例的预测段的融合特征,因此对较长的任意形状文本具有很强的鲁棒性。

Adaptive Bezier Curve Network (ABCNet)

  • ABCNet 是一个端到端可训练框架,用于识别任意形状的场景文本。图 3 中可以看到一个直观的流程。我们采用单次、无锚卷积神经网络作为检测框架。移除锚框显著简化了我们任务的检测。在这里,检测是在检测头的输出特征图上进行密集预测的,检测头由 4 个堆叠的卷积层构成,步幅为 1,填充为 1,内核为 3×3。 接下来,我们将分两部分介绍所提出的 ABCNet 的关键组件:1)贝塞尔曲线检测;2)BezierAlign 和识别分支。
    • 在这里插入图片描述

    • 图 3. 所提出的 ABCNet 的框架。我们使用三次贝塞尔曲线和 BezierAlign 来提取贝塞尔曲线检测结果的曲线序列特征。整体框架是端到端可训练的,效率很高。紫色点表示三次贝塞尔曲线的控制点。

    • 其网络架构与FOTS非常相似,检测部分在骨干网络ResNet-50 FPN的基础上直接预测文本框位置,不过ABCNet使用的文本框是由贝塞尔曲线构成的。具体而言,对于每一个文本目标,其长边也就是文本行方向上,我们使用贝塞尔曲线包围文本,而短边依然是使用直线段。文章中使用了3阶贝塞尔曲线,需要4个支点可以唯一确定,因此上下边两条贝塞尔曲线共需要8个支点,这8个支点的坐标就是检测网络预测的目标。相比于FOTS等基于四边形文本框预测的模型,ABCNet并不需要额外的网络层,而只是需要多预测几个坐标点,对整体的推断速度并没有显著的影响。

Bezier Curve Detection

  • 与基于分割的方法 相比,基于回归的方法是任意形状文本检测的更直接解决方案。然而,以前基于回归的方法需要复杂的参数化预测来拟合文本边界,这在实践中对于各种文本形状来说并不是非常有效和稳健。

  • 为了简化任意形状场景文本检测,遵循回归方法,我们认为贝塞尔曲线是曲线文本参数化的理想概念。贝塞尔曲线表示以伯恩斯坦多项式为基础的参数曲线 c(t)。其定义如公式(1)所示。

    • c ( t ) = ∑ i = 0 n b i B i ; n ( t ) ; 0 ≤ t ≤ 1 ; ( 1 ) c(t) = \sum^n_{i=0} b_iB_{i;n}(t); 0 ≤ t ≤ 1; (1) c(t)=i=0nbiBi;n(t);0t1;(1)

    • 其中,n表示次数,bi 表示第 i 个控制点, B i ; n ( t ) B_{i;n}(t) Bi;n(t) 表示Bernstein基多项式,如公式(2)所示:

    • B i , n ( t ) = ( n    i ) T t i ( 1 − t ) n − i ; i = 0 ; … … ; n ; B_{i,n}(t) = ( n~~ i )^T t^ i (1 − t) ^{n−i} ; i = 0; ……; n; Bi,n(t)=(n  i)Tti(1t)ni;i=0;……;n;

    • 其中 ( n    i ) T (n ~~i)^T (n  i)T 是二项式系数。为了用贝塞尔曲线拟合任意形状的文本,我们全面观察了现有数据集和现实世界中的任意形状场景文本,并通过经验证明三次贝塞尔曲线(即 n 为 3)足以在实践中拟合不同类型的任意形状场景文本。图 4 显示了三次贝塞尔曲线的图示。

    • 在这里插入图片描述

    • 图 4. 三次贝塞尔曲线。bi 表示控制点。绿线形成控制多边形,黑色曲线为三次贝塞尔曲线。请注意,只有两个端点 b1 和 b4,贝塞尔曲线会退化为直线。

    • 为了用贝塞尔曲线确定文本的任意形状,我们从现有的数据集中全面地观察任意形状的场景文本。在现实世界中,我们通过经验证明,三次贝塞尔曲线(即n为3)在实践中对不同类型的任意形状的场景文本是足够的。

  • 基于三次贝塞尔曲线,我们可以将任意形状场景文本检测简化为总共具有八个控制点的边界框回归。请注意,具有四个控制点(四个顶点)的直文本是任意形状场景文本的典型情况。为了保持一致性,我们在每个长边的三分点中插入了另外两个控制点

  • 为了学习控制点的坐标,我们首先生成 2.1.1 中描述的贝塞尔曲线基本事实,并遵循与 [Deep matching prior network: Toward tighter multi-oriented text detection] 类似的回归方法来回归目标。对于每个文本实例,我们使用

    • ∆ x = b i x − x m i n ; ∆ y = b i y − y m i n ; ( 3 ) ∆x = b_{ix} − x_{min}; ∆y = b_{iy} − y_{min}; (3) x=bixxmin;y=biyymin;(3)

    • 其中 xmin 和 ymin 分别表示 4 个顶点的最小 x 和 y 值。预测相对距离的优点在于它与贝塞尔曲线控制点是否超出图像边界无关。在检测头内部,我们只需要一个具有 16 个输出通道的卷积层来学习 ∆x 和 ∆y,这几乎是免费的,而结果仍然可以准确,这将在第 3 节中讨论。

Bezier Ground Truth Generation
  • 在本节中,我们简要介绍如何基于原始注释生成贝塞尔曲线基本事实。任意形状的数据集(例如 Total-text 和 CTW1500 )对文本区域使用多边形注释。给定曲线边界上的注释点 { p i } i = 1 n \{p_i\} ^n _{i=1} {pi}i=1n,其中 pi 表示第 i 个注释点,主要目标是获得方程 (1) 中三次贝塞尔曲线 c(t) 的最佳参数。为此,我们可以简单地应用标准最小二乘法,如方程 (4) 所示:

    • 在这里插入图片描述

    • 这里 m 表示曲线边界的注释点数。对于 Total-Text 和 CTW1500,m 分别为 5 和 7。t 是使用累积长度与折线周长的比率计算的。

  • 根据公式 (1) 和公式 (4),我们将原始折线注释转换为参数化的贝塞尔曲线。请注意,我们直接使用第一个和最后一个注释点分别作为第一个 (b0) 和最后一个 (b4) 控制点。图 5 显示了可视化比较,从中可以看出生成结果在视觉上甚至比原始基本事实更好。

    • 在这里插入图片描述

    • 图 5. 贝塞尔曲线生成比较。在图 (b) 中,对于每个曲线边界,红色虚线形成一个控制多边形,红点表示控制点。扭曲结果如下所示。在图 (a) 中,我们利用 TPS 和 STN 将原始地面实况扭曲为矩形。在图 (b) 中,我们使用生成的贝塞尔曲线和我们的 BezierAlign 来扭曲结果。

  • 此外,基于结构化的贝塞尔曲线边界框,我们可以轻松使用第 2.2 节中描述的 BezierAlign 将弯曲的文本扭曲为水平格式,而不会发生剧烈变形。 图 6 显示了更多贝塞尔曲线生成结果的示例。我们的方法很简单,可以在实践中推广到不同类型的文本。

    • 在这里插入图片描述

    • 图 6. 贝塞尔曲线生成示例结果。绿线为最终贝塞尔曲线结果。红色虚线表示控制多边形,4 个红色端点表示控制点。放大可获得更好的可视化效果。

Bezier Curve Synthetic Dataset
  • 对于端到端的场景文本识别方法,大量的免费合成数据始终是必要的,如表 2 所示。然而,现有的 800k SynText 数据集 仅为大多数直文本提供四边形边界框。为了使任意形状的场景文本多样化和丰富,我们努力用 VGG 合成方法 [Synthetic data for text localisation in natural images] 合成 150k 合成数据集(94,723 幅图像包含大多数直文本,54,327 幅图像主要包含弯曲文本)。特别地,我们从 COCOText 中筛选出 40k 张无文本背景图像,然后使用 [Multiscale combinatorial grouping for image segmentation and object proposal generation] 和 [Deeper depth prediction with fully convolutional residual networks] 准备每个背景图像的分割蒙版和场景深度,以进行接下来的文本渲染。为了扩大合成文本的形状多样性,我们修改了 VGG 合成方法,通过合成具有各种艺术字体和语料库的场景文本,并为所有文本实例生成多边形注释。然后,使用注释通过第 2.1.1 节中描述的生成方法生成贝塞尔曲线基本事实。我们的合成数据示例如图 8 所示。

BezierAlign

  • 为了实现端到端训练,大多数先前的方法都采用各种采样(特征对齐)方法来连接识别分支。通常,采样方法表示网络内区域裁剪过程。换句话说,给定一个特征图和感兴趣区域 (RoI),使用采样方法选择 RoI 的特征并有效地输出固定大小的特征图。但是,先前基于非分割的方法的采样方法,例如 RoI Pooling 、RoIRotate 、Text-Align-Sampling 或 RoI Transform 无法正确对齐任意形状文本的特征(RoISlide [43] 大量预测段)。

  • 通过利用紧凑贝塞尔曲线边界框的参数化特性,我们提出了用于特征采样的 BezierAlign。BezierAlign 扩展自 RoIAlign 。与 RoIAlign 不同,BezierAlign 的采样网格形状不是矩形。相反,任意形状的网格的每一列都与文本的贝塞尔曲线边界正交。 采样点的宽度和高度分别具有等距间隔,它们相对于坐标进行双线性插值

  • 正式给定一个输入特征图和贝塞尔曲线控制点,我们同时处理大小为 h o u t × w o u t h_{out} ×w_{out} hout×wout 的矩形输出特征图的所有输出像素。 以位置为 (giw; gih) 的像素 gi(来自输出特征图)为例,我们通过公式 (5) 计算 t:

    • t = g i w w o u t t=\frac{g_{iw}}{w_{out}} t=woutgiw

    • 然后利用 t 和公式(1)计算出贝塞尔曲线上边界点 tp 和贝塞尔曲线下边界点bp,利用tp和bp,我们可以通过公式(6)线性索引采样点 op:

    • o p = b p ⋅ g i h h o u t + t p ⋅ ( 1 − g i h h o u t ) op=bp·\frac{g_{ih}}{h_{out}}+tp·(1-\frac{g_{ih}}{h_{out}}) op=bphoutgih+tp(1houtgih)

  • 有了op的位置,我们就可以很容易地应用双线性插值来计算结果。之前的采样方法与BezierAlign的比较如图7所示。

    • 在这里插入图片描述

    • 图 7. 以前的采样方法与 BezierAlign 的比较。提出的 BezierAlign 可以准确地对文本区域的特征进行采样,这对于识别训练至关重要。请注意,对齐过程是在中间卷积特征中处理的。

  • 识别分支。得益于共享主干特征和 BezierAlign,我们设计了一个轻量级识别分支(如表 1 所示),以便更快地执行。它由 6 个卷积层、1 个双向 LSTM 层和 1 个全连接层组成。基于输出分类分数,我们使用经典的 CTC Loss 进行文本字符串 (GT) 对齐。请注意,在训练期间,我们直接使用生成的贝塞尔曲线 GT 来提取 RoI 特征。因此,检测分支不会影响识别分支。在推理阶段,RoI 区域被第 2.1 节中描述的检测贝塞尔曲线替换。实验第 3 节中的消融研究表明,提出的 BezierAlign 可以显着提高识别性能。

    • 在这里插入图片描述

    • 表 1:识别分支的结构,它是 CRNN 的简化版本。对于所有卷积层,填充大小限制为 1。n 表示批量大小。c 表示通道大小。h 和 w 表示输出特征图的高度和宽度,nclass 表示预测类别的数量,在本文中设置为 97,包括英文字符的大小写、数字、符号、代表所有其他符号的一个类别以及最后一个类别的“EOF”

  • BezierAlign 从RoI扩展而来,但是采样网格不是矩形。任意形状网格的每一列都与文本的Bezier曲线边界正交。采样点的宽度和高度分别为等距间隔,并对坐标进行双线性插值。具体的操作过程有以下几个步骤:

    • 对于识别窗口中的任一格点(右侧红点),先计算出其到窗口左侧的距离与整个窗口宽度的比例 t;
    • 对于原目标框,找出其上下边Bezier曲线参数方程对应参数值为t的位置,即tp与bp(左侧红色空心点);
    • 计算窗口中格点到窗口底部的距离与整个窗口高度的比例;
    • 按照这个比例对从bp到tp的线段进行分割,得到最终对应点(左侧红点)。得到对应点后,我们即可通过二维插值求解该处的特征值。
    • 在这里插入图片描述

Experiments

  • 我们在最近推出的两个任意形状场景文本基准 Total-Text 和 CTW1500 上评估了我们的方法,这两个基准也包含大量直文本。我们还在 Total-Text 上进行了消融研究,以验证我们提出的方法的有效性。

Implemented details

  • 本文的主干网络与大多数以前的论文一样,采用了通用设置,即 ResNet-50 和特征金字塔网络 (FPN) 。对于检测分支,我们在 5 个特征图上使用 RoIAlign,分辨率分别为输入图像的 1/8、1/16、1/32、1/64 和 1/128;而对于识别分支,我们在三个特征图上使用 BezierAlign,分辨率分别为 1/4、1/8 和 1/16。预训练数据是从公开的英文单词级数据集中收集的,包括第 2.1.2 节中描述的 150k 合成数据、从原始 COCO-Text 中过滤的 15k 图像和 7k ICDAR-MLT 数据。
  • 然后在目标数据集的训练集上对预训练模型进行微调。此外,我们还采用了数据增强策略,例如随机尺度训练,短尺寸随机从 560 到 800 中选择,长尺寸小于 1333;随机裁剪,确保裁剪尺寸大于原始尺寸的一半,并且不会剪切任何文本(对于一些难以满足条件的特殊情况,我们不应用随机裁剪)。
  • 我们使用 4 个 Tesla V100 GPU 训练模型,图像批次大小为 32。最大迭代次数为 150K;初始化学习率为 0.01,在第 70K 次迭代时降低到 0.001,在第 120K 次迭代时降低到 0.0001。整个训练过程大约需要3天。

Experimental results on Total-Text

  • 数据集。Total-text 数据集 是 2017 年提出的最重要的任意形状场景文本基准之一,它是从各种场景中收集的,包括类似文本的场景复杂性和低对比度背景。它包含 1,555 张图像,其中 1,255 张用于训练,300 张用于测试。为了模拟真实场景,此数据集的大多数图像包含大量常规文本,同时保证每张图像至少有一个弯曲的文本。文本实例基于单词级别使用多边形注释。它的扩展版本 通过按照文本识别序列用固定的十个点注释每个文本实例来改进其训练集的注释。数据集仅包含英文文本。为了评估端到端结果,我们遵循与以前的方法相同的指标,即使用 F 度量来测量单词准确率。

  • 消融研究:BezierAlign。为了评估所提出的组件的有效性,我们对该数据集进行了消融研究。我们首先对采样点数量如何影响端到端结果进行敏感性分析,如表 4 所示。从结果中我们可以看出,采样点的数量可以显著影响最终的性能和效率。我们发现 (7,32) 在 F 度量和 FPS 之间实现了最佳权衡,这在以下实验中用作最终设置

    • 在这里插入图片描述

    • 表4:BezierAlign的采样点数量的消融研究。

  • 我们通过将 BezierAlign 与图 7 所示的先前采样方法进行比较来进一步评估 BezierAlign。表 3 所示的结果表明,BezierAlign 可以显著改善端到端结果。定性示例如图 9 所示。

    • 在这里插入图片描述

    • 表 3:BezierAlign 的烧蚀研究。水平采样遵循 [Towards end-to-end text spotting with convolutional recurrent neural networks],四边形采样遵循 [An end-to-end textspotter with explicitalignment and attention]。

    • 在这里插入图片描述

    • 图 9. 四边形采样法与 BezierAlign 的定性识别结果。左:原始图像。右上:使用四边形采样的结果。右下:使用 BezierAlign 的结果。

  • 消融研究:贝塞尔曲线检测。另一个重要组成部分是贝塞尔曲线检测,它可以实现任意形状的场景文本检测。因此,我们还进行了实验来评估贝塞尔曲线检测的时间消耗。表 5 中的结果表明,与标准边界框检测相比,贝塞尔曲线检测不会引入额外的计算。

    • 在这里插入图片描述

    • 表 5:贝塞尔曲线检测时间消耗的消融研究。

  • 与最先进的方法进行比较。我们进一步将我们的方法与以前的方法进行比较。从表 2 中我们可以看到,我们的单尺度结果(短尺寸为 800)可以实现具有竞争力的性能,同时实现实时推理速度,从而在速度和单词准确度之间取得更好的平衡。通过多尺度推理,ABCNet 实现了最先进的性能,显著优于所有以前的方法,特别是在运行时间方面。值得一提的是,我们的更快版本可以比以前的最佳方法 [Mask TextSpotter’19] 快 11 倍以上,同时准确度相当。

    • 在这里插入图片描述

    • 表 2:Total-Text 上的场景文本识别结果。此处 * 表示结果是基于原始论文或提供的代码粗略推断的。由于输入图像的短尺寸为 600,因此 ABCNet-F 速度更快。MS:多尺度测试。数据集:AddF2k ;IC13 ;IC15 ;TT ;MLT ;COCO-Text 。

  • 定性结果。图 10 显示了 ABCNet 的一些定性结果。结果表明,我们的方法可以准确检测和识别大多数任意形状的文本。此外,我们的方法还可以很好地处理直文本,具有近四边形紧凑的边界框和正确的识别结果。图中还可视化了一些错误,这些错误主要是由于错误识别其中一个字符造成的。

    • 在这里插入图片描述

    • 图 10. ABCNet 在 Total-text 上的定性结果。检测结果以红色边界框显示。浮点数是预测的置信度。放大以获得更好的可视化效果

Experimental Results on CTW1500

  • 数据集。CTW1500 是 2017 年提出的另一个重要的任意形状场景文本基准。与 Total-Text 相比,该数据集包含英文和中文文本。此外,标注基于文本行级别,还包含一些文档类文本,即许多小文本可能堆叠在一起。CTW1500 包含 1k 张训练图像和 500 张测试图像。

  • 实验。由于中文文本在该数据集中的占比很小,我们在训练过程中直接将所有中文文本视为“未见”类,即第 96 类。 请注意,在我们的实现中,最后一类,即第 97 类是“EOF”。我们遵循与 [TextDragon] 相同的评估指标。实验结果如表 6 所示,表明在端到端场景文本识别方面,ABCNet 可以显著超越之前最先进的方法。该数据集的示例结果如图 11 所示。从图中我们可以看到,一些长文本行实例包含许多单词,这使得全匹配单词准确率变得极其困难。换句话说,错误地识别一个字符将导致整个文本的得分为零。

    • 在这里插入图片描述

    • 表 6:CTW1500 上的端到端场景文本识别结果。* 表示结果来自 [TextDragon]。“None”表示不使用词典。“Strong Full”表示我们使用测试集中出现的所有单词。

    • 在这里插入图片描述

    • 图 11. CTW1500 的定性端到端点样结果。 放大以获得更好的可视化效果。

Conclusion

  • 我们提出了 ABCNet——一种使用贝塞尔曲线进行任意形状场景文本识别的实时端到端方法。通过使用参数化的贝塞尔曲线重新表述任意形状的场景文本,ABCNet 可以使用贝塞尔曲线检测任意形状的场景文本,与标准边界框检测相比,其计算成本可以忽略不计。借助这种常规的贝塞尔曲线边界框,我们可以通过新的 BezierAlign 层自然地连接一个轻量级识别分支。
  • 此外,通过使用我们的贝塞尔曲线合成数据集和公开数据,在两个任意形状的场景文本基准(Total-Text 和 CTW1500)上进行的实验表明,我们的 ABCNet 可以实现最先进的性能,并且比以前的方法快得多。

贝塞尔(Bézier)曲线

  • 从线性插值出发,贝塞尔(Bézier)曲线-之一 - 知乎 (zhihu.com)

    • 在这里插入图片描述

    • P − P 0 P 1 − P 0 = t P = P 0 + t ( P 1 − P 0 ) P = ( 1 − t ) P 0 + t P 1 1 − t 是在 P 0 处,而 t 在 P 1 处。 \frac{P-P_0}{P_1-P_0}=t\\ P=P_0+t(P_1-P_0)\\ P=(1-t)P_0+tP_1\\ 1-t 是在 P_0 处,而 t 在 P_1 处。 P1P0PP0=tP=P0+t(P1P0)P=(1t)P0+tP11t是在P0处,而tP1处。

  • 现有以下三点: P 0 , P 1 , P 2 P_0,P_1,P_2 P0,P1,P2,取 S 1 S_1 S1 在直线 P 0 P 1 P_0P_1 P0P1 距离 P 0 P 0 P0 比例为 t,在直线 P 1 P 2 P_1P_2 P1P2 距离 P 1 P_1 P1 比例为t, 取 S 在直线 S 1 S 2 S _1S_2 S1S2 距离 S 1 S_1 S1 比例为t.

    • 在这里插入图片描述

    • 那么我们取 t 到 0~1之间,用数学语言来描述:

    • S 1 = ( 1 − t ) P 0 + t P 1 S 2 = ( 1 − t ) P 1 + t P 2 S = ( 1 − t ) S 1 + t S 2 S_1=(1-t)P_0+tP_1\\ S_2=(1-t)P_1+tP_2\\ S=(1-t)S_1+tS_2 S1=(1t)P0+tP1S2=(1t)P1+tP2S=(1t)S1+tS2

    • 将 ,S1,S2 代入 S:

    • S = ( 1 − t ) ( ( 1 − t ) P 0 + t P 1 ) + t ( ( 1 − t ) P 1 + t P 2 ) = ( 1 − t ) 2 P 0 + 2 ( 1 − t ) t P 1 + t 2 P 2 S=(1-t)((1-t)P_0+tP_1)+t((1-t)P_1+tP_2)\\ =(1-t)^2P_0+2(1-t)tP_1+t^2P_2 S=(1t)((1t)P0+tP1)+t((1t)P1+tP2)=(1t)2P0+2(1t)tP1+t2P2

  • 如果我们有三个点,然后来做类似的操作呢:

    • 在这里插入图片描述

    • S 1 = ( 1 − t ) P 0 + t P 1 S 2 = ( 1 − t ) P 1 + t P 2 S 3 = ( 1 − t ) P 2 + t P 3 T 1 = ( 1 − t ) S 1 + t S 2 T 2 = ( 1 − t ) S 2 + t S 3 T = ( 1 − t ) T 1 + t T 2 P 0 , P 1 , P 2 , P 3 → S 0 , S 1 , S 2 → T 0 , T 1 S_1=(1-t)P_0+tP_1\\ S_2=(1-t)P_1+tP_2\\ S_3=(1-t)P_2+tP_3\\ T_1=(1-t)S_1+tS_2\\ T_2=(1-t)S_2+tS_3\\ T=(1-t)T_1+tT_2\\ P_0,P_1,P_2,P_3\rightarrow S_0,S_1,S_2\rightarrow T_0,T_1 S1=(1t)P0+tP1S2=(1t)P1+tP2S3=(1t)P2+tP3T1=(1t)S1+tS2T2=(1t)S2+tS3T=(1t)T1+tT2P0,P1,P2,P3S0,S1,S2T0,T1

    • 三次曲线:将 ,S1,S2,S3,T1,T2 代入式子:

    • T = ( 1 − t ) 3 P 0 + 3 ( 1 − t ) 2 t P 1 + 3 ( 1 − t ) t 2 P 2 + t 3 P 3 T=(1-t)^3P_0+3(1-t)^2tP_1+3(1-t)t^2P_2+t^3P_3 T=(1t)3P0+3(1t)2tP1+3(1t)t2P2+t3P3

    • 实际上这给了我们一般化的Bézier曲线方程:

    • 在这里插入图片描述

  • 这里面就有递归的思路,我们可以不用像之前画第一个曲线一样手动生成S和T的式子,我们可以用递归来解决:

    • def drawBeizer(plist, t):
          if len(plist) == 1:
              x,y = int(plist[0].x), int(plist[0].y)
              pixels[x, y] = black
          else:
              slist = []
              for i in range(len(plist) - 1):
                  s = (1-t)*plist[i] + t* plist[i+1]
                  slist.append(s)
              drawBeizer(slist, t)
      
    • 有了曲线方向我们也可以直接用方程来作图。也可以用方程来取巧,比如画直线比较容易的情况下,我们想用直线来模拟曲线,可以把曲线分成几部分,然后作图。

    • def curve(t):
          return (1-t)**3*P0 + 3*(1-t)**2*t*P1 + 3*(1-t)*t**2*P2+t**3*P3
      def flattenBeizer(segment):
          step = 1/segment
          coords = []
          for i in range(segment+1):
              t = i * step
              coords.append(curve(t))
          for i in range(len(coords)-1):
              p0, p1 = coords[i], coords[i+1]
              draw.line((p0.x, p0.y, p1.x, p1.y), fill=128)
      
  • 对于只有矩形文本框四个顶点标注的数据集,我们直接对每个长边进行三等分,长边的两个端点和中间的两个三等分点作为贝塞尔曲线的四个支点

    • 在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羞儿

写作是兴趣,打赏看心情

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值