一种为基于图像的序列识别设计的可端到端训练神经网络及其对场景文本识别的应用
- 作者: Baoguang Shi, Xiang Bai, Cong Yao
- 单位: 华中科技大学电子信息工程学院
摘要
基于图像的序列识别在计算机视觉领域是长期存在的研究主题。在这篇文章中,我们研究了在基于图像的序列识别中最重要也最难的问题之一,场景文本识别问题。我们提出了一个全新的模型,这个模型将特征提取,序列模型和转录融合到一个统一的框架下。与之前的场景文本识别系统相比,我们提出的架构主要包含了四个特性:
- 目前已经存在的算法的组件大多是分开训练和调整的,相比之下我们的模型是可以进行端到端训练的。
- 能够自然的处理任意长度文本,不涉及字符分割和水平尺度归一化
- 不受限于任何预定义的词库,并且在使用词库和不使用词库的模式下都取得了较好的成过。
- 使用高效且小的多的模型,在现实应用中更具实用性。
我们在包括IIIT-5K, Street View Text 和 ICDAR 数据集上进行了实验,取得了超越之前方法的结果。另外,我们提出的算法在基于图像的乐谱识别中表现较好,证明了该模型的泛化性。
介绍
最近,受益于深度神经网络的发展,特别是深度卷积神经网络的发展,神经网络在业界内许多视觉任务上复兴。然而,神经网络大多数最近的工作够致力于检测和分类任务。在这篇文章中我们关注了一个经典的任务:基于图像的序列识别。在现实生活中,一个稳定的视觉对象,例如场景文本,手写笔迹,乐谱,往往都以序列的形式出现而不是孤立的。与大多数目标识别不同,识别这种序列模型常常需要系统预测一系列目标标签而不是单个标签。因此识别这种目标可以自然的被认为是一个序列识别模型。另一个序列目标识别的特点是他们的长度变化较大。例如,英语单词既可以只包含2个字母,比如"OK"或者可以包含15个字母比如"congratulations"。因此大多数流行的深度模型,比如DCNN都不能直接被应用到序列预测中(DCNN模型的输入输出维度一般是固定的,不能产生长度可变的标签序列)
已经有一些工作尝试去解决特定标签类目标的识别问题。例如,[35,8]中的算法首先检测独立的字符然后使用被带标记的字符图像训练过的DCNN模型识别这些被检测到的字符。这些方法经常需要训练一个强字符检测器来从原始单词图像上准确的检测和剪裁每一个字符。其它一些方法,比如[22]把场景文本识别当作一个图像分类问题,并给每一个英文单词分配一个类别标签(总计90k个单词)。这导致一个带有巨量种类的大模型,且难以被应用到其它类似的序列目标上,比如中文,乐谱等,因为这些序列的基本目标超过百万个。总之,当前的基于DCNN的模型不能直接被应用到基于图像的序列识别上。
循环神经网络(RNN)是深度神经网络家族中另一个主要的分支。它主要被设计来处理序列问题。RNN的一个有点是,在训练和测试的过程中它都不需要每一个元素的序列目标图片中的位置。然而,将输入的目标图片转换为一个图像特征的序列的预处理过程是非常重要的。例如,Grave 等人. 提取一个手写文本的集合或图像特征,Su和Lu把单词图像转换成序列HOG特征。预处理过程独立于流水线的后续步骤,因此已有的基于RNN的系统不能够进行端到端的训练和优化。
几种不基于神经网络的传统场景文本识别方法也为这个领域带来了深刻的想法和新颖的表现。例如,Almazan`等人和Rodriguez-Serrano等人提出了在常规向量子空间下中嵌入单词图片和文本字符串,并将单词识别转化为一个恢复问题。Yao等人和Gordo等人使用中值特征来进行场景文本检测。虽然这些方法在标准测试集上取得了不错的表现,总的来说这些方法的效果不如前面提到的基于神经网络的算法,也不如本文提出的算法。
这篇文章的主要贡献是一个新颖的神经网络模型,这个网络模型的架构为识别图片中的序列目标做了特殊设计。我们把这个提出的网络命名为卷积循环神经网络(CRNN),因为它是DCNN和RNN的组合。对于类似序列的目标来说,CRNN相比于传统的神经网络有一些优势,包括:
- 它可以直接从序列标签中学习(例如单词),不需要其它标注(例如字符)
- 与DCNN类似,它同样具有从图像数据中直接学习的属性,既不需要手工设计的特征也不需要预处理步骤包括二值化/分割,元素定位等。
- 与RNN类似,它同样具有产生序列标签的能力。
- 不受限于序列目标的长度,在训练和测试的过程中只需要进行高度归一化。
- 相比于现在的场景文本识别,它取得了更好或具有高度竞争力的效果。
- 相比于标准的DCNN模型含有的参数数量更少,消耗的存储空间更少。
提出的网络架构
CRNN的网络架构如图1所使,包含三个组件,从底向上包括卷积层,循环层和转录层。
在CRNN的底层,卷积层自动的提取每一个输入图片的序列特征。在卷积神经网络顶部,构建一个循环网络来对卷积层输出序列特征的每一帧进行预测。在CRNN顶的转录层被设计来将循环层输出的每一帧预测转录为标签序列。虽然CRNN由不同种类的网络结构组成(例如CNN和RNN),它可以用一个代价函数进行训练。
特征序列提取
在CRNN模型中的卷积层部分是由标准CNN模型中的卷积层和最大池化层构成的(全连接层被移除)。这一部分用于从输入图片中提取序列化特征表示。图片在被投入到网络之前,所有图片需要被缩放到相同高度。然后从卷积层分量产生的特征映射中提取一系列特征向量,作为循环层的输入。特别的,每一个特征序列中的特征向量都是由特征图上按列从左到右得到的。这表明第i个特征向量是所有特征图上第i列上的串联。我们设置中的每一列的宽度都是固定的一个像素宽。
由于卷积层,最大池化层和元素的激活函数都是在局部区域上运行的,所以他们是平移不变的。因此,特征图的每一列都对应原始图像上的一个矩形区域(称为感受野),并且这样的矩形区域与特征图上的从左到右对应列的顺序相同。如图2所展示的那样,每一个特征序列中的向量都关联到一块感受野,并且可以被认为是这一区域的图像表示。
由于具有鲁棒性,丰富性和可训练性,深度卷积特征已被广泛用于不同类型的视觉识别任务。以前一些方法使用CNN来学习诸如场景文本的序列目标的鲁棒性表示。然而,这些方法通常通过CNN提取整个图像的整体表示,然后收集局部深度特征以识别像对象的序列的每个分量。因为CNN要求输入的图片都缩放到固定的大小来满足它对固定输入维度的需求,而序列目标的长度变化较大,所以它并不适合类似序列的目标。在CRNN中,我们将深度特征传递到顺序表示中,以便对类序列对象的长度变化保持不变。
序列标签
在卷积层的上面建立一个深度双向循环神经网络,作为循环层。循环层给每一个来自 特征序列的帧预测一个标签。循环层的优点有三重。第一,循环层有很强的学习序列中上下文信息的能力。使用上下文线索进行基于图片的序列识别比独立的处理每个符号更稳定和有用。以场景文本识别为例,宽字符可能需要几个连续的帧才能完全描述。另外,当能够看到上下文时,一些模糊的字符更容易识别,例如"il"连在一起时比单个更容易识别。第二,RNN可以将误差反向传播给输入,使我们能够在一个统一的框架下联合训练循环层和卷积层。第三,RNN能够在任意长度上操作,从头到尾遍历。
传统的RNN单元在输入输出层之间有自连接的循环层。每次收到一个序列中的帧,它就更新内部的状态位,更新是通过以当前系统输入和过去状态作为自变量的非线性函数进行的。即。然后预测基于产生。因此,过去的上下文都被用来进行预测。然而,传统的RNN单元都会遇到梯度消失问题,这个问题限制了可以存储的上下文长度,并增加了训练过程的负担。长短期记忆(LSTM)是一种为解决这一问题设计的RNN单元。一个LSTM(如图3所示),由一个存储单元和三个乘法门组成,即输入,输出和遗忘门。概念上,存储单元存储了过去的上下文,输入门和输出门允许这个单元存储长时间的上下文。同时,这个单元中存储的信息可以被遗忘门清除。LSTM的特殊设计使它可以捕获长范围的依赖,这种依赖经常出现在基于图片的序列中。
LSTM是有方向的,它只使用了过去的文本。然而,在基于文本的序列中,两个方向的上下文都是有用的且互为补充。因此,我们遵循17的方法,组合了两个LSTM,一个前向传播一个反向传播。另外,多个双向LSTM网络可以进行堆叠,产生一个如图3所示的LSTM网络。相比于浅层的结构,深度的结构允许更高水平的抽象,并在语音识别领域产生了非常好的改进。
在循环层中,误差梯度按照图3所示的箭头的反方向传播,例如从时间上反向传播。在循环层的底部,反向传播的梯度序列被连接到特征图上,进行将特征映射转换为特征序列的逆操作,并反向传播到卷积层。在实际使用过程中,我们创造了一个传统的网络层,称为特征-序列层,作为卷积层和循环层之间的桥梁。
转录层
转录层用于把RNN的每一帧预测转录为标签序列。在数学上,转录用来寻找在已知每一帧预测的条件下最有可能出现的标签序列。在实际使用时,有两种转录模式:基于字典的和无字典的。字典是作为预测的约束一个标签序列集合,例如一个拼写检查词典。在字典模式下,预测选择的是出现概率最高的标签序列。
标签概率
我们采用Graves等人提出的基于神经网络的时序分类定义条件概率。为每个标签预测的序列l中定义条件概率,且条件概率与每个标签在l中的位置无关。因此,当我们使用此概率的负对数似然作为网络的训练目标是,我们只需要图像和对应的序列标签,避免了获得每一个字符的标签。
条件概率公式可以简单的描述如下:输入是一个序列,其中是序列的长度。这里是一个在集合上的概率分布。,包含了任务中的所有标签, 表示空字符。基于序列定义一个序列到序列的映射函数,其中是序列的长度。将映射到标签序列,第一步先移除重复的标签,然后移除空字符。例如,将(其中表示空字符)映射到单词。条件概率被定义为所有能够被映射到的的概率之和:
其中的概率被定义为,是在时间戳t时有标签的概率。直接计算公式1在计算上是不可行的,因为子项过多。然而公式1可以使用15中提到的前向-后向算法高效的运算。
无字典转录
在这种模式下,序列公式1所定义的具有最大可能性的序列被用作预测。因为不存在易处理的算法来精确的寻找姐,我们是使用15中的策略。序列通过寻找找到,例如在每个时间t都找最可能的标签,并把结果序列映射到上。
基于字典的转录
在字典模式下,每一个测试样本都关联到字典上。基本上,通过选择字典中的具有式1定义的最高条件概率的序列作为识别的标签序列。然而,对于大型字典来说,譬如有50k个词的Hunspell拼写检查词典,将消耗非常多的时间来在字典上搜索,例如为给每一个序列计算公式1,并选择其中具有最大概率的一个。为解决这个问题,我们观察到通过上节描述的无字典转录方法预测的标签通常离真实值有较近的编辑距离。这暗示着我们可以限制搜索范围为最近邻的候选,其中是最大编辑距离,是通过无字典模式转录得到的标签。
候选可以通过9描述的BK树数据结构高效的找到,BK树以一个专门适用于离散度量空间的度量树。BK树的搜索时间复杂度为,其中是字典的大小。因此,这个结构容易扩展到非常大的字典。在我们的方法中,一个BK树由字典离线的进行构建。然后我们在树上执行快速在线搜索,寻找编辑距离小于或等于的序列。
网络训练
用表示训练数据集,其中表示训练图像,表示训练图片,表示训练标签的真实值。目标是最小化与真实值的条件概率的负对数似然。
其中是图像通过循环层和卷积层产生的序列。这个目标函数直接通过一个图像和它对应的真实值来计算代价值。因此,这个网络可以端到端的在图像-序列对上进行训练,消除了在训练集上人工标记所有独立元素的步骤。
这个网络通过随机梯度下降的方法训练。梯度通过反向传播的方法计算。特别的,在转录层,误差通过15提到的前向-后向算法进行反向传播。在转录层中,应用透过时间反向传播算法(BPTT)计算误差。
为了优化,我们使用ADADELTA来自动的计算每个维度的学习率。相比于传统的动量方法,ADADELTA不需要人工设置学习率。更重要的是,我们发现使用ADADELTA方法相比于动量方法收敛速度更快。
实验
为了评价提出的CRNN模型的效果,我们在标准场景文本识别测试集和乐谱识别测试集上进行了实验。数据集及测试和训练的设置见表3.2,具有清晰的比较的结果见表3.3. 为了更好的阐释CRNN的泛化性,我们在乐谱数据集上验证提出的算法(见表3.4)
数据集
在所有场景文本识别的实验中,我们使用在20中Jaderberg等人发布的合成数据集作为训练数据。这个数据集包含8M个训练图片及他们对应的真实单词。这些图片由合成文本引擎生成并且非常逼真。我们的网络使用这些合成的数据集进行训练,使用其它真实世界中的测试数据集进行测试,并没有使用这些数据集对应的训练集进行微调。虽然CRNN完全由合成数据集进行训练,它在标准文本识别基准上表现很好。
我们使用了四种流行的场景文本识别基准数据集,包括ICADAR 2003(IC03), ICDAR 2013(IC13), IIT 5k-work(IIIT5k), 和Street View Text(SVT)。
IC03测试集包括251张带有标记包围框的场景文本。根据王等人的研究,我们忽视了不含字母的或者少于三个字母的图片,然后得到了一个共860张的剪裁后的文本图片。每一个测试图片都关联到一个王等人定义的共50个词的词典上。组合所有图片的词典就构成了完整的词典。另外,我们使用了一个共5由Hunspell 的拼写检查词典构成的共50k 词的词典.
IC13测试数据集继承了大多数IC03的数据。它包括1015个剪裁后的单词图片的真实值。
IIIT5k 包含从互联网手机的3000个剪裁后的测试图片。每一个图片都关联了一个50词的词典和1000词的词典。
SVT测试数据集由249张从谷歌搜集的街景图片组成。从这些图片中剪裁出了647张单词图片。每个图片有由王等人定义的50个词的词典。
实施细节
我们实验中使用的网络配置在表1中进行了总结。其中卷积层基于VGG-VeryDeep的架构。为了使它适合识别英文文本我们做了一个改变。在第3个和第四个最大池化层,我们使用大小的矩形池化窗口代替传统的方型窗口。这将使特征图的感受野有更大的宽度,也因此有更长的特征序列。例如,一个包含10个字符的图片通常大小是,从这张图上可以提取25帧的特征序列。这个长度超出了大多数英语单词的长度。最重要的是,矩形的池化窗口产生矩形的感受野,对于识别一些狭窄的字母很有帮助,例如"i"和"l"。
这个网络不知有深度卷积层,还有循环层。这两者都很难训练。我们发现批标准化技术在训练这种深度网络时非常有效。我们在第五第六卷积层之间分别添加了批标准化层。有了批标准化层,训练过程加速许多。
我们在Torch7框架下实施网络,使用传统方法实现LSTM单元(Torch7/CUDA),转录层和BK树结构使用C++实现。实验在一个搭载2.5GHz的Intel(R) Xeon(R)E5-2609 CPU,和64GB RAM以及NAVIDIA(R)Tesla(TM)K40 GPU的工作站上进行。网络使用ADADELTA训练,设定的参数在训练过程中,所有图像都被缩放到大小来加速训练过程。训练过程约需要50小时可以收敛。测试图片的高度被缩放到32个像素。宽度根据高度的尺度进行缩放,但至少需要100像素。在IC03使用无字典的情况下,平均测试时间需要0.16s每张图片。使用50k大小的词典测试了IC03数据集,在参数的情况下,测试每张图片约需要0.53s的时间。
未完待续,原文链接:[ https://arxiv.org/abs/1507.05717 ]