Fast AI for OCR—深度学习背景下的文字识别实践应用

作者:滴普科技-算法工程师-温志平

图片1.png

Fast Data是滴普针对图像和数据打造的智能算法产品,分为图像识别和数据AI两大模块,图像识别部分主要基于深度学习和模式识别算法实现目标检测、分类、识别,机器视觉模块应用于工业缺陷检测、安防识别,其中OCR字符识别是图像识别模块的重要组成部分,接下来我们将从传统OCR的典型算法、应用领域展开分析,再结合滴普的实践,对传统OCR算法改进作深入剖析。

 

1.OCR技术简述

光学字符识别(Optical Character Recognition,OCR)是从图像中识别出文字的技术,利用机器将图像中手写或印刷文本转换为计算机可以直接处理的格式。文字识别是计算机视觉研究领域的分支之一,处于研究较深入的阶段,当前已取得不少商业应用。前有百度,阿里,腾讯等OCR云服务平台,后有汉王,合合信息,ABBYY,文通等OCR定制化系统集成提供商。OCR 技术能够处理多种不同场景的图像,包括拍摄或扫描得到的各种卡证、纸质文档图像,也包括含有文字的自然场景图像和叠加了字幕文本的视频图像等,被广泛运用于工业、商业和证券金融等领域。

2.OCR技术路线

在深度学习没有全面推广之前,大部分OCR识别都是基于传统机器视觉方法进行检测识别。在背景单一、数据场景简单的情况下,传统OCR一般都能达到好的效果,但在一些场景复杂、干扰多的情况下,识别效果不好,深度学习OCR此时体现出巨大的优势。2016年,Google DeepeMind发布以深度学习技术为基础的AlphaGo机器人[1],以4:1的比分战胜了国际顶尖围棋高手李世石,深度学习的热度一时无两。基于深度学习技术的OCR识别框架以另外一种新的思路迅速突破了原有的技术瓶颈,并已在工业界得到广泛应用。

2.1传统识别技术

传统OCR基于图像处理(二值化、连通域分析、投影分析等)和统计机器学习(Adaboot、SVM),提取图片上的文本内容。按处理方式划分为四个阶段:预处理、文字定位、文字识别和后处理。

图片2.png

Fig 1. 基于传统机器视觉OCR技术实现流程

OCR技术在复杂场景下面临这以下挑战。

· 成像复杂:噪声、模糊、光线变化、形变;

· 文字复杂:字体、字号、色彩、磨损、笔画宽度任意、方向任意;

· 场景复杂:版面缺失、背景干扰;

· 特征单一:人工指定特征算子,能够表征的信息有限,无法提取深层语义信息。

2.2 深度学习技术

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

· 检测算法:CTPN、TextBoxes、SegLink、EAST等;

· 识别算法:CRNN、CRNN+CTC、Seq2Seq-Attention等;

· End-to-End算法:FOTS、Mask TextSpotter等。

 

基于深度学习的方法有以下几种优点:

· 自动:自动的特征表示学习可以使研究人员摆脱凭经验设计、 手工制作;

· 效率:性能通常比传统算法更好;

· 泛化:更容易推广到类似场景。

图片3.png

Fig 2. 基于深度学习OCR技术实现流程

3.深度学习文本检测

文本检测是物体检测的一个特例,把文本当成单类目标,即可借鉴通用的目标检测模型完成文字的检测任务。但文本检测比普通物体检测存在更多特点:

· 相比于常规物体检测,文字行长度、长宽比例变化范围很大;

· 文本行有方向性,Anchor-Based的检测通常是水平和垂直方向的矩形;

· 有些艺术字体形状变化非常大,很多是弯曲的,并且字体类型丰富,语言种类丰富;

· 由于丰富的背景图像干扰,手工设计特征在自然场景文本识别任务中不够鲁棒。

常见的文字检测方法主要有基于候选框方法、基于分割方法、混合方法和其他方法几种类型。

图片4.png

Fig 3. 深度学习OCR文字检测方法一览

· 基于回归的方法分为box回归和像素值回归。a. 采用box回归的方法主要有CTPN、Textbox系列和EAST等,这类算法对规则形状文本检测效果较好,但无法准确检测不规则形状文本。 b. 像素值回归的方法主要有CRAFT和SA-Text,这类算法能够检测弯曲文本且对小文本效果优秀但是实时性能不够。

· 基于分割的算法,如PSENet,这类算法不受文本形状的限制,对各种形状的文本都能取得较好的效果,但是往往后处理比较复杂,导致耗时严重。目前也有一些算法专门针对这个问题进行改进,如DB,将二值化进行近似,使其可导,融入训练,从而获取更准确的边界,大大降低了后处理的耗时。

3.1 CTPN算法

