V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MoModel
V2EX  ›  推广

场景文本识别——基于图像序列识别的端到端可训练神经网络模型

  •  
  •   MoModel · 2019-08-18 21:46:04 +08:00 · 5377 次点击
    这是一个创建于 1684 天前的主题,其中的信息可能已经有所发展或是发生改变。

    1. 背景介绍

    1.1 主题介绍

    由于神经网络的强大复兴,特别是深度卷积神经网络( DCNN )模型在各种视觉任务中的巨大成功的推动,最近大多数与深度神经网络相关的工作主要致力于检测或分类对象类别。基于图像的序列识别问题一直是计算机视觉中长期存在的研究课题。本文将介绍由 Baoguang Shi 等人发表的一篇论文 An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition。在该论文中,作者研究了场景文本识别的问题,这是基于图像的序列识别中最重要和最具有挑战性的任务之一。相较于一般的对象识别任务,基于图像序列识别任务中的识别对象往往是以序列的形式出现,而不是孤立地出现。因此,识别这样的对象通常需要系统预测一系列标签而不是单个标签。序列对象另一个独特之处在于它们的长度可能发生较大的变化。

    1.2 研究背景

    对于特定的序列对象(例如场景文本),人们已经做过一些尝试来解决此类对象的识别问题。例如,利用某种算法检测出单个字符,然后利用训练好的 DCNN 模型来识别检测到的单个字符。此类方法通常需要训练强大的字符检测器,以便从原始单词图像中精确地检测和裁剪每个字符。另外,一些其他方法将场景文本识别视为图像分类问题,为每个英文单词(总共 9 万个单词)分配一个类标签。运用此类方法产生的模型将有众多的类标签,因此很难泛化到其他类型的序列对象。例如,中文文本、音乐配乐等序列对象拥有上百万种类标签,该模型很难泛化到此类序列对象。因此,基于 DCNN 的系统不能直接用于基于图像的序列识别。循环神经网络( RNN )模型是深度神经网络家族中另一个重要分支,用于处理序列问题。RNN 的一大优势是在训练和测试的时候,不需要序列对象图像中每一个元素的位置信息。然而,将输入图像转换成图像特征序列的预处理步骤是必须的。预处理步骤独立于 RNN 模型的流程步骤,因此基于 RNN 的现有系统不能以端到端的方式进行训练和优化。
    除了深度神经网络之外,一些传统的场景文本识别方法也为这一领域带来了一些新颖的想法,并且取得了优异的表现。例如,将单词图像和文本字符串嵌入到公共向量子空间并将词识别转化为检索问题、利用中层特征进行场景文本识别等方法在标准数据集上取得了有效的性能。但是此类方法与基于神经网络的算法相比较而言,模型的表现还是较差。
    在这篇文章中,作者提出了一种将特征提取、序列建模和转录整合到统一框架中的新型神经网络模型——专门用于基于图像的图像序列的识别。这种神经网络模型被称为卷积循环神经网络( CRNN )模型,因为它是 DCNN 模型和 RNN 模型的组合。

    2. 网络结构

    如图 1 所示,CRNN 模型 的网络架构由三部分组成,包括卷积层、循环层和转录层(由下到上)。在 CRNN 的底部,卷积层自动从每个输入图像中提取特征序列。在卷积网络层之上,构建一个对卷积层特征序列的每一帧进行预测的循环网络层。在 CRNN 顶部的转录层将循环层输出的帧预测转化为标签序列。CRNN 模型虽然由不同类型的网络架构组成,但可以通过一个损失函数进行联合训练。
    场景文本识别 1.png
    图 1. 网络架构
    架构包括三个部分:1 )卷积层,从输入图像中提取特征序列; 2 )循环层,预测每一帧的标签分布; 3 )转录层,将每一帧的预测变为最终的标签序列。

    2.1 特征序列提取

    在 CRNN 模型中,卷积层部分由标准 CNN 模型中的卷积层和最大池化层组成。这一部分用来提取表示输入图片的序列特征。在输入到网络之前,所有的的图片需要被缩放到同一高度。然后,一些列的特征向量从特征图谱中被提取出来。这些特征图谱由卷积层产生,作为循环层的输入。值得注意的是,每个特征序列的特征向量在特征图谱中从左到右一列一列地产生。这意味着第 i 个特征向量是所有特征图谱第 i 列向量的联合体。在该论文中,每列的宽度被固定设置为单个像素。
    卷积、最大池化和激活函数作用在局部区域,具有平移不变性。因此,特征图谱的每一列与原始图片中的一块矩形区域对应,我们称之为感受野。这些矩形区域从左到右和特征图谱中的列向量一一对应。如图 2 所示,特征序列中的每一个向量与对应的感受野相关联,被看做是相应区域的图像描述符。
    场景文本识别 2.jpg
    图 2. 局部感受野
    提取出的特征序列中的每一个向量与输入图像中的感受野相关联,它们可以被认为是对应区域的特征向量。
    由于具有较高的鲁棒性和良好的可训练性,深层卷积特征已经被广泛运用于各种视觉识别任务。一些以前的方法都利用 CNN 来学习一个具有较好鲁棒性的表示。然而,这些方法通常通过 CNN 提取整个图像的全部表示,然后收集局部深度特征来识别序列对象的每个分量。由于 CNN 要求将输入图像缩放到固定尺寸以满足其固定的输入尺寸,所以它不适合序列对象,而且它们长度变化较大。在 CRNN 中,我们将深度特征传递到序列表示中,以便对序列对象的长度变化保持不变。

    2.2 序列标记

    在卷积层之上是一个深度双向循环神经网络来作为循环层。循环层为特征序列的每一帧预测一个标签分布。循环层的优点有三重。首先,RNN 具有很强的捕获序列上下文信息的能力。由于使用了上下文信息,基于图像的序列识别变得更加稳定有效,相比于仅仅单独使用每个标志而言。以场景文本识别为例,较宽的字符可能需要一些连续的帧来描述。此外,在观察完上下文信息之后,一些模糊的字符会更容易区分。例如,我们在识别 "il" 的时候,通过对比两个字母的高度,我们可以更加容易地识别出它们。其次,RNN 可以将误差值反向传播到其输入层,即卷积层。从而允许我们在统一的网络中共同训练循环层和卷积层。最后,RNN 能够从头到尾对任意长度的序列进行操作。
    场景文本识别 3.jpg
    图 3. ( a )基本的 LSTM 单元结构。LSTM 包括单元模块和三个门,即输入门、输出门和遗忘门;( b )论文中使用的深度双向 LSTM 结构。合并前向和后向 LSTM 的结果到双向 LSTM 中。堆叠多个双向 LSTM 产生一个深度双向 LSTM 结构。
    传统 RNN 单元在其输入和输出层之间具有自动连接的隐藏层。每次接收到序列中的帧  时,它将使用非线性函数来更新其内部状态  ,该非线性函数同时接收当前输入  和过去状态  作为其输入:
    那么预测是基于  的。以这种方式,过去的上下文  被捕获并用于预测。然而,传统的 RNN 单元有梯度消失的问题,这限制了其可存储的上下文范围,并且给训练过程增加了负担。长短期记忆网络( LSTM )是一种专门设计用于解决
    梯度消失
    问题的 RNN 单元。LSTM 由一个存储单元和三个门组成,即输入门、输出门和遗忘门。在概念上,存储单元存储过去的上下文,并且输入门和输出门允许其长时间存储。同时,存储单元中的存储内容可以被遗忘门清除。LSTM 的特殊设计允许它捕获长距离依赖,这经常发生在基于图像的序列中。
    LSTM 是定向的,它只使用过去的上下文。在基于图像的序列中,两个方向的上下文是互补的。因此,我们将两个不同方向的 LSTM 组合到一个双向 LSTM 中。此外,可以将多个双向 LSTM 堆叠起来,得到图 3.b 所示的双向 LSTM。深层结构允许相比浅层结构能够得到一个更高层次的抽象,并且在语音识别任务中取得显著的性能改进。
    在循环层中,误差在图 3.b 所示箭头的相反方向传播,即
    基于时间的反向传播( BPTT )
    。在循环层的底部,传播的微分序列被连接成图谱,反转了将特征图谱转换为特征序列的操作,并且被反馈至卷积层。实际上,我们创建了一个称为“Map-to-Sequence”的自定义网络层,作为卷积层和循环层之间的桥梁。

    2.3 转录

    转录是将 RNN 所做的每帧预测转换成标签序列的过程。数学上,转录是根据每帧预测找到具有最高概率的标签序列。在实践中,存在两种转录模式,即无词典转录和基于词典的转录。词典是一组标签序列,预测时会受到拼写检查字典约束。在无词典模式中,预测时没有任何词典。在基于词典的模式中,通过选择具有最高概率的标签序列进行预测。

    2.3.1 标签序列的概率

    我们采用 Graves 等人提出的联接时间分类(CTC**)**层中的条件概率。标签序列  的概率由每一帧的预测结构决定 ,并且忽略  ** **中每个标签所在的位置。因此,当我们使用这种概率的负对数作为训练网络的目标函数的时候,我们只需要图像及其相应的标签序列,避免了标注单个字符位置的劳动。
    标签序列的条件概率公式如下:
    ,                                                                     ( 1 )
    其中  是输入序列, 是序列长度, 表示将序列  映射为  的映射;
     的概率定义为  , 是在时间戳  时有标签  的概率。

    2.3.2 无词典转录

    在无词典转录的模式下,序列  出现的概率作为预测,正如式( 1 )所示。由于找不到精确解的可行方法,作者在论文中使用最大似然估计的方法来确定概率最大的标签序列。序列  通过  近似发现,即在每个时间戳  采用最大概率的标签  ,并将结果序列映射到  。

    2.3.3 基于词典的转录

    在基于词典的模式中,每个测试采样与词典相关联。基本上,标签序列被识别为由等式( 1 )所定义的概率最大的标签序列。概率最大时,对应的标签序列为   (2) 。
    然而,对于大型词进行搜索并选择概率最高的一个序列是非常耗时的。为了解决这个问题,我们发现通过无词典转录预测的标签序列在编辑距离度量下是非常接近真实结果的。因此,我们可以在由无词典转录预测的标签序列的最大编辑距离的范围内搜索最近邻近候选目标。
    通过** BK 树**数据结构,我们可以有效地找到候选目标,这是一种适用于离散度量空间的度量树。BK 树的搜索时间复杂度为 ,其中 |D| 词典大小。在该论文中,作者为每一个离线词典构造一个 BK 树。然后,使用 BK  树执行快速在线搜索来找到小于或等于编辑距离  的序列。

    2.4 网络训练

    数据集   表示训练集, 是训练图像, 是真实的标签序列。网络训练的目标就是最小化真实条件概率的负似然对数:          ( 3 )。 是循环层和卷积层从  生成的序列,目标函数直接从图像和真实标签序列计算代价函数。因此,网络可以在成对的图像和序列上进行端对端训练,去除了在训练图像中手动标记所有单独组件的过程。
    网络使用随机梯度下降( SGD )进行训练,梯度由反向传播算法进行计算。为了优化,我们使用 ADADELTA** **自动计算每一维的学习率。与传统的动量方法相比,ADADELTA 不需要手动设置学习率。更重要的是,ADADELTA 的优化收敛速度比动量方法更快。

    3. 实验

    为了评估 CRNN 模型的有效性,作者在场景文本识别和乐谱识别的标准基数据集上进行了实验。数据集和训练测试的设置见 3.1 小节,场景文本图像中 CRNN 的详细设置见 3.2 小节,综合比较的结果在 3.3 小节报告。为了进一步验证该模型的泛化性,在 3.4 小节中作者用乐谱识别任务作出了验证。

    3.1 数据集

    在本论文中,作者使用 Jaderberg 等人发布的合成数据集作为训练数据。数据集包含八百万训练图像及其对应的实际单词。使用四个流行的基准数据集作为模型的性能评估,即 ICDAR 2003( IC03 )、ICDAR 2013( IC13 )、IIIT 5k-word ( IIIT5k )和 Street View Text( SVT )。CRNN 模型虽然是在纯合成文本数据上进行训练的,但是它在标准文本识别数据集上的表现良好。

    3.2 实现细节

    在实验中,作者使用的网络配置总结在表 1 中,卷积层的架构是基于 VGG 的架构。为了使其适用于识别英文文本,对相应网络层进行了调整:在第 3 和第 4 个最大池化层中,采用的是 1*2 的矩形池化窗口。这种调整产生宽度较大的特征图,因此具有更长的特征序列。最重要的是,矩形池窗口产生矩形感受野(如图 2 所示),这有助于识别一些具有窄形状的字符。
    网络不仅有深度卷积层,而且还有循环层。两种网络结构都难以训练,作者在第 5 和 第 6 个卷积层之后插入两个批归一化层,可以大大加快网络的训练速度。
    场景文本识别 4.png
    **表 1. **网络配置结构

    3.3 比较评估

    提出的 CRNN 模型及其他一些算法在上述四个公共数据集上获得的所有识别精度如表 2 所示。在有约束词典的情况中,该模型的方法始终优于大多数最新的方法。并且 CRNN 不限于识别已知词典中的单词,并且能够处理随机字符串、句子或其他诸如中文单词的脚本。因此,CRNN 的结果在所有的测试集上都具有竞争力。在无约束词典的情况下,该模型在 SVT 上取得了最佳性能,但在 IC03 和 IC13 上仍落后于一些方法。表 2 中,"None" 列空白表示该方法不能用于无约束词典的情况。
    场景文本识别 5.png
    **表 2. **准确率评估

    3.4 乐谱识别

    乐谱通常由排列在五线谱的音符序列组成。识别图像中的乐谱被称为光学音乐识别( OMR )问题。以前的方法通常需要图像预处理(主要是二值化),五线谱检测和单个音符识别。作者将 OMR 作为序列识别问题,直接用 CRNN 从图像中预测音符的序列。
    为了准备 CRNN 所需的训练数据,作者收集了 2650 张图像。每个图像中有一个包含 3 到 20 个音符的乐谱片段。并且手动标记所有图像的真实标签序列。收集到的图像通过旋转,缩放和用噪声损坏增强到了 265k 个训练样本,并用自然图像替换它们的背景。对于测试,作者创建了图 4 所示的三个数据集。
    场景文本识别 6.jpg
    图 4. a) 收集到的干净乐谱图像; b) 合成的乐谱图像; c) 手机拍摄的现实世界中的乐谱图像
    实验表明,CRNN,模型优于两个商业系统—— Capella Scan 和 PhotoScore 系统。另一方面,CRNN 模型使用对噪声和扭曲具有鲁棒性的卷积特征。此外,CRNN 中的循环层可以利用乐谱中的上下文信息。每个音符不仅自身被识别,而且被附近的音符识别。因此,通过将一些音符与附近的音符进行比较从而可以识别它们。
    场景文本识别 7.jpg
    表 3. OMR 实验比较
    实验结果显示了 CRNN 的泛化性,因为它可以很容易地应用于其他的基于图像的序列识别问题,需要极少的领域知识。它为 OMR 提供了一个新的方案,并且在音高识别方面表现出极大的潜力。

    4. 总结

    在本文中,我们提出了一种新颖的神经网络架构,称为卷积循环神经网络( CRNN ),其集成了卷积神经网络( CNN )和循环神经网络( RNN )的优点。CRNN 能够获取不同尺寸的输入图像,并产生不同长度的预测。它直接在粗粒度的标签(例如单词)上运行,在训练阶段不需要详细标注每一个单独的元素(例如字符)。此外,由于 CRNN 放弃了传统神经网络中使用的全连接层,因此得到了更加紧凑和高效的模型。此外,CRNN 在光学音乐识别( OMR )的基准数据集上显著优于其它的竞争者,这验证了 CRNN 的泛化性。
    实际上,CRNN 是一个通用框架,因此可以应用于其它的涉及图像序列预测的领域和问题(如汉字识别)。进一步加快 CRNN,使其在现实应用中更加实用,是未来值得探索的另一个方向。该模型在 Mo 平台上有实现,大家可以搜索场景文本识别找到。
    项目源码地址:https://momodel.cn/workspace/5d4bec151afd943022191a50?type=app

    5. 参考资料

    1. 论文: An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition
    2. 论文:Very Deep Convolutional Networks for Large-Scale Image Recognition
    3. 博客:基于图像序列识别的端到端可训练神经网络模型
    4. 博客:端到端不定长文字识别 CRNN 算法详解
    5. 博客:端到端不定长文本识别 CRNN 代码实现
    6. 博客:长短期记忆网络( LSTM )
    7. 博客:语音识别:深入理解 CTC Loss 原理
    8. 博客:语音识别( LSTM+CTC )

    关于我们

    Mo(网址:momodel.cn)是一个支持 Python 的人工智能在线建模平台,能帮助你快速开发、训练并部署模型。


    Mo 人工智能俱乐部 是由网站的研发与产品设计团队发起、致力于降低人工智能开发与使用门槛的俱乐部。团队具备大数据处理分析、可视化与数据建模经验,已承担多领域智能项目,具备从底层到前端的全线设计开发能力。主要研究方向为大数据管理分析与人工智能技术,并以此来促进数据驱动的科学研究。

    目前俱乐部每周六在杭州举办以机器学习为主题的线下技术沙龙活动,不定期进行论文分享与学术交流。希望能汇聚来自各行各业对人工智能感兴趣的朋友,不断交流共同成长,推动人工智能民主化、应用普及化。
    image.png

    1 条回复    2019-08-29 16:46:38 +08:00
    lzfxxx
        1
    lzfxxx  
       2019-08-29 16:46:38 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3263 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 14:02 · PVG 22:02 · LAX 07:02 · JFK 10:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.