论文研读笔记(八)—CRNN

论文研读系列汇总:

1.AlexNet论文研读

2.VGG论文研读

3.GoogLeNet论文研读

4.Faster RCNN论文研读

5.ResNet 论文研读

6.SENet 论文研读

7.CTPN 论文研读

8.CRNN 论文研读

 

基本信息:

题目:

An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition

作者:

Baoguang ShiXiang BaiCong Yao

原文地址:

https://arxiv.org/pdf/1507.05717.pdf

 

论文研读:

摘要:

提出了一个将特征提取,序列建模,转录整合到一起的统一框架。它有以下四个特点:端到端训练的,能处理任意长度的序列,不限定于预定义的词典,应用场景广泛,甚至在基于图像的音乐配乐识别任务中表现良好。

介绍:

paper的主要贡献是一个专门为识别图片中的序列化对象而设计的模型,被命名为“CRNN ( Convolutional Recurrent Neural Network)”,因为它是一个DCNN和RNN的组合。这个模型的特点有:

1.可以直接从序列标签学习,不用给每个字符打标签,只需要给一个图片打一个序列标签,例如:图片中是“abc123”,标签即是“abc123”,不用给每个字符单独打标签。

2.利用CNN提取的图片特征

3.利用RNN训练的输入的特征序列,输出的是一个序列标签

4.对要训练的图片没有长度限制,但是要将图片的高度归一化。

5.参数少

6.虽然结合了CNN和RNN,但最后用一个loss函数(CTC LOSS)联合训练(不联合的训练,见ResNet),实现了端到端的训练。

 

提出的网络架构:

论文研读笔记(八)—CRNN

如上图所示,主要是有三个模块分别为:

  1. 卷积模块:作者使用的是VGG模型为基础的改良版,(去掉了全连接层)右边的两个是特征图(具体配置见下文的图)
  2. 循环网络模块: 由特征序列提取和两个BLSTM训练两个步骤组成,特征序列提取见下面的解释(B就是双向的,能提取两个方向的模型信息,不仅是一个。如图中所示,这里的BLSTM有两层,两层能获得更高层次的序列特征。因为RNN的模型都很难训练,所以两层就能叫深度模型)
  3. 最后是一个转录模块,转录模块主要是一个CTC层,下文会介绍。(主要的功能是用来训练网络的损失函数)

 

特征序列提取:(feature sequence extraction)

特征序列提取在上图中循环网络模块的第一步里。做法是将图像缩放到相同的高度。然后将特征序列的每一个特征向量(特征向量就是一个特征图上一列或一行的特征,即一维。而特征序列就是相对于特征向量而言,有顺序的叠加特征向量组成的二维结构,是特征图的另一种表达方式)在特征图上按列从左到右生成。这意味着第i个特征向量是所有特征图第i里的连接,在我们的设置中每列的宽度固定为单个像素。

(这样的做法能使得特征序列是有顺序的,能更好的进行下面的循环网络操作)

论文研读笔记(八)—CRNN

 

转录层:

(从论文原文里美怎么看懂,但是看了一些别人解读的博客,大致有点了解,主要是CTC层,这个层并非作者创新的,而是源于另一篇论文,想具体了解的可以search一下)

转录是将LSTM网络预测的特征序列的所有可能的结果进行整合,转换为最终结果的过程。论文中实在双向LSTM网络的最后连接上一个CTC模型,做到端对端的识别。

CTC模型(Connectionist temporal classification)联接时间分类,CTC可以执行端到端的训练,不要求训练数据对齐和一一标注,直接输出不定长的序列结果。

CTC一般连接在RNN网络的最后一层用于序列学习和训练。对于一段长度为T的序列来说,每个样本点t(t远大于T)在RNN网络的最后一层都会输出一个softmax向量,表示该样本点的预测概率,所有样本点的这些概率传输给CTC模型后,输出最可能的标签,再经过去除空格(blank)和去重操作,就可以得到最终的序列标签。

 

实现的具体网络细节:

论文研读笔记(八)—CRNN

网络结构图从底向上看,先是基于VGG的改良版,然后将特征序列输入BLSTM(BLSTM有两层),最后进行转录。(图中采用1*2的最大池化,能产生宽度较大的特征图,从而有更长的特征序列。另一方面由于BLSTM难以训练,作者通过批标准化层,发现这技术对训练深度网路非常有用。至于文本检测和识别为什么为什么要在宽度上做文章?可以参考一下文本方面的另一篇论文CTPN

 

总结:

CRNN是一个通用的框架,在汉字识别等领域也有良好的性能

 

 

 

 

 

 

参考链接:

https://blog.csdn.net/jiang_ming_/article/details/82714444

https://blog.csdn.net/u013063099/article/details/82863753