阿德莱德大学博士生Tian Zhi在ECCV 2016提出一种文字检测算法——CTPN[3],其由经典的目标检测模型Faster RCNN改进而来,结合了CNN与LSTM深度网络,其支持任意尺寸的图像输入,并能够直接在卷积层中定位文本行。CTPN由检测小尺度文本框、循环连接文本框、文本行边细化三个部分组成。

· 使用VGG16网络提取特征,得到conv5_3的特征作为Feature Map;

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

· 将所得特征向量输入双向长短记忆网络BLSTM,学习序列特征,然后连接一个全连接FC层;

· 然后经过类似Faster R-CNN的RPN网络,获得Text Proposals;

· 获得密集的小text proposals后,经过NMS方法过滤多余的文本框;

· 最后通过文本线构造算法合成相邻文本,形成文本行。

图片5.png

Fig 4. CTPN网络实现

 

CNN学习的是感受野内的空间信息,LSTM学习的是序列特征。对于文本序列检测,显然既需要CNN抽象空间特征,也需要序列特征(文字是连续的)。BLSTM实际上就是将2个方向相反的LSTM连起来,相比一般单向LSTM可学习到更强的上下文信息,避免单向LSTM的长链遗忘问题,更完整地提取出序列特征,改善文本行的连贯性。CTPN通过CNN和BLSTM学到一组”空间+序列”特征后,在”FC”卷积层后接入RPN网络[4]。这里的RPN与Faster R-CNN类似,分为两个分支:

· 左边分支用于Bounding Box Regression。由于FC Feature Map每个点配备了10个Anchor,同时只回归中心y坐标与高度2个值,所以Rpn_bbox_pred有20个Channels;

· 右边分支用于Softmax分类Anchor。

图片6.png

Fig 5. CTPN网络RPN细节

 

文本长度的剧烈变化是文本检测的挑战之一,作者认为文本在长度的变化比高度的变化剧烈得多,文本边界开始与结束的地方难以和Faster-Rcnn一样去用Anchor匹配回归,所以作者提出一种Vertical Anchor的方法,即只去预测文本的竖直方向上的位置,不去预测水平方向的位置,水平位置的确定只需要检测一个一个小的固定宽度的文本段,将他们对应的高度预测准确,最后再将他们连接在一起,就得到了文本行。总结CTPN有如下优点:

· 对水平文本效果很好,比较鲁棒,通过改变后处理的锚框合并方式也可处理10度以内的倾斜文本;

· 对长文本尤其是字距过大的长文本效果好。

CTPN是一个有效的文字检测方法,但也存在一些问题:

· 因为Anchor设定的原因,CTPN只能检测横向分布的文字,小幅改进加入水平Anchor即可检测竖直文字。但是由于框架限定,对不规则倾斜文字检测效果一般;

· 密集型文本可能存在水平粘连的情形;

· CTPN加入了双向LSTM学习文字的序列特征,有利于文字检测。但是引入LSTM后,在训练时很容易梯度爆炸,需要小心处理。

3.2 DB算法

基于分割的文本检测中,把分割方法产生的概率图转化为边界框和文字区域,其中会包含二值化的后处理过程。二值化的过程非常关键,常规二值化操作通过设定固定的阈值,然而固定的阈值难以适应复杂多变的检测场景。DBNet[7]提出了一种可微分的二值化操作,通过将二值化操作插入到分割网络中进行组合优化,对每一个像素点进行自适应二值化,二值化阈值由网络学习得到,彻底将二值化这一步骤加入到网络里一起训练,这样最终的输出图对于阈值就会具有非常强的鲁棒性,在简化了后处理的同时提高了文本检测的效果。具体流程如下图红色箭头所示。

图片7.png

Fig 6. DBNet网络层结构信息

 

首先,输入图片经过特征金字塔backbone,接着,金字塔特征上采样到输出与原图相同尺寸的特征图F,然后,特征图F用来同时预测概率图P和阈值图T,由F和T计算后近似得到二值图B。在训练阶段,对概率图、阈值图和近似二值图进行监督,其中概率图和近似二值图共用一个监督。在推理过程中,通过一个box公式化模块,可以很容易地从近似二值图或概率图中得到文本包围框。

DB算法的主要优势:

· 在五个基准数据集上有良好的表现,其中包括水平、多个方向、弯曲的文本;

· 比之前的方法要快很多,因为DB可以提供健壮的二值化图,从而大大简化了后处理过程;

· 使用轻量级的backbone(ResNet18)也有很好的表现;

· DB模块在推理过程中可以去除,因此不占用额外的内存和时间的消耗。

缺点主要有:

· 无法解决“text in text”的情况,即文本中心重叠的情况,这也是基于分割原理的文字检测模型的通病了。

4.基于深度学习的文本识别

通过文字检测对图片中的文字区域进行定位后,即可对区域内的文字进行识别。与传统OCR的单字符切分后单独识别不同,基于深度学习方法的文字识别技术一般在文本行维度进行一次识别,避免字符切分操作的不确定性。

