场景文本检测—CTPN算法介绍

本文涉及的产品
票据凭证识别,票据凭证识别 200次/月
车辆物流识别,车辆物流识别 200次/月
自定义KV模板,自定义KV模板 500次/账号
简介: 涉及到了图像中位置信息的选择,很容易联想到之前用于目标检测的R-CNN的模型。毕竟CNN(Convolutional Neural Network)在这两年的图像处理上一枝独秀已经“深入人心”。那么把“字符位置”标记成一类,然后直接放入CNN模型处理岂不美哉?不过,现实总不会这么美好,文字的多种情况、字体,以及大面积的文字信息的位置,都对我们直接用R-CNN的方法产生了干扰,让结果产生严重的偏差。
SIGAI特约作者:沪东三哥
原创声明:本文为SIGAI 原创文章,仅供个人学习使用,未经允许,不得转载,不能用于商业目的。

何为OCR ?

OCR的全称为“Optical Character Recognition” 中文翻译为光学字符识别。它是利用光学技术和计算机技术把印在或写在纸上的文字读取出来,并转换成一种计算机和人都能够理解的形式的过程。

先来看一个简单的OCR的流程:

第一步,通过图像信息采集(一般就是相机),得到包含了待识别字符的图像,分析结构。

第二步,运用阈值操作等一些图像处理的方法对待测对象进行去噪和矫正。

第三步,因为文本信息的特殊性质,需要进行行列分割,对单个字符,或者是连续几个字符进行检测。

第四步,将分割后的字符图像导入识别模型中进行处理,进而得到原图中的字符信息。


场景文本识别

对于印刷字体的OCR技术如今已经相当成熟了。腾讯TIM的手机版就自带有图像文字提取的功能,微软的Office Lens的各种扫描功能呢等等,虽然不能说是百分之百正确,但是95%以上的印刷字体识别基本都是可以做到了。所以现在技术上关注的更多的是“场景文本识别”,也就是复杂环境下的字符信息的识别,如下面几张图所示。

对于复杂环境中的字符的识别,主要包括文字检测和文字识别两个步骤,这里介绍的CTPN(Detecting Text in
Natural Image with Connectionist Text Proposal Network)方法就是在场景中提取文字的一个效果较好的算法,能将自然环境中的文本信息位置加以检测。

涉及到了图像中位置信息的选择,很容易联想到之前用于目标检测的R-CNN的模型。毕竟CNN(Convolutional Neural Network)在这两年的图像处理上一枝独秀已经“深入人心”。那么把“字符位置”标记成一类,然后直接放入CNN模型处理岂不美哉?不过,现实总不会这么美好,文字的多种情况、字体,以及大面积的文字信息的位置,都对我们直接用R-CNN的方法产生了干扰,让结果产生严重的偏差。应对于此,一类结合CNN优势,专门应对环境文本信息的模型也就因运而生了,CTPN正是其中的佼佼者。

CTPN算法概述

言归正传,那么算法上文本位置的准确界定是怎么做到的呢?

首先,明确待检测的目标的特点,无论是图3还是图4的样例,文字信息的特点在于它是一个序列,是由“字符、字符的一部分、多字符”组成的一个sequence。所以这个目标显然不像我们一般的目标检测中的对象那样是独立和封闭的,所以不妨使用前后关联的序列的方法,比如说RNN (Recurrent Neural Networks),利用前后文的信息来进行文本位置的测定。

另外很重要的一点是,作者认为预测文本水平方向的位置比预测竖直方向上的位置要困难得多。所以检测的过程中
不妨引入一个类似数学上“微分”的思想,如下图5所示,先检测一个个小的、固定宽度的文本段。在后处理部分再将这些小文本段连接起来,得到文本行。

图5 “微分”示意图

有了CNN和RNN结合,以及数学上”微分”思想处理文字段这样的奇思妙想之后,接下来就看作者是如何将其实现的了。具体流程图如下,然后分别进行介绍。

