OCR - 1 - PP-OCR: A Practical Ultra Lightweight OCR System - 1 - 论文学习
PP-OCR: A Practical Ultra Lightweight OCR System
Abstract
光学字符识别(OCR)系统已广泛应用于各种应用场景,如办公自动化(OA)系统、工厂自动化、在线教育、地图制作等。然而,由于文本外观的多样性和计算效率的要求,OCR仍然是一项具有挑战性的任务。本文提出了一种实用的超轻型OCR系统,即PP-OCR。PP-OCR的整体模型尺寸仅为3.5M,可识别6622个汉字;用于识别63个字母数字符号的模型大小为2.8M。我们介绍了一系列策略,以增强模型能力或减小模型大小。并给出了相应的使用了实际数据的ablation实验。同时,发布了几个用于中英文识别的预训练模型,包括文本检测器(使用97K图像)、方向分类器(使用600K图像)以及文本识别器(使用1790万图像)。此外,本文提出的PP-OCR也在其他几种语言识别任务中得到了验证,包括法语、韩语、日语和德语。以上提到的模型已开源,代码可见:https://github.com/PaddlePaddle/PaddleOCR.
1 Introduction
OCR(光学字符识别)是一项旨在自动识别图像中文本的技术,如图1所示,具有悠久的研究历史和广泛的应用场景,如文档电子化、身份认证、数字金融系统和车辆牌照识别。此外,在工厂中,通过自动提取产品的文本信息,可以更方便地管理产品。学生的离线家庭作业或试卷可以通过OCR系统进行电子化,以提高师生之间的沟通效率。OCR还可以用于标记街景图像的兴趣点(POI,point of interests),从而提高地图制作效率。丰富的应用场景,使OCR技术具有巨大的商业价值,同时也面临许多挑战。
Various of Text Appearances 图像中的文本一般可以分为两类:场景文本和文档文本。场景文本指如图3所示的自然场景中的文本,通常会因透视、缩放、弯曲、杂乱、字体、多语言、模糊、照明等因素而发生显著变化。如图4所示,文档文本在实际应用中更常见。高密度和长文本导致的不同问题需要解决。否则,文档图像文本识别通常需要对结果进行结构化,这就带来了一项新的艰巨任务。
Computational Efficiency 在实际应用中,需要处理的图像通常是海量的,这使得高计算效率成为设计OCR系统的一个重要标准。考虑到成本,CPU比GPU更适合使用。特别是,在许多情况下,OCR系统需要在嵌入式设备上运行,如手机,这使得有必要考虑模型的大小。权衡模型大小和性能是困难的,但也是很有价值得。在本文中,我们提出了一个实用的超轻型OCR系统,名为PP-OCR,它由三部分组成,文本检测、检测框校正和文本识别,如图2所示。
Text Detection 文本检测的目的是定位图像中的文本区域。在PP-OCR中,我们使用可微二值化(DB,Differentiable Binarization)(Liao等人,2020)作为基于简单分割网络的文本检测器。DB的简单后处理使其非常高效。为了进一步提高其有效性和效率,使用了以下六种策略:轻量级backbone、轻量级head、移除SE模块、余弦学习率衰减、学习率warm_up和FPGM修剪器。最后,文本检测器的模型尺寸减小到1.4M。
Detection Boxes Rectify 在识别检测到的文本之前,需要将文本框转换为水平矩形框,以便后续的文本识别。由于检测框由四个点组成,因此通过几何变换很容易实现。但是,经过校正的框可能是倒过来的。因此,需要一个分类器来确定文本的方向。如果确定某个框是反向的,则需要进一步翻转。训练文本方向分类器是一项简单的图像分类任务。我们采用以下四种策略来增强模型能力和减小模型尺寸:轻量级backbone、数据增强、输入分辨率和PACT量化。最后,文本方向分类器的模型大小为500KB。
Text Recognition 在PP-OCR中,我们使用CRNN(Shi、Bai和Yao 2016)作为文本识别器,这在文本识别中得到了广泛应用和且十分实用。CRNN集成了特征提取和序列建模。它采用了Connectionist Temporal Classification(CTC) 损失,以避免预测和标签之间的不一致。为了增强文本识别器的模型能力并减小模型大小,使用了以下九种策略:轻量级backbone、数据增强、余弦学习率衰减、特征map分辨率、正则化参数、学习率warm_up、轻量级head、预训练模型和PACT量化。最后,对于中文和英文识别,文本识别器的模型大小仅为1.6M,对于字母数字符号识别,其模型大小仅为900KB。
为了实现一个实用的OCR系统,我们构建了一个大规模的中文和英文识别数据集。具体来说,文本检测数据集有97K个图像。方向分类数据集有600k图像。文本识别数据集有1790万张图像。选择少量数据快速进行ablation实验,并选择合适的策略。我们进行了大量ablation实验,以显示图2中不同策略的效果。此外,我们还验证了PP-OCR系统在其他语言识别中的应用,包括字母数字符号、法语、韩语、日语和德语。
论文的其余部分组织如下。在第2节中,我们将介绍一系列的模型增强或减肥(slimming)策略。第三节讨论了实验结果,第四节给出了结论。
2 Enhancement or Slimming Strategies
2.1 Text Detection
本节将详细介绍六种增强文本检测器模型能力或减小模型大小的策略。图5显示了文本检测器DB的体系结构。
Light Backbone backbone的大小对文本检测器的模型大小有主要影响。因此,建造轻量级模型时,应选择轻量级backbone。随着图像分类技术的发展,MobileNetV1、MobileNetV2、MobileNetV3和ShuffleNetV2系列通常被用作轻量级backbone。每个系列都有不同的规模。考虑到在CPU上的推理时间和准确度,PackerClas(https://github.com/PaddlePaddle/PaddleClas/ )提供了20多种backbone,如图6所示,
当预测时间相同时,MobileNetV3可以获得更高的精度。至于规模的选择,根据经验我们采用MobileNetV3_large_x0.5来平衡准确性和效率。顺便说一句,Padderclas提供了多达24个系列的图像分类网络结构和训练配置,122个模型的预训练权重及其评估指标,如ResNet、ResNet vd、SERes NeXt、Res2Net、Res2Net vd、DPN、DenseNet、EfficientNet、Exception、HRNet等。
Light Head 文本检测器的head与FPN(Lin et al.2017)在目标检测方面的架构类似,并融合不同尺度的特征maps,以提高小文本区域检测的效果。为了方便合并不同分辨率的特征映射,通常使用1×1卷积将特征maps减少到相同数量的channel(简称inner_channels)。概率map和阈值map由融合后的特征map生成,其中的卷积也与上述inner_channels相关。因此,inner_channels对模型尺寸有很大影响。当inner_channels从256减少到96时,模型尺寸从7M减少到4.1M,但精度只是略有下降。
Remove SE SE是squeeze-and-excitation (Hu, Shen, and Sun 2018)的缩写。如图7所示,SE块显式地建模channels之间的相互依赖关系,并自适应地重新校准channel-wise特征响应。由于SE块可以明显提高视觉任务的准确性,所以MobileNetV3的搜索空间中包含了SE块,并且MobileNetV3体系结构中包含了很多SE块。然而,当输入分辨率较大时,例如640×640,使用SE块很难估计channel-wise特征响应。精度提高有限,但时间成本非常高。当SE块从backbone中移除时,模型尺寸从4.1M减小到2.5M,但精度没有影响。
Cosine Learning Rate Decay 学习速率是控制学习速度的超参数。学习速率越低,损失值的变化越慢。虽然使用较低的学习速度可以确保不会错过任何局部极小值,但这也意味着收敛速度较慢。在训练的早期阶段,权重处于随机初始化状态,因此我们可以设置一个相对较大的学习速率以加快收敛速度。在训练后期,权重接近最佳值,因此应使用相对较小的学习率。余弦学习率衰减已成为提高模型精度的首选学习率缩减策略。在整个训练过程中,余弦学习速率衰减保持了较大的学习速率,因此其收敛速度较慢,但最终的收敛精度较好。图8比较了学习率衰减的不同方式。
Learning Rate Warm-up 论文(He等人,2019a)表明,使用学习率预热操作有助于提高图像分类的准确性。在训练过程开始时,使用过大的学习率可能会导致数值不稳定,建议使用较小的学习率。当训练过程稳定时,将使用初始学习率。对于文本检测,实验表明该策略也是有效的。
FPGM Pruner 剪枝是提高神经网络模型推理效率的另一种方法。为了避免模型修剪导致的模型性能下降,我们使用FPGM(He et al.2019b)在原始模型中寻找不重要的子网络。FPGM使用几何中值作为准则,卷积层中的每个滤波器被视为欧氏空间中的一个点。然后计算这些点的几何中值,并移除具有类似值的过滤器,如图9所示。每层的压缩比对于修剪模型也很重要。均匀修剪每一层通常会导致性能显著下降。在PP-OCR中,根据(Li等人,2016)中的方法计算每一层的剪枝敏感性,然后用于评估每一层的冗余度。
2.2 Direction Classification
在本节中,将详细介绍增强方向分类器的模型能力或减小模型大小的四种策略。
Light Backbone 我们还采用了与文本检测器相同的MobileNetV3作为方向分类器的backbone。因为这个任务相对简单,所以我们根据经验使用了MobileNetV3_small_x0.35去平衡准确性和效率。当使用更大的backbone时,准确度不会提高更多。
Data Augmentation 本文(Yu等人,2020)展示了一些用于训练文本识别器的图像处理操作,如旋转、透视失真、运动模糊和高斯噪声。这些过程简称为BDA(基础数据扩充)。它们被随机添加到训练图像中。实验表明,BDA算法对方向分类器的训练也很有用。除了BDA,最近还提出了一些新的数据增强操作,以提高图像分类的效果,例如AutoAugment(Cubuk等人2019)、RandAugment(Cubuk等人2020)、CutOut(DeVries and Taylor 2017)、RandErasing(Zhong等人2020)、HideAndSeek(Singh and Lee 2017)、GridMask(Chen 2020),Mixup(Zhang等人,2017年)和Cutmix(Yun等人,2019年)。但实验表明,除了RandAugment和RandErasing外,大多数算法都不适用于方向分类器的训练。RandAugment效果最好。最后,我们在方向分类的训练图像中加入BDA和RandAugment。
Input Resolution 一般来说,当归一化图像的输入分辨率增加时,精度也会提高。由于方向分类器的backbone非常轻量级,适当提高分辨率不会导致计算时间明显增加。在以前的大多数文本识别方法中,归一化图像的高度和宽度分别设置为32和100。然而,在PP-OCR中,高度和宽度分别设置为48和192,以提高方向分类器的精度。
PACT Quantization 量化使神经网络模型具有更低的延迟、更小的体积和更低的计算功耗。目前,量化主要分为两类:离线量化和在线量化。离线量化是指一种定点量化方法,它使用KL发散和移动平均等方法来确定量化参数,并且不需要重新训练。在线量化是在训练过程中确定量化参数,它可以提供比离线量化模式更少的量化损耗。
PACT(PArameterized Clipping acTivation)(Choi et al.2018)是一种新的在线量化方法,可以提前从激活中去除一些异常值。剔除异常值后,模型可以学习到更合适的定量尺度。PACT对激活进行预处理的公式如下:
普通PACT方法的激活值预处理是基于ReLU函数的。所有大于某个阈值的激活值都将被截断。然而,MobileNetV3中的激活功能不仅是ReLU,而且是hard swish。使用普通PACT量化会导致更高的量化损失。因此,我们对激活预处理公式进行如下修改,以减少量化损失。
我们使用改进的PACT量化方法对方向分类器模型进行量化。此外,将系数为0.001的L2正则化添加到PACT参数中,以提高模型的鲁棒性。
上述FPGM剪枝器和PACT量化的实现基于PadleSlim(https://github.com/PaddlePaddle/PaddleSlim/ )。PadleSlim是一个用于模型压缩的工具包。它包含一系列压缩策略,如剪枝、定点量化、知识蒸馏、超参数搜索和神经结构搜索。
2.3 Text Recognition
本节将详细介绍九种增强文本识别器模型能力或减小模型大小的策略。图10显示了文本识别器CRNN的体系结构。
Light Backbone 我们还采用了与文本检测相同的MobileNetV3作为文本识别器的backbone。根据经验,我们选择了MobileNetV3_small_x0.5来平衡准确性和效率。如果你对模型大小不太敏感,可以选择MobileNetV3_small_x1.0也是一个不错的选择。模型尺寸仅增加了2M,但精度明显提高。
Data Augmentation 除了前面提到的常用于文本识别的BDA(Base Data Augmen-tation),TIA(Luo等人,2020)也是一种有效的文本识别数据评估方法。如图11所示,首先,在图像上初始化一组基准点。然后随机移动这些点,通过几何变换生成新图像。在PP-OCR中,我们将BDA和TIA添加到文本识别的训练图像中。
Cosine Learning Rate Decay 正如在文本检测中提到的,余弦学习率衰减已成为首选的学习率降低方法。实验表明,余弦学习率衰减策略对增强文本识别模型的能力也是有效的。
Feature Map Resolution 为了适应多语言识别,尤其是中文识别,在PP-OCR中,CRNN输入的高度和宽度设置为32和320。因此,原始MobileNetV3的stride不适合文本识别。如图12所示,为了保留更多的水平信息,我们将下采样特征map的stride从(2,2)修改为(2,1),第一个除外。为了保留更多的垂直信息,我们进一步将第二次下采样特征map的stride从(2,1)修改为(1,1)。因此,第二个下采样特征map s2的stride显著影响整个特征map的分辨率和文本识别器的精度。根据经验,在PP-OCR中,s2被设置为(1,1)能获得更好的性能。
Regularization Parameters 过拟合是机器学习中的一个常见术语。一个简单的理解是,该模型在训练数据上表现良好,但在测试数据上表现不佳。为了避免过拟合,人们提出了许多常规方法。其中,weight-decay是广泛使用的避免过拟合的方法之一。在最终的损失函数之后,L2正则化(L2_decay)被添加到损失函数中。在L2正则化的帮助下,网络的权重趋向于选择较小的值,最终整个网络中的参数趋向于0,模型的泛化性能也相应提高。对于文本识别,L2_decay对识别的准确性有很大影响。
Learning Rate Warm-up 与文本检测类似,学习率warm_up也有助于文本识别。对于文本识别,实验表明使用该策略也是有效的。
Light Head 全连接层用于将序列特征编码为普通模式下的预测字符。序列特征的维数对文本识别器的模型大小有影响,尤其是对于6000多个字符的中文识别。同时,并不是维数越高,序列特征表示能力越强。在PP-OCR中,序列特征的维数根据经验设置为48。
Pre-trained Model 如果训练数据较少,则对现有网络进行微调,这些网络在ImageNet等大型数据集上进行训练,以实现快速收敛和更高精度。图像分类和目标检测中的迁移学习表明了上述策略的有效性。在真实场景中,用于文本识别的数据通常是有限的。如果使用数千万个样本对模型进行训练,即使它们是合成的,使用上述模型也可以显著提高精度。我们通过实验证明了该策略的有效性。
PACT Quantization 我们采用了方向分类的类似量化方案来减小文本识别器的模型大小,但是跳过了LSTM层。由于LSTM量化的复杂性,目前不会对这些层进行量化。
3 Experiments
3.1 Experimental Setup
DataSets 如表1所示,为了实现一个实用的OCR系统,我们构建了一个大规模的中文和英文识别数据集作为例子。
对于文本检测,有97k个训练图像和500个验证图像。在训练图像中,68K张图像是真实场景图像,来自一些公共数据集和百度图像搜索。使用的公共数据集包括LSVT(Sun等人2019)、RCTW-17(Shi等人2017)、MTWI 2018(He和Yang 2018)、CASIA-10K(He等人2018)、SROIE(Huang等人2019)、MLT 2019(Nayef等人2019)、BDI(Karatzas等人2011)、MSRA-TD500(Yao等人2012)和CCPD 2019(Xu等人2018)。百度图像搜索中的大多数训练图像都是文档文本图像。剩下的29K张合成图像主要关注长文本、多方向文本和表格文本的场景。所有验证图像均来自真实场景。
对于方向分类,有600k张训练图像和310K张验证图像。在训练图像中,100K张图像是真实场景图像,来自公共数据集(LSVT、RCTW-17、MTWI 2018)。它们是水平文本,通过纠正和裁剪图像的ground truth得到。剩下的500K张合成图像主要集中在反向文本上。我们使用垂直字体合成一些文本图像,然后水平旋转它们。所有验证图像均来自真实场景。
对于文本识别,有1790万张训练图像和18.7K张验证图像。在训练图像中,190万张是真实场景图像,来自一些公共数据集和百度图像搜索。使用的公共数据集包括LSVT、RCTW-17、MTWI 2018和CCPD 2019。剩下的16M张合成图像主要关注不同背景的场景、平移、旋转、透视变换、线条干扰、噪声、垂直文本等。合成图像的语料库来源于真实场景图像。所有验证图像也都来自真实场景。
为了快速进行消融实验并选择合适的策略,我们从真实场景训练图像中选择4k张图像进行文本检测,从真实场景训练图像中选择300k张图像进行文本识别。
此外,我们为不同的实际应用场景收集了300张图像,以评估整个OCR系统,包括合同样本、车牌、铭牌、火车票、测试表、表格、证书、街景图像、名片、数字仪表等。图3和图4显示了测试集的一些图像。
此外,为了验证所提出的PP-OCR在其他语言中的应用,我们还收集了一些用于字母数字符号识别、法语识别、韩语识别、日语识别和德语识别的语料库。然后合成文本行图像进行文本识别。一些用于字母数字符号识别的图像来自公共数据集ST(Gupta、Vedaldi和Zisserman 2016)和SRN(Yu等人,2020)。表2显示了统计数据。由于用于文本检测的MLT 2019包括多语言图像,用于中文和英文识别的文本检测器也可以支持多语言文本检测。由于数据有限,我们还没有找到合适的数据来训练多语言方向分类器。
文本检测和文本识别中使用的数据合成工具由text-render(Sanster 2018)修改而来。
Implementation Details 我们使用Adam优化器对所有模型进行训练,并采用余弦学习率衰减作为学习率调度。不同任务的初始学习率、batch大小和epochs数可见表4。当我们得到训练后的模型时,可以使用FPGM剪枝器和PACT量化进一步减小模型大小,将上述模型作为预训练模型。FPGM修剪器和PACT量化的训练过程与之前类似。
在推理阶段,HMean用于评估文本检测器的性能。准确度用于评估方向分类器或文本识别器的性能。Fscore用于评估OCR系统的性能。为了计算Fscore,正确的文本识别结果应该是准确的位置和相同的文本。GPU推断时间在单个T4 GPU上测试。CPU推断时间在Intel(R)Xeon(R)Gold 6148上进行了测试。我们使用Snapdragon 855(SD 855)来评估量化模型的推理时间。
3.2 Text Detection
表5比较了用于文本检测的不同backbone的性能。平均而言,不同规模的MobileNetV3的模型大小和推理
时间变化很大。在PP-OCR中,我们选择MobileNetV3_large_x0.5来平衡准确性和效率。
表3显示了文本检测的head inner_channel、SE、余弦学习率衰减和学习率warm_up的消融研究。首先,通过将 detector head的内部channels从256减少到96,模型大小减少了41%,推理时间加快了近50%,HMean仅略有下降。因此,减少内部channel是减轻detector重量的有效方法。然后,当移除detector backbone的SE块时,模型大小减少了36.6%,推理时间进一步加快了18.8%。同时,HMean不会受到影响。因此,对于文本检测,SE块的精度提高是有限的,而且其时间成本非常高。最后,使用余弦学习率衰减代替固定学习率和学习率warm_up,HMean将得到明显改善。同时,模型大小和推理时间不会受到影响。余弦学习率衰减和学习率warm_up是文本检测的有效策略。
表6显示了用于文本检测的FPGM pruner的消融研究。使用FPGM pruner,在SD 855设备上,模型大小减小了46.2%,推理时间加快了18.9%,HMean略有下降。因此,FPGM pruner可以有效地剪小文本检测模型。
3.3 Direction Classification
表7比较了用于方向分类的不同backbone的性能。有着不同尺度(0.35,0.5)的MobileNetV3的准确度很相近。MobileNetV3_small_x0.35的模型大小和推理时间更好。此外,在之前的一些工作中,ShuffleNet V2被用来训练方向分类器。从表中可以看出,无论是准确性、模型大小还是推理时间,ShuffleNet V2都不是一个好的选择。
表9显示了用于方向分类的数据增强消融研究。在不数据增强的情况下,文本方向分类的基线准确率仅为88.79%。当我们采用BDA(基础数据增强)时,准确率可以提高2.55%。我们还验证了RandomErasing和RandAugment对于文本方向分类是有用的。因此,在PP-OCR中,我们使用BDA(基本数据增强)和RandAugment来训练方向分类器。
表8显示了用于方向分类的输入分辨率和PACT量化的消融研究。当输入分辨率从3×32×100调整到3×48×192时,分类准确度有所提高,但预测速度基本不变。此外,我们还验证了量化策略在提高文本方向分类器的预测速度方面是有效的。模型大小减小了45.9%,推理时间加快了25.86%。准确率就是轻微的提升。
3.4 Text Recognition
表10比较了用于文本识别的不同backbone的性能。不同尺度的MobileNetV3的准确度、模型大小和推理时间都有很大的变化。在PP-OCR中,我们选择MobileNetV3_small_x0.5来平衡准确性和效率。
表11比较了用于文本识别的CRNN head中的channel数。将channel数从256减少到48,模型大小从23M减少到4.6M,推理时间加快了近30%。但是,准确度不会受到影响。我们可以看到,head channel的数量对轻量级文本识别器的模型大小有很大影响。
表12显示了用于文本识别的数据增强、余弦学习率衰减、第二次下采样特征map的stride、正则化参数L2_decay和学习率warm_up的消融研究。
为了验证每种策略的优势,基本实验的设置是策略S1。当使用BDA时,准确率将提高3.12%。数据增强对于文本识别是非常必要的。当我们进一步采用余弦学习率衰减时,准确率将提高1.47%。余弦学习率是一种有效的文本识别策略。其次,当我们提高特征map的分辨率,并将第二次下采样特征map的步长从(2,1)减小到(1,1)时,精度将提高5.27%。然后,当我们进一步将正则化参数L2_decay从0调整到1e−5,准确度将提高3.4%。特征map分辨率和L2_decay对性能有很大影响。最后,使用学习率warm_up,准确率将提高0.62%。使用TIA数据增强,准确率将提高0.91%。学习率warm_up和TIA也是文本识别的有效策略。
表13显示了用于文本识别的PACT量化研究。当我们使用PACT量化时,模型大小减少了67.39%,推理时间加快了8.3%。由于LSTM没有量化,加速不明显。然而,准确度得到了显著提高。因此,PACT量化也是减少文本识别器模型大小的有效策略。
最后,我们将说明预训练模型的效果。我们利用17.9M的训练图像学习文本识别器。然后,使用该模型作为预训练模型来微调用于消融实验的样本。当使用上述预训练模型时,准确率将从65.81%提高到69%,效果非常明显。
3.5 System Performance
表14显示了用于OCR系统的prunner或量化的消融研究。当我们使用slim方法时,模型大小减少了55.7%,推理时间加快了12.42%。Fscore没有影响。推理时间包括系统各部分的前处理和后处理。因此,FPGM prunner和PACT量化也是减小模型尺寸的有效策略。
为了比较所提出的超轻量级OCR系统和大规模OCR系统之间的差距,我们还训练了一个大规模OCR系统,并使用Res18_vd作为文本检测器主干,使用Res34_vd作为文本识别器主干。表15显示了比较结果。大规模OCR系统的Fscore高于超轻量级OCR系统,但超轻量级系统的模型大小和推理时间明显优于大规模OCR系统。
图13和图14显示了用于中文和英文识别的PP-OCR系统的一些图像结果。图15显示了用于多语言识别的PP-OCR系统的一些图像结果。
4 Conclusions
在本文中,我们提出了一个实用的超轻量级OCR系统PP-OCR,它用于识别6622个汉字的总体模型大小仅为3.5M,用于识别63个字母数字符号的模型大小仅2.8M。我们引入了一系列策略来增强模型能力或缩减模型大小。给出了相应的消融实验。同时,一些实用的超轻量级OCR模型以及一个大规模的数据集都已经被发布了。