文本识别:EAST论文笔记

时间:2024-04-05 13:32:24

前言

第一次写博客,发现自己看过论文后总是理解不深且过一段时间对一些概念就会模糊,所以打算以后对一些重要的内容进行记录。不仅能够加深自己的理解,日后翻看也比较方便。
本文仅对论文内容理解进行记录,包括自身的理解以及网上参考的内容,不包括代码的实现,如果其中有错误或有偏差的地方,还希望发现的朋友多多指正。日后如果复现了代码会再增加相关内容。
论文地址:https://arxiv.org/pdf/1704.03155.pdf

Background

本文是旷世科技在2017年CVPR上提出的一种十分简洁高效的文本检测模型。论文全称是《 EAST: An Efficient and Accurate Scene Text Detector 》。作者在文中提出,过去的文本检测方法虽然实现了不错的效果,但这些方法基本上都是多阶段、多组件的联合作用。换句话说,就是作者认为以往的方法设计的步骤和组件过多,导致它们在一些具有挑战性的场景中表现不够好,速度也不够快。(我的理解是组合的步骤和组件越多,在各组件中或多或少都会产生一定的误差,则在最后产生的结果时越难对其进行优化和调整,故而产生不够优秀的结果。而组件越多,速度肯定也会越慢。)

因此,作者设计了一种十分简洁高效的方法,可以直接通过一个FCN网络来得到字符级或文本行的预测结果。且不论是精度还是速度,在各大基准数据集上都有杰出的表现(在ICDAR2015上得到了0.782的F值和13.2的fps)。方法的整体思路是通过一个FCN直接得到文本框预测,之后将预测通过NMS得到最终结果(two stage)。下面是这项工作的主要贡献:

1. 提出了一个两阶段的场景文本检测方法,FCN+NMS,不需要其他多余耗时的步骤。
2. 该方法可灵活生成字符级或文本行的预测,几何形状可以是旋转框或者矩形框。

3. 在精度和速度都优于当时其他的方法。

文本识别:EAST论文笔记

Methodology

文本识别:EAST论文笔记
网络是基于DenseBox的基础构建的,FCN输出稠密的像素级的文本预测。作者考虑到实际场景中文本区域大小变化是十分剧烈的,定位大区域的文本需要深层的特征(感受野大),定位小区域的文本需要浅层的特征(小感受野)。因此基于U-net的思想设计了特征融合的机制,同时在上采样时保持通道较小,所以计算开支也较小。

网络整体分为特征提取层,特征融合层和输出层三个部分:

  1. 特征提取层。在论文中的描述中用了PVANet,但在网上的一些资源中似乎实践代码采用的是ResNet50-v1。论文中提到特征提取层只要是在ImageNet预训练过的CNN都可以,因此VGG,ResNet或者PVANet应该都可以(此处在复现时还需考察)。对于每一层产生的特征图,从下到上记为fif_{i}。在稍后的特征融合中使用。
  2. 特征融合层。大致过程如下:对于fif_{i}先进行unpool,再与上一层的fi+1f_{i+1}进行concat(特征图沿通道轴连接),之后用一个conv1x1减少通道数,再用conv3x3混合信息,最后用一层conv3x3产生最终混合特征图。卷积核通道数分别为[128,64,32,32]。具体思路如下。文本识别:EAST论文笔记
    其中gig_{i}称为合并基(merge base),hih_{i}是混合的特征图。
  3. 输出层。最后的输出层包括几个1*1卷积操作,将32通道的特征图映射到1个通道的score map(Fs)和一个多通道的geometry map(Fg)。几何形状的输出可以是RBOX(旋转框)和QUAD(矩形框)中的任意一个。
    对于RBOX,主要有5个通道,其中四个通道(AABB)表示每一个像素点与文本线上、右、下、左边界距离记为R,另一个通道表示该四边形的旋转角度。
    对于QUAD,则采用四边形四个顶点到该像素位置的坐标偏移,每个点的坐标为(Δx,Δy)(\Delta x,\Delta y),因此,总共有8个通道。文本识别:EAST论文笔记

