OCR 文本检测与文本识别的方法

点击上方“蓝字”关注咱们算法


做者 | 胡雅伦
编辑 | 张婵




背景介绍微信


基于深度学习的 OCR 主要分为文本检测和文本识别两步。文本检测就是定位图像中文本的位置,文本识别就是识别单行文本中的具体内容(OCR 具体流程能够回顾咱们系列文章的第一篇:浅谈深度学习OCR实践思路)。这篇文章将简单介绍经常使用的基于深度学习的文本检测与文本识别方法。




文本检测网络


在深度学习方法流行以前,文本检测主要是以手动提取特征为主,经过滑动窗口提取分类,最后汇总为文本区域。基于深度学习的文本检测方法大多来自于深度学习的物体检测框架体系,但又针对文本独有的特色进行了优化与改进。

基于深度学习的文本检测方法主要包括:基于候选框的文本检测、基于分割的文本检测、基于二者方法混合的文本检测、其它方法的文本检测。   


基于候选框方法的基本思路是先预先生成若干个候选文本框,再通过 NMS(非极大值抑制)获得最终的检测结果。基于分割方法的基本思路是经过分割网络结构进行像素级别的分割,而后进行后处理构建出文本行。


常见方法简单总结以下:

下面简单介绍一下基于候选框和基于分割方法中的表明模型。


0 1 
CTPN(基于候选框)




CTPN 的全称是 Detecting Text in Natural Image with Connectionist Text Proposal Network(基于链接预选框网络的文本检测)。该模型的基本作法是直接在卷积得到的特征图上生成的一系列适当尺寸的文本候选框,利用后处理将候选框合并来进行文本行的检测。

1.1 CTPN 的思路app


大部分状况下,文本是水平排列的,而且连续字符的长度可变,高度基本相同。基于这一假设,CTPN 算法将文本在水平方向上分红小片,按照固定的高度检测文字,找出图像中连续出现一片一样高度特征的区域,最后利用规则将属于同一水平行的小片组合成文本行。


1.2 CTPN 的框架框架


CTPN 模型利用 CNN+RNN 提升了文本检测精度。其中 CNN(Convolutional Neural Networks,卷积神经网络)提取文本的深度特征,论文中采用的是经典的 VGG16 网络。RNN(Recurrent Neural Networks,循环神经网络)提取先后文的序列特征,论文中采用的是 BLSTM(Bidirectional Long Short Term Memory Network,双向长短时间记忆网络) 。

CTPN 的具体实现流程以下:

(1)使用 VGG16 做为 base net 提取深度特征,获得 conv5_3(VGG 第 5 个 block 的第三个卷积层)的特征做为特征图,大小是 C×H×W。ide


(2)在上述的特征图上使用大小为 3×3 的滑动窗进行滑动,每一个窗口都能获得一个长度为 3×3×C 的特征向量,输出 9C×H×W 的特征图。其中每一个滑动窗口中心都会预测 k 个 anchor 的偏移值(anchor 可理解为上文提到文本小片,宽度固定为 16)。学习


(3)将上一步获得的特征输入到 256 的 BLSTM 中,获得长度为 H×W×256 的输出。flex


(4)将 BLSTM 的结果输入到 512 的 FC(Fully Connected layer,全链接层),获得 512×H×W 的结果。优化


(5)将 FC 特征输入到三个分类或者回归层中。三个结果的含义:编码


  • 2k vertical coordinate(回归):k 个 anchor 的 y 坐标/高度偏移值;

  • 2k 个 score(分类):k 个 anchor 为文字/非文字的分数;

  • k 个 side-refinement(回归):每一个 anchor 的水平偏移值,用于精修文本行的两个端点。


(6)使用 NMS(非极大值抑制算法)来滤除多余的 anchor。


(7)使用基于图的文本行构造算法,将获得细长矩形合并成文本行。



0 2 
PixelLink(基于分割)




PixelLink(像素链接)模型的核心是 Pixel(像素)和 Link(链接),即经过预测图像中的像素是否为文本,以及该像素与其 8 个邻域方向是否存在链接,最终来准肯定位文本框。


2.1 PixelLink 的思路


基于候选框的方法(如 CTPN)一般须要经过分类判断是文本/非文本,经过回归肯定边界框的位置和角度,但回归的耗时较大,准确率也没法彻底保证。PixelLink 抛弃了边框回归的思想,采用实例分割的方法,分割出文本行区域,而后直接找对应文本行的外接矩形框。


2.2 PixelLink 的框架



PixelLink 的实现过程包括两部分:先经过深度学习网络预测文本(pixel positive)/非文本(pixel negative)以及预测链接(link positive)/无链接(link negative),再根据 link positive 链接 pixel positive 获得文本实例分割图,从分割图中直接提取文本的外接矩形框。

第一部分:网络结构



(1)PixelLink 的主干网络基于 CNN,采用 VGG16 做为特征提取器,将最后两个全链接层改为卷积层。


(2)提取不一样层的特征图,采用自顶向下的方法进行融合,融合操做包括先向上采样,而后再进行 Add 操做。特征融合的方式基于 FPN(feature pyramid network,金字塔特征网络),即卷积层的尺寸依次减半,但卷积核的数量依次增倍。


(3)输入到 2 个分类层中进行预测:


  • 文本/非文本预测,输出 1x2=2 通道(文本/非文本);

  • 链接预测,输出 8x2=16 通道(8 个邻域方向是否有链接)。


第二部分:实例分割并提取文本


(1)对于 Pixel(像素)、Link(链接)的预测结果,经过设定两个不一样的阈值获得 pixel positive 集合和 link positive 集合。


(2)根据 link positive 将 pixel positive 进行链接,获得 CCs(conected compoents,连通域)集合,集合中的每一个元素表明的就是文本实例。链接的规则采用的是 Disjoint set data structure(并查集)的方法。


(3)经过对上一步获得的 CCs(连通域)集合使用 OpenCV 的 minAreaRect (最小外接矩形)提取不一样大小的文本的外接矩形框。


(4)使用 disjoint-set(并查集)方法造成文本框。


(5)利用长度、宽度、面积、长宽比等信息,根据必定的阈值过滤上一步的文本框,去除噪声。


2.3 总结


(1)CTPN:因为加入 BLSTM,对水平文字检测效果很是好;因为框架限制,在其它方向的检测效果相对较差。采用边界框回归的方法,训练速度较慢。


(2)PixelLink:放弃边框回归,所有转化为分类任务,经过实例分割生成边界框。训练速度更快,效果更好。




文本识别



基于深度学习的文本识别框架主要有 CNN+RNN+CTC 和 CNN+Seq2Seq+Attention。二者的结构差很少,前半部分都是用 CNN 编码器提取图像基本特征。

对于后半部分,CNN+RNN+CTC 框架利用 RNN 和 CTC 学习文字上下文关系,提高了文字的识别率。CNN+Seq2Seq+Attention 框架在 RNN 的基础上加入 Seq2Seq,可将固定长度的向量转换为可变长度的目标,解决了多对多的映射问题;引入 Attention 的方法,利用加权平均法计算注意力,既能重点关注文字的上下文,又能够和远距离文字保持联系。但 Attention 目前在中文识别上的效果不够稳定且计算开销大,因此目前工业界更多仍是在使用 CNN+RNN+CTC 框架。


常见方法简单总结以下:

下面简单介绍一下更经常使用的 CNN+RNN+CTC 框架中的 CRNN 模型。

0 1 
CRNN(CNN+RNN+CTC)




CRNN(Convolutional Recurrent Neural Network,卷积循环神经网络)是华中科技大学白翔教授等提出的文本识别模型,能够识别较长的文本序列。


1.1 CRNN 的思路


CRNN 模型基于 CNN+RNN+CTC 框架,首先用 CNN 提取图像特征,而后用 RNN 提取文字序列特征,最后引入 CTC 模型(Connectionist temporal classification,联接时间分类),抛弃对输入字符进行分割的想法,直接进行端到端训练,可识别任意长度的文本序列,解决字符分割的对齐问题。


1.2 CRNN 的框架




CRNN 模型主要由三部分组成:卷积层提取深度特征,循环层提取时序特征,转录层利用去重、整合等操做获得最终识别结果。具体流程以下:

(1)卷积层:将图像输入到 CNN 卷积层,获得特征图。


(2)循环层:在上一步获得的特征图上按照必定的宽度从左到右生成特征序列,输入到循环层。循环层由一个 BLSTM 循环神经网络构成,预测每一个特征序列对应的字符结果。


(3)转录层:利用 CTC 模型,去掉上一步预测的结果中的空字符、重复字符并进行整合,解决字符对齐问题,最后获得输出结果。





总结


随着深度学习的发展,文本检测与文本识别的方法愈来愈多样化,技术更新十分迅速。但在实际开发的过程当中,因为应用场景存在差别,时间、数据每每有所限制,选择模型时要考虑多方面因素,须要不断实验,对比效果。另外,深度学习模型也不是万能的,可能在某种状况下的效果好,但在另外一种状况下的效果就不尽人意,因此为了提高最终识别效果,OCR 流程中其余步骤也十分重要。(欢迎参考咱们系列文章里的《OCR 数据处理》


接下来咱们还会为你们继续介绍深度学习 OCR 的相关细节,敬请期待!


参考书籍/文章:

1.综述部分:

《深度实践OCR——基于深度学习的文字识别》,刘树春,贺盼,马建奇,王佳军等著

https://zhuanlan.zhihu.com/p/52335619


2.CTPN:

https://arxiv.org/pdf/1609.03605.pdf(论文原文:Detecting Text in Natural Image with Connectionist Text Proposal Network)

https://my.oschina.net/u/876354/blog/3047851

https://zhuanlan.zhihu.com/p/34757009

https://www.jianshu.com/p/109231be4a24


3.PixelLink

https://arxiv.org/pdf/1801.01315.pdf(论文原文:PixelLink: Detecting Scene Text via Instance Segmentation)

https://my.oschina.net/u/876354/blog/3056318

https://zhuanlan.zhihu.com/p/38171172

https://blog.csdn.net/qq_14845119/article/details/80953555


4.CRNN

https://arxiv.org/pdf/1507.05717v1.pdf(论文原文:An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition)

https://zhuanlan.zhihu.com/p/43534801

https://blog.csdn.net/imPlock/article/details/93143874


  


猜你喜欢  

Vue3 组合式 API:更灵活的组合组件逻辑
经过双叉十字模型判断股票买入点位 | 金融科技之量化策略研究课题报告(上)
基于时间序列 ARIMA 模型预测股票收盘价 | 金融科技之量化策略研究课题报告(下)
一个输入框你要作一周?



以为不错,点个在看

本文分享自微信公众号 - 金科优源汇(jkyyh2020)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索