CRNN

1) 端到端可训练(把CNN和RNN联合训练)

2) 任意长度的输入(图像宽度任意,单词长度任意)

3) 训练集无需有字符的标定

4) 带字典和不带字典的库(样本)都可以使用

5) 性能好,而且模型小(参数少)

网络结构



架构包括三部分:
1) 卷积层,从输入图像中提取特征序列;
2) 循环层,预测每一帧的标签分布;
3) 转录层,将每一帧的预测变为最终的标签序列。


在CRNN的底部,卷积层自动从每个输入图像中提取特征序列。在卷积网络之上,构建了一个循环网络,用于对卷积层输出的特征序列的每一帧进行预测。采用CRNN顶部的转录层将循环层的每帧预测转化为标签序列。
虽然CRNN由不同类型的网络架构(如CNN和RNN)组成,但可以通过一个损失函数进行联合训练。

2.1. 特征序列提取

在CRNN模型中,通过采用标准CNN模型(去除全连接层)中的卷积层和最大池化层来构造卷积层的组件。这样的组件用于从输入图像中提取序列特征表示。
在进入网络之前,所有的图像需要缩放到相同的高度。然后从卷积层组件产生的特征图中提取特征向量序列,这些特征向量序列作为循环层的输入。
具体地,特征序列的每一个特征向量在特征图上按列从左到右生成。这意味着第i个特征向量是所有特征图第i列的连接。在我们的设置中每列的宽度固定为单个像素。

由于卷积层,最大池化层和元素激活函数在局部区域上执行,因此它们是平移不变的。因此,
特征图的每列对应于原始图像的一个矩形区域(称为感受野),并且这些矩形区域与特征图上从左到右的相应列具有相同的顺序。
如图2所示,特征序列中的每个向量关联一个感受野,并且可以被认为是该区域的图像描述符。


2.2. 序列标注

一个深度双向循环神经网络是建立在卷积层的顶部,作为循环层。循环层预测特征序列x=x1,…,xT中每一帧xt的标签分布yt。循环层的优点是三重的。首先,
RNN具有很强的捕获序列内上下文信息的能力。
对于基于图像的序列识别使用上下文提示比独立处理每个符号更稳定且更有帮助。以场景文本识别为例,宽字符可能需要一些连续的帧来完全描述(参见图2)。此外,一些模糊的字符在观察其上下文时更容易区分,例如,通过对比字符高度更容易识别“il”而不是分别识别它们中的每一个。其次,
RNN可以将误差差值反向传播到其输入,即卷积层,从而允许我们在统一的网络中共同训练循环层和卷积层。第三,RNN能够从头到尾对任意长度的序列进行操作。



传统的RNN单元在其输入和输出层之间具有自连接的隐藏层。每次接收到序列中的帧xt时,它将使用非线性函数来更新其内部状态ht,该非线性函数同时接收当前输入xt和过去状态ht−1作为其输入:ht=g(xt,ht−1)。那么预测yt是基于ht的。以这种方式,过去的上下文{{xt′}t′

2.3. 转录

http://blog.csdn.net/quincuntial/article/details/77679463
<http://blog.csdn.net/quincuntial/article/details/77679463>