过程的图像如下图6:

图6算法流程示意图

具体的步骤为:

1. 首先,用VGG16的前5个Conv stage得到feature map,大小为W*H*C

2. 用3*3的滑动窗口在前一步得到的feature map上提取特征,利用这些特征来对多个anchor进行预测,这里anchor定义与之前faster-rcnn中的定义相同,也就是帮我们去界定出目标待选区域。

3. 将上一步得到的特征输入到一个双向的LSTM中,输出W*256的结果,再将这个结果输入到一个512维的全连接层(FC).

4. 最后通过分类或回归得到的输出主要分为三部分,根据上图从上到下依次为2k vertical coordinates:表示选择框的高度和中心的y轴的坐标;2k scores:表示的是k个anchor的类别信息,说明其是否为字符;k side-refinement表示的是选择框的水平偏移量。本文实验中anchor的水平宽度都是16个像素不变,也就是说我们微分的最小选择框的单位是 “16像素”。

5. 用文本构造的算法,将我们得到的细长的矩形(如下图7),然后将其合并成文本的序列框。

图7 回归的长矩形框


核心方法

具体的流程已经介绍完毕了,而这些流程中有很多作者提出的实现方法需要特别关注,名称(按照论文)分别是:Detecting Text in Fine-scale proposals(选择出anchor,也就是待选的”矩形微分框“)、Recurrent Connectionist Text Proposals(双向LSTM,利用上下文本信息的RNN过程)、Side-refinement(文本构造,将多个proposal合并成直线)。

Detecting Text in Fine-scale proposals

和faster-rcnn中的RPN的主要区别在于引入了”微分“思想,将我们的的候选区域切成长条形的框来进行处理。k个anchor(也就是k个待选的长条预选区域)的设置如下:宽度都是16像素,高度从11~273像素变化(每次乘以1.4),也就是说k的值设定为10。最后结果对比如下:

图8 Fine-scale text的对比

本文使用的方法回归出来的y轴坐标结果如下:

其中标记*的表示为真值;v = {vc,vh} 表示一个预测的框选位置,因为长度固定(之前确定的16像素),vc表示的是该预选框在y轴上的中心位置,vh表示这个预选框的高度。

Recurrent Connectionist Text Proposals:

其方法对应的就是之前流程中的”双向LSTM“对应的细节,将前后文的信息用到文本位置的定位当中。其中BLSTM有128个隐含层。输入为3*3*C滑动窗口的feature,输出为每个窗口所对应的256维的特征。简要表示如下:

图9 输入输出示意图

下面是使用RNN和不使用RNN的效果对比图。

图10 RNN效果对比图

Side-refinement:

先进行文本位置的构造,Side-refinement是最后进行优化的方法。对定位出来的“小矩形框”加以合并和归纳,可以得到需要的文本信息的位置信息。我们最后保留的小矩形框是需要score>0.7的情况,也就是将下图中的红色小矩形框合并,最后生成黄色的大矩形框。

图11 小区域分割示意图

主要的思路为:每两个相近的proposal(也就是候选区)组成一个pair,合并不同的pair直到无法再合并为止。而判断两个proposal,Bi和Bj可以组成一个pair的条件为Bi—>Bj,同时Bj—>Bi;该符号的判定条件见下图。

图12 可合并区域判定示意图

因为这里规定了回归出来的box的宽度是16个像素,所以会导致一些位置上的误差,这时候就是Side-refinement发挥作用的时候
了。定义的式子如下:

其中带*表示为GroundTruth.。 x_{side} 表示回归出来的左边界或者右边界, c_{x}^{a} 表示anchor中心的横坐标, w^{a} 是固定的宽度16像素。所以O的定义相当于是一个缩放的比例,帮助我们去拉伸回归之后的box的结果,从而更好地符合实际文本的位置。对比图如下,红色框是使用了side-refinement的,而黄色框是没有使用side-refinement方法的结果:

图13 Side-refinement结果对比

