[翻译]TextSnake: A Flexible Representation for Detecting Text of Arbitrary Shapes

看是看懂了,但感觉自己写还是不会写,也就写写网络那一部分,还是要多学一学唉


TextSnake: A Flexible Representation for Detecting Text of Arbitrary Shapes

abstract

受深度神经网络和大闺蜜数据集的推动,场景文本检测方法一句在过去的几年里取得了长足的进步,持续刷新着在不同的benchmarks上的表现记录。然而,受到用来描述文本的表达的限制(水平矩形、旋转矩形活四边形),现存的方法在处理复杂格式的文本实例时效果并不好,比如弯曲的文字,而这是在现实生活中比较常见的。为了解决这个问题,我买提出了一更加灵活的表达,命名为TextSnake,可以有效的表达各种形式的文本实例,比如水平的旋转的或弯曲的。在TextSnake中,一个文本实例被描述成一系列有序的重叠的圆盘,中心在对称轴上,每一个都和可能的半径或角度有关系。这样的几何属性通过全卷积网络模型进行预测,在实验中,基于TextSnake的文本检测器实现了极具竞争力的表现,在Total-Text和SCUT-CTW1500上,这两个新发布的关注完却文本的benchmark和常用的icdar2015 msra-td500。特别地,TextSnake超出了baselin在Total-text上的40%的表现。

introduction

在最近几年里,我们见证了在从自然场景提取文本信息上的研究兴趣和投入的崛起。推动因素包括了应用角度和研究价值等各方各面。从一方面来说,场景文本检测和识别在很多应用系统中都扮演着越来越重要的角色,比如场景理解、产品搜索和自动驾驶。从另一方面,场景文本的独特的特点,比如颜色尺度方向长宽比和模式等方面的巨大差异,让它和一般物品相比显得极为不同。因此,特定的任务被提出,并且需要专门研究。

文本检测,作为文本信息提取的先决步骤,随着深度神经网络和大型图像数据集的发展也取得了进步。然而,现存的文本检测的方法都建立在一个假设上:文本实例通常是线性形状的因此简单的表达就能描述它们。对于视角扭曲的弯曲文字,传统的表达并不能够给出比较准确的预测结果。

实际上,弯曲文本实例在日常生活中相当常见,在这些论文中,我们提出了一个更灵活的表达,可以很好的适应任意形状的文字。这个表达用一组有序的重叠的圆盘来描述文本。由于它应对复杂文本结构的卓越能力,就像蛇改变它的形状来适应外界环境一下,所以这个表达方式被命名为TextSnake。文本实例的几何属性,比如中心轴点,半径,角度都通过全卷积网络预测。除了icdar2015和MSRA-TD500之外,TextSnake的有效性也在Total-Text和SCUT-CTW1500上,后两者是关注弯曲文本的新的benchmarks。提出的算法在这两个benchmark上都取得了目前最好的表现,并且超过了以前的方法在水平或多方向文本上的方法,即使在单尺度测试模式中。

总的来说,这篇论文的主要贡献有三个方面:1. 我们提出了一个灵活且普遍的用于任意形状的场景文本的表达。2. 基于这个表达,一个有效的文本检测方法被提出。3. 提出的文本检测算法在多个benchmark上都实现了目前最好的结果。

在过去的几年里,在场景文本检测领域最突出的趋势是把传统方法转换为深度学习方法。在这部分,我们回顾了之前的一些相关工作。在深度学习的时代到来前,SWT和MSER是两个影响了很多后世工作的表达算法。现代的方法大部分都基于深度神经网络,这些方法可以被大致分为两类:回归算法和分割算法。

基于回归的文本检测算法主要是灵感来源于一般物体检测框架。TextBoxes次啊用了ssd方法并且加入了长的默认框和过滤器来解决文本样例长宽比差异大的问题。基于Faster-RCNN,Ma设计了Rotation Region Proposal Networks(RRPN)来检测任意方向的文本。EAST和深度回归都直接产生文本的旋转框或者四边形框。

上面提到的方法都取得了不错的表现。然而,大部分工作都没有关注弯曲的文本。相反的,这篇论文中提出的表达适合任意形状的文本。它最初是受到xx和文本的几何属性可以通过基于FCN模型的多通道输出估计的启发。我们的算法不需要字母层级的注释。此外,它也用了和Seglink相似的思路,把文本拆解成局部组件然后再把它们组合成完整的文本实例。为了对文本进行定位,我们也检测文本实例的线性对称轴。

该方法的另一个优点在于它能够重建文本实例的精确形状和区域走向,这在很大程度上有助于后续的文本识别过程。因为所有检测到的文本实例都能方便地转换成一个失真度最小的包含背景的规范格式。

methodology

在这部分,我们首先介绍了对任意形状的文本的新的表达。接下来我们会描述我们的方法和训练细节。

representation

传统的对场景文本的表达难以准确的描述形状不规则的文本实例的几何特征,因为这些方法都假设文本实例都是线性格式的,对弯曲的文本并不成立。为了解决这个问题,我们提出了一个灵活但是普遍的表达:TextSnake。TextSnake用一系列落在中心线并与半径和方向相关联的重叠的圆盘来表示一个文本实例。TextSnake能够改变它的形状来适应不同角度、尺度、弯曲度的文本。

以数学方式讲,一个文本实例 t t t,包含几个字母,能够被看成一个有序列表 S ( t ) S(t) S(t) S ( t ) = D 0 , D 1 , . . . , D i , . . . , D n S(t)={D_0,D_1,...,D_i,...,D_n} S(t)=D0,D1,...,Di,...,Dn,代表着第i个圆盘。每个圆盘都和一组几何属性相关, D = ( c , r , θ ) D=(c,r,\theta) D=(c,r,θ)分别代表着中心,半径和圆盘的方向。半径被定义为 t t t的宽度的一半,角度是中心线的正切方向。这样的话,文本区域 t t t能够通过计算圆盘的集合被简单的重建。

圆盘和属于 t t t的字母不是一一对应的。然而, S ( t ) S(t) S(t)的几何属性能够被用来纠正不规则的文本形状,并把他们转换成矩形、直线区域,从而更容易被识别。

pipeline

为了检测任意形状的文本,我们采用FCN模型来预测文本实例的几何属性。模型的流程如图所示,基于FCN的模型预测text center line (TCL) 和 text region (TR) 的分数图,以及包含 r , c o s θ , s i n θ r,cos\theta,sin\theta r,cosθ,sinθ在内的几何属性。TCL图其实是TR图的一部分,怂恿其实TCL图是被TR图覆盖的。为了进行实例分割,考虑到TCL之间不重叠,不相交集合是要被使用的。使用一个前进算法提取中心轴点列表,并最终重构文本实例。

network architecture

完整的网络结构如下图。

在这里插入图片描述

受FPN和U-net的启发,我们采用了一个逐渐合并不同层的特征的机制。这个网络可以是一个用于图像分类的卷积网络,比如VGG-16/19或者ResNet。这个网络可以被分为五个阶段的卷积和一些额外的全连接层,我们移除了全连接层,然后把每个阶段的道德特征图传入特征合并网络,我们使用VGG-16作为我们的stem网络,这样可以简单直接的和别的网络进行比较。

至于特征合并网络,几个阶段被有序堆叠起来,每个都包含了一个合并单元可以把上一层和对应的stem network层的特征图取出来。合并单元按以下公式定义:
h 1 = f 5 h i = c o n v 3 × 3 ( c o n v 1 × 1 [ f i − 1 ; U p S a m p l i n g × 2 ( h i − 1 ) ] ) , f o r i > = 2 h_1=f_5\\ h_i=conv_{3\times 3}(conv_{1\times 1}[f_{i-1};UpSampling_{\times 2}(h_{i-1})]), for i>=2\\ h1=f5hi=conv3×3(conv1×1[fi1;UpSampling×2(hi1)]),fori>=2
其中 f i f_i fi代表着stem network第i个阶段, h i h_i hi是对应的合并单元的特征图。在我们的实验中,上采样通过反卷积实现。在合并后,我们最终获得的特征图大小是输入图像的1/2。我们应用一个额外的上采样层和两个卷积层来产生预测。
h f i n a l = U p S a m p l i n g × 2 ( h 5 ) P = c o n v 1 × 1 ( c o n v 3 × 3 ( h f i n a l ) ) h_{final}=UpSampling_{\times 2}(h_5)\\ P=conv_{1\times 1}(conv_{3\times 3}(h_{final})) hfinal=UpSampling×2(h5)P=conv1×1(conv3×3(hfinal))
P ∈ R h × w × 7 P\in R^{h\times w\times 7} PRh×w×7, 其中四个通道是TR/TCL的logits,剩下三个分别对应着文本实例的 r , c o s θ , s i n θ r,cos\theta,sin\theta r,cosθ,sinθ P P P有着和输入图像一样的大小,最终的预测是通过对TR/TCL进行softmax和规范化 c o s θ , s i n θ cos\theta,sin\theta cosθ,sinθ获得的。

inference

