一个关于OCR/STR深度学习算法的综述 - Go语言中文社区

一个关于OCR/STR深度学习算法的综述


好长时间没有写博客了,草稿箱里未完成的文章成堆了,不论之前是什么原因,是时间清理一下了,拖延可不是个好习惯,好了,废话不多说了。原意是要做一个综述性的文章,鉴于笔者能力有限,不会包含所有的OCR/STR中所有的算法,但是一些常见的算法必不可少。

光学字符识别(Optical Character Recognition, OCR)传统上指对输入扫描文档图像进行分析处理,识别出图像中文字信息。场景文字识别(Scene Text Recognition, STR)指识别自然场景图片中的文字信息。也有人将OCR泛指所有图像文字检测和识别技术,包括传统的OCR和STR。

白纸黑字的扫描文档识别技术已经很成熟了,然而自然场景里的文字识别技术,因为其文字展现形式的复杂性,使得在自然场景图像中进行文字识别的难度要远远高于传统扫描文档中进行文字识别。

对于场景文字识别,目前存在两种方案,第一种是文字检测+文字识别,另一种则是一个端到端的模型,在一个模型中完成文字检测和文字识别工作.降低场景文字识别的Pipeline复杂度是一个趋势,如下图所示,第一种方案对应于(c),而端到端的模型对应于(d).下面我就三部分进行阐述,文字检测,文字识别和端到端的方法。

文字检测

文字检测的目标是要检测出输入图片中文字所在区域,看起来和目标检测很相似,但是常规物体的检测方法并不太适用于文字检测任务,因为相对于常规物体,文字行长度,长宽比例范围很大,而且文本行有横向,竖向,弯曲,旋转,扭曲等样式等等.

文字检测

算法

算法思想 优点和缺点
CTPN[6]

CTPN是一个全卷积网络,以任意尺寸的图像为输入,能够直接在卷积层中定位文本行

首先使用VGG16网络提取特征,得到conv5的大小为N*W*H*C的特征图;然后在conv5的特征图上,使用3*3的窗口进行密集滑动,每次滑动得到一个3*3*C的特征向量;然后将每一行的3*3*C作为双向LSTM的输入,学习每一行的序列特征;后连接一个全连接FC层;最后接一个输出层.

CTPN是基于Anchor的,每一个3*3*C的slide window预测k个宽度在图片中为16pix,高度为11到273pix像素的anchor,这些anchor在同一水平位置,有k个垂直高度值。

输出层输出2k个垂直坐标向量(中心点y坐标和高度),2k text/non-text score和k个side refinement.

由于Anchor的设定,CTPN检测横向分布的文字效果较好

由于算法中加入了双向LSTM学习文本的序列特征,有利于文字的检测,但是LSTM的不易训练问题需谨慎

TextBoxes

[7]

TextBoxes++

[8]

 

 TextBoxes和TextBoxes++,看名字就知道同根同源,两个算法都是word-based的检测方法,网络架构启发于SSD。

TextBoxes网络是一个全卷积网络,总共包含28层,前13层来自于VGG-16(conv_1到conv4_3),后接9个额外的卷积层(conv6,conv7,conv8_2,conv9_2,conv10_2和global),多重的输出层,被称为text-box layers,为6个卷积层, 分别和conv6,conv7,conv8_2,conv9_2,conv10_2和global相连。在text-box layer使用的是不规则的1*5卷积核,而不是常规的3*3大小的卷积核。

word更倾向于大的中纵横比,定义了1/2/3/5/7/10 六种default box。由于这些default box都是细长型的,会导致default box在水平方向密集在垂直方向上稀疏,为了解决这个问题,给每个default box加上垂直偏移(每个cell高度的一半),这样default box的数量为12个。

 TextBoxes++是TextBoxes的扩展,能够检测任意方向的文本。TextBoxes++网络架构和TextBoxes类似,只有稍微改变。TextBoxes主要目的在于能够检测任意方向的文本,为此,主要对三个地方进行改进:

1. default box的纵横比,改为1,2,3,5,1/2,1/3,1/5

2. 在text-box layer里,卷积核的大小由1*5改为3*5

3. 输出两种形式,RBOX或者QUAD。TextBoxes的输出为text presence scores(2-d)和offsets(4-d). TextBoxes++的输出为text presence scores(2-d), horizontal bounding offsets(4,d)和RBox(5-d)或者QUAD(8-d)

TextBoxes对水平方向上的文字检测效果较好

 

TextBoxes++能够检测任意方向的文字

SegLink[9]

SegLink算法将检测任务分成两部分,segment和links. Segment指的是能够覆盖一个单词或者文本行的box,link连接两个相邻近的segment,表明它们属于同一单词或者文本行。

网络借鉴SSD网络架构,网络能够同时检测segment和segment之间的link信息。网络的后六个卷积层用于检测,检测不同尺度的box。segment的box是RBOX形式. 

Within-Layer Link Detection用于检测同一特征层中segment的连接

Cross-layer Link Detection 用于检测两个相邻特征层中的segment连接

 

可以处理多方向和任意长度的文本,对于长文本检测效果也很好
EAST[10]

由于EAST设计者主要集中精力设计网络架构和损失函数,使得EAST称为一个高效且准确的场景文字检测算法。EAST算法仅仅包括两个步骤,利用全卷积网络检测文本行候选框,使用NMS算法过滤冗余的候选框。

网络架构借鉴HyperNet和U-shape的思想,包括三部分,特征提取主干,特征合并分支和输出层。输出层输出单通道的分数特征图和多通道的几何特征图。

EAST能够输出两种几何形状,Rotated Box(RBox)和Quadrangle(QUAD)

在EAST中,作者改进了传统的NMS算法,采用时间复杂度为O(n)的Locality-Aware NMS

 EAST损失函数由分数特征图的损失函数和几何形状的特征图组成,前者使用类平衡交叉熵损失函数,后者采用IoU损失函数。

特征合并分支整合了不同尺度的特征图,可以检测不同尺寸的文字

 

提供了文字的方向信息,可检测不同方向的文字

 

算法pipline简练,运行速度快

 

对长文本的检测效果不好

任意形状的场景文字检测算法

SPCNet

PSENet

文字识别

对于文字识别部分,目前存在四种架构,如下图所示,CNN+softmax分类器,CNN+RNN+CTC, CNN+RNN+Attention和CNN+stacked CNN+CTC,这四种架构可大致分为CTC-based方法和Attention-based的方法.

文字识别算法 算法思想 优点和缺点
CNN+softmax(a)[2]

假设输入图片为X,字符序列为S,字符序列的最大长度为N。

假设要识别的字符序列为S = left( s_{1}, s_{2},cdots, s_{N} right ),S的长度为L,假定每个字符相互独立,识别工作就可转换为在训练集上学习模型Pleft ( S|X right ),在图片X上识别出序列S的概率计算公式如下:

Pleft(S|X right)=Pleft(L=n|X right )cdot prod_{i=1} ^{n}Pleft(S=s_{i}|X right )

该方法用于街牌号识别,训练集使用SVHN数据集,N=5,那么L的取值有7个值left ( 0,cdots ,5,>5right),每个字符有10种选择。那么对一个字符的识别,就可以使用卷积网络提取特征,然后使用softmax分类器分类。

模型整体架构:使用卷积网络提取特征H,然后使用N+1个softmax分类器分别对每个字符进行分类,图示如下:

 

网络架构简单,可以处理不定长的序列,适合简单的文字识别,如字符和字母识别,而且序列长度不宜过长.

CNN+RNN+CTC(b)[3]

CRNN是一个很经典的模型,总体来说就是用CNN提取图片特征;将提取到的特征转换成特征序列作为RNN的输入,用于对卷积层输出的特征序列的每一帧进行预测;最后使用CTC算法将循环层的每帧预测转化为标签序列。

CRNN是一个端到端的模型,因为RNN可以处理任意长度的序列,所以仅仅需要固定输入图片的高度,宽度不定长

CRNN是端到端的训练网络,直接从序列标签中学习

对识别的对象不限定长度,仅仅需要height normalization

带字典和不带样本的样本都可以

CNN+RNN

+attention(c)[4]

这算是基于注意力的文字识别算法,CNN用于提取输入图片的特征,然后将特征序列作为Encoder-Decoder模型的输入,Encoder部分通常选择LSTM对特征序列进行编码,Decoder部分加入Attention机制进行解码,输出标签序列.

github: https://github.com/da03/Attention-OCR

1. 用CNN提取的特征序列的长度和真实标签的序列长度不等长, Encoder-Decoder模型可映射不定长序列到不定长序列之间的关系,Attention机制允许解码器在每一步的解码过程中,将查询编码器的隐藏状态,通过加权平均,计算可变的上下文向量 [公式],这样网络可以时刻读取最相关的信息,而不必完全依赖于上一时刻的隐藏状态

 

2. 仅仅使用AN网络(Attention Network)会出现注意力偏移'attention drift'问题, FAN算法增加一个FN

(focusing network)检查AN的注意力是否在图片中的目标字符区域,然后调整注意力

CNN+stacked CNN+CTC(d)[5]

不论是CNN+RNN+CTC,还是CNN+RNN+attention,在场景文字识别方面,RNN架构必不可少,但是RNN的串行计算和梯度消失或者梯度爆炸关系使得RNN计算复杂和难以训练,所以在此论文中,作者使用堆叠的卷积网络去获取序列之间的上下文依赖关系;而且为了增强前景文本的显示和抑制背景噪声的影响,作者在一个小的densely connected network中加入residual attention modules.

整个网络架构分为三部分,Attention feature encoder, Convolutional sequence modeling和CTC.Attention feature encoder是一个带有residual attention 的densely connected network,用来提取特征序列,特征序列中的每一个向量都和输入图像中某个局部区域相对应;convolutional sequence modeling使用CNN获取序列中的上下文关系,首先需要将上一步得到的特征序列合并成一个2维的特征图,堆叠的卷积层生成hierarchical representation,能够迅速扩大感受野的大小;最后使用CTC算法获得最后的标签序列.

 

1. CNN相对于RNN参数量,消耗更少的内存空间,并且卷积能够并行运算,运算速度比RNN要快.

2. RNN专门解决时间序列问题的,用来提取时间序列信息,尽管CNN也能提取到序列之间的上下文关系,但还是相对于RNN来说逊色一些.

端到端系统

场景文字识别,通常是看做先检测后识别,分为两个任务,每个任务分别对应不同的算法,这样就会增加时耗,为了能够达到实时性,有学者提出能够同时完成检测和识别任务的端到端系统

算法 算法主要思想 优点和缺点
Towards End-to-End Text Spotting with Conventional Recurrent Neural Network[11]

整个网络架构以一张图片作为输入,输出图片中文本的bbox和相应的文本标签.

1. 首先利用VGG-16网络中的卷积层和池化层从原输入图像中提取特征

2. 后接一个Text Proposal Network(TPN)网络提取一系列文本区域候选框

3. 接下来, Region Feature Encoder(RFE)以VGG网络提取的特征图conv Feature和TPN提取得到的Text Proposals为输入,依据文本相应的纵横比重采样文本区域,然后使用RNN将不同长度的特征图编码成固定长度的向量

4.随后将固定长度的向量入Text Detection Network(TDN)去计算textness scores 和 bbox offsets

5. REF网络再次被应用,将TDN网络生成的bbox转化为固定长度的向量

6. 最后,Text Recognition Network(TRN)在检测的bbox中识别出相应的文字标签

 

 

