复杂场景下的OCR如何实现——深度学习算法综述

2020-03-15 10:59:42爱云资讯

原标题:复杂场景下的OCR如何实现——深度学习算法综述

一、背景知识

文本是人类最重要的信息来源之一,自然场景中充满了形形色色的文字符号。在过去的十几年中,研究人员一直在探索如何能够快速准确的从图像中读取文本信息,也就是现在OCR技术。

工业场景下的图像文本识别更为复杂,它会出现在许多不同的情景下,如医药包装上的文字、各类钢制零部件上的字符、集装箱表面喷印的字符、商铺Logo上的个性化字符等等。

复杂场景下的OCR如何实现——深度学习算法综述

在这类图像中,文字部分可能会呈现为弯曲排列、曲面异形、倾斜分布、褶皱变形、残缺不全等多种形式,与标准字符的特征有较大出入,从而给图像文字的检测与识别带来了困难。

二、传统算法

传统OCR技术通常使用OpenCV算法库,通过图像处理和统计机器学习方法提取图像中的文字信息,用到的技术包括二值化、噪声滤除、连通域分析和Adaboost、SVM等。

按处理方式可以将传统OCR技术划分为图片预处理、文字识别、后处理三个阶段,其具体的技术流程如下图所示。

复杂场景下的OCR如何实现——深度学习算法综述

针对简单场景下的图片,传统OCR已经取得了很好的识别效果。但是从操作流程可以看出,传统方法是针对特定场景的图像进行建模的,一旦跳出当前场景,模型就会失效。随着近些年深度学习技术的迅速发展,基于深度学习的OCR技术也已逐渐成熟,能够灵活应对不同场景。

三、深度学习

目前,基于深度学习的场景文字识别主要包括两种方法,第一种是分为文字检测和文字识别两个阶段;第二种则是通过端对端的模型一次性完成文字的检测和识别。

3.1文字检测

顾名思义,文字检测就是要检测到图片中文字所在的区域,其核心是区分文字和背景。常用的文字检测算法包括以下几种:

3.1.1 CTPN [1]

CTPN是ECCV 2016提出的一种文字检测算法,由Faster RCNN改进而来,结合了CNN与LSTM深度网络,其支持任意尺寸的图像输入,并能够直接在卷积层中定位文本行。

CTPN由检测小尺度文本框、循环连接文本框、文本行边细化三个部分组成,具体实现流程为:

使用VGG16网络提取特征,得到conv5_3的特征图;

在所得特征图上使用3*3滑动窗口进行滑动,得到相应的特征向量;

将所得特征向量输入BLSTM,学习序列特征,然后连接一个全连接FC层;

最后输出层输出结果。

复杂场景下的OCR如何实现——深度学习算法综述

CTPN是基于Anchor的算法,在检测横向分布的文字时能得到较好的效果。此外,BLSTM的加入也进一步提高了其检测能力。

3.1.2 TextBoxes/TextBoxes++ [2,3]

TextBoxes和TextBoxes++模型都来自华中科技大学的白翔老师团队,其中TextBoxes是改进版的SSD,而TextBoxes++则是在前者的基础上继续扩展。

复杂场景下的OCR如何实现——深度学习算法综述

TextBoxes共有28层卷积,前13层来自于VGG-16(conv_1到conv4_3),后接9个额外的卷积层,最后是包含6个卷积层的多重输出层,被称为text-box layers,分别和前面的9个卷积层相连。由于这些default box都是细长型的,使得box在水平方向密集在垂直方向上稀疏,从而导致该模型对水平方向上的文字检测结果较好。

复杂场景下的OCR如何实现——深度学习算法综述

TextBoxes++保留了TextBoxes的基本框架,只是对卷积层的组成进行了略微调整,同时调整了default box的纵横比和输出阶段的卷积核大小,使得模型能够检测任意方向的文字。

3.1.3 EAST [4]

EAST算法是一个高效且准确的文字检测算法,仅包括全卷积网络检测文本行候选框和NMS算法过滤冗余候选框两个步骤。

其网络结构结合了HyperNet和U-shape思想,由三部分组成:

特征提取:使用PVANet/VGG16提取四个级别的特征图;

特征合并:使用上采样、串联、卷积等操作得到合并的特征图;

输出层:输出单通道的分数特征图和多通道的几何特征图。

复杂场景下的OCR如何实现——深度学习算法综述

EAST算法借助其独特的结构和简练的pipline,可以检测不同方向、不同尺寸的文字且运行速度快,效率高。

3.2文字识别

通过文字检测对图片中的文字区域进行定位后,还需要对区域内的文字进行识别。针对文字识别部分目前存在几种架构,下面将分别展开介绍。

3.2.1 CNN + softmax [5]

此方法主要用于街牌号识别,对每个字符识别的架构为:先使用卷积网络提取特征,然后使用N+1个softmax分类器对每个字符进行分类。具体流程如下图所示:

复杂场景下的OCR如何实现——深度学习算法综述

使用此方法可以处理不定长的简单文字序列(如字符和字母),但是对较长的字符序列识别效果不佳。

3.2.2 CNN + RNN + attention [6]

本方法是基于视觉注意力的文字识别算法。主要分为以下三步:

模型首先在输入图片上运行滑动CNN以提取特征;

将所得特征序列输入到推叠在CNN顶部的LSTM进行特征序列的编码;

使用注意力模型进行解码,并输出标签序列。

复杂场景下的OCR如何实现——深度学习算法综述

本方法采用的attention模型允许解码器在每一步的解码过程中,将编码器的隐藏状态通过加权平均,计算可变的上下文向量,因此可以时刻读取最相关的信息,而不必完全依赖于上一时刻的隐藏状态。

3.2.3 CNN + stacked CNN + CTC [7]

上一节中提到的CNN + RNN + attention方法不可避免的使用到RNN架构,RNN可以有效的学习上下文信息并捕获长期依赖关系,但其庞大的递归网络计算量和梯度消失/爆炸的问题导致RNN很难训练。基于此,有研究人员提出使用CNN与CTC结合的卷积网络生成标签序列,没有任何重复连接。

这种方法的整个网络架构如下图所示,分为三个部分:

注意特征编码器:提取图片中文字区域的特征向量,并生成特征序列;

卷积序列建模:将特征序列转换为二维特征图输入CNN,获取序列中的上下文关系;

CTC:获得最后的标签序列。

复杂场景下的OCR如何实现——深度学习算法综述

本方法基于CNN算法,相比RNN节省了内存空间,且通过卷积的并行运算提高了运算速度。

3.3端对端文字识别

使用文字检测加文字识别两步法虽然可以实现场景文字的识别,但融合两个步骤的结果时仍需使用大量的手工知识,且会增加时间的消耗,而端对端文字识别能够同时完成检测和识别任务,极大的提高了文字识别的实时性。

3.3.1 STN-ORC [8]

STN-OCR使用单个深度神经网络,以半监督学习方式从自然图像中检测和识别文本。网络实现流程如下图所示,总体分为两个部分:

定位网络:针对输入图像预测N个变换矩阵,相应的输出N个文本区域,最后借助双线性差值提取相应区域;

识别网络:使用N个提取的文本图像进行文本识别。

复杂场景下的OCR如何实现——深度学习算法综述

本方法的训练集不需要bbox标注,使用友好性较高;但目前此模型还不能完全检测出图像中任意位置的文本,需要在后期继续调整。

3.3.2 FOTS [9]

FOTS是一个快速的端对端的文字检测与识别框架,通过共享训练特征、互补监督的方法减少了特征提取所需的时间,从而加快了整体的速度。其整体结构如图所示:

复杂场景下的OCR如何实现——深度学习算法综述

卷积共享:从输入图象中提取特征,并将底层和高层的特征进行融合;

文本检测:通过转化共享特征,输出每像素的文本预测;

ROIRotate:将有角度的文本块,通过仿射变换转化为正常的轴对齐的本文块;

文本识别:使用ROIRotate转换的区域特征来得到文本标签。

FOTS是一个将检测和识别集成化的框架,具有速度快、精度高、支持多角度等优点,减少了其他模型带来的文本遗漏、误识别等问题。

四、总结

本文参考前沿文献,总结了当前主流的OCR场景检测技术。相对来说,使用基于深度学习的端对端检测模型可以实现快速、准确的文字识别,且可以灵活的应用于倾斜、弯曲、褶皱变形等复杂场景。

通过对现有算法模型的细节调整,将成熟的文本识别模型集成化,即可实现工业场景中的OCR识别。 人工智能

相关文章
精彩评论
热门文章
头条文章
重点文章
推荐文章
热点文章
关于我们|联系我们|免责声明