EAST笔记

ε祈祈猫儿з 提交于 2020-05-05 17:51:03

核心网络是vgg16

来自旷世的论文《EAST: An Efficient and Accurate Scene Text Detector》,

高效和准确的场景文本检测

在它的基础上作者huoyijie给出了性能更加优良的Advanced EAST,改善了EAST中长文本检测的问题。作者在EAST网络框架的基础上巧妙地设计了基于文本边界框的损失函数,将长文本检测的问题转换为检测文本头部和尾部边界区的问题。如下图,着色部分表示文字框区域,黄色部分表示文字框头部边界区,绿色部分表示尾部边界区。精巧的损失函数设计需要合适的数据处理方法来编码训练标签,本文主要讨论AEAST算法里数据预处理中两个关键的函数。

 

论文题目:EAST: An Efficient and Accurate Scene Text Detector

论文地址:https://arxiv.org/pdf/1704.03155.pdf

代码复现:https://github.com/argman/EAST

算法被命名为EAST(Efficient and Accuracy Scene Text),因为它是一个高效和准确的场景文本检测pipeline

 

论文关键idea

  • 提出了基于two-stage的文本检测方法:全卷积网络(FCN)和非极大值抑制(NMS),消除中间过程冗余,减少检测时间.
  • 该方法即可以检测单词级别,又可以检测文本行级别.检测的形状可以为任意形状的四边形:即可以是旋转矩形(下图中绿色的框),也可以是普通四边形(下图中蓝色的框)).
  • 采用了Locality-Aware NMS来对生成的几何进行过滤

Pipeline

论文的思想非常简单,结合了DenseBox和Unet网络中的特性,具体流程如下:

  • 先用一个通用的网络(论文中采用的是Pvanet,实际在使用的时候可以采用VGG16,Resnet等)作为base net ,用于特征提取
  • 基于上述主干特征提取网络,抽取不同level的feature map(它们的尺寸分别是inuput-image的 \frac{1}{32},\frac{1}{16},\frac{1}{8},\frac{1}{4} ),这样可以得到不同尺度的特征图.目的是解决文本行尺度变换剧烈的问题,ealy stage可用于预测小的文本行,late-stage可用于预测大的文本行.
  • 特征合并层,将抽取的特征进行merge.这里合并的规则采用了U-net的方法,合并规则:从特征提取网络的顶部特征按照相应的规则向下进行合并,这里描述可能不太好理解,具体参见下述的网络结构图
  • 网络输出层,包含文本得分和文本形状.根据不同文本形状(可分为RBOX和QUAD),输出也各不相同,具体参看网络结构图

实现细节

合并层中feature map的合并规则

具体的合并步骤如下:

  1. 特征提取网络层中抽取的最后层feature map被最先送入uppooling层(这里是将图像放大原先的2倍),
  2. 然后与前一层的feature map进行concatenate,
  3. 接着依次送入卷积核大小为ParseError: KaTeX parse error: Expected 'EOF', got ',' at position 11: 1\times{1},̲3\times{3},卷积核的个数随着层递减,依次为128,64,32
  4. 重复1-3的步骤2次
  5. 将输出经过一个卷积核大小为3\times{3}3×3,核数为32个

具体的公式如下:

输出层的输出

  • 对于检测形状为RBOX,则输出包含文本得分和文本形状(AABB boundingbox 和rotate angle),也就是一起有6个输出,这里AABB分别表示相对于top,right,bottom,left的偏移
  • 对于检测形状为QUAD,则输出包含文本得分和文本形状(8个相对于corner vertices的偏移),也就是一起有9个输出,其中QUAD有8个,分别为 (x_i,y_i),i\subset[1,2,3,4]

训练标签生成

QUAD的分数图生成

得分图上QUAD的正面积为原图的缩小版,缩小的规则如下:

对一个四边形Q={pi|i属于1,2,3,4},pi是按顺时针顺序排列的四边形的顶点。对于缩小的Q,我们首先计算ri:

r_{i}=min(D(p_{i},p_{(i mod 4)+1},D(p_{i},p_{(i-1) mod 4)+1}) 
D(pi,pj)是两个顶点pi和pj之间的L2距离。

我们首先收缩两个长点的边,再收缩两个短点的边。对于每对对边,我们通过比较平均长度值来确定长边。对于每个边<pi,p(imod4)+1> ,我们分别通过沿边赂内移动两个端点收缩它,分别为ParseError: KaTeX parse error: Expected 'EOF', got ',' at position 9: 0.3r_{i},̲0.3r_{(i mod 4)…,这里论文中缩放的系数是0.3,具体可以根据你的实际任务设置.

注:论文中上述公式可能存在问题,这里仅是个人理解,这里对应的结果图如下:其中绿色框为ground truth,红色框为shrink后的坐标

QUAD分数图如下,这里其实就是上图红色四边形框的掩膜:

几何形状图生成

很多数据集(如ICDAR2015)是用QUAD的方式标注的,首先生成以最小面积覆盖区域的旋转矩形框。每个像素有一个正的分数值,我们计算它与文本框四边的距离,把它们放入四通道的RBOX 真值中。对于QUAD真值,8通道几何形状图每个像素的正分数值是它与四边形4个顶点的坐标偏移。

下图给出的是生成完的结果,绿色框表示生成的RBOX:

训练loss

loss由两部分组成:score map loss 和geometry loss,具体公式如下: L_{loss}=L_{s}+\lambda_{g}L_{g}Lloss​=Ls​+λg​Lg​

  • 分数图损失(score map loss)

论文中采用的是类平衡交叉熵,用于解决类别不平衡训练,避免通过 平衡采样和硬负挖掘 解决目标物体的不不平衡分布,简化训练过程,具体公式如下:

 

但是在具体实战中,一般采用dice loss,它的收敛速度会比类平衡交叉熵快

  • 几何形状损失(geometry loss)

文本在自然场景中的尺寸变化极大。直接使用L1或者L2损失去回归文本区域将导致损失偏差朝更大更长.因此论文中采用IoU损失在RBOX回归的AABB部分,尺度归一化的smoothed-L1损失在QUAD回归,来保证几何形状的回归损失是尺度不变的.

针对RBOX loss,其损失函数公式为: L_{g}=L_{AABB}+\lambda_{\theta}L_{\theta}=-logIoU(\hat{R},R^*)+\lambda_{\theta}(1-\cos(\hat{\theta}-\theta))

针对QUAD loss,其具体公式如下:

  • 局部感知NMS(locality-aware NMS)

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

针对上述时间复杂度问题,本文提出了基于行合并几何体的方法,当然这是基于邻近几个几何体是高度相关的假设.注意:这里合并的四边形坐标是通过两个给定四边形的得分进行加权平均的,也就是说这里是**"平均"而不是"选择"几何体**.

  • 训练其它参数

整个训练采用基于Adam的端到端的训练.为了加速学习,统一从图像集中采样512*512构建minibatch大小为24,然后staged learning rate decay,但是在具体实验过程中可以使用linear learning rate decay.

在ICDAR2015数据集上的评测结果

使用EAST训练自己数据集

这里由于时间问题,就详细介绍了,我的显卡型号是Tesla P40,检测一张需要的时间在60ms左右,这里给出几张效果图:

总结

  • 在特征合并层,利用不同尺度的feature map,并通过相应的规则进行自顶向下的合并方式,可以检测不同尺度的文本行
  • 提供了文本的方向信息,可以检测各个方向的文本
  • 本文的方法在检测长文本的时候效果表现比较差,这主要是由网络的感受野决定的(感受也不够大)
  • 在检测曲线文本时,效果不太理想

本人文笔粗浅,若有理解错误的地方,望大家指正.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!