CRNN识别算法

CRNN( Convolutional Recurrent Neural Network)[8],主要用于端到端地对不定长的文本序列进行识别,不用先对单个文字进行切割,而是将文本识别转化为时序依赖的序列学习问题,是一种基于图像的序列识别方法。整个CRNN网络结构包含三部分,从下到上依次为:

· CNN(卷积层):使用深度CNN,对输入图像提取特征,得到特征图;

· RNN(循环层):使用双向RNN(BLSTM)对特征序列进行预测,对序列中的每个特征向量进行学习,并输出预测标签(真实值)分布;

· CTC loss(转录层):使用 CTC 损失,把从循环层获取的一系列标签分布转换成最终的标签序列。

 

5.OCR实践

滴普科技在产业实践过程中,主要使用DB作为文字检测和CRNN作为文字识别模型,打造了Fast AI系列产品。以某项目中车牌识别任务为例,阐述基于滴普Fast AI产品中的OCR模块在实际项目中应用。

5.1数据准备

项目中采用中国科学技术大学开源数据集CCPD(200K)+实际场景数据集(10K)+人工合成车牌数据集(100K)相结合。由于CCPD和实际场景地域固定,导致采集到的车牌属地比较单一,车牌中文字符的分布差异较大,所有加入了人工合成数据集[13,14]。人工标注了车牌边框四点位置(四边形,不一定为矩形)及车牌字符信息。

图片8.png

Fig 7. CCPD Base车牌数据集

图片9.png

Fig 8. 实际场景车牌数据集

图片10.png

Fig 9 车牌标注数据

图片11.png

Fig 10车牌区域图像


5.2模型训练

车牌检测:采用DB模型(MobileNetV3为BackBone)对车牌区域进行检测,对原始图像填充缩放至640*640尺寸,以16Batch Size,训练1000Epoch,Adam为优化器,初始学习率0.001,采用余弦退火学习率调整策略,在0.5@mAP下取得0.96。

车牌识别:采用CRNN模型(ResNet为BackBone,CTC解码)对车牌区域内字符信息进行识别,根据车牌原始宽高比例(440*140),将标注数据内的车牌区域截取并缩放至(100*32)尺寸,并收集67个车牌字符作为字典文件。以64Batch Size,训练1000Epoch,Adam为优化器,初始学习率0.0005,采用余弦退火学习率调整策略,取得0.91的准确率。

5.3系统集成

将车牌检测和车牌识别模型进行串联即可实现车牌识别系统的集成,可实现一副图像内的多张车牌识别任务。在实际场景中可实现94% 的综合准确率,在1080TI GPU硬件环境下,720P的图像可实现20FPS的识别速度,满足实际项目的指标需求。

Fig 11 车牌识别结果

6. OCR总结与展望

基于深度学习的OCR发展已经取得了长足的发展,不管是通用意义的OCR,还是自然场景下STR,深度学习对不同尺度、不同方向和不同形状的文字均可实现较好的检测和识别。但对端到端OCR任务的研究仍有很长的路要走,对OCR推理实时性的要求也逐渐提高。

 

了解更多产品详情请登录://www.deepexi.com/product-new/6

 

 

参考文献

[1] //deepmind.com/research/case-studies/alphago-the-story-so-far

[2] //github.com/hwalsuklee/awesome-deep-text-detection-recognition

[3] Z. Tian, W. Huang, T. He, P. He and Y. Qiao: Detecting Text in Natural Image with Connectionist Text Proposal Network, ECCV, 2016.

[4] //zhuanlan.zhihu.com/p/137540923

[5] Zhou X, Yao C, Wen H, et al. East: an efficient and accurate scene text detector[C]//Proceedings of the IEEE conference on Computer Vision and Pattern Recognition. 2017: 5551-5560.

[6] //www.cnblogs.com/skyfsm/p/9776611.html

[7] Liao M, Wan Z, Yao C, et al. Real-time Scene Text Detection with Differentiable Binarization[J].

[8] //zhuanlan.zhihu.com/p/71506131

[9] //xiaodu.io/ctc-explained/

[10] Graves A, Fernández S, Gomez F, et al. Connectionist temporal classification: labelling unsegmented sequence data with recurrent neural networks[C]//Proceedings of the 23rd international conference on Machine learning. 2006: 369-376.

[11] //blog.csdn.net/sinat_30822007/article/details/89294068

[12] Lyu P, Liao M, Yao C, et al. Mask textspotter: An end-to-end trainable neural network for spotting text with arbitrary shapes[C]//Proceedings of the European Conference on Computer Vision (ECCV). 2018: 67-83.

[13] //github.com/ufownl/fake_chs_lp

[14] //github.com/zhangjianying/A-Simple-Chinese-License-Plate-Generator-and-Recognition-Framework

Tags: