『OCR_detection』Seglink

在这里插入图片描述


前言

论文: Detecting Oriented Text in Natural Images by Linking Segments
代码: https://github.com/bgshih/seglink

  • 先来说说文本检测存在的难点:1.文本行边界框的宽高比范围太广;2.语言格式的不统一(如中文文本行没有间隔,英文文本行有间隔);3.文本行的方向任意.
  • 针对上述存在的困难,本文提出了 seglink,它是在 SSD 目标检测方法的基础上进行改进,其基本思想:既然一次性检测整个文本行比较困难,就先检测局部片段,然后通过规则将所有的片段进行连接,得到最终的文本行,这样做的好处是可以检测任意长度的文本行

一、网络结构

  1. 采用 SSD 算法的思路,首先使用 VGG16 作为 backbone 进行特征提取,其中 VGG16 的全连接成(FC6, FC7)替换成卷积层(conv6, conv7),再接卷积层 conv8 到 conv11。
    Note: conv4 ~ conv11 之间的尺寸依次减小(每一层是前一层的 1/2)。这个做法是为了做多尺度下的目标检测,即大的 feature map 擅长做小物体的检测,而小的 feature map 擅长检测大物体。借助不同尺度的 feature map,从 6 个 feature layer 上检测 segment 和 link,就可以检测出不同尺寸的文本行了。
  2. 观察后面的卷积层可以发现,对不同层的 feature map 使用 3×3 的卷积层产生最终的输出(包括 segment 和 link),不同特征层输出的维度是不一样的,因为除了 conv4_3 层外,其它层存在跨层的 link。这里 segment 是 text 的带方向 bbox 信息(它可能是个单词,也可能是几个字符,总之是文本行的部分),link 是不同 segment 的连接信息(文章将其也增加到网络中自动学习)。
  3. 当所有 segments 都被检测出来后,我们就可以通过融合规则(combining segments),将各个 feature map 的 segment 的 box 信息和 link 信息进行融合,得到最终的文本行。

1.1 segment 检测

整个架构采取了 SSD 的思路,在 segment(切片)检测上,与 SSD 模型检测过程类似,通过 “套框” 的方式,对结果进行回归,每个 feature map 经过卷积后输出的通道数为 7,其中两个表示 segment 是否为文字的置信度值为(0, 1),剩下的五个为 segment 相对于对应位置的 default box 的五个偏移量。每个 segment 表示为:

在这里插入图片描述

  • segment 可以理解为文本行的一部分,这一部分可以是一个字符或者文本行的任意一部分。一个完整的文本行包含多个 segment ,每个 segment 之间通过 link 连接组合起来,那么 segment 做文本检测的思路其实和 CTPN 的思路很想,先检测文本行的一部分,再把它们连接起来构成一个完整文本行。
  • 首先每个 segment 是有一定的重合区域的,然后每两个 segment 连接的部位是两个 segment 的中心点,每一个 segment 和 link 仅依靠局部图像的纹理信息即可完成检测,而无需整张图像的信息。
  • 检测一个 segment 网络需要输出 segment 的置信度和 segment 相对于 default boxes 的五个参数的一个回归偏移量。default boxes 的位置可以这样理解,相对于每一个卷积出来的 feature map 中的每个点都可以找到在原图中的对应点,这个对应于 feature map 上的在原图中的点就是 default boxes 的位置。【注: 都是没有旋转角的矩形】

1.2 link 检测

在 segment 与 segment 的 link(连接)方面,主要存在两种情况,一种是层内连接检测、另一种是跨层连接检测。如下图:

  • 层内连接检测表示同一特征层,每个 segment 与 8 邻域内的 segment 的连接状况,每个 link 有两个分数:正分数、负分数,正分数表示二者属于同一个文本(应该连接);负分数表示二者属于不同文本(应该断开连接)。
  • 跨层链接检测,主要是为了解决同一文本的 segment 在不同层被检测到,造成重复检测、冗余的问题,在相邻两层的 feature map 上,后面那层的 segment 的邻居除了是本层的邻居外,在前一层也有它的邻居,但后一层却不是前一层的邻居,在后面的合并算法中会将这种冗余消除掉。

1.3 合并算法

  • step 1: 将同一行的 segment 取出来
  • step 2: 对这些 segment 的中心点作最小二乘法线性回归,得到一条直线
  • step 3: 每个 segment 的中心点往这条直线做垂直投影
  • step 4: 从所有投影点中取出距离最远的两个点,记为 ( x p x_p xp, y p y_p yp), ( x q x_q xq, y q y_q yq)
  • step 5: 那么最终合并的文本框,位置参数记为( x b , y b , w b , h b , θ b x_b, y_b, w_b, h_b, \theta_b xb,yb,wb,hb,θb),中心点位置为(( x p x_p xp+ x q x_q xq)/2, ( y p y_p yp+ y q y_q yq)/2),宽度为两个最远的点 ( x p , y p x_p, y_p xp,yp), ( x q , y q x_q, y_q xq,yq) 的距离加上所在 segment 宽度的一半,高度为所有 segment 的高度平均值

二、网络 idea

  • 提出了文本行检测的两个基本组成元素:segment 和 link
  • 提出了基于 SSD 的改进版网络结构(全卷积网络结构),同时预测不同尺度的 segments 和 link
  • 提出了两种 link 类型: 层内连接(within-layer link)跨层连接(cross-layer link)
  • 可以处理多方向和任意长度的文本

三、评价

  • 与 CTPN 方法相比,SegLink 引入了带方向的 bbox(即文中说的segment(x, y, w, h, θ)),它可以检测任意方向的文本行,而 CTPN 主要用于检测水平的文本行,当然如果将垂直 anchor 改成水平 anchor,也可以检测垂直方向的文本行
  • α 和 β 这两个阈值是通过网格搜索的方法求得,网格搜索是一种暴力的模型超参数优化技术,文章中采用 0.1step 进行超参数穷举搜索
  • 不能检测很大的文本,这是因为 link 主要是用于连接相邻的 segments,而不能用于检测相距较远的文本行
  • 不能检测形变或者曲线文本,这是因为 segments combining 算法在合并的时候采用的是直线拟合.这里可以通过修改合并算法,来检测变形或曲线文本

参考文献

  1. https://my.oschina.net/u/876354/blog/3049704
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

libo-coder

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值