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

本文涉及的产品
票证核验,票证核验 50次/账号
通用文字识别,通用文字识别 200次/月
文档理解,结构化解析 100页
简介: 涉及到了图像中位置信息的选择,很容易联想到之前用于目标检测的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 原创文章,仅供个人学习使用,未经允许,不得转载,不能用于商业目的。 
相关文章
|
1月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于MSER和HOG特征提取的SVM交通标志检测和识别算法matlab仿真
### 算法简介 1. **算法运行效果图预览**:展示算法效果,完整程序运行后无水印。 2. **算法运行软件版本**:Matlab 2017b。 3. **部分核心程序**:完整版代码包含中文注释及操作步骤视频。 4. **算法理论概述**: - **MSER**:用于检测显著区域,提取图像中稳定区域,适用于光照变化下的交通标志检测。 - **HOG特征提取**:通过计算图像小区域的梯度直方图捕捉局部纹理信息,用于物体检测。 - **SVM**:寻找最大化间隔的超平面以分类样本。 整个算法流程图见下图。
|
15天前
|
机器学习/深度学习 JSON 算法
二叉树遍历算法的应用场景有哪些?
【10月更文挑战第29天】二叉树遍历算法作为一种基础而重要的算法,在许多领域都有着不可或缺的应用,它为解决各种复杂的问题提供了有效的手段和思路。随着计算机科学的不断发展,二叉树遍历算法也在不断地被优化和扩展,以适应新的应用场景和需求。
24 0
|
1月前
|
存储 算法 安全
SM2算法的应用场景有哪些?
【10月更文挑战第5天】SM2算法的应用场景有哪些?
72 1
|
18天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA-PSO-SVM算法的混沌背景下微弱信号检测matlab仿真
本项目基于MATLAB 2022a,展示了SVM、PSO、GA-PSO-SVM在混沌背景下微弱信号检测中的性能对比。核心程序包含详细中文注释和操作步骤视频。GA-PSO-SVM算法通过遗传算法和粒子群优化算法优化SVM参数,提高信号检测的准确性和鲁棒性,尤其适用于低信噪比环境。
|
24天前
|
存储 JSON 算法
TDengine 检测数据最佳压缩算法工具,助你一键找出最优压缩方案
在使用 TDengine 存储时序数据时,压缩数据以节省磁盘空间是至关重要的。TDengine 支持用户根据自身数据特性灵活指定压缩算法,从而实现更高效的存储。然而,如何选择最合适的压缩算法,才能最大限度地降低存储开销?为了解决这一问题,我们特别推出了一个实用工具,帮助用户快速判断并选择最适合其数据特征的压缩算法。
30 0
|
27天前
|
监控 算法 数据挖掘
HyperLogLog算法有哪些应用场景呢
【10月更文挑战第19天】HyperLogLog算法有哪些应用场景呢
15 0
|
1月前
|
算法 计算机视觉 Python
圆形检测算法-基于颜色和形状(opencv)
该代码实现了一个圆检测算法,用于识别视频中的红色、白色和蓝色圆形。通过将图像从RGB转换为HSV颜色空间,并设置对应颜色的阈值范围,提取出目标颜色的区域。接着对这些区域进行轮廓提取和面积筛选,使用霍夫圆变换检测圆形,并在原图上绘制检测结果。
70 0
|
1月前
|
机器学习/深度学习 自然语言处理 算法
神经网络算法以及应用场景和基本语法
神经网络算法以及应用场景和基本语法
43 0
|
27天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
12天前
|
算法 数据挖掘 数据安全/隐私保护
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。