A curriculum learning strategy is designed to
train the system with gradually more complex training
data.
STN-OCR: A single Neural Network for Text Detection and Text Recognition[12]

 STR-OCR是一个半监督学习网络。训练集仅仅需要图片和图片上文字的标签信息,并不需要文字的区域信息。

使用空间转换检测文本,包含三个子步骤:Localization Network以图片作为输入,输出N个二维的affine transformation matrices; Grid Generator利用LR网络输出的affine transformation matrices输出N个文本区域;Image Sampling使用双线性差值提取相应区域。

文本检测在原图像中检测出N个区域,从图片中提取这N个区域进行识别,思想类似于CNN+softmax

半监督学习,训练集不需要bbox标注
FOTS: Fast Oriented Text Spotting with a Unified Network[13]

 FOTS(Fast Oriented Text Spotting)整体架构包含四部分:shared convolutions, the text detection branch, RoIRotate operation 和 the text recognition branch。

1. Share convolutions从原输入图像中提取特征,作为后续检测分支和识别分支的输入,网络以ResNet-50作为主干网络,借鉴FPN连接low-level特征图和high-level特征图

2. The text detection branch输出预测文本的dense per-pixel,该分支借鉴于EAST算法。

3. RoIRotate是FOTS算法的创新点,该模块将有角度的文本块,经过仿射变换,转化为正常的axis-glign的文本块

4. the text recognition branch类似于CRNN算法

 

由于卷积的共享,使得识别任务几乎不耗费时间,速度几乎是分开检测和识别的2倍

 

数据集

COCO-Text

COCO-Text数据集包含63686个图片,其中总共包括145859文本。其中训练集包含43686图片/118309文本;验证集包含10000图片/27550文本;测试集10000图片。

COCO-Text API:https://github.com/andreasveit/coco-text

Synthetic Data for Text Localisation

牛津大学VGG组在复杂背景下人工合成的自然场景文本数据集。800,000张图片和大约8,000,000合成文本实例。每一个文本实例的bbox标注有word-level和character-level两种形式。该合成算法,不需要人工标注就能知道文本的标签信息和位置信息,可得到大量自然场景文本标注数据。

homepage: http://www.robots.ox.ac.uk/~vgg/data/scenetext/

论文: Synthetic Data for Text Localisation in Natural Images

Synthetic Word Dataset

此数据集仍是牛津VGG的产物,特用于文字识别任务。这也是合成的数据集,9,000,000张图片中包含90,000英语单词。

homepage: http://www.robots.ox.ac.uk/~vgg/data/text/#sec-synth

Chinese Text in the Wild(CTW)

CTW是一个具有多样性的中文文本数据集,包含平面文本,凸起文本,光照不足的文本,部分遮挡的文本等等。CTW包含32285张高分辨率图片和1018402个character实例。

CTW homepage: https://ctwdataset.github.io/

参考

[1] Scene Text Detection and Recognition: The Deep Learning Era

[2] Multi-digit Number Recognition from Street View Imagery using Deep Convolutional Neural Networks

[3] An End-to-End Trainable Neural Networks for Image-based Sequence Recognition and Its application to Scene Text Recognition

[4] Image-to-Markup Generation with Coarse-to-Fine Attention

[5] Reading Scene Text with Attention Convolutional Sequence Modeling

[6] Detecting Text in Nature Image with Connectionist Text Proposal Network

[7] Textboxes: A fast text detector with a single deep neural network

[8] TextBoxes++: A single-Shot Oriented Scene Text Detector

[9] Detecting Oriented Text in Natural Images by Linking Segments

[10] EAST:An Efficient and Accurate Scene Text Detector

[11] Towards End-to-End Text Spotting with Conventional Recurrent Neural Network

[12] STN-OCR: A single Neural Network for Text Detection and Text Recognition

[13] FOTS: Fast Oriented Text Spotting with a Unified Network

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_42111770/article/details/90211290
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 21:38:06
  • 阅读 ( 1024 )
  • 分类:算法

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