在前向后,这个网络产生TCL/TR和几何图。对于TCL和TR,我们应用了一个阈值,分别为 T t c l , T t r T_{tcl},T_{tr} Ttcl,Ttr。TR和TCL的交互给了我们最终的TCL的预测。使用无连接集合,我们有效的将TCL像素分成不同的文本实例。

最终,一个前进算法被设计来提取一个有序的点列来指示文本实例的形状和走向和重构文本实例区域。两个简单的准则被用来筛选FP文本实例:1. TCL的像素的数量需要至少为他们的平均半径的0.2倍。2. 在重构的文本区域的至少一半的像素要被分类为TR。

前进算法的过程如图所示,它主要有三个动作,分别定义为Act( a ),Act( b ),Act( c ),首先,我们随机选择一个像素作为起始点并且把它当作中心,然后我们的搜索过程分为两个方向,这个过程会产生两个相反方向的有序点列,这会被组合起来去产生最终的中心轴列表,三个动作的详细介绍如下:

在这里插入图片描述

Act( a ) Centralizing: 给了TCL上的一个点,我们能画一条切线和一条法线,分别表示成虚线和实线。使用几何图可以很容易的完成这个步骤。法线和tcl区域的相交区域的中点被定位中心点。

Act( b ) Striding: 这个算法向相邻点前进一步。根据几何图,每一步的的移动都能被计算并表示为 ( 1 2 r × c o s θ , 1 2 r × s i n θ ) (\frac{1}{2}r\times cos\theta,\frac{1}{2}r\times sin\theta) (21r×cosθ,21r×sinθ) ( − 1 2 r × c o s θ , − 1 2 r × s i n θ ) (-\frac{1}{2}r\times cos\theta,-\frac{1}{2}r\times sin\theta) (21r×cosθ,21r×sinθ)。如果下一步在TCL区域外,我们就递减这一步直到它回到区域内,或者到达终点。

Act( c ) Sliding: 这个算法沿着中心轴迭代,并且沿着它画圈,圈的半径从r图中获得,被圈覆盖的区域指示我们预测到的文本实例。

总之,利用几何图和TCL,我们能够检测文本并且预测它的形状和走向。此外,前进算法也使得我们不用审查所有相关的像素。

label generation

  1. 提取文本中心线

    对于三角形或四边形,很容易就能计算TCL,因为在这种例子中,TCL是一条直线。对于超过四个边的多边形,就不太容易使用代数方法来计算了。我们提出一个基于文本实例是蛇形的这一假设的算法,对于一个蛇形的文本实例,它有两个作为头和尾的边。两个靠近头尾的边是近乎平行的但是方向相反。

    对于用一组时钟方向的顶点 v 0 , v 1 , v 2 , . . . , v n {v_0,v_1,v_2,...,v_n} v0,v1,v2,...,vn表示的文本实例 t t t,我们定义了对每个边 e i , i + 1 e_{i,i+1} ei,i+1的一个度量 M ( e i , i + 1 ) = c o s ( e i + 1 , i + 2 , e i − 1 , i ) M(e_{i,i+1})=cos(e_{i+1,i+2},e_{i-1,i}) M(ei,i+1)=cos(ei+1,i+2,ei1,i)一般情况下,M接近-1的两个边是头或尾,在两个子线上提取相同数量的锚点,TCL点是相对应的锚点的中心点。我们对TCL的断点压缩 1 2 r e n d \frac{1}{2}r_{end} 21rend像素,保证TCL是在TR内的, r e n d r_{end} rend代表着两个端点的半径。最终我们扩展TCL区域到 1 5 r \frac{1}{5}r 51r,因为一个单点组成的线是带干扰的。

  2. 计算 r和 θ \theta θ

    对于TCL中的每个点:1. r r r是根据对应的点的距离计算的。2. θ \theta θ是用一个直线和TCL中相邻点匹配的道德,对于不属于TCL的像素,他们对应的几何属性都被设为0。

训练目标

我们提出的模型是端对端训练的,以下列的损失函数作为目标:
L = L c l s + L r e g L c l s = λ 1 L t r + λ 2 L t c l L r e g = λ 3 L r + λ 4 L s i n + λ 5 L c o s L=L_{cls}+L_{reg}\\ L_{cls}=\lambda_1L_{tr}+\lambda_2L_{tcl}\\ L_{reg}=\lambda_3L_{r}+\lambda_4L_{sin}+\lambda_5L_{cos} L=Lcls+LregLcls=λ1Ltr+λ2LtclLreg=λ3Lr+λ4Lsin+λ5Lcos

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值