CRNN文本识别网络
Posted GoAl的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CRNN文本识别网络相关的知识,希望对你有一定的参考价值。
CRNN介绍:
近几年来,CRNN在计算机视觉文本识别领域取得不错成果。CRNN是一种卷积循环神经网络结构,用于解决基于图像的序列识别问题,特别是场景文字识别问题。CRNN网络实现了不定长验证结合CNN和RNN网络结构,使用双向LSTM循环网络进行时序训练,并在最后引入CTC损失函数来实现端对端的不定长序列识别,
CRNN网络结构:
1.卷积层
卷积:提取图像特征 池化:为了降维减少计算量
CRNN卷积层由标准的CNN模型中的卷积层和最大池化层组成,自动提取出输入图像的特征序列。
提取的特征序列中的向量是从特征图上从左到右按照顺序生成的,每个特征向量表示了图像上一定宽度上的特征,论文中使用的这 个宽度是1,就是单个像素。
2.循环层
RNN原理参考:水很深的深度学习-Task05循环神经网络RNN_GoAl的博客-CSDN博客
LSTM原理参考:LSTM原理介绍_GoAl的博客-CSDN博客
3.转录层
CTC一般连接在RNN网络的最后一层用于序列学习和训练。对于一段长度为T的序列来说,每个样本点t(t远大于T)在RNN网络的最后一层都会输出一个softmax向量,表示该样本点的预测概率,所有样本点的这些概率传输给CTC模型后,输出最可能的标签,再经过去除空格(blank)和去重操作,就可以得到最终的序列标签。
CRNN完整网络结构图:
从整个网络中可以看出,卷积层是由一系列的卷积、最大池化、批量归一化等操作组成,由标准的CNN模型中的卷积层和最大池化层组成,结构类似于VGG网络。
4.CTC介绍
CTC是一种Loss计算方法,用CTC代替Softmax Loss,训练样本无需对齐。
CTC训练流程和传统的神经网络类似,构建损失函数,然后根据BP算法进行训练,不同之处在于传统的神经网络的训练准则是针对每帧数据,即每帧数据的训练误差最小,而CTC的训练准则是基于序列的,比如最大化 p(l|x) ,序列化的概率求解比较复杂,因为一个输出序列可以对应很多的路径,所有引入前后向算法来简化计算。
CTC特点:引入blank字符,解决有些位置没有字符的问题,通过递推,快速计算梯度
CTC原理参考:
【Learning Notes】CTC 原理及实现_丁丁的博客-CSDN博客_ctc实现
CTC(Connectionist Temporal Classification)介绍 - PilgrimHui - 博客园
5.CRNN模型训练:
在模型训练过程中,首先使用标准的CNN网络提取文本图像的特征,再利用BLSTM将特征向量进行融合以提取字符序列的上下文特征,然后得到每列特征的概率分布,最后通过转录层(CTC)进行预测得到文本序列。其具体模型训练流程为:
- 将输入图像统一缩放至32*W*3。
- 利用CNN提取后图像卷积特征,得到的大小为:1*W/4*512。
- 通过上述输入到LSTM提取序列特征,得到W/4*n后验概率矩阵。
- 利用CTC损失,实现标签和输出一一对应,进行训练。
6.CRNN+CTC总结
CRNN将CNN/LSTM/CTC三种方法结合:提供了一种end2end文本行图片算算法。
首先CNN提取图像卷积特征
然后LSTM进一步提取图像卷积特征中的序列特征
最后引入CTC解决训练时字符无法对齐的问题
7.CRNN实战:
【AI实战】手把手教你文字识别(识别篇:LSTM+CTC, CRNN, chineseocr方法) - 雪饼的个人空间 - OSCHINA - 中文开源技术交流社区文字识别是AI的一个重要应用场景,文字识别过程一般由图像输入、预处理、文本检测、文本识别、结果输出等环节组成。 其中,文本检测、文本识别是最核心的环节。文本检测方面,在前面的文章中已介绍过了多种基于深...https://my.oschina.net/u/876354/blog/3070699
以上是关于CRNN文本识别网络的主要内容,如果未能解决你的问题,请参考以下文章