纵观整个流程,该方法的最大两点也是在于将RNN引入了文本检测之中,同时将待检测的结果利用“微分”的思路来减少误差,使用固定宽度的anchor来检测分割成许多块的proposal.最后合并之后的序列就是我们需要检测的文本区域。CNN和RNN的高效无缝衔接极大提升了精度,实验对比如下表所示:

表1 实验结果与其他方法的对比


说明
1. 论文:  arxiv.org/pdf/1609.0360 
2. 代码:  github.com/eragonruan/t
(搬运,实测运行可靠,是有人根据faster-r-cnn的tensorflow版本进行 改写的,具体的训练和测试请参阅git上的readme) 
3. 除流程图外其他配图和表格信息均来自原文 “Detecting Text in Natural Image with Connectionist Text Proposal Network”


参考文献

[1] Ren, S., He,K., Girshick, R., & Sun, J. (2015). Faster R-CNN: towards real-time object
detection with region proposal networks. International Conference onNeural Information Processing Systems (Vol.39, pp.91-99). MIT Press.

[2] sTian,Z., Huang, W., He, T., He, P., & Qiao, Y. (2016). Detecting Text in Natural Image with Connectionist Text Proposal Network. European Conference on Computer Vision (pp.56-72). Springer, Cham.

[3] Olah C(2015). Understanding LSTM networks.blog, colah.github.io/posts/2, August 27, 2015.


推荐文章

[1] 机器学习-波澜壮阔40年 SIGAI2018.4.13.

[2] 学好机器学习需要哪些数学知识?SIGAI 2018.4.17.

[3] 人脸识别算法演化史 SIGAI2018.4.20.

[4] 基于深度学习的目标检测算法综述 SIGAI2018.4.24.

[5] 卷积神经网络为什么能够称霸计算机视觉领域? SIGAI2018.4.26.

[6] 用一张图理解SVM的脉络 SIGAI2018.4.28.

[7] 人脸检测算法综述 SIGAI2018.5.3.

[8] 理解神经网络的激活函数 SIGAI2018.5.5.

[9] 深度卷积神经网络演化历史及结构改进脉络-40页长文全面解读 SIGAI2018.5.8.

[10] 理解梯度下降法 SIGAI2018.5.11.

[11] 循环神经网络综述—语音识别与自然语言处理的利器 SIGAI2018.5.15

[12] 理解凸优化 SIGAI2018.5.18

[13]【实验】理解SVM的核函数和参数 SIGAI 2018.5.22

[14] 【SIGAI综述】行人检测算法 SIGAI2018.5.25

[15] 机器学习在自动驾驶中的应用—以百度阿波罗平台为例(上) SIGAI2018.5.29

[16] 理解牛顿法 SIGAI2018.5.31

[17]【群话题精华】5月集锦—机器学习和深度学习中一些值得思考的问题 SIGAI 2018.6.1

[18] 大话Adaboost算法 SIGAI2018.6.2

[ 19] FlowNet到FlowNet2.0:基于卷积神经网络的光流预测算法 SIGAI2018.6.4

[20] 理解主成分分析(PCA) SIGAI2018.6.6

[21] 人体骨骼关键点检测综述 SIGAI2018.6.8

[22] 理解决策树 SIGAI2018.6.11

[23] 用一句话总结常用的机器学习算法 SIGAI2018.6.13

[24] 目标检测算法之YOLO SIGAI2018.6.15

[25] 理解过拟合 SIGAI 2018.6.18

[26] 理解计算:从√2到AlphaGo ——第1季 从√2谈起 SIGAI2018.6.20


