美文网首页机器学习
SegLink(Detecting Oriented Text

SegLink(Detecting Oriented Text

作者: ce0b74704937 | 来源:发表于2018-12-30 12:03 被阅读0次

    《Detecting Oriented Text in Natural Images by Linking Segments》是和EAST同年的一篇发表在CVPR2017的OCR论文。代码地址:https://github.com/bgshih/seglink,这是该文章其中一个作者提供的tensorflow版本代码,网上还有其他实现(我看的是pixellink作者的一个实现https://github.com/dengdan/seglink)。

    下面将详细讲解该算法。

    一、网络输入输出及网络架构

    网络输入输出
    在介绍网络之前先介绍一下该网络的输入和输出,这部分算是这个篇文章的一个主要创新点。

    首先是输入,因为网络全部采用卷积结构,所有对输入图片大小没有要求,可以是任意大小和任意长宽比,这点比较好理解。这里假定输入图片大小为w_{I}\times h_{I}

    然后是输出,输出文章称为segments和links。segments可以理解为是一个一个的小框,这些小框类似于SSD中的default boxes,它们不一定一个框能框一个字,可能就框一个字的一部分,这点要明确。一个segment用公式b=(x_{b},y_{b},w_{b},h_{b}, \theta_{b})表示,其中x_{b},y_{y}表示segment的中心,w_{b},h_{b}表示segment的宽和高,\theta_{b}表示该segment的旋转角。links就是将segments连接起来,说白了就是两个框是不是同一个文本的一个概率值。

    至于segmens和links从哪里输出以及输出的是什么东西下面会详细介绍。

    网络结构
    如下图所示,网络的backbone采用的是VGG-16,将VGG中所有的全连接层改为卷积层(fc6、fc7改为conv6、conv7),并在conv7后面还加了若干个卷积层(conv8_1 - conv11),训练与检测的网络结构类似于SSD,只是这里的feature map是从conv4_3,conv7,conv8_2,conv9_2,conv10_2,conv11这6个层中提取出来的。提取出的6个层依次另命名为l-th (l = 1, ..., 6)层。

    图1.png

    得到这六层feature map后,每个feature map经过卷积处理得到segments和links,下面介绍一下关于segments和links的检测方法。

    Segment的检测方法
    上面提到segment的表示方法为b=(x_{b},y_{b},w_{b},h_{b}, \theta_{b})。检测一个segment那么网络需要输出segment的置信度和segment相对于default boxes的五个参数的一个回归偏移量。default boxes的位置可以这样理解,相对于每一个卷积出来的feature map中的每个点都可以找到在原图中的对应点,这个对应于feature map上的在原图中的点就是default boxes的位置,而他们的大小定义如下(注意,default boxes都是没有旋转角的矩形)。

    因为提取出的6层feature map,每层都要输出segments,对于大小为w_{l}\times h_{l}l-th层feature map来说,一个点在feature map上的坐标为(x,y),对应原图是坐标为(x_{a},y_{a})的点,那一个default box的中心坐标为(x_{a},y_{a}),由下式表示
    x_{a}=\frac{w_{I}}{w_l}(x + 0.5)
    y_{a}=\frac{h_{I}}{h_l}(y + 0.5)
    default box的长宽都设为同一常数a_{l},该数值的计算方式是个经验等式,如下式所示
    a_{l}=\gamma\frac{w_I}{w_l},这里\gamma = 1.5

    注意,上述是default box的计算方法,而实际我们需要通过default box的信息以及feature map再次进过卷积输出的信息,回归出segment的信息。

    来看看提取出的feature map需要输出什么信息,每个feature map经过卷积后输出的通道数为7,其中两个通道表示segment的置信度值为(0,1),剩下的五个通道为segment相对于对应位置的default box的五个偏移量,用(\Delta x_{s},\Delta y_{s},\Delta w_{s},\Delta h_{s}, \Delta \theta_{s})表示。通过这五个偏移量和之前得到的default box的信息就可以求出segment的位置,计算方法如下:
    x_{s} = a_{l}\Delta x_{s} + x_{a}
    y_{s} = a_{l}\Delta y_{s} + y_{a}
    w_{s} = a_{l}exp(\Delta w_{s})
    h_{s} = a_{l}exp(\Delta h_{s})
    \theta_{s} = \Delta \theta_{s}

    这样就可以通过default boxes和feature maps的输出求得segments的位置。

    下面接着介绍links的检测方法,介绍之前要知道links分为Within-Layer Link和Cross-Layer Link,这两种link如下图所示,下面将分别介绍。

    图2.png

    Within-Layer Link的检测方法
    一个link连接着相邻两个segment,表示他们是属于同一个字或者在同一框中。link的作用不仅是将相邻的segment连接起来,还可以区分邻近的segment但是不属于同行或者同一个标定框。

    检测link使用的feature map与检测segment使用的是同一feature map,所以对于同一层feature map来说,一个segment有其他8个相邻的segment,那links就是每个feature map经过卷积后输出16个通道,每两个通道表示segment与邻近的一个segment的link。

    Cross-Layer Link的检测方法
    这里说一下为什么有了Within-Layer Link了,还需要Cross-Layer Link。理论上来说有Within-Layer Link就已经可以将各个segment连接起来最后得到文本框的检测结果了。原因是本文为了能检测不同尺度的文字,使用不同层的feature map输出segments,这样会导致不同层输出segment是同一个位置可能只是大小不一样,最终导致不同层产生的框的合并会出现问题,这个问题就需要使用Cross-Layer Link解决。

    Cross-Layer Link连接的是相邻两层feature map产生的segments,比如,1-th层(即conv4_3)的feature map和2-th层(即conv7)的feature map产生的segments通过Cross-Layer Link连接。

    这个网络有个重要的属性方便我们进行Cross-Layer Link连接,就是我们提取出来的6个feature map中,上一层的大小是下一层的四倍(长宽各两倍)。但是值得注意的是,只有feature map是偶数的时候才满足这个属性,所以在实际操作中,输入图像的长宽大小都要缩放到128的整数倍。例如,一张1000\times 800的图片,首先会先缩放到1024\times 768大小。

    由于上层的feature map为下一层的四倍大小,那相当于一个segment与另一层的四个segment相邻。这时除1-th的feature map外,其他五个feature map每个经过卷积后都要输出8个通道,每两个通道表示一个Cross-Layer Link。

    每层feature map的输出
    经过上述介绍,每层feature map提取出来后,还要经过卷积出来,最后输出的有segments的信息也有links的信息,如下图所示。唯一不一样的是1-th也就是con4_3层feature map的输出少Cross-Layer Link。

    图3.png

    利用links将segments连接
    在上述步骤输出一系列的segments和links后,最后需要将所有的segments利用links信息连接成一个个的文本框。在连接之前需要设定阈值将一些噪声过滤,对应segments和links的置信度设置不同的阈值分别为\alpha\beta。文章写阈值设定不同对结果影响不大,具体多少没有写。

    过滤完噪声后,采用DFS将segments看做节点,links看做边,将他们连接起来。最后采用一定算法将连接后的结果再合并为文本框,文章中用伪代码表示,这里讲一下伪代码的思路。

    1. 将连接后的所有结果作为输入,将连接在一起的segments当作是一个小的集合,称为B
    2. 将B集合中所有segment的旋转角求平均值作为文本框的旋转角称为\theta_{b}
    3. 将旋转角求tan\theta_{b}作为斜率,这样就可以得到一系列的平行线,求得B集合中所有segment的中心点到直线距离的和最小的那条直线
    4. 将B集合中所有segment的中心点垂直投影到3步骤中找到的直线上
    5. 在投影中找到距离最远的两个点称为(x_{p}, y_{p})(x_{q}, y_{q})
    6. 上述两点的均值作为框的中心点,宽为上述两点的距离,高为B集合中所有segment的高的均值。

    二、segments和links标签的生成

    整个网络的训练是直接根据segments和links的真实标签训练的,但是由于一般的数据库给出的是一个四边形四个点的坐标,所以在进行网络训练前需要计算出segments和links的标签值。

    在求segments和links的标签前先确定与其对应的default box的标签值。

    首先假设一张输入图像只有一个文本框的情况。在这种情况下,一个default box在满足下面条件时认为是正样本:

    1. 这个default box的中心在标定文本框内;
    2. 当default box的大小a_{l}与文本框的高h满足下面公式时:
      max(\frac{a_l}{h},\frac{h}{a_{l}})\leq 1.5
      否则,认为该default box为负样本。

    下面开始考虑图像中有多个文本框的情况。当default box对于图像中任意的文本框都不满足上述条件时认为该default box我负样本。当default box满足上面条件时则认为该default box为正样本,如果对于多个文本框都满足时,则该default box为与其大小最相近的文本框的正样本,大小相近指的是min(max(\frac{a_l}{h},\frac{h}{a_{l}}))

    在通过上述规则得到default box的正样本后,在这些正样本的基础上计算segments相对于default box的位置偏移量,计算方法如下图所示。


    图4.png

    上图中的步骤描述如下:

    1. 选择一个正样本的default box,如图中蓝框所示,其中的蓝点是default box的中心点
    2. 将文本框顺时针旋转为\theta,使其成为水平框
    3. 在得到的水平框能截取default box大小的区域(长为default box的长,高仍为文本框的高)
    4. 根据截取后的水平框,沿着其中心点逆时针旋转\theta

    通过这些步骤就可以得到一个segment,最后通过在segment检测部分讲到的公式,就可以求出segment和default box的偏移量,这个偏移量用于训练segment。

    link(包括within-layer link 和 cross-layer link)的标签值计算比较简单,只要满足下面两个条件认为link为真否则为假:

    1. link连接的两个default box都为正样本
    2. 两个default box属于同一个文本框

    三、损失函数的定义

    损失函数定义如下式所示:
    L(y_{s},c_{s},y_{l},c_{l},\hat{s})=\frac{1}{N_{s}}L_{conf}(y_{s},c_{s})+\lambda_{1}\frac{1}{N_{s}}L_{loc}(\hat{s},s)+\lambda_{2}\frac{1}{N_{l}}L_{conf}(y_{l},c_{l})

    其中,y_{s}表示所有的segments的标签值,y^{i}_{s}=1如果第i个default box为正样本,否则为0。相似的,y_{l}为所有links的标签值。c_{s}c_{l}分别为segments和links的预测值。L_{conf}为softmax loss,用于计算segments和links置信度的损失。L_{loc}为Smooth L1 regression loss,用于计算segments预测偏移量\hat{s}和标签值s的损失。N_{s}为图像中所有正样本的default boxes的个数。N_{l}为图像中所有正样本的links的个数。\lambda_{1}\lambda_{2}作者都设为1。

    这篇文章的算法部分就介绍完了,文章还提了一下使用了Online Hard Negative Mining和Data Augmentation。

    中文本定位与识别的评测方法

    欢迎加入OCR交流群:785515057(此群已满)
    欢迎加入OCR交流群2:826714963

    相关文章

      网友评论

        本文标题:SegLink(Detecting Oriented Text

        本文链接:https://www.haomeiwen.com/subject/hyzelqtx.html