标签生成

这一部分我没有太理解,但参考网上的很多资源后感觉这一部分的工作是因为数据集中的标签方式和作者设计网络的标签不一样,所以要将生成适合网络的标签(纯属个人理解,如有错误请指出)。

1.Score map 标签的产生

在Score map上正样本的范围设计为原标签的缩小版,如图4(a)中的绿色框。对于为何要缩小原标签,网上很多资源给出的理解是原标签中可能包含无用信息,缩小标签有利于提高网络性能。缩小的具体过程为。
先定义对于四边形Q={pip_{i} | i1,2,3,4i\in 1,2,3,4},pip_{i}={xi,yix_{i}, y_{i}}是四边形沿顺时针方向的顶点,则对于每个pip_{i}的参考长度rir_{i}文本识别:EAST论文笔记
此处D为两者之间的L2距离。而rir_{i}实际上就是取pip_{i}pi+1p_{i+1}pi1p_{i-1}中较短的距离。然后对区域的缩进就是对四边形的每条边(pip_{i},p(imod4)+1p_{(i mod 4)+1}), 沿着边将两个顶点分别缩进0.3rir_{i}和0.3r(imod4)+1r_{(i mod 4)+1}。先压缩两个较长的边,再压缩两条较短的边。压缩过程可表示为图4中的(a)和(b)。

2.Geometry map标签的产生

Geometry map分为RBOX和QUAD两种,对于RBOX的生成过程如图4(c-e)所示。
对于文本区域是以QUAD形式标定的数据集(如ICDAR2015),我们首先生成一个旋转矩形,用最小的面积覆盖原区域。然后对每个有正分数的像素,我们计算这些点到生成矩形的4个边的距离,然后放到RBOX ground truth的4个通道中。对于QUAD ground truth,每个正像素的8通道geometry map的值是它到四边形4个顶点的坐标偏移。
文本识别:EAST论文笔记
结合图更直观的解释:
(a) 中黄色的为人工标注的框,绿色为对黄色框进行0.3倍边长的缩放后的框,这样做可以进一步去除人工标注的误差,拿到更准确的label信息。

(b) 为根据(a)中绿色框生成的label信息

( c)中先生成一个原标签的最小外接矩形,然后算每一个(b)中白色的点到粉色最小外接矩的上下左右边的距离,即生成(d),然后生成粉色的矩形和水平方向的夹角,即生成角度信息(e),e中所有灰色部分的角度信息一样,都是同样的角度。

损失函数

总体损失函数设计为:L=Ls+λgLgL= L_{s}+\lambda _{g}L_{g}
其中LsL_{s}LgL_{g}分别表示score map和geometry的损失。λg\lambda_g用于平衡两者的权重,文中设为1.

1.分数图的损失(Loss for Score map)

在我们目标检测的任务中,一般会存在正负样本严重失衡的情况,对于这种情况,现在的方法大部分是采用均衡的采样或者hard negative(即选用一些比较接近正样本,也就是难以区分的负样本作为负样本)进行训练。但是这样会增加一些需要微调的参数,并且增加计算量。作者在这里用通过一个类平衡的交叉熵损失函数来解决的这个问题:文本识别:EAST论文笔记
其中Y^代表的是我们预测的Score值,而Y*则是ground truth,取值为0或者1。
参数β是与正负样本之间的平衡参数,论文中给出的定义如下:文本识别:EAST论文笔记
β实际上就是样本中正样本所占的比例(后一项为负样本占的比例)。
另外,在一些资源中提到,在代码实现时并没有采用论文中的class-balanced cross-entropy,而是使用了dice-loss,它的收敛比类平衡交叉熵更快。同时还有人认为focal-loss效果也比文中的损失函数好。这一点在复现时也要注意。

