基于CNN和LSTM的OCR文本识别/语音识别基本原理简介-CNN模型系列1

在深度学习流行以前,智能化的算法主要依赖传统的统计机器学习算法,这个时候特征工程(feature engineering)就显得特别重要,如何构造好的有区分度的特征成为了机器学习算法性能的关键因素之一。比如早期的基于Haar特征和Adaboost的人脸检测算法,基于HOG特征的人体检测等,都是利用了图像中区域的像素特性构造的人工特征提取算法。特征工程需要相关领域专家去人为设计和构造,针对不同的任务场景很可能要设计不同的特征提取算法,设计及验证过程周期长效率低下门槛比较高。深度学习逐渐流行后,基于CNN的深度网络自动化特征提取方法和深度学习目标任务(网络结构中的head输出)实现了端到端的训练,从而使得算法的设计和实现更加的高效,而且由于深度学习的网络表达能力强大的特性,几乎所有的视觉任务上的性能都超越了传统的基于人为设计的特征工程的传统机器学习算法。

今天向大家介绍的基于深度学习的OCR文本识别也和上面的情况相似,早期的OCR文本识别也是基于手写体或印刷体的文字特征进行人为设计的特征提取算法,整个识别过程流程复杂,不同的阶段需要设计不同的算法去解决相关问题,而基于CNN和LSTM的文本识别算法则在基于大样本的基础上实现了端到端的训练,而且在精度上也达到了更高的水平,也是当前文本识别的关键算法。在该算法过程中,一般是将文本先进行行提取(如基于目标检测的文本行检测算法实现行提取),在提取的文本行的基础上,将文本行对应的图像作为文本识别网路的输入。首先CNN对图像的特征进行提取和建模,然后将特征输入到LSTM网络,LSTM网络对基于文本行的特征进行空间序列建模(可以理解为将长条的文本行切分成一段一段的顺序拼接一起的特征,LSTM基于这个序列顺序进行建模,可以对文本行的当前位置和其前后的位置的关系进行序列建模,关于LSTM的计算实现细节可以参考引文3)。

在实际的数据集中,由于文字的特性不同(有的汉字或字母比较宽,而有的比较窄,甚至汉字或字母之间间隔的宽度在不同的数据集的样本中也不一样,还有空格的个数也不尽相同,以及空格开始或空格的位置也不尽相同。一条文本行的ground truth只有对应的汉字或字母的文本句子,并没有标记每个汉字或字母对应在图像上的位置(否则标记成本太高),因此这里有一个特别的Loss能够简化这种自动对齐的计算,这个Loss称为CTCLoss,其在语音样本和groundtruth以及文本行图像和groundtruth的自动对齐上展示了简易灵活且强大的自动对齐的作用。

CTCLoss计算每一个时刻t下经过s的所有可能的路径的后验概率(首先根据引文7中的Composing the graph部分的规则计算y(s,t), 然后基于y(s,t)采用动态规划的算法分别计算alpha(s,t),beta(s,t)等),最后的loss是所有时刻的的概率和(用log去计算),关于CTCLoss的详细算法原理的介绍可以参考引文7。

基于CNN和LSTM的语音识别的算法原理和上述的OCR文本识别的原理类似,语音样本有长短不同,有停顿时间不同等需要输入和标记(输出)进行动态对齐的功能,CTCLoss同样可以在此处得以较好应用。

References


by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *