序列识别--CRNN论文阅读笔记
CRNN用于序列识别的网络模型,例如:英文单词,乐谱符号等.论文原题:An End-to-End Trainable Neural Network forImage-based Sequence Recognition and Its Application to Scene Text Recognition
- 作者:Xiang Bai(个人主页:http://mc.eistar.net/~xbai/)
- 论文的下载地址:https://arxiv.org/pdf/1507.05717v1.pdf
- 代码的下载地址:http://mc.eistar.net/~xbai/CRNN/crnn_code.zip
- 相关开源项目:https://github.com/senlinuc/caffe_ocr
- 序列文字图片训练集制作相关项目:https://github.com/huiyang865/Chinese_OCR_synthetic_data
- 论文翻译:http://www.jianshu.com/p/9a3114e91c34
论文思路和方法
- 问题范围: 单词识别
- CNN层:使用标准CNN提取图像特征,利用Map-to-Sequence表示成特征向量;
- RNN层:使用双向LSTM识别特征向量,得到每列特征的概率分布;
- Transcription层:利用CTC和前向后向算法求解最优的label序列;
亮点和创新点
- 端到端可训练(把CNN和RNN联合训练)
- 任意长度的输入(图像宽度任意,单词长度任意)
- 训练集无需有字符的标定
- 带字典和不带字典的库(样本)都可以使用
- 性能好,而且模型小(参数少)
网络架构分析
CRNN网络架构图CRNN的网络架构由三部分组成,包括卷积层,循环层和转录层. 在CRNN的底部,卷积层自动从每个输入图像中提取特征序列。在卷积网络之上,构建了一个循环网络,用于对卷积层输出的特征序列的每一帧进行预测。采用CRNN顶部的转录层将循环层的每帧预测转化为标签序列。虽然CRNN由不同类型的网络架构(如CNN和RNN)组成,但可以通过一个损失函数进行联合训练。
CNN图像字符序列特征提取
在CRNN模型中,通过采用标准CNN模型(去除全连接层)中的卷积层和最大池化层来构造卷积层的组件。这样的组件用于从输入图像中提取序列特征表示。在进入网络之前,所有的图像需要缩放到相同的高度。然后从卷积层组件产生的特征图中提取特征向量序列,这些特征向量序列作为循环层的输入。具体地,特征序列的每一个特征向量在特征图上按列从左到右生成。这意味着第i个特征向量是所有特征图第i列的连接。在我们的设置中每列的宽度固定为单个像素。
由于卷积层,最大池化层和元素激活函数在局部区域上执行,因此它们是平移不变的。特征图的每列对应于原始图像的一个矩形区域(称为感受野),并且这些矩形区域与特征图上从左到右的相应列具有相同的顺序。如图2所示,特征序列中的每个向量关联一个感受野,并且可以被认为是该区域的图像描述符。
CNN提取的序列特征示意图
RNN+LSTM序列标注
一个深度双向循环神经网络是建立在卷积层的顶部,作为循环层。循环层预测特征序列$x = x_1,...,x_T$中每一帧$x_t$的标签分布$y_t$。循环层的优点是三重的:
- RNN具有很强的捕获序列内上下文信息的能力。对于基于图像的序列识别使用上下文提示比独立处理每个符号更稳定且更有帮助。此外,一些模糊的字符在观察其上下文时更容易区分.
- RNN可以将误差差值反向传播到其输入,即卷积层,从而允许我们在统一的网络中共同训练循环层和卷积层。
- RNN能够从头到尾对任意长度的序列进行操作.
CRNN文章中使用了LSTM记录序列信息,LSTM相比传统RNN结构有更强的序列记忆能力. 文中使用双向LSTM结构,序列学习时不仅考虑了前面序列信息,而且考虑了后面的序列信息.
转录层生成标签序列
转录是将RNN所做的每帧预测转换成标签序列的过程。数学上,转录是根据每帧预测找到具有最高概率的标签序列。在实践中,存在两种转录模式,即无词典转录和基于词典的转录。词典是一组标签序列,预测受拼写检查字典约束。在无词典模式中,预测时没有任何词典。在基于词典的模式中,通过选择具有最高概率的标签序列进行预测。
文中主要采用CTC模型实现序列标签转录.CTC按照RNN的每帧输出预测相应的标签,其忽视了标签所在的具体位置. 因此,CTC预测序列标签避免了标注单个字符具体位置的工作.