前言
这篇文章是AAAI2020 text-spotting方向的一个工作(text-spotting为文字检测加识别端到端的做法),文章提出的算法包含了平时较为常见的插件,虽然最终的性能没有达到SOTA,但是给了我们一些思路或者与我们平时脑中迸发出的思维火花有所碰撞,可以作为一篇帮助大家踩坑的文章。
文章要点
这篇文章的出发点是什么呢?先看下图:
a图为我们平时常见的基于检测的text-spotting:首先利用文字检测算法得到文本的检测框,接着对文本图片进行矫正,经过识别模型得到识别结果。这个过程存在两个问题:
- 对于任意形状的文本,直接crop文本区域,矫正输入识别模型,会引入一些误差:文本背景信息包含较多、文本扭曲导致矫正难度较大等导致识别错误
- 识别阶段和检测阶段为分离的,识别阶段的误差无法回传至检测模型更新检测模型,导致模型优化是次优化问题
为了解决以上两个问题,文章提出b图的pipeline:通过segmentation-based文字检测方法得到文本的轮廓点,提出Shape-Transform-Module进行文本矫正,输入识别模型,得到识别结果。这个过程是End-to-End,识别模型的错误可以回传检测模型,利用检测误差和识别误差共同优化识别模型与检测模型。
方法
整体方法Pipeline如下图所示
整体Pipeline方法分为三部分:Detector,STM,Recognizer。这里识别方法为常见识别方法CRNN,这里不进行赘述。主要对Detector,STM进行分析。
Text Detector
文字检测部分为基于分割的文字检测方法,基础结构为FPN,在网络的输出端,这里输出两种类型map,分别对应分类和回归。
分类map分为四种,分别对应文本中心区域,文本的上下左右四个边界,即对一张图需要分出6个类别(背景、上下左右边界、文本中心区域),具体可以如下图所示:
图中的绿色、黄色区域分别对应head、tail,top和bottom区域的则用深蓝色区域表示,粉色区域为文本中心区域,以上区域均为分割区域,利用分割loss进行区域;对于headtail区域,分别对头部的两个顶点以及尾部的两个顶点进行回归;文本中心区域则额外的回归文本的轮廓点,这里轮廓点为距离当前像素最近的轮廓点。
以上也是label生成的过程,包括分割map和回归的map。而这些具体的点,在以往方法中均有提到,如border区域的细分(SOTD),头部和尾部的各自回归(ASTD),以及轮廓点的回归(MSR)等。
这里简单说一下border mining的起源,对于边界的细分是从SOTD开始的, 认为文本的边界包含背景信息较多,介于文本与背景之间,因此可以单独作为一类进行区域,一来可以提升对文本区域的分割,二来可以作为挡板防止密集文本粘连。而在EAST等算法中将border区域进行丢弃,在后来的算法中,AdvancedEAST对border加入了head, tail区域的分割,并在这两个区域对文本的头尾的四个顶点进行回归,解决EAST长文本回归不准的问题;后续ASTD对边界进一步细分,分为上下头尾四个边界类,对边界进行挖掘,解决EAST对长文本回归不准确的问题。一些相关的图如下图所示,相关的参考我会列在文章的结尾。
以上是text detector部分的内容,接下来我们讲一下得到这些网络输出后,作者是如何进行矫正文本的。
Shape-Transform-Module
STM如下图所示:
STD包括两部分:Fiducial Points Generation(简称FPG)和TPS。这里先看一下什么是FPG?
FPG过程可以总结为以下几个步骤:
- 首先获得四个角点,这四个点可以通过绿色以及黄色区域的像素回归得到,具体来说,利用属于这些区域的像素(x, y), 取回归map中对应位置的像素值(delta x, delta y), 通过(x+delta x, y+delta y)得到预测的角点位置,加权平均得到最终得角点位置。
- 接着,利用首尾中的角点,可以计算出对应的中心点的位置p_{(N+1)//2},利用中点位置所在的文本中心区域计算出对应的轮廓点,利用轮廓点和首尾点可以计算出对应的1/4, 3/4分位点,继续下去,可以得到不同的分位点,最终可以得到一系列可以很好的表达曲线的分段点。
在得到分段点后,坐着利用这些点,将一个任意形状的文本进行校正,拉直,这里用到的模块为TPS(Thin-Plate-Spline transforms), 样条函数,目的是寻找一个光滑的曲面,也就是一种原始集合到目标集合的一个映射,仿射变换为其的一种特殊情况。这个模块可以将不规则的文本校准成对应的规则文本,TPS可以看做成一种插值函数,具体可以参考https://en.wikipedia.org/wiki/Thin_plate_spline。 在得到矫正后的内容,输入识别模型,则可以输出对应的预测文本标签。
End-to-End training
端到端训练的loss如下:
分别对应分割loss,corner和boder的回归loss以及识别的loss,这里的超参lambda,如下面式子:
调节的过程属于自适应,根据分段点的生成过程,需要首尾区域和文本中心区域对角点以及轮廓点的回归,因此前期网络loss中心在回归和分类,识别的权重稍低,随着迭代次数E的增加,回归逐渐精准,此时识别模型的loss逐渐加重。
Results
以下是算法在IC13, IC15上的实验效果
这里我们选FOTS进行分析,因为网络结构与本文的结构大致类似。FOTS的检测模块为ResNet50-Unet, 本文的检测模块为ResNet50-FPN,这里检测性能较低的原因在于,对于IC15的文本,较小的文本接近border的文本像素与文本中心的像素分布很接近,很容易导致边界类的分类错误;另外一种情况,较小的文字head,tail容易分割丢失,因此区域实在是太小了,进而导致角点回归的错误或者丢失,这也是Recall低于FOTS的原因。Precision较FOTS高的原因为,对于边界的定位较为精准,密集的轮廓点预测,对于长文本有很大的提升,IC15中的店铺名字,商场的名字等中存在较长的文本,FOTS有时候会出现边界定位不准的情况。
Total-text上的实验效果
文章中对于MaskTextSpotter的结果存在错误,正确结果应该如下:
文章中的一些可视化结果
小结
以上就是对该文章的简述,详细的内容可以去阅读原文。作者为了实现对任意形状的文本的端到端的矫正,在文字检测阶段预测出了需要的辅助信息:文本头尾的定位确保文本完整性,轮廓点的预测用于精细的文本矫正,思路很清晰,有很多以往优化基于分割的文字检测算法点:如何更精准的定位边界、如何解决长文本定位不准的问题、如何解决密集文本的粘连等。好了,就写这么多了。
参考
AdvancedEAST: https://github.com/huoyijie/AdvancedEAST
ASTD: Accurate Scene Text Detection through Border Semantics Awareness and Bootstrapping
MSR: Multi-Scale Shape Regression for Scene Text Detection
Text Perceptron: Towards End-to-End Arbitrary-Shaped Text Spotting
SOTD:Self-organized Text Detection with Minimal Post-processing via Border Learning
欢迎关注我的公众号 “算法菌”,我会第一时间更新相关文章至公众号,并同步到专栏