2.几何形状的损失(Loss for Geometry)

作者认为直接使用L1或L2损失会导致损失偏向较大较长的文本区域,因此需要使得回归的loss具有尺度不变性。这部分的loss分为两种,分别对应RBOX和QUAD两种形式。

  • RBOX
    RBOX的Loss分为两部分。对于AABB使用IoU损失,因为它对不同尺度物体的损失是不变的。文本识别:EAST论文笔记
    对于旋转角度θ的Loss。文本识别:EAST论文笔记
    因此对于RBOX的总体损失为:文本识别:EAST论文笔记
    其中λθ\lambda_\theta设为10.

  • QUAD
    QUAD的损失使用的是添加了一个额外归一化项的平滑L1损失(针对四边形设计)。将所有的坐标值组合成一个有序集合
    CQ={x1,y1,x2,y2,...x4,y4}C_Q=\{x_1,y_1,x_2,y_2,...x_4,y_4\}
    之后损失可以表示为:文本识别:EAST论文笔记
    其中归一化项NQN_{Q^*}是四边形缩短后的最短边长。PQP_Q是具有不同顶点排序的QQ^*的所有等效四边形的集合。
    (这部分损失函数理解的并不是特别明了,希望有大佬不吝赐教)

训练细节

论文中采用了ADAM优化器。为了加速学习,一律从图片中剪裁512*512大小的样本来形成24大小的minibatch。ADAM学习率从0.001开始,每27300个minibatch下降1/10,在0.00001停止。网络训练直到性能停止提升。

Locality-Aware NMS

与通用目标检测相似,阈值化后的结果需要经过非极大值抑制(NMS)来得到最终的结果.由于本文中面临的是成千上万个几何体,如果用普通的NMS,其计算复杂度是O(n^2),n是几何体的个数,这是不可接受的。

针对上述时间复杂度问题,本文在假设来自相邻像素的几何结构有很高的相似性的前提下,提出了按行合并几何体的方法:当相邻两个几何区域满足合并条件时,对它们的坐标进行加权平均,计算公式如***意:这里合并的四边形坐标是通过两个给定四边形的得分进行加权平均的,也就是说这里是"平均"而不是"选择"几何体。
文本识别:EAST论文笔记
文本识别:EAST论文笔记
文本识别:EAST论文笔记
其中,g , p分别表示两个满足合并的几何形状,V ( g ), V ( p )分别表示他们的分数,gig_{i} ,$ p_{i}$分别对应第i个坐标, aia_{i}和V(a)分别对应合并后的坐标和分数,当合并完成后,会将合并后的几何形状作为一个整体继续合并下去,直到不满足合并条件,将此时合并后的几何形状作为一个文本线保存到S当中,重复该过程,直到所有的几何形状都遍历一遍为止。

locality_aware_nms在标准nms的基础上加了weighted_merge,所谓weighted_merge就是将2个IOU高于某个threshold的输出框,进行基于得分的合并。合并后的输出框的坐标数值介于2个合并的输入框之间,感觉这样操作可以将所有回归出的框的坐标信息都利用起来,有助于减少位置误差,而不是像传统的nms一样,直接取分数最高的那个。
文本识别:EAST论文笔记

Experiment

具体实验的细节在此不再赘述,可以参考论文。

Limitation

检测器可以处理的文本实例的最大大小与网络的感受野成正比,这一点限制了EAST预测长文本区域的能力。且在处理垂直方向和曲线文本时,EAST的表现不是特别好。

参考内容

翻译:https://blog.csdn.net/zhangwl27/article/details/86542160
https://blog.csdn.net/qq_35307005/article/details/100180715
https://blog.csdn.net/linchuhai/article/details/84677249
https://blog.csdn.net/qq_17616069/article/details/78690023
https://blog.csdn.net/qq_14845119/article/details/78986449
https://zhuanlan.zhihu.com/p/37504120