原创声明:本文为SIGAI 原创文章,仅供个人学习使用,未经允许,不得转载,不能用于商业目的。 
相关文章
|
17天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于MSER和HOG特征提取的SVM交通标志检测和识别算法matlab仿真
### 算法简介 1. **算法运行效果图预览**:展示算法效果,完整程序运行后无水印。 2. **算法运行软件版本**:Matlab 2017b。 3. **部分核心程序**:完整版代码包含中文注释及操作步骤视频。 4. **算法理论概述**: - **MSER**:用于检测显著区域,提取图像中稳定区域,适用于光照变化下的交通标志检测。 - **HOG特征提取**:通过计算图像小区域的梯度直方图捕捉局部纹理信息,用于物体检测。 - **SVM**:寻找最大化间隔的超平面以分类样本。 整个算法流程图见下图。
|
12天前
|
存储 算法 安全
SM2算法的应用场景有哪些?
【10月更文挑战第5天】SM2算法的应用场景有哪些?
28 1
|
25天前
|
算法 安全
分别使用OVP-UVP和OFP-UFP算法以及AFD检测算法实现反孤岛检测simulink建模与仿真
本课题通过Simulink建模与仿真,实现OVP-UVP、OFP-UFP算法及AFD检测算法的反孤岛检测。OVP-UVP基于电压幅值变化,OFP-UFP基于频率变化,而AFD则通过注入频率偏移信号来检测孤岛效应,确保电力系统安全稳定运行。系统使用MATLAB 2013b进行建模与仿真验证。
|
9天前
|
算法 计算机视觉 Python
圆形检测算法-基于颜色和形状(opencv)
该代码实现了一个圆检测算法,用于识别视频中的红色、白色和蓝色圆形。通过将图像从RGB转换为HSV颜色空间,并设置对应颜色的阈值范围,提取出目标颜色的区域。接着对这些区域进行轮廓提取和面积筛选,使用霍夫圆变换检测圆形,并在原图上绘制检测结果。
14 0
|
1月前
|
算法 计算机视觉 Python
Python并查集大揭秘:让你在算法界呼风唤雨,秒杀一切复杂场景!
在编程与算法的广袤天地中,总有一些工具如同神兵利器,能够助你一臂之力,在复杂的问题前游刃有余。今天,我们就来深入探讨这样一件神器——Python并查集(Union-Find),看看它是如何让你在算法界呼风唤雨,轻松应对各种复杂场景的。
51 2
|
14天前
|
机器学习/深度学习 自然语言处理 算法
神经网络算法以及应用场景和基本语法
神经网络算法以及应用场景和基本语法
24 0
|
1月前
|
算法 调度
贪心算法基本概念与应用场景
尽管贪心算法在许多问题中都非常有效,但它并不总是会产生最优解。因此,在应用贪心算法前,重要的是先分析问题是否适合采用贪心策略。一些问题可能需要通过动态规划或回溯等其他算法来解决,以找到确切的全局最优解。
68 1
|
1月前
|
机器学习/深度学习 存储 人工智能
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
使用Python作为开发语言,基于文本数据集(一个积极的xls文本格式和一个消极的xls文本格式文件),使用Word2vec对文本进行处理。通过支持向量机SVM算法训练情绪分类模型。实现对文本消极情感和文本积极情感的识别。并基于Django框架开发网页平台实现对用户的可视化操作和数据存储。
37 0
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
WK
|
1月前
|
机器学习/深度学习 算法 数据挖掘
PSO算法的应用场景有哪些
粒子群优化算法(PSO)因其实现简单、高效灵活,在众多领域广泛应用。其主要场景包括:神经网络训练、工程设计、电力系统经济调度与配电网络重构、数据挖掘中的聚类与分类、控制工程中的参数整定、机器人路径规划、图像处理、生物信息学及物流配送和交通管理等。PSO能处理复杂优化问题,快速找到全局最优解或近似解,展现出强大的应用潜力。
WK
43 1
|
2天前
|
存储
基于遗传算法的智能天线最佳阵列因子计算matlab仿真
本课题探讨基于遗传算法优化智能天线阵列因子,以提升无线通信系统性能,包括信号质量、干扰抑制及定位精度。通过MATLAB2022a实现的核心程序,展示了遗传算法在寻找最优阵列因子上的应用,显著改善了天线接收功率。