当前位置:   article > 正文

CRNN解读 —— An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its ……_crnn神经网络

crnn神经网络

简述

额,,,很早之前就看过了,非常经典的算法,目前极其常用!
费话不多说,希望能简明概要的介绍一下CRNN端到端文本识别算法,以作记录。

阅读前提:最好之前看了一下CRNN的论文啥的,至少也应该看过一些博客了吧(还是推荐看论文),本文旨在记录CRNN的关键部分,有一点点基础后更能深刻理解CRNN思想。

首先,CRNN是一种卷积循环神经网络结构,用于解决基于图像的序列识别问题,特别是场景文字识别问题。 应用CTC Loss来解决文字序列识别的最经典的算法(没有之一)就是CRNN,其网络结构及其各层参数如下:

这篇论文解决了基于图像的序列识别问题。它主要通过使用 “CNN+RNN+转录层(CTC)” 来进行端到端的序列识别。CNN用于提取图像特征并表示成特征向量(多个特征向量组成特征序列,如左图所示的一个个墨绿色的特征向量,他们的感受野为原图的一个竖直矩形),RNN层使用双向LSTM识别特征向量组成特征序列,并且得到特征向量的概率分布。转录层使用CTC求解最优label序列

即网络结构包含三部分,从下到上依次为:

  1. 卷积层,作用是从输入图像中提取特征向量(并组成特征序列);
  2. 循环层,作用是预测从卷积层获取的特征序列的标签(真实值)分布;
  3. 转录层,作用是把从循环层获取的标签分布通过去重、整合等操作转换成最终的识别结果;

网络结构介绍

卷积层(CNN)

CRNN卷积层由标准的CNN模型中的卷积层和最大池化层组成,自动提取出输入图像的特征序列
与普通CNN网络不同的是,CRNN在训练之前,先把输入图像缩放到相同高度(图像宽度维持原样),论文中使用的高度值是32。

为什么这么做呢?
因为作者想经过一系列预先定义好参数的卷积操作之后,能得到 c ∗ h ∗ w c*h*w chw大小的feature map(其中 h h h的大小为1, w w w就是后面特征序列的长度(即有 w w w个特征向量), c c c为每个特征向量的维度)。

提取的特征序列中的特征向量是从特征图上从左到右按照顺序生成的,每个特征向量表示了原图像上一定宽度上的特征,论文中使用的这个宽度是1,就是单个像素,图示如下。(其中每个特征向量的维度就是此时feature map的channel的大小,这部分看后面的代码可以清楚的看出来)

循环层(Bi-LSTM)

循环层由一个双向LSTM循环神经网络构成,预测特征序列中的每一个特征向量的标签分布(真实结果的概率列表)。循环层的误差被反向传播,最后会转换成特征序列,再把特征序列反馈到卷积层,这个转换操作由论文中定义的“Map-to-Sequence”自定义网络层完成,作为卷积层和循环层之间连接的桥梁。(额。。。。这部分可能看着比较迷,但是还是那句话:“Talk is cheap. Show me the code.”)

转录层(CTC)

CTC Loss大概是在2006年的一篇paper中提出来的(大佬们还是强啊!),单纯讲CTC都能写一篇很长的博客了,这里就只简单介绍,等我有空了再详细写一下。。。。

转录是将LSTM网络预测的特征序列的概率分布的所有可能的结果进行整合,转换为最终结果的过程。论文中是在双向LSTM网络的最后连接上一个CTC模型,做到端对端的识别。

CTC模型(Connectionist temporal classification) 联接时间分类,CTC可以执行端到端的训练,不要求训练数据对齐和一一标注,直接输出不定长的序列结果。(这部分还是得了解一下CTC呀,跑不掉)

CTC一般连接在RNN网络的最后一层用于序列学习和训练。对于一段长度为T的序列来说,每个样本点t(T远大于t)在RNN网络的最后一层都会输出一个softmax向量,表示该样本点的预测概率,所有样本点的这些概率传输给CTC模型后,输出最可能的标签,再经过去除空格(blank)和去重操作,就可以得到最终的序列标签。

网络损失定义

首先要先理解下面这幅图:
在这里插入图片描述

下面我直接截图(打公式太费劲了额)我之前做的一个PPT中的公式来介绍:(公式和符号等要对应我上面给出的图片中的记号呀)
下面图片中的文字描述应该比较好理解。
在这里插入图片描述

其次,还要定义映射 β \beta β, 即找出所有能通过映射函数 β \beta β得到标签 l l l的路径集合 π \pi π
在这里插入图片描述
由于可能存在多条路径 π \pi π在经过 β \beta β映射后能得到给定标签序列 L L L,我们定义网络能得到标签 L L L的概率为:所有能经过 β \beta β映射得到标签序列 L L L的路径 π \pi π的概率(都为条件概率)之和

所以,损失函数就可以定义为 O O O那个形式:(负对数似然)
y i y_i yi代表循环层产生的概率预测序列, I i I_i Ii代表输入图片, l i l_i li代表GT标签序列。

如下,整个CRNN网络的结构和损失函数都已经介绍完了,如果之前就看过论文但是不太懂,到这里应该就懂了吧。如果还不能懂,不要紧。。。

还是那句老话:Talk is cheap. Show me the code.

网络结构代码(Talk is cheap. Show me the code.)

直接看我的另一篇博客吧,相信看完网络结构的定义代码,一切就都觉得那么自然啦!

References

done~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/771084
推荐阅读
相关标签
  

闽ICP备14008679号