⚠️本文为稀土掘金技术社区首发签约文章,30天内禁止转载,30天后未获授权禁止转载,侵权必究!

✨专栏介绍: 经过几个月的精心筹备,本作者推出全新系列《深入浅出OCR》专栏,对标最全OCR教程,具体章节如导图所示,将分别从OCR技术发展、方向、概念、算法、论文、数据集等各种角度展开详细介绍。
💙个人主页: GoAI |💚 公众号: GoAI的学习小屋 | 💛交流群: 704932595 |💜个人简介 : 掘金签约作者、百度飞桨PPDE、领航团团长、开源特训营导师、CSDN、阿里云社区人工智能领域博客专家、新星计划计算机视觉方向导师等,专注大数据与人工智能知识分享。
💻文章目录
《深入浅出OCR》前言知识(二):深度学习基础总结 (✨文末深度学习总结导图)
《深入浅出OCR》前言知识(一):机器学习基础总结 (✨文末机器学习总结导图)
👨💻本篇导读: 上一章我们介绍到OCR流程包括两阶段算法和端到端算法,本篇为 【《深入浅出OCR》第五章:端到端识别】,主要对深度学习端到端识别方法进行介绍,本人将从经典算法结构、代码、论文解读等角度展开,配合作者总结的思维导图,深入浅出OCR知识。
《《深入浅出OCR》第五章:端到端识别
一、端到端识别介绍
依据OCR识别流程,OCR算法分为两阶段识别算法和端对端识别算法。前者分为文本检测和文本识别两部分,而后者端对端识别可以在一个算法中完成文字检测和文字识别 ,主要思想是通过设计一个同时具有检测单元和识别模块的模型,共享其中两者的CNN特征,并联合训练。由于端对端OCR算法是使用一个模型同时完成文字检测和识别,因此,端对端识别具有模型小、速度快的特点。
二、端到端识别方法导图
这里作者主要从时间顺序出发,整理从最开始的TextBoxes系列基础进行逐步改进,直到目前ABCnet及其变种、PGNet等逐渐成为主流端到端识别算法。

三、基于深度学习的端到端识别方法分类
2.1 端到端识别分类:
从作者个人角度看,端到端规则文本识别出现的目的主要是为了解决平直文或着倾斜文本的检测和识别,然而弯曲、变形等文本在自然场景中大量出现,如印章等,在检测和识别这些文本需要使用端到端任意形状文本识别算法,与此同时这些算法也可以检测和识别平直和倾斜的文本。

深度学习端到端文本识别具有代表性的方法大致可分为两类:
-
端到端规则文本识别(平直文本或倾斜文本);
-
端到端任意形状文本识别(弯曲、变形、平直、倾斜文本)。
接下来,本人将按时间发展及方法分类对端到端识别方法进行详细介绍。
2.2 端到端的规则文本识别
FOTS
Fots: Fast oriented text spotting with a unified network [Liu et al., 2018]
方法介绍:
针对文本检测和识别网络都是为了从输入图画中提取文本特征。因而,对这两个过程运用不同算法的主要存在计算两次相同信息的缺陷。端到端可训练的算法FOTS经过在CRNN+CTC解码器中重用检测算法EAST (Efficient and Accurate Scene Text Detector)的卷积核算解决该问题。整个模型可以进行端到端的训练,且不需要复杂的后处理和超参数调整。
- FOTS中文本框直接从同享特征中提取,而不是从原始图画中提取。在同享特征表明检测过程的倒数第二层生成的特征映射,即核算检测输出的映射。因而,辨认部分能够运用较小的CNN,由于它的输入已经被处理过了。
- FOTS十分高效。该算法还能够处理歪斜的文本实例,办法是将从同享特征中裁剪出来的相应文本框进行调整。此外,端到端办法提高了检测过程的鲁棒性。

FOTS算法由四个部分组成:共享卷积、文本检测分支、ROIRotate操作和文本识别分支。
首先,通过共享卷积特征来提取特征图,在减少计算开销的同时,实现了实时识别和检测文本。 接下来,在提取特征图的基础上,建立基于全卷积神经网络FCN的文本检测分支,用于预测文本的检测框;然后,使用RoIRotate算法从特征图中提取与检测结果相对应的文本候选特征,以实现将文本的检测和识别统一到端到端的训练流程;最后,将文本候选特征输入到递归神经网络RNN编码器和连接时序分类CTC解码器中,以实现文本的识别。

✨TextSpotter(2018)
Tong He等人(2018)提出了一种简单有效的模型TextSpotter,模型整体结构如下图所示。TextSpotter的检测分支采用PVANet模型作为backbone,而识别分支则采用RNN模型。该模型将检测和识别两个任务统一到一个网络中进行训练。RNN分支由text-aligment层和LSTM组成,其中text-aligment层采用网格采样代替RoI池化层,以计算具有固定长度的卷积特征。这些特征能够准确地对齐检测到的任意方向的文本区域。此外,引入了字符注意力机制,利用字符的空间信息作为额外的监督,使得RNN在解码时能够聚焦于当前的注意力特征。最后,还提出了一种学习策略,允许两个任务共享卷积特征来有效地训练模型。

为了验证TextSpotter方法的有效性,作者在ICDAR2013和ICDAR2015数据集上进行实验,TextSpotter可视化结果如下图所示。

2.3 端到端的不规则文本识别
✨Mask-TextSpotter系列
Mask-TextSpotter系列方法是由白翔团队从2018年提出的一个可端到端训练的文本检测与识别方法,可以对任意形状文本操作。模型主要由两部分组成:基于实例分割的文本检测器 + 基于字符分割的文字识别器。 Mask TextSpotter通过分割解决文本检测问题,使其能够检测任意形状的文本。同时通过基于字符的语义分割来识别文本,以解决阅读不规则文本的问题。
Mask-TextSpotter v1 :
模型整体结构如下:该方法受到Mask RCNN的启发,在特征提取之后介入两个分支,分别进行文本区域检测和生成文本实例分割图与字符分割图(字符分割图数量为字符集个数+1)

Mask-TextSpotter v2 :
2019年,Minghui Liao等人(2019)[4]在Mask TextSpotter基础上提出了Mask TextSpotter V2,其在v1版本基础上,v2版本为识别分支添加了空间注意力(SAM)模块。Mask TextSpotter用于对单个字符进行识别,训练时需要字符的位置信息,并在通过后处理将字符组合成最终的文本识别结果。为了缓解上述问题,V2版本提出了空间注意力机制(spatial attention module,SAM)。在文本识别部分利用SAM预测文本序列,且在训练时只需要单词级的标注,这大大减少了训练时对字符级标注的需求。
Mask-TextSpotter v3 :
2020年,Minghui Liao等人在v1和v2的基础上出了Mask TextSpotter V3,前两个版本都是基于Mask R-CNN进行文本检测,由于受到RPN的局限,对长文本的检测效果不好。对此,本论文采用一个新的结构Segmentation Proposal Network(SPN)来代替之前的RPN网络,SPN是一种U型结构,它可以融合不同尺寸的特征图之后,对其进行分割从而得到文字候选区域。该算法解决了极端长宽比、不规则形状文本识别的问题。同时作者提出了hard RoI masking,能够有效地抑制背景噪声或相近文本实例。

Mask-TextSpotter 系列可以将文本检测与识别放在同一个网络中进行端到端训练,可以避免两阶段OCR识别中的中间人为误差,但是该系列需要字符级标注,标注成本较高,需要标注文字的轮廓区域,对文字的阅读顺序不敏感,而且识别分支需要为每个字符生成一个分割图,用来识别汉字时,会生成大量的分割图,增加计算量与内存使用量。
CharNet
Char-Net:一种用于扭曲场景文本识别的字符感知神经网络
2019年,Linjie Xing等人提出了卷积字符网络(Convolutional Character Networks,CharNet),用于端到端的文字检测与识别,其网络结构如图所示。CharNet引入新的字符检测和识别的分支,它可以与当前的文本检测模型相结合。作者还将单个字符作为基本单元,能够避免RoI Pooling以及RNN识别模块带来影响,这两个方面的原因导致了现有两阶段模型存在较大的缺陷。在此基础上,论文中还提出了一种迭代字符的检测方法,使CharNet能够把从合成数据学习到的字符检测能力迁移到真实数据上,从而生成真实数据上的字符标注。这使得在真实图像上训练CharNet成为可能,而无需附加的字符级的框标注。
整体架构:
Char-Net整体结构包括词级编码器,字符级编码器以及基于LSTM的解码器。在词级编码器中,蓝色和黄色矩形分别代表了卷积块和最大池层。通过对来自CNN的不同级别的三个卷积特征映射进行归一化(局部响应归一化),级联和降维(1×1卷积)以产生特征映射F。两个红色矩形代表分层关注机制的两个层。 Ftc和Ftc-r的相应图像块,连同字符级注意一起在绿色矩形中显示。

本文提出了一种新的分层注意机制(HAM),它包括一个循环的RoIWarp层和一个字符级注意层。循环RoIWarp层根据词级编码器产生的特征映射,逐个提取与字符对应的特征区域,然后馈送到字符级编码器,该编码器通过简单的空间变换器消除字符的失真,然后对字符区域进行编码。在此基础上,字符级关注层关注由字符级编码器产生的特征映射的最相关特征,形成上下文矢量,该上下文矢量最终被送到基于LSTM的解码器以进行解码。采用简单的局部变换来模拟单个字符的失真的这种方法不但能有效提高效率,还可以处理难以通过单个全局变换建模的不同类型的失真。
参考: char-net
✨ABCNet系列
ABCNet
Scene Text Spotting:Adaptive Bezier-Curve Network
ABCNet是由华南理工大学在2020年提出的,该方法提出了一个可适应于任意形状文本的参数化贝塞尔曲线,设计了一个新的BezierAlign对齐层,可以精准的提取任意形状文本实例的特征 ,与标准的bbox检测方法,bezier曲线检测方法只引入了一个可忽略的计算量,整体检测框架使用了一个signal-shot,anchor-free的卷积神经网络 ,在检测头将每个文本的检测转换成文本行上下两条曲线的检测,每条曲线使用一个三阶贝塞尔曲线拟合。识别分支使用传统的crnn网络加ctc的方法。
Yuliang Liu等人(2020)提出了端到端可训练任意形状文本的模型自适应贝塞尔曲线网络(Adaptive Bezier-Curve Network,ABCNet),网络结构如下图所示。作者首次使用参数化的贝塞尔曲线自适应拟合任意形状的文本;同时设计了一种新颖的BezierAlign层,用于精准地提取任意形状文本的卷积特征;与之前标准的检测方法相比,所提出的贝塞尔曲线检测方法引入的计算开销可忽略不计;最后通过共享主干特征,可以将识别分支设计为轻量结构。ABCNet分为两个部分:1)Bezier曲线检测; 2)Bezier-Align和识别分支,网络结构在效率和精度上都有优势。
模型框架如下:

参考资料:
zhuanlan.zhihu.com/p/116096473
zhuanlan.zhihu.com/p/146276834
ABCNet v2
2021年,Yuliang Liu等人在ABCNet基础上提出了ABCNet v2,在四个方面进行了改进:特征提取器、检测分支、识别分支和端到端训练,在保持非常高的效率的同时实现最先进的性能。
将识别分支改为使用attention模块解码,骨干网络采用双向多尺度金字塔结构,用来检测不同尺度变化的文字特征。同时针对v1训练中 ,识别分支的feature map与检测分支不共用的问题进行改进, 首先对检测结果使用NMS消除冗余框,使用文本实例的真实控制点与每个检测框的控制点的和的最小差,得到检测框并进行识别。ABCNet 系列虽然不需要字符级标注,但主要还是两阶段的策略放入一个模型中训练。检测与识别中间的过程处理比较麻烦。
ABINet++
(TextSpotting版本,TPAMI)
参考代码: github.com/FangShanche...
✨PGNet
论文地址:PGNet
Pengfei Wang等人(2021)提出了一种全卷积Point Gathering Network (PGNet)模型,一个多任务单级文本检测器,可以实时识别任意形状的文本,且提供基于PaddlePaddle框架的源码。PGNet的整体模型结构如下图:

