PP-OCR:一款实用的超轻量级OCR系统
摘要
光学字符识别(OCR)系统已被广泛应用于各种应用场景,例如办公自动化(OA)系统、工厂自动化、在线教育、地图制作等。然而,由于文本外观的多样性以及对计算效率的要求,OCR 仍然是一项具有挑战性的任务。在本文中,我们提出了一种实用的超轻量级 OCR 系统,即 PP-OCR。PP-OCR 的整体模型大小在识别 6622 个中文字符时仅为 3.5M,在识别 63 个字母数字符号时仅为 2.8M。我们引入了一系列策略,旨在增强模型能力或减小模型体积。文中也提供了基于真实数据的相应消融实验。同时,我们发布了多个用于中文和英文识别的预训练模型,包括文本检测器(使用了 97K 张图像)、方向分类器(使用了 600K 张图像)以及文本识别器(使用了 17.9M 张图像)。此外,所提出的 PP-OCR 也在其他几种语言识别任务中得到了验证,包括法语、韩语、日语和德语。上述所有模型均已开源,代码可在 GitHub 仓库获取:https://github.com/PaddlePaddle/PaddleOCR。
1 引言
光学字符识别(OCR)是一种旨在自动识别图像中文本的技术(如图1所示)。该技术拥有悠久的研究历史和广泛的应用场景,如文档电子化、身份认证、数字金融系统和车牌识别等。在工业领域,通过自动提取产品文本信息可实现更便捷的产品管理;在教育领域,OCR系统可将学生的线下作业或试卷电子化,显著提升师生沟通效率;在地图制作中,OCR技术可用于标注街景图像的兴趣点(POI),有效提高地图生产效率。丰富的应用场景既彰显了OCR技术的巨大商业价值,也带来了诸多挑战。
多样的文本外观
图像文本主要分为两类:场景文本(如图3所示)和文档文本(如图4所示)。场景文本存在于自然场景中,其识别受透视、缩放、弯曲、背景干扰、字体变化、多语言混合、模糊和光照等因素影响而极具挑战性。文档文本在实际应用中更为常见,但高密度文本和长文本带来的问题亟待解决。此外,文档图像文本识别常需结构化输出结果,这进一步增加了任务难度。
计算效率需求
实际应用中待处理的图像通常数量庞大,因此高计算效率成为OCR系统设计的关键标准。考虑到成本因素,CPU往往比GPU更受青睐。特别是在手机等嵌入式设备场景中,模型大小成为重要考量因素。权衡模型大小与性能虽具挑战性但价值重大。本文提出了一种实用的超轻量级OCR系统PP-OCR,其架构如图2所示,包含三个核心模块:文本检测、检测框校正和文本识别。
文本检测
文本检测旨在定位图像中的文本区域。PP-OCR采用基于分割网络的可微分二值化(DB)检测器(Liao等人,2020),其简易后处理保证了高效性。通过六项优化策略:轻量骨干网络、轻量检测头、移除SE模块、余弦学习率衰减、学习率预热和FPGM剪枝,最终将检测器模型压缩至1.4M。
检测框校正
在文本识别前,需将检测框转换为水平矩形框。虽然四点检测框可通过几何变换轻松实现,但校正后可能出现方向倒置问题。为此引入文本方向分类器,当检测到方向倒置时进行翻转校正。该分类器训练采用四项优化策略:轻量骨干网络、数据增强、输入分辨率调整和PACT量化,最终模型仅500KB。
文本识别
PP-OCR选用广泛应用的CRNN模型(Shi, Bai, and Yao 2016)进行文本识别。该模型集成特征提取与序列建模,采用连接时序分类(CTC)损失解决预测标签对齐问题。通过九项优化策略:轻量骨干网络、数据增强、余弦学习率衰减、特征图分辨率优化、正则化参数调整、学习率预热、轻量识别头、预训练模型和PACT量化,中英文识别模型压缩至1.6M,字母数字符号识别模型仅900KB。
为实现实用OCR系统,我们构建了大规模中英文数据集:文本检测数据集(97K图像)、方向分类数据集(600K图像)和文本识别数据集(17.9M图像)。通过小样本消融实验(结果见图2)验证策略有效性,同时系统还在字母数字符号、法语、韩语、日语和德语等识别任务中通过验证。
本文结构如下:第2节详述模型增强与瘦身策略;第3节分析实验结果;第4节总结全文。
2 模型增强与瘦身策略
2.1 文本检测
本节详述文本检测器的六项优化策略,其架构如图5所示。
轻量骨干网络
骨干网络规模对检测器模型大小起决定性作用。随着图像分类领域发展,MobileNetV1/V2/V3及ShuffleNetV2系列成为轻量化首选。基于PaddleClas提供的20余种骨干网络在CPU端的推理时延与精度对比(图6),MobileNetV3在相同时延下精度更优。经实证权衡,最终选用MobileNetV3 large x0.5版本。值得一提的是,PaddleClas提供24个系列网络结构、122个预训练模型及评估指标(涵盖ResNet、DenseNet、EfficientNet等)。
轻量检测头
检测头采用类FPN架构(Lin等人,2017)融合多尺度特征以提升小文本检测效果。为统一特征图通道数(简称"内部通道"),常规1×1卷积会引入参数量激增。当内部通道从256压缩至96时,模型体积从7M降至4.1M,精度仅轻微下降。
移除SE模块
SE(通道注意力)模块(Hu等人,2018)通过显式建模通道间依赖关系实现特征重校准(图7)。虽然SE能显著提升视觉任务精度,但在640×640高分辨率输入下,其通道特征估计效率低下且收益有限。移除骨干网络中的SE模块后,模型从4.1M缩减至2.5M,精度未受影响。
余弦学习率衰减
该策略通过动态调整学习率平衡收敛速度与精度:训练初期采用较高学习率加速收敛,后期逐步衰减以精细调参。如图8所示,余弦衰减在全程保持相对较高学习率,虽收敛较慢但最终精度更优。
学习率预热
研究(He等人,2019a)表明,训练初期采用渐进式学习率可提升图像分类精度。文本检测实验验证该策略同样有效:初始阶段采用较小学习率保障数值稳定性,待训练平稳后恢复基准学习率。
FPGM剪枝
基于几何中值的滤波器剪枝方法(FPGM)(He等人,2019b)通过欧氏空间几何中心计算(图9),移除冗余滤波器。不同于均匀剪枝,PP-OCR采用分层敏感度分析(Li等人,2016)评估各层冗余度,在保障模型性能前提下实现高效压缩。
2.2 方向分类器优化
本节将详细介绍方向分类器的四项优化策略,涵盖模型能力提升与体积压缩两个方面。
轻量骨干网络
延续文本检测器的设计思路,方向分类器同样采用MobileNetV3作为骨干网络。鉴于方向分类任务的相对简单性,选择更轻量的MobileNetV3 small x0.35版本即可实现精度与效率的平衡。实验表明,采用更大规模的骨干网络并不能带来显著的精度提升。
数据增强策略
基于文本识别领域的研究成果(Yu等人,2020),我们采用基础数据增强(BDA)技术,包括旋转、透视变换、运动模糊和高斯噪声等处理方法。这些增强操作被随机应用于训练图像,实验证实其对方向分类器训练同样有效。
此外,针对图像分类的最新增强方法如AutoAugment、RandAugment、CutOut等也被纳入测试。结果显示,除RandAugment和RandErasing外,其他方法对方向分类任务改善有限。最终方案结合了BDA与效果最佳的RandAugment策略。
输入分辨率优化
通常情况下,提高归一化图像的输入分辨率可以提升模型精度。由于方向分类器的骨干网络极为轻量,适度增加分辨率不会显著增加计算耗时。与传统文本识别方法普遍采用的32×100分辨率不同,PP-OCR将输入尺寸设置为48×192,这一调整显著提升了方向分类的准确率。
PACT量化技术
量化技术能有效降低神经网络模型的推理延迟、体积和计算功耗。当前量化方法主要分为两类:
- 离线量化:通过KL散度、滑动平均等方法确定量化参数,无需重新训练
- 在线量化(PACT):在训练过程中动态确定量化参数,相比离线模式具有更低的量化损失
PACT(参数化截断激活函数)(Choi等人,2018)是一种新型在线量化方法,该方法通过预先从激活值中去除离群值,使模型能学习更合适的量化尺度。PACT预处理激活值的公式如下:
传统PACT方法基于ReLU函数进行激活值预处理,会截断所有超过阈值的激活值。但由于MobileNetV3中同时存在ReLU和hard swish激活函数,使用传统PACT量化会导致较高量化损失。因此我们修改激活值预处理公式如下以降低量化损失:
(公式2)
我们采用改进的PACT量化方法对方向分类器模型进行量化,并在PACT参数中添加系数为0.001的L2正则化以提升模型鲁棒性。
上述FPGM剪枝器和PACT量化的实现基于PaddleSlim工具包。PaddleSlim是模型压缩工具包,包含剪枝、定点量化、知识蒸馏、超参数搜索和神经架构搜索等压缩策略。
2.3 文本识别
图10:文本识别器CRNN的架构。该图源自Shi、Bai和Yao(2016)的论文,其中红色和灰色矩形分别代表文本识别器的骨干层和头部。
本节将详细介绍提升文本识别器模型能力或减小模型规模的九种策略。图10展示了文本识别器CRNN的架构。
轻量骨干网络:与文本检测模块一致,我们同样采用MobileNetV3作为文本识别器的骨干网络。经验证选择MobileNetV3_small_x0.5可在精度和效率间取得平衡。若对模型尺寸不敏感,MobileNetV3_small_x1.0也是优质选择——仅增加2M参数量即可显著提升精度。
数据增强:除文本识别常用的基础数据增强(BDA)外,TIA(Luo等人,2020)也是一种有效的文本识别数据增强方法。如图 11所示,首先在图像上初始化一组基准点,随后随机移动这些点以生成具有几何变换的新图像。在PP-OCR系统中,我们为文本识别训练图像同时添加BDA和TIA增强。
余弦学习率衰减
与文本检测模块类似,余弦学习率衰减通过动态调整学习率提升模型收敛稳定性,实验表明其对文本识别任务同样有效。
特征图分辨率优化
为适应多语言(特别是中文)识别任务,PP-OCR将CRNN输入的高度和宽度分别设定为32和320。此时,原MobileNetV3的步幅配置并不适合文本识别。如图12所示:
- 为保留更多水平方向信息,我们将除第一层外的下采样特征图步幅从(2,2)调整为(2,1)
- 为保留更多垂直方向信息,进一步将第二层下采样特征图步幅从(2,1)调整为(1,1)
第二层下采样特征图步幅s2会显著影响整体特征图分辨率及文本识别器精度。经实验验证,PP-OCR最终将s2设为(1,1)以获得最优性能。
参数正则化
为避免过拟合,损失函数中引入L2正则化(权重衰减),迫使网络参数趋向较小值,从而提升模型泛化能力。该策略对文本识别精度影响显著。
学习率预热
训练初期采用较低学习率以稳定数值,后续恢复原学习率。实验表明该策略能有效提升文本识别模型的训练效果。
轻量头部设计
传统CRNN使用全连接层编码序列特征,但特征维度对模型体积(尤其是含数千字符的中文识别)影响较大。PP-OCR将序列特征维度经验性设为48,在保证表征能力的同时控制模型大小。
预训练模型
在真实场景数据有限时,基于ImageNet等大数据集预训练的模型进行微调可加速收敛并提升精度。实验验证,即使使用合成数据,海量样本训练也能显著改善性能。
PACT量化
采用与方向分类器相似的量化方案(跳过LSTM层),通过改进的PACT方法减少激活值离群点,降低量化损失。改进后的PACT公式对正负区间均进行截断,并引入可训练阈值α,适配MobileNetV3中的ReLU与Hard Swish混合激活函数。
3 实验
3.1 实验设置
数据集
如表1所示,为实现实用的OCR系统,我们构建了大规模中英文识别数据集:
- 文本检测:97k训练图像(68k真实场景图像来自LSVT、RCTW-17等公开数据集及百度图片搜索,29k合成图像聚焦长文本、多方向文本和表格文本)和500张验证图像。
- 方向分类:600k训练图像(100k真实水平文本来自LSVT等数据集,500k合成图像通过垂直字体旋转生成)和310k验证图像。
- 文本识别:17.9M训练图像(1.9M真实图像来自公开数据集,16M合成图像覆盖背景变换、几何形变等场景)和18.7k验证图像。
为快速验证策略,从真实数据中分别选取4k(检测)和300k(识别)图像进行消融实验。另收集300张实际场景图像(如合同、车牌、票据等)评估系统整体性能(图3-4)。
多语言支持
针对数字符号、法语、韩语、日语和德语,通过合成文本行图像扩展数据。其中数字符号数据部分来自ST和SRN公开数据集(表2)。
实现细节
- 训练:使用Adam优化器,余弦学习率衰减(初始学习率、批次大小和轮次见表4)。
- 压缩:基于FPGM剪枝器和PACT量化进一步减小模型体积。
- 评估指标:
-
- 文本检测:HMean(兼顾召回率与准确率)
- 方向分类/文本识别:准确率
- 系统整体:F-score(需同时满足定位与文本内容正确)
- 硬件环境:
-
- GPU推理:NVIDIA T4
- CPU推理:Intel Xeon Gold 6148
- 移动端:骁龙855测试量化模型。
3.2 文本检测
骨干网络对比
如表5所示,MobileNetV3不同规模的HMean、模型大小和推理时间差异显著。PP-OCR选择MobileNetV3_large_x0.5以平衡效率(7M/406ms)与精度(HMean 61.27%)。
关键策略消融实验(表3)
- 头部轻量化:将特征融合通道数(inner_channels)从256减至96,模型缩小41%,推理加速50%,HMean仅下降0.9%。
- 移除SE模块:模型再缩减36.6%,推理加速18.8%,HMean无损失(文本检测任务中SE模块冗余)。
- 训练优化:余弦学习率衰减和预热学习率使HMean显著提升,且不影响模型体积。
FPGM剪枝效果(表6)
模型压缩46.2%(1.4M),移动端推理加速18.9%,HMean轻微下降。
3.3 方向分类
骨干网络对比(表7)
MobileNetV3_small_x0.35在相近准确率下,模型体积(0.85M)和速度(3.21ms)均优于ShuffleNetV2_x0.5。
关键策略消融实验
- 数据增强:基础增强(BDA)使准确率从88.79%提升至91.34%,结合RandAugment进一步优化(表9)。
- 输入分辨率:增至3×48×192后准确率提升2%,推理时间不变(表8)。
- PACT量化:模型压缩45.9%(0.46M),推理加速25.86%,准确率微升(表8)。
3.4 文本识别
骨干网络对比(表10)
MobileNetV3_small_x0.5在4.6M/12.26ms下实现最佳效率平衡。
头部轻量化(表11)
序列特征维度从256降至48,模型缩小80%(23M→4.6M),推理加速30%,准确率保持稳定。
关键策略消融实验(表12)
- 数据增强:BDA提升准确率3.12%,TIA再提升0.91%。
- 特征图分辨率:调整下采样步长(第二层从(2,1)改为(1,1))保留垂直信息,准确率提升5.27%。
- 正则化:L2衰减(1e-5)提升准确率3.4%,增强泛化能力。
- PACT量化:模型压缩67.39%(1.5M),因跳过LSTM层,推理仅加速8.3%,但准确率显著提升(量化减少冗余)。
预训练模型价值
基于17.9M数据预训练的模型微调后,准确率从65.81%提升至69%,验证海量数据对特定场景的迁移有效性。
总结
PP-OCR通过系统化策略组合,在文本检测(1.4M)、方向分类(0.46M)和文本识别(1.6M)任务中实现超轻量化与高精度平衡,支持多语言扩展(法语、韩语等)。最新PP-OCRv4版本进一步优化骨干网络与训练策略,中文场景端到端HMean提升4.25%。
3.5 系统性能
模型压缩效果分析(表14)
通过FPGM剪枝器和PACT量化策略,PP-OCR系统实现以下优化:
- 模型体积:缩减55.7%,检测+分类+识别总大小降至3.5M(中文)和2.8M(英文数字)。
- 推理速度:加速12.42%,预处理与后处理时间均纳入优化范围。
- 精度保持:F-score指标无显著波动,验证轻量化策略在压缩模型时不影响核心识别能力。
轻量系统与大型系统对比(表15)
- 精度权衡:大型OCR系统(Res18_vd检测骨干+Res34_vd识别骨干)F-score更高,但模型体积和推理时间远超轻量版。
- 效率优势:PP-OCR在移动端CPU(如Intel Gold 6148)推理速度达76ms/帧,量化后进一步缩减60%体积。
多语言识别效果(图13-15)
- 中英文场景:印刷体中文识别准确率75.8%(较v3提升4.3%),英文手写体70.1%(提升6.1%)。
- 小语种支持:新增缅甸语、希伯来语等,83种语言混合识别准确率超75%。
4 结论
本文提出了一种实用的超轻量级OCR系统PP-OCR,其整体模型大小仅为3.5M(可识别6622个汉字)和2.8M(可识别63个字母数字符号)。我们引入了一系列策略来增强模型能力或精简模型,并提供了相应的消融实验。同时,发布了配套的大规模数据集及多个实用超轻量级OCR模型。