文本识别——Rosetta阅读笔记

MetaData


标题:Large scale system for text detection and recognition in images
《用于图像文本检测和识别的大规模系统》
作者:Fedor Borisyuk, Albert Gordo, Viswanath Sivakumar
团队:NaN
时间:2019.10

内容


背景&研究目的

背景

人们在Facebook和Instagram等社交网络上分享和消费信息的主要方式之一是通过照片和视频等视觉媒体。过去几年中上传至社交媒体平台的照片数量呈指数级增长,这为处理越来越多的视觉信息带来了技术挑战。从图像中检索文本信息,即光学字符识别(OCR),图像中可能出现许多潜在的字体、语言、词典和其他语言变体等,并且图像的质量往往因出现在不同背景上的文本而异。

研究目的

本文目标是在图像上传后实时执行OCR,需要花费大量时间优化系统组件,以在合理的延迟限制内执行。因此问题可以表述为:构建一个鲁棒且精确的光学字符识别系统,能够每天实时处理数亿张图像。
本文提出了一个可部署、可扩展的OCR系统——Rosetta,旨在处理每天以Facebook规模上传的图像。本文的OCR分为文本检测阶段和文本识别阶段:文本检测基于Faster-RCNN模型,负责检测图像中包含文本的区域;文本识别方法使用全卷积的基于字符的识别模型,处理检测到的位置并识别它们包含的文本。

创新点

提出了有效检测和识别图像中的文本的建模技术,并描述了Rosetta的系统架构;对现有技术进行广泛的评估,解释构建大规模OCR系统的实用方法,并根据系统开发和部署期间的经验教训,提供了有关某些组件为何以及如何工作的深刻直觉。

系统架构

image.png
Facebook的实时大规模OCR系统。Rosetta部署在生产环境中,旨在以实时方式对Facebook每天上传的图像进行操作。Rosetta利用了一个基于拉取的模型,其中客户端应用程序上传的图像 ① 被添加到分布式处理队列中。Rosetta中的推理机在资源可用时提取排队的作业并异步处理它们。用户可以在排队作业时注册回调,Rosetta在每个作业被处理后立即调用回调,以便下游应用程序立即使用结果。处理队列针对高吞吐量和可用性进行了优化,并在底层利用RocksDB实现持久性。这种基于拉取的异步体系结构提供了各种好处,包括更好的负载平衡、在请求出现意外峰值时的速率限制,以及优化系统吞吐量的能力。
Rosetta内部的在线图像处理包括以下步骤:
(1)将图像下载到Rosetta集群内的一台本地机器上,并进行调整大小和归一化等预处理步骤。
(2)执行文本检测模型 ④ ,获取图像中所有单词的位置信息(边界框坐标和分数)。
(3)将单词位置信息传递给文本识别模型 ⑤ ,从图像中提取给定的每个裁剪单词区域的字符。
(4)提取的文本信息及文本在图像中的位置存储在Facebook的分布式图形数据库TAO中 ⑥ 。
(5) Search等下游应用程序可以直接从TAO中访问提取的与图像对应的文本信息 ⑦ 。

图像预处理

大多数文本识别方法通过将图像调整为32 × 100像素来预处理单词图像裁剪,导致相同的字符根据单词的长度看起来非常不同,反过来又需要更多的模型容量来准确表示。因此,在训练时单词图像的大小调整为32×128像素,只有比128像素更宽时才会扭曲宽高比,否则使用右零填充。这确保了大多数单词不会产生失真,能够有效地使用批量图像进行训练;测试时将图像调整为32像素的高度,保留其长宽比(任意长的宽度),确保测试和训练图像通常不会有较大的域移位。
此外,给定一个神经网络主体(ResNet-18)和一个单词图像,发出的字符概率的数量取决于单词图像的宽度,而不是字符数量(尽管显然两者是相关的)。通过用相同的常数因子拉伸所有训练和测试图像,可以控制发出概率的数量,并将其与转录长度近似对齐,这可以影响训练收敛性和测试精度。实验发现使用1.2的拉伸系数产生更好的结果。

文本提取模型

两步模型体系结构:文本检测和文本识别。第一步基于Faster-RCNN检测图像中可能包含文本的矩形区域。第二步使用具有CTC损失的全卷积模型进行单词识别。这个两步过程能够将训练过程和部署更新解耦到检测和识别模型,并行运行单词识别,以及独立支持不同语言的文本识别。
image.png

文本检测

文本检测采用基于Faster-RCNN的方法,通过以下方式同时执行检测和识别:

  1. Conv layers:将图像表示为卷积特征图的全卷积CNN(通常基于ResNet架构),提取图像的特征图。
  2. Region Proposal Networks:区域生成网络(RPN)将该特征图作为输入,并产生一组包含高似然文本的k个候选边界框及其置信度分数。
  3. Roi Pooling:从与每个候选框的空间范围相关的特征映射中提取特征,并学习分类器来识别它们。为了选出k个最有希望的候选框,根据置信度评分对其进行排序,并使用非最大抑制(NMS)来选择。此外,边框回归通常用于提高生成的边框准确性。

整个检测系统(特征编码、RPN和分类器)以监督的端到端方式联合训练。出于效率原因使用基于shufflenet取代了ResNet。ShuffleNet比ResNet快且不会导致准确性下降。ShuffleNet卷积主干使用ImageNet数据集进行预训练。为了训练端到端检测系统,模型使用内部合成数据集进行引导,然后使用COCO-Text和人类注释的数据集进行微调,以学习真实世界的特征。

文本识别

对文本识别的不同架构和损失进行了实验。使用不同架构(ResNet-18和SqueezeNet)进行实验,在计算开销很小的情况下,ResNet-18获得了更高的精度;使用不同损失:

  • 基于Jaderberg等的字符序列编码模型 CHAR

假设所有图像具有相同的大小(调整为32×100而不保留长宽比),并且每个单词可以识别的最大字符数为k(k=23)。对于较长的单词,只能识别其中的k个字符。CHAR模型的主体由一系列卷积组成,后面是k个独立的多类分类头,每个头预测每个位置的字母表字符(包括NULL字符)。在训练过程中,一个人共同学习卷积体和k个不同的分类器。
CHAR模型很容易使用k个并行损失(softmax +负交叉熵)进行训练,并提供了一个合理的基线,但能正确识别太长的单词,并且分类器中的参数数量非常大,导致大型模型倾向于过拟合。

  • 输出字符序列的全卷积模型 CTC

在基于ResNet-18卷积体,最后的卷积层用于预测输入单词的每个图像位置上最可能的字符。与其他不同,没有使用明确的循环网络(如LSTM或GRU)或任何注意机制,而是直接产生每个字符的概率。
image.png
使用CTC损失训练,CTC损失通过在所有可能对齐路径的集合上边缘化来计算给定预测的标签的条件概率,并且可以使用动态规划有效地计算。特征映射的每一列对应于图像该位置的字母表中所有字符的概率分布,CTC找到这些预测(可能包含重复字符或空白字符)与真值标签之间的对齐。在推理时,计算最优标记通常是棘手的。相反,通常会放松这个问题:基于最可能的路径将对应于最可能的标记的假设,通过贪婪地在序列的每个位置取最可能的字符,在线性时间内找到最佳路径解码,作为后处理删除未被空白字符分隔的连续重复字符。
CTC模型解决了CHAR模型中存在的两个问题:参数明显更少(因为它不需要k个独立的全连接层),并且可以预测任意长度的单词(因为模型是全卷积的);由于在CHAR模型中执行字符分类的k个全连接层的成本,CTC模型的推理时间比CHAR模型快26%。

模型训练

首先使用合成数据训练文本识别模型,对特定应用的人类评级数据进行微调,以获得更好的结果。有趣的是,实验发现CTC模型比CHAR模型更难训练:CHAR模型收敛得很快,对学习率等初始参数不太敏感,而CTC模型要么在几次迭代后就一直偏离,要么训练得太慢,无法实际使用。推测比对序列是比学习独立分类器困难得多的问题,这就是模型训练不令人满意的原因。
image.png
为了有效地训练CTC模型,考虑两种变通方法:用CHAR模型训练好的权重初始化模型的权重,在从头开始学习最后一个卷积层的同时对这些权重进行微调;基于课程学习,从一个简单的问题开始,随着模型的改进增加难度。实验对模型进行了10个小epoch的预热,这些epoch只考虑非常短的单词。从长度≤3的单词开始训练,并在每个epoch增加单词的最大长度。实验还减少了图像的宽度,以简化初始问题。同时,从一个很小的学习率开始,并不断提高,直到达到CHAR模型相同的初始学习率。之后进行标准训练,在n次之后降低学习率。然而,即使在这个阶段仍然应用课程学习的原则:在每个时代结束时,除了学习率的降低,还增加了单词1的宽度。
image.png
预训练和课程学习方法都很有效,并产生了非常相似的定量结果。最后采用课程学习作为本文的标准方法,原因有两个:从头到尾进行热身比从头到尾训练CHAR模型要快一些;课程学习消除了训练单独的CHAR模型并将权重复制到CTC模型的需要,这在模型之间产生了不希望的依赖关系。

实验

数据集

  • COCOText:包含超过63,000张图片和145,000个文本实例。
  • 合成数据集 Synthetic:大约40万张合成图像用于训练,5万张用于测试。

评价指标

文本检测模型的性能:

  • IoU:两个区域的重叠程度,框的相交面积与框的并集面积之比。
  • AP:给定IoU阈值区间内的精度-召回率曲线下的面积。 A P = ∑ n ( R n − R n − 1 ) P n AP =\sum_n(R_n−R_{n−1})P_n AP=n(RnRn1)Pn,其中 P n P_n Pn R n R_n Rn为第n个评分阈值下的精度和召回率。
  • mAP:整个测试集AP的平均值。

注:F1-score在相同配置的训练中会以5.87分的标准差波动,原因是F1-score是在精确召回曲线上的一个点上测量的,需要在曲线上选择一个阈值来计算它,对于训练中的微小变化,例如随机初始化权重,阈值也会波动,而 mAP 对此类变化具有鲁棒性。

  • 推断时间:检测和计算图像中观察到的所有文本信息的边界框所花费的时间。

文本识别模型的性能:

  • 准确率 Accuracy:所有的预测正确(正类负类)的占总的比重。
  • 编辑距离 Levenshtein Distance:预测单词和基本真实单词之间的单个字符编辑(插入、删除和替换)的数量。
  • 推断时间:识别模型对图像中每个检测到的单词运行所花费的时间。

实验结果

文本检测模型的实验:

  • 微调数据集

image.png

  • 卷积体
    image.png

  • RPN长宽比、不同卷积体

image.png

  • RPN_POST_NMS_TOP_N设置

image.png

  • NMS

image.png
文本识别模型的实验:

  • 不同架构

在计算开销很小的情况下,ResNet-18获得了更高的精度。(检测模型和识别模型在ResNet-18推理性能上的差异是因为,识别模型在更小的输入图像上运行:检测模型分辨率接近600 × 800像素,识别模型分辨率32 × 128像素。)
此外,不使用循环模型(如LSTM或GRU)来模拟字符之间的交互。(循环模型在推理时间上较慢,如果减少推理时间,精度的小损失是可以承受的。此外一些研究已经表明循环模型对于准确模拟人物之间的相互作用并不是严格必要的。)

  • 区分大小写标签

在训练期间区分和不区分大小写都会在不区分大小写的测试产生相同结果;而使用区分大小写进行训练能够执行区分大小写的测试,这在Rosetta的一些下游应用程序中可能很有用。

  • 不同损失

image.png

  • 单词总数的召回率

大约37%的文本检测错误案例中,文本识别模型仍然可以正确地恢复只有一个字符错误的单词。
image.png

部署

Rosetta服务大规模部署在Facebook中,提供从图像中提取文本的云API,每天处理大量上传到Facebook和Instagram的图像。在Rosetta中,图像在较大的维度上被调整为800px,并通过检测模型输出每个单词周围的边界框坐标;将单词patch裁剪出来,在保持长宽比的同时将大小调整为32px的高度进行识别模型。识别模型的推理运行时间取决于图像中检测到的单词数量。
Rosetta被逐步部署到客户端应用程序中,以预测任何问题,这样的部署计划包括每周增加的流量,最初是为一组预定义的内部用户服务,然后是1%、5%、10%、25%、40%、80%,最后是100%。评估资源利用率,并逐步向处理队列中添加更多的机器。
Faster-RCNN检测模型使用最近开源的Detectron框架进行训练,该框架建立在Caffe2之上;文本识别模型使用PyTorch进行训练,因为它具有快速原型和序列建模场景的灵活性。两个模型都使用Caffe2部署到生产环境中,使用中间ONNX格式将文本识别模型从PyTorch转换为Caffe2。

总结&未来计划

本文提出构建可扩展OCR系统Rosetta的体系结构方法。通过全面的评估,展示了在规模和处理时间方面实现高效率与模型准确性之间的权衡。Rosetta被部署到生产中,每天处理上传到Facebook和Instagram上的图像。

  • 63
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刀二

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值