PGNet模型输入图像经过特征提取送入四个分支,分别是 :文本边缘偏移量预测TBO模块、文本中心线预测TCL模块、文本方向偏移量预测TDO模块以及文本字符分类图预测TCC模块。 其中TBO以及TCL的输出经过后处理后可以得到文本的检测结果,TCL、TDO、TCC负责文本识别。
同时,提出PG_CTC loss,避免字符级标注,使用PG_CTC loss,直接从2维空间得到 high-level 字符分类向量,提出GRM(图修正)模块,提高端到端表现。
- text center line(TCL,文本中心线检测)
- text border offset(TBO,文本边框偏移)
- text direction offset (TDO,文本方向偏移)
- text character classification map(TCC,文本字符分类map)
其检测识别效果图如下:

详细介绍:
在训练阶段: TBO,TCL,TDO使用相同尺寸大小的label map,pixel-level TCC map模块使用PG-CTC loss解决缺少字符级标注的问题。
在推理阶段: 从TCL中计算每个文本区域的中心线,按照TDO的文本可读方向排序,恢复阅读顺序,从TBO中提取边界偏移信息,通过多边形回归得到每个文本区域的检测结果,同时PG-CTC 编码器可以将二维的TCC map序列化为字符概率序列,并解码为最终的文本识别结果。
PGNet不需要NMS和RoI操作。TCL map中可以计算文本区域的中心点序列 ,并按照可读方向排序,特别的,还采取了一种形态学的方法,得到文本区域的骨干,作为中心点序列。从TDO map中得到每个点的检测结果,通过计算所有点的平均方向并根据投影长度方向进行排序,得到中心点序列。
PGNet在训练中与Mask-TextSpotter类似,需要生成字符集个数级别的分割图,用来预测文字序列。在中文场景下,模型会变得臃肿,且在训练生成groundtruth时中,需要每条文字字段的上下两条包围曲线点的个数相同,生成不同任务对应的标签,需要比较麻烦的预处理工作。
PGNet总结:
近些年来,端对端OCR算法得到了良好的发展,包括MaskTextSpotter系列、TextSnake、TextDragon系列等算法。综合上述分析,PGNet算法具备其他算法不具备的优势,包括:
- 设计PGNet loss指导训练,不需要字符级别的标注
- 不需要NMS和ROI相关操作,加速预测
- 提出预测文本行内的阅读顺序模块;
- 提出基于图的修正模块(GRM)来进一步提高模型识别性能
- 精度更高,预测速度更快
TrOCR
2021年,微软亚洲研究院提出端到端文本识别方法TrOCR,其采用 Transformer结构,包括一种基于预先训练好的图像 Transformer 和文本 Transformer,分别用于提取视觉特征和建模语言模型,并且采用标准的 Transformer 编码器-解码器模式,其结构如下图:

TrOCR的编码器用于获取图像切片的特征,解码器以自回归方式生成文本序列,某一步的解码器输出会关注编码器的输出和之前已生成的文本序列。
-
对于编码器,TrOCR 采用了 ViT 形式的模型结构,具体的参数初始化可以用DeiT或者BeiT。编码器归一化输入图像的尺寸,并将其切片成固定大小的正方形图像patch,以形成模型的输入序列。模型保留预训练模型中的特殊标记"[CLS]"代表整张图片的特征,对于 DeiT 的预训练模型,同样保留了对应的蒸馏token,代表来自于教师模型的蒸馏知识。
-
而对于解码器,TrOCR则采用原始的 Transformer 解码器结构,参数初始化使用RoBERTa。
TrOCR优点:
与前面介绍的模型不同,TrOCR不仅利用了大规模无标注数据预训练的图像和文本Transformer初始化其模型,还基于从两百多万PDF文件中自动合成出的六亿多条标注文字条目数据,进行了文字识别预训练,微软也开放提供了不同复杂度的TrOCR预训练模型。下游OCR任务的开发人员需要对目标场景数据进行标注,在预训练模型上进行微调。
1.TrOCR使用预先训练好的图像Transformer和文本Transformer模型,它们利用大规模的未标记数据来进行图像理解和语言建模,而不需要一个外部语言模型。
2.TrOCR不需要任何卷积网络作为主干,也不引入任何特定于图像的归纳偏置(归纳偏置,让算法优先某种解决方案,这种偏好是独立于观测的数据的。常见的归纳偏置,包括:贝叶斯算法中的先验分布、使用某些正则项来惩罚模型、设计某种特殊的网络结构等),这使得模型非常容易实现和维护。
3.在OCR数据集上的实验结果表明,TrOCR可以在印刷、手写和场景文本图像数据集上实现最先进的结果,而无需任何复杂的前后处理 操作步骤。
总结:
Trocr与CRNN方案不同, 它没有采用cnn作为模型骨干, 而是采用ViT模型结构, 将图片切分成多个patch, 形成模型的输入序列。 使用Beit预训练模型作为编码器, 使用改进bert的Roberta作为解码器。实验表明,TrOCR模型在印刷、手写和场景文本识别任务上优于目前最先进的模型,达到SOTA。
SwinTextSpotter
论文地址:SwinTextSpotter: SceneTextSpotting via Better Synergybetween TextDetection and TextRecognition CVPR 2022 代码地址: github.com/mxin262/Swi...
SwinTextSpotter是一种基于Transformer的用于任意形状端到端场景文字识别的方法,具体结构如下图所示,该方法提出了一种新的识别转换机制,通过识别损失来明确地引导文本定位,让检测器和识别器更紧密的耦合在一起进行联合优化。

灰色箭头表示从图像中提取的特征。绿色箭头和橙色箭头分别表示检测阶段和识别阶段
参考学习:SwinTextSpotter: 基于文本检测与识别更好协同的场景文本识别
GLASS
Global to Local Attention for Scene-Text Spotting
论文地址:Global-to-Local Attention mechaniSm for text Spotting
本篇文章针对端到端的Scene-Text Spotting 任务,提出里GLASS模型。此模块结合图像中的global feature (大尺度,低分辨率)和local feature (小尺度,高分辨率)对任务进行端到端的训练。同时该文章还提出一个新的基于旋转的损失函数,优化了模型对旋转字体的识别。通过实验,该模块和损失函数可以显著增加现有模型的performance。

参考:zhuanlan.zhihu.com/p/553220889
SPTS
论文地址 : Single-Point Text Spotting
参考代码 : github.com/shannanyinx...
目前的端到端的场景文本任务往往依赖于较细的标注粒度。且效果更好的方法常通过一些特殊的采样策略来获得共享特征。本方法仅通过单点标注的形式即可以很好地训练spotter。提出了一种自回归的transformer spotter ,将端到端的任务转变成了一个类似语言建模的任务,从而达到省去复杂的后处理和采样策略的目的,很好地提升了泛化能力。在各大数据集上表现与其他SOTAs模型相近的性能。

部分实验结果:


2.4 端到端识别算法总结:
| 类别 | 论文 |
|---|---|
| 端到端规则文本识别 | FOTS(2018)、TextSpotter(2018) |
| 端到端任意形状文本识别 | Mask TextSpotterv1、Mask TextSpotter2(2019)、Mask TextSpotterv3、TextDragon(2019)、CharNet、TUTS、ABCNet、ABCNetV2(2021)、Text Perceptron、PGNet、PAN++(2021) |
四、OCR端到端识别常见评估指标
- 端对端召回率:准确检测并正确识别文本行在全部标注文本行的占比;
- 端到端准确率:准确检测并正确识别文本行在检测到的文本行数量的占比;
- 准确检测的标准是检测框与标注框的IOU大于某个阈值,正确识别的检测框中的文本与标注的文本相同。
OCR端到端评估指标结果对比
通过对比上述方法在不同数据集上的的文字检测评估指标,参考其他资料如下结果。评价指标为准确率 召回率及F1值。
注:指标介绍可参考本专栏前几篇文章。
五、总结
本篇为 【《深入浅出OCR》第五章:OCR端到端识别】,主要对深度学习OCR段导弹方法进行介绍,本人将从经典算法结构、代码、论文解读等角度展开,配合作者总结的思维导图,深入浅出OCR知识,下一篇将对OCR文字识别技术进行详细介绍。