An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition
Abstract
- 基于图像的序列识别一直是计算机视觉领域一个长期的研究课题。在本文中,我们研究了场景文本识别问题,这是基于图像的序列识别中最重要和最具挑战性的任务之一。提出了一种集特征提取、序列建模和转录于一体的神经网络结构。与以往的场景文本识别系统相比,本文提出的体系结构具有四个特点:(1)与大多数现有算法的组件单独训练和调优不同,它是端到端可训练的。(2)自然处理任意长度的序列,不涉及字符分割或水平尺度归一化。(3)它不局限于任何预定义的词典,在无词典和基于词典的场景文本识别任务中都取得了显著的成绩。(4)生成一个有效但更小的模型,更适合实际应用场景。在包括IIIT-5K、街景文本和ICDAR数据集在内的标准基准上进行的实验表明,所提出的算法优于现有技术。此外,该算法在基于图像的乐谱识别任务中表现良好,验证了算法的通用性。
- CRNN 全称为 **Convolutional Recurrent Neural Network,**主要用于端到端地对不定长的文本序列进行识别,不用先对单个文字进行切割,而是将文本识别转化为时序依赖的序列学习问题,就是基于图像的序列识别。
- 在以前的 OCR 任务中,识别过程分为两步:
单字切割
和分类任务
。我们一般都会将一连串文字的文本文件先利用投影法
切割出单个字体,再送入 CNN 里进行文字分类。但是此法已经有点过时了,现在更流行的是基于深度学习的端到端的文字识别,即我们不需要显式加入文字切割这个环节,而是将文字识别转化为序列学习问题,虽然输入的图像尺度不同,文本长度不同,但是经过 DCNN 和 RNN 后,在输出阶段经过一定的 CTC 翻译转录后,就可以对整个文本图像进行识别,也就是说,文字的切割也被融入到深度学习中去了。 - 现今基于深度学习的端到端 OCR 技术有两大主流技术:
CRNN OCR
和attention OCR
。其实这两大方法主要区别在于最后的输出层(翻译层),即怎么将网络学习到的序列特征信息转化为最终的识别结果。这两大主流技术在其特征学习阶段都采用了CNN+RNN
的网络结构,CRNN OCR
在对齐时采取的方式是CTC
算法,而attention OCR
采取的方式则是attention
机制。 - 论文地址:https://arxiv.org/abs/1507.05717;
- cite: An End-to-End Trainable Neural Network for Image-Based Sequence Recognition and Its Application to Scene Text Recognition. IEEE Trans. Pattern Anal. Mach. Intell. 39(11): 2298-2304 (2017)
- https://ieeexplore.ieee.org/document/7801919
Introduction
-
最近,社区看到了神经网络的强劲复苏,这主要是由于深度神经网络模型,特别是深度卷积神经网络(DCNN)在各种视觉任务中的巨大成功。然而,最近与深度神经网络相关的大部分工作都致力于对象类别的检测或分类。本文研究了计算机视觉中的一个经典问题:基于图像的序列识别。在现实世界中,一个稳定的视觉对象,如场景文本、笔迹和乐谱,往往以顺序的形式出现,而不是孤立的。与一般的对象识别不同,识别这种类似序列的对象通常需要系统预测一系列对象标签,而不是单个标签。因此,对这些对象的识别可以自然地转换为序列识别问题。类序列对象的另一个独特属性是它们的长度可能变化很大。例如,英语单词可以由2个字符组成,如“OK”,也可以由15个字符组成,如“congratulations”。因此,像DCNN这样最流行的深度模型不能直接应用于序列预测,因为DCNN模型通常在固定维的输入和输出上运行,因此无法产生变长标签序列。
-
一些尝试已经解决了这个问题,为一个特定的序列类对象(如场景文本)。例如,[End-to-end text recognition with convolutional neural networks,Photoocr: Reading text in uncontrolled conditions]中的算法首先检测单个字符,然后使用DCNN模型识别这些检测到的字符,DCNN模型使用标记的字符图像进行训练。这种方法通常需要训练一个强大的字符检测器来准确地检测和裁剪原始单词图像中的每个字符。其他一些方法(如[Reading text in the wild with convolutional neural networks])将场景文本识别视为图像分类问题,并为每个英语单词(共90K个单词)分配一个类标签。事实证明,一个训练有素的大型模型具有大量的类,很难推广到其他类型的类序列对象,如中文文本、乐谱等,因为这类序列的基本组合的数量可以大于100万。综上所述,目前基于DCNN的系统还不能直接用于基于图像的序列识别。
-
递归神经网络(RNN)模型是深度神经网络家族的另一个重要分支,主要用于处理序列。RNN的优点之一是在训练和测试中都不需要序列对象图像中每个元素的位置。然而,将输入对象图像转换为图像特征序列的预处理步骤通常是必不可少的。例如,Graves等人从手写文本中提取一组几何或图像特征,而Su和Lu将单词图像转换为顺序HOG特征。预处理步骤独立于管道中的后续组件,因此基于RNN的现有系统无法以端到端方式进行训练和优化。
-
一些传统的非基于神经网络的场景文本识别方法也为这一领域带来了深刻的见解和新颖的表征。例如,Almazan等和Rodriguez-Serrano等提出将词图像和文本字符串嵌入到公共向量子空间中,将词识别转化为检索问题。Yao等和Gordo等使用中级特征进行场景文本识别。尽管这些方法在标准基准测试中取得了令人满意的性能,但通常优于先前基于神经网络的算法,以及本文提出的方法。
-
本文的主要贡献是一种新的神经网络模型,该模型的网络结构专门用于识别图像中的序列类物体。所提出的神经网络模型被命名为卷积递归神经网络(CRNN),因为它是DCNN和RNN的结合。对于类序列对象,CRNN与传统神经网络模型相比具有几个明显的优势:1)它可以直接从序列标签(例如,单词)中学习,不需要详细的注释(例如,字符);2)与DCNN一样,直接从图像数据中学习信息表示,不需要手工特征,也不需要预处理步骤,包括二值化/分割、组件定位等;3)具有RNN相同的性质,能够产生一系列的标签;4)不受序列类对象长度的限制,在训练和测试阶段只需要高度归一化;5)与现有技术相比,它在场景文本(单词识别)上取得了更好或极具竞争力的性能;6)它比标准DCNN模型包含更少的参数,占用更少的存储空间。
-
整个CRNN网络结构包含三部分,从下到上依次为:
-
CNN(卷积层),使用深度CNN,对输入图像提取特征,得到特征图;一共有四个最大池化层,但是最后两个池化层的窗口尺寸由 2x2 改为 1x2,也就是图片的高度减半了四次(除以
2 4 2^4 24),而宽度则只减半了两次(除以 2 2 2^2 22 ),这是因为文本图像多数都是高较小而宽较长,所以其feature map也是这种高小宽长的矩形形状,如果使用1×2的池化窗口可以尽量保证不丢失在宽度方向的信息,更适合英文字母识别(比如区分i和l)。CNN的输出尺寸为 (512, 1, 40)。即 CNN 最后得到512个特征图,每个特征图的高度为1,宽度为40。输入图像为灰度图像(单通道);高度为32,这是固定的,图片通过 CNN 后,高度就变为1,这点很重要;宽度为160,宽度也可以为其他的值,但需要统一,所以输入CNN的数据尺寸为 (channel, height, width)=(1, 32, 160)。 -
RNN(循环层),使用双向RNN(BLSTM)对特征序列进行预测,对序列中的每个特征向量进行学习,并输出预测标签(真实值)分布;CRNN 还引入了BatchNormalization模块,加速模型收敛,缩短训练过程。我们是不能直接把 CNN 得到的特征图送入 RNN 进行训练的,需要进行一些调整,根据特征图提取 RNN 需要的特征向量序列。
-
-
现在需要从 CNN 模型产生的特征图中提取特征向量序列,每一个特征向量(如上图中的一个红色框)在特征图上按列从左到右生成,每一列包含512维特征,这意味着第 i 个特征向量是所有的特征图第 i 列像素的连接,这些特征向量就构成一个序列。由于卷积层,最大池化层和激活函数在局部区域上执行,因此它们是平移不变的。因此,特征图的每列(即一个特征向量)对应于原始图像的一个矩形区域(称为感受野),并且这些矩形区域与特征图上从左到右的相应列具有相同的顺序。特征序列中的每个向量关联一个感受野。
-
因为 RNN 有梯度消失的问题,不能获取更多上下文信息,所以 CRNN 中使用的是
LSTM
,LSTM 的特殊设计允许它捕获长距离依赖。LSTM 是单向的,它只使用过去的信息。然而,在基于图像的序列中,两个方向的上下文是相互有用且互补的。将两个 LSTM,一个向前和一个向后组合到一个双向 LSTM 中。此外,可以堆叠多层双向 LSTM,深层结构允许比浅层抽象更高层次的抽象。 -
通过上面一步,我们得到了 40 个特征向量,每个特征向量长度为 512,在 LSTM 中一个时间步就传入一个特征向量进行分类,这里一共有 40 个时间步。我们知道一个特征向量就相当于原图中的一个小矩形区域,RNN 的目标就是预测这个矩形区域为哪个字符,即根据输入的特征向量,进行预测,得到所有字符的 softmax 概率分布,这是一个长度为字符类别数的向量,作为 CTC 层的输入。因为每个时间步都会有一个输入特征向量 x t x_t xt,输出一个所有字符的概率分布 y t y_t yt,所以输出为 40 个长度为字符类别数的向量构成的后验概率矩阵。
-
-
然后将这个后验概率矩阵传入转录层。
-
-
CTC loss(转录层),使用 CTC 损失,把从循环层获取的一系列标签分布转换成最终的标签序列。
-
转录是将 RNN 对每个特征向量所做的预测转换成标签序列的过程。数学上,转录是根据每帧预测找到具有最高概率组合的标签序列。端到端OCR识别的难点在于怎么处理不定长序列对齐的问题!OCR可建模为时序依赖的文本图像问题,然后使用CTC(Connectionist Temporal Classification, CTC)的损失函数来对 CNN 和 RNN 进行端到端的联合训练。
-
我们现在要将 RNN 输出的序列翻译成最终的识别结果,RNN进行时序分类时,不可避免地会出现很多冗余信息,比如一个字母被连续识别两次,这就需要一套去冗余机制。
-
比如我们要识别一个文本,其中 RNN 中有 5 个时间步,理想情况下 t0, t1, t2 时刻都应映射为“a”,t3, t4 时刻都应映射为“b”,然后将这些字符序列连接起来得到“aaabb”,我们再将连续重复的字符合并成一个,那么最终结果为“ab”。
-
-
但是存在一个问题,如果是 book,hello 之类的词,合并连续字符后就会得到 bok 和 helo,这显然不行,所以 CTC 有一个
blank
机制来解决这个问题。我们以“-”
符号代表blank
,RNN 输出序列时,在文本标签中的重复的字符之间插入一个“-”
,比如输出序列为“bbooo-ookk”
,则最后将被映射为“book”
,即有blank
字符隔开的话,连续相同字符就不进行合并。即对字符序列先删除连续重复字符,然后从路径中删除所有“-”
字符,这个称为解码过程,而编码则是由神经网络来实现。引入blank
机制,我们就可以很好地解决重复字符的问题。 -
在训练阶段,我们需要根据这些概率分布向量和相应的文本标签得到损失函数,从而训练神经网路模型,下面来看看如何得到损失函数的。
-
-
如上图,对于最简单的时序为 2 的字符识别,有两个时间步长(t0,t1)和三个可能的字符为“a”,“b”和“-”,我们得到两个概率分布向量,如果采取最大概率路径解码的方法,则“–”的概率最大,即真实字符为空的概率为0.6*0.6=0.36。但是为字符“a”的情况有多种对齐组合,“aa”, “a-“和“-a”都是代表“a”,所以,输出“a”的概率应该为三种之和:
-
0.4 ∗ 0.4 + 0.4 ∗ 0.6 + 0.6 ∗ 0.4 = 0.16 + 0.24 + 0.24 = 0.64 0.4 * 0.4 + 0.4 * 0.6 + 0.6 * 0.4 = 0.16 + 0.24 + 0.24 = 0.64 0.4∗0.4+0.4∗0.6+0.6∗0.4=0.16+0.24+0.24=0.64
-
所以“a”的概率比空“”的概率高!如果标签文本为“a”,则通过计算图像中为“a”的所有可能的对齐组合(或者路径)的分数之和来计算损失函数。
-
所以对于 RNN 给定输入概率分布矩阵为 x = { x 1 , x 2 , . . . , x T } x=\{x^1,x^2,...,x^T\} x={x1,x2,...,xT} ,T 是序列长度,最后映射为标签文本 l 的总概率为:
-
p ( l ∣ y ) = ∑ π ∈ B − 1 p ( π ∣ x ) p(l|y)=\sum_{\pi\in B^{-1}}p(\pi|x) p(l∣y)=π∈B−1∑p(π∣x)
-
其中 B − 1 ( l ) B^{-1}(l) B−1(l) 代表从序列到序列的映射函数 B 变换后是文本 l 的所有路径集合,而 π \pi π 则是其中的一条路径。每条路径的概率为各个时间步中对应字符的分数的乘积。我们就是需要训练网络使得这个概率值最大化,类似于普通的分类,CTC的损失函数定义为概率的负最大似然函数,为了计算方便,对似然函数取对数。通过对损失函数的计算,就可以对之前的神经网络进行反向传播,神经网络的参数根据所使用的优化器进行更新,从而找到最可能的像素区域对应的字符。这种通过映射变换和所有可能路径概率之和的方式使得 CTC 不需要对原始的输入字符序列进行准确的切分。
-
在测试阶段,过程与训练阶段有所不同,我们用训练好的神经网络来识别新的文本图像。这时候我们事先不知道任何文本,如果我们像上面一样将每种可能文本的所有路径计算出来,对于很长的时间步和很长的字符序列来说,这个计算量是非常庞大的,这不是一个可行的方案。我们
知道 RNN 在每一个时间步的输出为所有字符类别的概率分布
,即一个包含每个字符分数的向量,我们取其中最大概率的字符作为该时间步的输出字符,然后将所有时间步得到一个字符进行拼接得到一个序列路径,即最大概率路径,再根据上面介绍的合并序列方法得到最终的预测文本结果。在输出阶段经过 CTC 的翻译,即将网络学习到的序列特征信息转化为最终的识别文本,就可以对整个文本图像进行识别。 -
-
比如上面这个图,有5个时间步,字符类别有“a”, “b” and “-” (blank),对于每个时间步的概率分布,我们都取分数最大的字符,所以得到序列路径“aaa-b”,先移除相邻重复的字符得到“a-b”,然后去除blank字符得到最终结果:“ab”。预测过程中,先使用标准的CNN网络提取文本图像的特征,再利用BLSTM将特征向量进行融合以提取字符序列的上下文特征,然后得到每列特征的概率分布,最后通过转录层(CTC)进行预测得到文本序列。
-
-
以测试阶段一张图像输入为例(batch_size为1),对crnn的整个过程进行输入输出的尺寸的描述,CRNN原理详解、代码实现及BUG分析-CSDN博客
-
-
The Proposed Network Architecture
-
CRNN的网络架构如下图所示,由三个部分组成,从下到上依次为卷积层、循环层和转录层。
-
-
网络架构。该结构由三部分组成:1)卷积层,从输入图像中提取特征序列;2)循环层,预测每帧的标签分布;3)转录层,将每帧预测转化为最终的标签序列。
-
-
在CRNN的底部,卷积层自动从每个输入图像中提取特征序列。在卷积网络的基础上,构建了一个循环网络,用于对卷积层输出的特征序列的每一帧进行预测。CRNN顶部的转录层用于将循环层的逐帧预测转化为标签序列。尽管CRNN由不同类型的网络架构(例如:CNN和RNN),它可以用一个损失函数联合训练。
Feature Sequence Extraction
- 在CRNN模型中,通过从标准CNN模型中取卷积层和最大池化层(去除了全连接层)来构造卷积层的分量。该组件用于从输入图像中提取序列特征表示。在输入到网络之前,所有的图像都需要缩放到相同的高度。然后从卷积层分量产生的特征映射中提取特征向量序列,作为循环层的输入。具体来说,特征序列的每个特征向量在特征映射上按列从左到右生成。这意味着第i个特征向量是所有映射的第i列的连接。在我们的设置中,每列的宽度固定为单个像素。
- 由于卷积层、最大池化层和元素激活函数在局部区域上操作,它们是平移不变量。因此,特征映射的每一列对应于原始图像的一个矩形区域(称为接受野),并且这些矩形区域与它们在特征映射上从左到右的对应列的顺序相同。如下图所示,特征序列中的每个向量都与一个接受域相关联,并且可以视为该区域的图像描述符。
-
-
感受野。提取的特征序列中的每个向量与输入图像上的一个接受野相关联,可以认为是该接受野的特征向量。
-
- 由于具有鲁棒性、丰富性和可训练性,深度卷积特征已被广泛应用于不同类型的视觉识别任务。之前的一些方法已经使用CNN来学习类似序列的对象(如场景文本)的鲁棒表示。然而,这些方法通常是通过CNN提取整个图像的整体表示,然后收集局部深度特征来识别序列类物体的各个组成部分。由于CNN需要将输入图像缩放到固定的大小,以满足其固定的输入维度,因此对于序列类对象,由于其长度变化较大,因此不适合。在CRNN中,我们将深度特征传递到序列表示中,以便对序列类对象的长度变化保持不变。
Sequence Labeling
-
深层双向递归神经网络建立在卷积层的顶部,作为递归层。循环层预测特征序列 x = x 1 . . . x t x = x_1...x_t x=x1...xt 中每帧xt的标签分布yt。循环层的优点有三个方面。首先,RNN具有很强的捕获序列中上下文信息的能力。使用上下文线索进行基于图像的序列识别比单独处理每个符号更稳定和有用。以场景文本识别为例,宽字符可能需要连续几帧才能完全描述(见上图)。此外,一些模棱两可的字符在观察其上下文时更容易区分,例如通过对比字符高度来识别“il”比单独识别每个字符更容易。其次,RNN可以反向传播误差微分到它的输入,即卷积层,允许我们在一个统一的网络中联合训练循环层和卷积层。第三,RNN能够对任意长度的序列进行操作,从头到尾遍历。
-
传统的RNN单元在其输入和输出层之间有一个自连接的隐藏层。每次它在序列中接收到帧xt时,它都会用一个非线性函数更新其内部状态ht,该函数将当前输入xt和过去状态ht - 1作为其输入: h t = g ( x t ; h t − 1 ) h_t = g(x_t;h_{t−1}) ht=g(xt;ht−1) 。然后根据ht进行预测。通过这种方式,可以捕获过去的上下文 { x t ′ } t ′ < t \{x_{t'}\}_{t'<t} {xt′}t′<t。从概念上讲,记忆细胞存储过去的上下文,输入和输出门允许细胞长时间存储上下文。同时,细胞内的记忆可以通过遗忘门清除。LSTM的特殊设计允许它捕获远程依赖关系,这通常发生在基于图像的序列中。
-
LSTM是定向的,它只使用过去的上下文。然而,在基于图像的序列中,两个方向的上下文都是有用的,并且是相互补充的。因此,我们遵循[Speech recognition with deep recurrent neural networks],将两个LSTM(一个向前,一个向后)组合成一个双向LSTM。此外,可以堆叠多个双向LSTM,形成如图b所示的深度双向LSTM。深层结构允许比浅层结构更高层次的抽象,并且在语音识别任务中取得了显着的性能改进。
-
-
(a) LSTM基本单元的结构。LSTM由一个单元模块和三个门组成,即输入门、输出门和遗忘门。(b)本文使用的深度双向LSTM结构。将向前(从左到右)和向后(从右到左)的LSTM组合在一起可以得到双向LSTM。将多个双向LSTM叠加,形成一个深度双向LSTM。
-
-
在循环层中,误差微分沿图.b所示箭头的相反方向传播,即。时间反向传播(BPTT)。在循环层的底部,传播的微分序列被连接成映射,将特征映射转换为特征序列的操作反过来,并反馈到卷积层。在实践中,我们创建了一个自定义的网络层,称为“Map-to-Sequence”,作为卷积层和循环层之间的桥梁。
Transcription
- 转录是将RNN所做的每帧预测转换为标签序列的过程。从数学上讲,转录是在每帧预测的条件下,以最高的概率找到标签序列。在实践中,有两种转录模式,即无词典转录和基于词典转录。词典是一组标签序列,预测受其约束,例如拼写检查字典。在lexicon_free模式下,进行预测时不需要任何词典。在lexicon-based的模式中,通过选择概率最高的标签序列进行预测。
Probability of label sequence
-
我们采用Graves等人提出的连接时间分类(Connectionist Temporal Classification, CTC)层中定义的条件概率。在每帧预测 y = y 1 . . . y T y = y_1...y_T y=y1...yT 的条件下定义标签序列l的概率;,它忽略了 l 中每个标签所在的位置。因此,当我们使用该概率的负对数似然作为训练网络的目标时,我们只需要图像及其对应的标签序列,避免了标记单个字符位置的移动。
-
条件概率的表达式简述如下:输入为序列 y = y 1 . . . y T y = y_1...y_T y=y1...yT 其中T是序列长度。这里,每个 y t ∈ R ∣ L ′ ∣ y_t\in\R^{|L'|} yt∈R∣L′∣ 是集合 L ′ = L ∪ L'=L∪ L′=L∪ 上的概率分布,其中L包含任务中的所有标签(例如所有英文字符),以及表示为的“空白”标签。在序列 π ∈ L ′ T π\in L^{'T} π∈L′T 上定义一个序列到序列的映射函数B,其中T为序列的长度。B将π映射到 l 上,首先去掉重复的标签,然后去掉“空白”。例如,B将“——hh-e-l-ll-oo——”(“-”表示“空白”)映射到“hello”上。然后,将条件概率定义为B映射到 l 上的所有 π 的概率之和:
-
p ( l ∣ y ) = ∑ π : B ( π ) = 1 p ( π ∣ y ) , ( 1 ) p(l|y)=\sum_{\pi :B(\pi)=1}p(\pi|y),(1) p(l∣y)=π:B(π)=1∑p(π∣y),(1)
-
其中π的概率定义为 p ( π ∣ y ) = ∏ i = 1 k y π t t , y π t t p(π|y) = \prod_{i=1}^{k}y^ t _{π_t}, y^t_{π_t} p(π∣y)=∏i=1kyπtt,yπtt 是在时间戳 t 处有标记πt的概率。由于求和项的数量呈指数级增长,直接计算Eq. 1在计算上是不可行的。然而,Eq. 1可以使用[Connectionist temporal classification: labelling unsegmented sequence data with recurrent neural networks]中描述的前向后算法有效地计算。
-
-
Lexicon-free transcription
- 在此模式中,取Eq. 1中定义的概率最高的序列l *作为预测。由于不存在可处理的算法来精确求解,我们采用[Connectionist temporal classification]中采用的策略。l∗近似地由 l ∗ ≈ B ( a r g m a x π p ( π ∣ y ) ) l^∗≈B(arg max_π p(π|y)) l∗≈B(argmaxπp(π∣y))得到,即:在每个时间戳t取最可能的标记πt,并将结果序列映射到 l *上。
Lexicon-based transcription
-
在基于词典的模式中,每个测试样本与一个词典d相关联。基本上,通过选择在词典中具有Eq. 1中定义的最高条件概率的序列来识别标签序列,即 l ∗ = a r g m a x l ∈ D p ( l ∣ y ) l^∗= arg max_{l\in D} p(l|y) l∗=argmaxl∈Dp(l∣y)。然而,对于大型词典,例如50k-words的Hunspell拼写检查字典,在词典上执行穷举搜索将非常耗时,即对词典中的所有序列计算公式1并选择概率最高的序列。为了解决这个问题,我们观察到,在编辑距离度量下,通过无词典转录预测的标签序列通常接近基真值。这表明我们可以将搜索限制在最近邻的候选序列 N δ ( l ′ ) N_δ(l') Nδ(l′),其中δ是最大编辑距离,l’ 是在无词典模式下从y转录的序列:
-
l ′ = a r g max l ∈ N δ ( l ′ ) p ( l ∣ y ) l'=arg\max_{l\in{N_δ(l')}}p(l|y) l′=argl∈Nδ(l′)maxp(l∣y)
-
候选 N δ ( l ′ ) N_δ(l') Nδ(l′) 可以用BK-tree数据结构有效地找到,BK-tree是一种专门适用于离散度量空间的度量树。BK-tree的搜索时间复杂度为 O ( l o g ∣ D ∣ ) O(log |D|) O(log∣D∣),其中|D|为词典大小。因此,这个方案很容易扩展到非常大的词典。在我们的方法中,bk树是为词典离线构建的。然后,我们通过查找与查询序列的编辑距离小于或等于δ的序列,对树进行快速在线搜索。
-
Network Training
-
用 X = { I i , l i } i X = \{I_i,l_i\}_i X={Ii,li}i 表示训练数据集,其中 I i I_i Ii 为训练图像, l i l_i li 为GT值标签序列。目标是最小化基础真值条件概率的负对数似然:
-
O = − ∑ I i , l i ∈ X l o g p ( l i ∣ y i ) O=-\sum_{I_i,l_i\in X}logp(l_i|y_i) O=−Ii,li∈X∑logp(li∣yi)
-
其中yi是由Ii的循环层和卷积层产生的序列。这个目标函数直接从图像和它的真值标签序列中计算成本值。因此,该网络可以对图像和序列对进行端到端训练,省去了手动标记训练图像中所有单个组件的过程。
-
-
该网络采用随机梯度下降法(SGD)进行训练。梯度由反向传播算法计算。特别是,在转录层,误差微分通过前向-后向算法进行反向传播。在循环层中,采用时间反向传播(BPTT)来计算误差微分。
-
为了优化,我们使用ADADELTA自动计算每维学习率。与传统的动量方法相比,ADADELTA不需要手动设置学习率。更重要的是,我们发现使用ADADELTA优化比动量方法收敛更快。
Experiments
- 为了评估所提出的CRNN模型的有效性,我们在场景文本识别和乐谱识别的标准基准上进行了实验,这两个都是具有挑战性的视觉任务。训练和测试的数据集和设置在3.1节中给出,场景文本图像的CRNN详细设置在3.2节中给出,综合比较的结果在3.3节中报告。为了进一步证明CRNN的通用性,我们在第3.4节的乐谱识别任务上验证了所提出的算法。
Datasets
- 对于所有场景文本识别的实验,我们使用Jaderberg等发布的合成数据集(Synth)作为训练数据。该数据集包含800万张训练图像及其对应的地面真值词。这些图像是由合成文本引擎生成的,非常逼真。我们的网络在合成数据上进行了一次训练,并在所有其他真实世界的测试数据集上进行了测试,而没有对他们的训练数据进行任何微调。尽管CRNN模型纯粹是用合成文本数据训练的,但它在标准文本识别基准的真实图像上表现良好。
- 四种流行的场景文本识别基准用于性能评估,即ICDAR 2003 (IC03), ICDAR 2013 (IC13), IIIT5k -word (IIIT5k)和街景文本(SVT)。
- IC03测试数据集包含251张带有标记文本边界框的场景图像。根据Wang等人,我们忽略了包含非字母数字字符或少于三个字符的图像,并获得了包含860个裁剪文本图像的测试集。每个测试图像与一个由Wang等人定义的50个单词的词汇相关联。一个完整的词典是通过组合所有每个图像的词典来构建的。此外,我们使用一个由Hunspell拼写检查字典中的单词组成的5万单词词典
- IC13测试数据集的大部分数据继承自IC03。它包含1015个事实裁剪文字图像。
- IIIT5k包含从互联网上收集的3000张裁剪过的单词测试图像。每个图像都与一个50个单词的词典和一个1000个单词的词典相关联。
- SVT测试数据集由249张来自Google街景的街景图像组成。从中裁剪出647个单词图像。每个单词图像都有一个由Wang等人定义的50个单词的词典。
Implementation Details
-
我们在实验中使用的网络配置如下表所示。卷积层的架构基于VGG-VeryDeep架构。
-
-
网络配置摘要。第一行是顶层。“k”、“s”和“p”分别代表内核大小、步幅和填充大小
-
-
为了使其适合于识别英语文本,进行了调整。在第3层和第4层maxpooling中,我们采用了1 × 2大小的矩形pooling窗口,而不是传统的正方形窗口。这一调整产生了更大宽度的特征图,因此更长的特征序列。例如,包含10个字符的图像通常大小为100×32,从中可以生成25帧的特征序列。这个长度超过了大多数英语单词的长度。最重要的是,矩形池化窗口产生矩形接受域,这有利于识别一些形状较窄的字符,如“i”和“l”。
-
该网络不仅具有深度卷积层,而且具有循环层。众所周知,两者都很难训练。我们发现批归一化技术对于训练这种深度的网络非常有用。在第5层和第6层卷积层之后分别插入两个批处理归一化层。使用批处理归一化层,训练过程大大加快。
-
我们在Torch7框架内实现网络,并为LSTM单元(在Torch7/CUDA中),转录层(在c++中)和bk树数据结构(在c++中)定制实现。实验在一台配备2.50 GHz Intel® Xeon® E52609 CPU、64GB RAM和NVIDIA® Tesla™ K40 GPU的工作站上进行。使用ADADELTA训练网络,将参数ρ设为0.9。在训练过程中,为了加速训练过程,所有图像都缩放到100 × 32。训练过程大约需要50个小时才能达到收敛。测试图像的高度被缩放为32。宽度与高度按比例缩放,但至少为100像素。在没有词典的IC03上,平均测试时间为0.16s/sample。将近似词典搜索应用于IC03的50k词典,参数δ设为3。测试每个样本平均需要0.53秒。
Comparative Evaluation
-
本文提出的CRNN模型和基于深度模型的方法等最新技术在上述四个公共数据集上获得的所有识别精度如下表所示。
-
-
在四个数据集上的识别准确率(%)。在第二行中,“50”、“1k”、“50k”和“Full”表示使用的词典,“None”表示在没有词典的情况下进行识别。(*在严格意义上不是字典无关的,因为它的输出被限制在90k的字典中。
-
-
在受约束的词典情况下,我们的方法始终优于大多数最先进的方法,并且平均优于[Reading text in the wild with convolutional neural networks.]中提出的最佳文本阅读器。具体来说,我们在IIIT5k上获得了更好的性能,而与[Reading text in the wild with convolutional neural networks.]相比,SVT仅在使用“Full”词典的IC03上获得了较低的性能。请注意,[Reading text in the wild with convolutional neural networks.]中的模型是在一个特定的字典上训练的,即每个单词都与一个类标签相关联。与[Reading text in the wild with convolutional neural networks.]不同的是,CRNN并不局限于识别已知字典中的单词,它可以处理随机字符串(如电话号码)、句子或其他脚本(如汉语单词)。因此,在所有的测试数据集上,CRNN的结果是竞争性的。
-
在无约束词典的情况下,我们的方法在SVT上达到了最好的性能,但在IC03和IC13上仍然落后于一些方法。请注意,上表中“none”列中的空白表示这些方法无法应用于没有词典的识别,或者没有报告无约束情况下的识别准确性。我们的方法只使用具有词级标注的合成文本作为训练数据,这与photocr使用790万具有字符级标注的真实单词图像进行训练有很大的不同。[Reading text in the wild with convolutional neural networks]报告的最佳性能是在无约束词典的情况下,受益于它的大字典,然而,它不是前面提到的一个严格不受词典约束的模型。从这个意义上说,我们在无约束词典情况下的结果仍然是有希望的。
-
为了进一步理解所提出的算法相对于其他文本识别方法的优势,我们对E2E Train、Conv Ftrs、CharGT-Free、Unconstrained和Model Size几个属性进行了全面比较,如下表所示。
-
-
各种方法的比较。比较属性包括:1)端到端可训练(端到端训练);2)使用直接从图像中学习的卷积特征,而不是使用手工制作的卷积特征(Conv Ftrs);3)在训练过程中不需要为角色设置真实边界框(免费);4)不局限于预定义的字典(无约束);5)模型大小(如果使用端到端可训练的模型),通过模型参数的数量来衡量(模型大小,M代表百万)。
-
-
E2E Train: 本专栏将展示某个文本阅读模型是否端到端可训练,不需要任何预处理或通过几个分离的步骤,这表明这种方法对于训练来说是优雅而干净的。从上表可以看出,只有基于深度神经网络的模型(包括[Deep structured output learning for unconstrained text recognition,Reading text in the wild with convolutional neural networks]和CRNN)才具有这一特性。
-
Conv Ftrs: 本专栏表明一种方法是直接使用从训练图像中学习到的卷积特征还是手工特征作为基本表示。
-
CharGT-Free: 这一列用于指示字符级注释对于训练模型是否必要。由于CRNN的输入和输出标签可以是一个序列,所以不需要字符级注释。
-
Unconstrained: 这一列指示训练的模型是否受特定字典的约束,无法处理字典外的单词或随机序列。请注意,尽管最近通过标签嵌入和增量学习学习的模型取得了高度竞争的性能,但它们被限制在特定的字典中
-
Model Size: 这一栏报告学习模型的存储空间。在CRNN中,所有层都有权重共享连接,不需要完全连接的层。因此,CRNN的参数数量远少于在CNN变体上学习到的模型,导致模型小得多。我们的模型有830万个参数,只占用33MB RAM(每个参数使用4字节的单精度浮点数),因此它可以很容易地移植到移动设备上。
-
上表清晰地详细展示了不同方法之间的差异,充分展示了CRNN相对于其他竞争方法的优势。此外,为了测试参数δ的影响,我们在Eq. 2中实验了不同的δ值。在下图中,我们将识别精度绘制为δ的函数。更大的δ产生更多的候选,从而更准确的基于词典的转录。另一方面,由于bk树搜索时间较长,以及需要测试的候选序列数量较多,计算成本随着δ的增大而增加。在实践中,我们选择δ = 3作为精度和速度之间的权衡。
-
-
蓝线图:识别精度作为函数参数δ。红色条:每个样本的词典搜索时间。在IC03数据集上测试了50k词典。
-
Musical Score Recognition
-
乐谱通常由按五线谱排列的音符序列组成。在图像中识别乐谱被称为光学音乐识别(OMR)问题。以前的方法通常需要对图像进行预处理(主要是二值化)、五线谱检测和单个音符识别。我们将OMR作为一个序列识别问题,并直接使用CRNN从图像中预测音符序列。为了简单起见,我们只识别音高,忽略所有和弦,并假设所有乐谱都是相同的大调音阶(C大调)。
-
据我们所知,目前还没有评估音高识别算法的公开数据集。为了准备CRNN所需的训练数据,我们从[Free sheet music | Download PDF or print on Musescore.com]中收集了2650张图像。每个图像包含一个包含3到20个音符的乐谱片段。我们手动标记所有图像的地面真值标记序列(非ezpitch序列)。通过旋转、缩放和噪声破坏,以及用自然图像替换背景,将收集到的图像增强到265k个训练样本。为了进行测试,我们创建了三个数据集:1)“Clean”,其中包含收集的260张图像。示例如图a所示;2)“合成”,由“清洁”创建,使用上述增强策略。它包含200个样本,部分样本如图b所示;3)“真实世界”,包含200张用手机相机从音乐书中拍摄的乐谱片段图像。示例如图c.1所示
-
-
(a)采集的干净乐谱图像(b)合成乐谱图像。©用手机相机拍摄的真实分数图像
-
-
由于我们的训练数据有限,我们使用简化的CRNN配置来减少模型容量。与表的配置不同,去掉了第4层和第6层卷积层,将2层双向LSTM替换为2层单向LSTM。该网络使用图像对和相应的标签序列进行训练。用于评估识别性能的两个指标是:1)片段准确率,即正确识别得分片段的百分比;2)平均编辑距离,即预测的音高序列与真实音高之间的平均编辑距离。为了比较,我们评估了两种商用OMR引擎,即Capella Scan和PhotoScore。
-
下表总结了结果。CRNN的性能大大优于这两种商用系统。Capella Scan和PhotoScore系统在Clean数据集上的表现相当不错,但在合成数据和真实数据上的性能明显下降。主要原因是它们依赖于鲁棒二值化来检测五线谱和音符,但由于恶劣的照明条件、噪声破坏和杂乱的背景,二值化步骤经常在合成和真实数据上失败。另一方面,CRNN使用对噪声和失真具有高度鲁棒性的卷积特征。此外,CRNN中的循环层可以利用乐谱中的上下文信息。每个音符不仅能被自己识别,还能被附近的音符识别。因此,一些音符可以通过与附近的音符进行比较来识别,例如:对比它们的垂直位置。
-
结果显示了CRNN的通用性,因为它可以很容易地应用于其他基于图像的序列识别问题,需要最少的领域知识。与Capella Scan和PhotoScore相比,我们基于crnn的系统还处于初级阶段,缺少很多功能。但它为OMR提供了一种新的方案,并在音高识别方面表现出了良好的性能。
-
-
在我们收集的三个数据集上,比较CRNN和两种商用OMR系统的基音识别精度。性能是通过片段准确性和平均编辑距离来评估的(“片段准确性/平均编辑距离”)。
-
Conclusion
-
在本文中,我们提出了一种新的神经网络架构,称为卷积递归神经网络(CRNN),它集成了卷积神经网络(CNN)和递归神经网络(RNN)的优点。CRNN能够接受不同维度的输入图像,并产生不同长度的预测。它直接运行在粗糙的标签(如单词)上,在训练阶段不需要对每个单独的元素(如字符)进行详细的注释。此外,由于CRNN放弃了传统神经网络中使用的全连接层,它产生了一个更紧凑和高效的模型。所有这些特性使CRNN成为基于图像的序列识别的一种优秀方法。
-
在场景文本识别基准上的实验表明,与传统方法以及其他基于CNN和RNN的算法相比,CRNN取得了优越或极具竞争力的性能。这证实了所提算法的优越性。此外,在光学音乐识别(OMR)的基准测试中,CRNN显著优于其他竞争对手,验证了CRNN的通用性。
-
实际上,CRNN是一个通用框架,因此它可以应用于其他涉及图像序列预测的领域和问题(如汉字识别)。进一步加快CRNN的速度,使其在实际应用中更具实效性,是未来值得探索的另一个方向。
-
端到端OCR的难点在哪儿呢?在于怎么处理不定长序列对齐问题!CRNN OCR其实是借用了语音识别中解决不定长语音序列的思路。与语音识别问题类似,OCR可建模为时序依赖的词汇或者短语识别问题。基于联结时序分类(Connectionist Temporal Classification, CTC)训练RNN的算法,在语音识别领域显著超过传统语音识别算法。一些学者尝试把CTC损失函数借鉴到OCR识别中,CRNN 就是其中代表性算法。CRNN算法输入100*32归一化高度的词条图像,基于7层CNN(普遍使用VGG16)提取特征图,把特征图按列切分(Map-to-Sequence),每一列的512维特征,输入到两层各256单元的双向LSTM进行分类。在训练过程中,通过CTC损失函数的指导,实现字符位置与类标的近似软对齐。