赞
踩
An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition(一种端到端可训练神经网络用于图像序列的识别及其在场景文本识别中的应用) 论文地址:https://arxiv.org/pdf/1507.05717.pdf
主要创新点:CRNN网络
目的(文本识别):输入图片,输出图片上的字符文本。
总体网络结构如下:
CNN提取图片特征过程如下:将原图样本resize为32*100,然后通过系列卷积操作,提取特征得到1*26*512, 即为原图分为26块序列,每一块特征点512个,26个特征序列为RNN输入做准备。
RNN获取图片特征中每一帧的输出label概率分布:
从图中可以看出,将1*26*512分布的feature map, 通过deep BiLSTM网络结构的时序数据预测后,得到26*N的矩阵分布输出,其中26表示图片特征中的26个序列,N表示每一个序列预测的N个标签的概率值。 比如预测26个字母,那么这里N也为26(实际中CRNN加了空格符号’-’,所以应该是N为27)
最后将输出转换为具体字符结论的时候,用到了CTC理论(Connectionist Temporal Classification),可以不用对齐处理识别结论中的字符。比如h--ee-l-l---o -> hello. CTC通过增加空白符-,利用相邻中相同的合并为一个,最后一起去掉-的原则,来达到最后目的。
如下是CTC理论的一些大致推导公式,其中π是rnn的输出,B(π)是通过CTC转换后的最终label输出结论。
如下所示,p(l|y)表示预测字符y被输出得到为l这种label的概率,p(hello | y) 表示所有可能得到hello字符串的概率之和,O则表示需要优化的损失函数:是交叉熵形式。在网络输出的时候采取“所有可以形成hello的概率最大的一条路径字符值”I*
可以看到,CRNN网络的3个阶段实现过程如下:
在代码中,CNN的卷积池化操作中涉及到的参数如下(W/H是特征层转换后的宽高):
部分卷积池化操作实现如下:
RNN层主要实现如下,可以看到是一个双向的LSTM层,再接入一个全连接的线性分类层。
目前ocr识别方面,存在一些问题,主要是空格识别不准,连续相同字符的识别问题。以及某些字符在有干扰背景或者噪声干扰图片质量不佳时候识别不准。后边优化方向:
a-pp--le ctc会弄成aple.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。