文档章节

大话文本识别经典模型:CRNN

雪饼
 雪饼
发布于 05/10 09:39
字数 1973
阅读 742
收藏 14

在前一篇文章中(详见本博客文章:大话文本检测经典模型 CTPN),介绍了文字识别在现实生活中的广泛应用,以及文字识别的简单流程:

其中“文本检测”、“文本识别”是其中两个关键环节,“文本检测”已经在前一篇文章中介绍了详细的介绍,本文主要介绍“文本识别”的经典模型CRNN及其原理。

 

在介绍CRNN之前,先来梳理一下要实现“文本识别”的模型,需要具备哪些要素:

(1)首先是要读取输入的图像,提取图像特征,因此,需要有个卷积层用于读取图像和提取特征。具体原理可详见本公众号的文章:白话卷积神经网络(CNN);

(2)由于文本序列是不定长的,因此在模型中需要引入RNN(循环神经网络),一般是使用双向LSTM来处理不定长序列预测的问题。具体原理可详见本公众号的文章:白话循环神经网络(RNN);

(3)为了提升模型的适用性,最好不要要求对输入字符进行分割,直接可进行端到端的训练,这样可减少大量的分割标注工作,这时就要引入CTC模型(Connectionist temporal classification, 联接时间分类),来解决样本的分割对齐的问题。

(4)最后根据一定的规则,对模型输出结果进行纠正处理,输出正确结果。

以上就是“文本识别”模型的几个必须具备的要素。

接下来要介绍的CRNN模型,也是基本由这几部分组成的。

 

1、什么是CRNN

CRNN(Convolutional Recurrent Neural Network,卷积循环神经网络),是华中科技大学在发表的论文《An End-to-End Trainable Neural Network for Image-based Sequence Recognition and ItsApplication to Scene Text Recognition》提出的一个识别文本的方法,该模型主要用于解决基于图像的序列识别问题,特别是场景文字识别问题。

CRNN的主要特点是:

(1)可以进行端到端的训练;

(2)不需要对样本数据进行字符分割,可识别任意长度的文本序列

(3)模型速度快、性能好,并且模型很小(参数少)

 

2、CRNN模型结构

CRNN模型的结构如下:

正如前面梳理的“文本识别”模型必须具备的要素,CRNN模型主要由以下三部分组成:

(1)卷积层:从输入图像中提取出特征序列;

(2)循环层:预测从卷积层获取的特征序列的标签分布;

(3)转录层:把从循环层获取的标签分布通过去重、整合等操作转换成最终的识别结果。

 

下面将展开对这三个层进行介绍:

(1)卷积层

① 预处理

CRNN对输入图像先做了缩放处理,把所有输入图像缩放到相同高度,默认是32,宽度可任意长。

② 卷积运算

由标准的CNN模型中的卷积层和最大池化层组成,结构类似于VGG,如下图:

从上图可以看出,卷积层是由一系列的卷积、最大池化、批量归一化等操作组成。

③ 提取序列特征

提取的特征序列中的向量是在特征图上从左到右按照顺序生成的,用于作为循环层的输入,每个特征向量表示了图像上一定宽度上的特征,默认的宽度是1,也就是单个像素。由于CRNN已将输入图像缩放到同样高度了,因此只需按照一定的宽度提取特征即可。如下图所示:

(2)循环层

循环层由一个双向LSTM循环神经网络构成,预测特征序列中的每一个特征向量的标签分布。

由于LSTM需要有个时间维度,在本模型中把序列的 width 当作LSTM 的时间 time steps。

其中,“Map-to-Sequence”自定义网络层主要是做循环层误差反馈,与特征序列的转换,作为卷积层和循环层之间连接的桥梁,从而将误差从循环层反馈到卷积层。

 

(3)转录层

转录层是将LSTM网络预测的特征序列的结果进行整合,转换为最终输出的结果。

在CRNN模型中双向LSTM网络层的最后连接上一个CTC模型,从而做到了端对端的识别。所谓CTC模型(Connectionist Temporal Classification,联接时间分类),主要用于解决输入数据与给定标签的对齐问题,可用于执行端到端的训练,输出不定长的序列结果。

由于输入的自然场景的文字图像,由于字符间隔、图像变形等问题,导致同个文字有不同的表现形式,但实际上都是同一个词,如下图:

而引入CTC就是主要解决这个问题,通过CTC模型训练后,对结果中去掉间隔字符、去掉重复字符(如果同个字符连续出现,则表示只有1个字符,如果中间有间隔字符,则表示该字符出现多次),如下图所示:

 

以上就是文本识别模型CRNN的介绍,该模型既可用于识别英文、数字,也可用于识别中文。一般是跟CTPN结合一起使用,使用CTPN进行文字的检测,使用CRNN进行文字的识别。

本人使用CTPN+CRNN对中文识别出来的效果如下(隐去私密信息):

 

墙裂建议

2015年,Baoguang Shi 等人发表了关于CRNN的经典论文《 An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition 》,在论文中详细介绍了CRNN的思想和技术原理,建议阅读该论文以进一步了解该模型。

关注本人公众号“大数据与人工智能Lab”(BigdataAILab),然后回复“论文”关键字可在线阅读经典论文的内容

 

推荐相关阅读

© 著作权归作者所有

雪饼

雪饼

粉丝 412
博文 61
码字总数 134328
作品 0
广州
私信 提问
【AI实战】手把手教你文字识别(识别篇:LSTM+CTC, CRNN, chineseocr方法)

文字识别是AI的一个重要应用场景,文字识别过程一般由图像输入、预处理、文本检测、文本识别、结果输出等环节组成。 其中,文本检测、文本识别是最核心的环节。文本检测方面,在前面的文章中...

雪饼
07/07
5.5K
8
【图解AI:动图】各种类型的卷积,你认全了吗?

卷积(convolution)是深度学习中非常有用的计算操作,主要用于提取图像的特征。在近几年来深度学习快速发展的过程中,卷积从标准卷积演变出了反卷积、可分离卷积、分组卷积等各种类型,以适...

雪饼
06/20
379
0
【AI实战】手把手教你文字识别(检测篇二:AdvancedEAST、PixelLink方法)

自然场景下的文字检测是深度学习的重要应用,在之前的文章中已经介绍过了在简单场景、复杂场景下的文字检测方法,包括MSER+NMS、CTPN、SegLink、EAST等方法,详见文章: 【AI实战】手把手教你...

雪饼
06/24
3.1K
8
【AI实战】手把手教你深度学习文字识别(文字检测篇:基于MSER, CTPN, SegLink, EAST等方法)

文字检测是文字识别过程中的一个非常重要的环节,文字检测的主要目标是将图片中的文字区域位置检测出来,以便于进行后面的文字识别,只有找到了文本所在区域,才能对其内容进行识别。 文字检...

雪饼
05/27
3.6K
6
CRNN论文翻译——中文版

文章作者:Tyan 博客:noahsnail.com | CSDN | 简书 An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition 摘要 ......

Quincuntial
2017/08/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

高防CDN的出现是为了解决网站的哪些问题?

高防CDN是为了更好的服务网络而出现的,是通过高防DNS来实现的。高防CDN是通过智能化的系统判断来路,再反馈给用户,可以减轻用户使用过程的复杂程度。通过智能DNS解析,能让网站访问者连接到...

云漫网络Ruan
49分钟前
6
0
聊聊Tomcat中的连接器(Connector)

上期回顾 上一篇文章《Tomcat在SpringBoot中是如何启动的》从main方法启动说起,窥探了SpringBoot是如何启动Tomcat的,在分析Tomcat中我们重点提到了,Tomcat主要包括2个组件,连接器(Conne...

木木匠
今天
4
0
OSChina 周一乱弹 —— 熟悉的味道,难道这就是恋爱的感觉

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @xiaoshiyue :好久没分享歌了分享张碧晨的单曲《今后我与自己流浪》 《今后我与自己流浪》- 张碧晨 手机党少年们想听歌,请使劲儿戳(这里)...

小小编辑
今天
2.1K
20
SpringBoot中 集成 redisTemplate 对 Redis 的操作(二)

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二) List 类型的操作 1、 向列表左侧添加数据 Long leftPush = redisTemplate.opsForList().leftPush("name", name); 2、 向列表右......

TcWong
今天
37
0
排序––快速排序(二)

根据排序––快速排序(一)的描述,现准备写一个快速排序的主体框架: 1、首先需要设置一个枢轴元素即setPivot(int i); 2、然后需要与枢轴元素进行比较即int comparePivot(int j); 3、最后...

FAT_mt
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部