ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

PaddleOCR PP-OCRv3 技术详解:检测与识别的九项改进及源码级实现

2026/9/18 10:35:41 拓冰建站 浏览量
PaddleOCR PP-OCRv3 技术详解:检测与识别的九项改进及源码级实现 PaddleOCR PP-OCRv3 技术详解检测与识别的九项改进及源码级实现【免费下载链接】PaddleOCR飞桨多语言OCR工具包实用超轻量OCR系统支持80种语言识别提供数据标注与合成工具支持服务器、移动端、嵌入式及IoT设备端的训练与部署 Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80 languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices)项目地址: https://gitcode.com/paddlepaddle/PaddleOCRPP-OCRv3 是 PaddleOCR 在 PP-OCRv2 基础上的一次重要版本升级整体仍沿用文本检测 文本识别的 pipeline但检测端对 DB 算法的协同互学习CML蒸馏策略进行了升级识别端则弃用 CRNN、换用基于 Transformer 的 SVTR 算法并围绕速度不增加的前提下提升精度设计了六项加速与增益策略。读完本文你可以完整掌握 PP-OCRv3 检测模块的 LK-PAN、DML、RSE-FPN 三项改进与识别模块的 SVTR_LCNet、GTC、TextConAug、TextRotNet、UDML、UIM 六项策略的原理和消融数据并能在当前仓库中定位到对应的网络结构代码与训练配置理解这些策略是如何落地实现的。1. PP-OCRv3 的总体架构与改进清单PP-OCRv3 在 PP-OCRv2 的基础上进一步升级整体框架保持了与 PP-OCRv2 相同的 pipeline检测模块仍基于 DB 算法优化识别模块不再采用 CRNN而是换成了 IJCAI 2022 收录的文本识别算法 SVTR论文 SVTR: Scene Text Recognition with Single Visual Model并对其进行产业适配。上图中粉色框为 PP-OCRv3 新增策略。从算法改进思路上看PP-OCRv3 共进行了 9 个方面的改进检测模块3 项LK-PAN大感受野的 PAN 结构DML教师模型互学习策略RSE-FPN残差注意力机制的 FPN 结构。识别模块6 项SVTR_LCNet轻量级文本识别网络GTCAttention 指导 CTC 训练策略TextConAug挖掘文字上下文信息的数据增广策略TextRotNet自监督的预训练模型UDML联合互学习策略UIM无标注数据挖掘方案。从效果上看在速度可比的情况下多种场景精度均有大幅提升中文场景相对于 PP-OCRv2 中文模型提升超 5%英文数字场景相比于 PP-OCRv2 英文模型提升 11%多语言场景优化 80 语种识别效果平均准确率提升超 5%。2. 检测优化CML 协同互学习的升级PP-OCRv3 检测模型是对 PP-OCRv2 中的 CMLCollaborative Mutual Learning协同互学习文本检测蒸馏策略的升级。CML 的核心思想结合了①传统的 Teacher 指导 Student 的标准蒸馏与② Students 网络之间的 DML 互学习让多个 Student 网络互学习的同时由 Teacher 网络予以指导。PP-OCRv3 分别针对教师模型和学生模型进行了进一步效果优化——教师模型侧提出大感受野 PAN 结构 LK-PAN并引入 DMLDeep Mutual Learning蒸馏策略学生模型侧提出残差注意力机制 FPN 结构 RSE-FPN。检测侧消融实验如下| 序号 | 策略 | 模型大小 | hmean | 速度CPU MKLDNN | | - | - | - | - | - | | baseline teacher | PP-OCR server | 49.0M | 83.20% | 171ms | | teacher1 | DB-R50-LK-PAN | 124.0M | 85.00% | 396ms | | teacher2 | DB-R50-LK-PAN-DML | 124.0M | 86.00% | 396ms | | baseline student | PP-OCRv2 | 3.0M | 83.20% | 117ms | | student0 | DB-MV3-RSE-FPN | 3.6M | 84.50% | 124ms | | student1 | DB-MV3-CMLteacher2 | 3.0M | 84.30% | 117ms | | student2 | DB-MV3-RSE-FPN-CMLteacher2 | 3.60M | 85.40% | 124ms |测试环境Intel Gold 6148 CPU预测时开启 MKLDNN 加速。可以看到学生模型经过 RSE-FPN 更强教师模型的 CML 蒸馏后hmean 从 83.2% 提升到 85.4%而推理耗时仅从 117ms 增加到 124ms参数规模也只有 3.6M。这套 CML 训练流程在当前仓库中有完整可用的训练配置 PP-OCRv3_det_cml.yml其Architecture段声明了一个DistillationModel同时定义三个模型Student/Student2两个结构相同的学生模型Backbone 为 MobileNetV3scale 0.5、disable_seNeck 为RSEFPNout_channels: 96shortcut: TrueHead 为DBHeadk: 50TeacherResNet_vd 50 层骨干 LKPANout_channels: 256freeze_params: true即训练时冻结教师参数。Loss段使用CombinedLoss组合了三种损失恰好对应文档中描述的两种学习机制DistillationDilaDBLossStudent 与 Student2 分别和 Teacher 做检测图蒸馏model_name_pairs: [[Student,Teacher],[Student2,Teacher]]主损失为 DiceLossalpha5, beta10, ohem_ratio3DistillationDMLLoss作用于[Student, Student2]这对同构学生模型之间即 DML 互学习分支DistillationDBLoss两个学生模型各自的真实标注损失。后处理使用DistillationDBPostProcessunclip_ratio: 1.5、box_thresh: 0.6评估指标取Student的 hmean。也就是说文档中两个 Students 互学习、Teacher 指导的文字描述在配置层面就是一份数据、三个模型、三种损失的联合训练。1LK-PAN大感受野的 PAN 结构LK-PANLarge Kernel PAN是一个具有更大感受野的轻量级 PAN 结构核心是将 PAN 结构的 path augmentation 中卷积核从 3×3 改为 9×9。通过增大卷积核提升特征图每个位置覆盖的感受野更容易检测大字体的文字以及极端长宽比的文字。使用 LK-PAN 结构可以将教师模型的 hmean 从 83.2% 提升到 85.0%。这一结构在当前仓库中可以直接对应到 db_fpn.py 中的LKPAN类上游Bottom-up路径中ins_conv把四阶段特征统一到out_channels随后pan_head_conv3×3、stride 2 的下采样完成 PAN 的 head 融合关键在于inp_conv与pan_lat_conv两组卷积的kernel_size9, padding4即文档所述卷积核从 3×3 改为 9×9的具体实现。该类还支持modelite用深度可分离卷积DSConv替换标准卷积和可选的intracl参数说明该实现已面向更广泛的部署场景做了工程化扩展。2DML教师模型互学习策略DMLDeep Mutual Learning是一种互学习蒸馏方法通过两个结构相同的模型互相学习可以有效提升文本检测模型的精度。教师模型采用 DML 策略后hmean 从 85% 提升到 86%再把 PP-OCRv2 中 CML 的教师模型更新为这个更高精度的教师模型teacher2学生模型的 hmean 可以进一步从 83.2% 提升到 84.3%。在前文给出的 PP-OCRv3_det_cml.yml 中DistillationDMLLoss正是教师端 DML 思想在学生侧的复用形式——虽然配置里 Student 与 Student2 之间做互学习但其机制与教师端两个同构 R50-LK-PAN 模型互学习完全一致同构网络互为软标签从而在真实标注之外引入额外的监督信号。3RSE-FPN残差注意力机制的 FPN 结构RSE-FPNResidual Squeeze-and-Excitation FPN引入残差结构和通道注意力结构将 FPN 中的卷积层更换为通道注意力结构的 RSEConv 层进一步提升特征图的表征能力。这里有一个工程细节考虑到 PP-OCRv2 检测模型中 FPN 通道数非常小仅为 96如果直接用 SE block 代替 FPN 中的卷积会导致某些通道的特征被抑制、精度下降RSEConv 引入残差结构缓解了这一问题。将 PP-OCRv2 中 CML 的学生模型 FPN 结构更新为 RSE-FPN 后学生模型 hmean 进一步从 84.3% 提升到 85.4%。源码实现见 db_fpn.pyRSELayer由一个普通卷积1×1 用于通道对齐、3×3 用于特征融合加一个SEModule组成shortcutTrue时前向为out x se_block(x)即文档所述残差 通道注意力的 RSEConvRSEFPN则沿用 DB-FPN 的四阶段上采样拼接结构把DBFPN中的两组Conv2Din2~in5_conv与p2~p5_conv全部替换为RSELayer。可以注意到该文件中的RSEFPN还保留了intracl扩展参数用于在 PP-OCRv5 等后续版本中继续演进说明 RSE-FPN 已成为 PaddleOCR 检测 Neck 的长期基线组件。3. 识别优化从 CRNN 到 SVTR 的加速之路PP-OCRv3 的识别模块基于文本识别算法 SVTR 优化。SVTR 不再采用 RNN 结构通过引入 Transformer 结构更加有效地挖掘文本行图像的上下文信息从而提升文本识别能力。直接将 PP-OCRv2 的识别模型替换成 SVTR_Tiny识别准确率从 74.8% 提升到 80.1%5.3%但预测速度慢了将近 11 倍——CPU 上预测一条文本行将近 100ms。因此 PP-OCRv3 采用如下 6 个优化策略进行识别模型加速基于上述策略PP-OCRv3 识别模型相比 PP-OCRv2在速度可比的情况下精度进一步提升 4.6%。具体消融实验如下| ID | 策略 | 模型大小 | 精度 | 预测耗时CPU MKLDNN | | - | - | - | - | - | | 01 | PP-OCRv2 | 8.0M | 74.80% | 8.54ms | | 02 | SVTR_Tiny | 21.0M | 80.10% | 97.00ms | | 03 | SVTR_LCNet(h32) | 12.0M | 71.90% | 6.60ms | | 04 | SVTR_LCNet(h48) | 12.0M | 73.98% | 7.60ms | | 05 | GTC | 12.0M | 75.80% | 7.60ms | | 06 | TextConAug | 12.0M | 76.30% | 7.60ms | | 07 | TextRotNet | 12.0M | 76.90% | 7.60ms | | 08 | UDML | 12.0M | 78.40% | 7.60ms | | 09 | UIM | 12.0M | 79.40% | 7.60ms |注测试速度时实验 01-03 输入图片尺寸均为 (3,32,320)04-09 输入图片尺寸均为 (3,48,320)。在实际预测时图像为变长输入速度会有所变化。测试环境Intel Gold 6148 CPU预测时开启 MKLDNN 加速。1SVTR_LCNet轻量级文本识别网络SVTR_LCNet 是面向文本识别任务将基于 Transformer 的 SVTR 网络与轻量级 CNN 网络 PP-LCNet 融合的一种轻量级文本识别网络。使用该网络预测速度优于 PP-OCRv2 识别模型 20%但由于没有采用蒸馏策略效果略差。进一步将输入图片规范化高度从 32 提升到 48预测速度稍微变慢但模型效果大幅提升识别准确率达到 73.98%2.08%接近 PP-OCRv2 采用蒸馏策略的识别模型效果。由于 MKLDNN 加速库支持的模型结构有限SVTR 在 CPUMKLDNN 上相比 PP-OCRv2 慢了 10 倍。PP-OCRv3 期望在提升模型精度的同时不带来额外的推理耗时。通过分析发现SVTR_Tiny 结构的主要耗时模块为 Mixing Block因此对 SVTR_Tiny 的结构进行了一系列优化将 SVTR 网络前半部分替换为 PP-LCNet 的前三个 stage保留 4 个 Global Mixing Block精度为 76%加速 69%将 4 个 Global Mixing Block 减小到 2 个精度为 72.9%加速 69%实验发现 Global Mixing Block 的预测速度与其输入特征的 shape 有关因此后移 Global Mixing Block 的位置到池化层之后精度下降为 71.9%速度超越基于 CNN 结构的 PP-OCRv2-baseline 22%。对应的消融数据| ID | 策略 | 模型大小 | 精度 | 速度CPU MKLDNN | | - | - | - | - | - | | 01 | PP-OCRv2-baseline | 8.0M | 69.30% | 8.54ms | | 02 | SVTR_Tiny | 21.0M | 80.10% | 97.00ms | | 03 | SVTR_LCNet(G4) | 9.2M | 76.00% | 30.00ms | | 04 | SVTR_LCNet(G2) | 13.0M | 72.98% | 9.37ms | | 05 | SVTR_LCNet(h32) | 12.0M | 71.90% | 6.60ms | | 06 | SVTR_LCNet(h48) | 12.0M | 73.98% | 7.60ms |注测试速度时01-05 输入图片尺寸均为 (3,32,320)PP-OCRv2-baseline 代表没有借助蒸馏方法训练得到的模型。从仓库源码看SVTR_LCNet 的最终形态方案 3h48 输入 池化后 2 个 Global Mixing Block在 PP-OCRv3_mobile_rec.yml 中有完整体现algorithm: SVTR_LCNetBackbone 为MobileNetV1Enhancescale 0.5last_conv_stride: [1, 2]last_pool_type: avg对应 PP-LCNet 的前三个 stage 加池化Head 为MultiHead包含CTCHeadNeck 为svtrdims: 64、depth: 2、hidden_dims: 120即 2 个 Global Mixing Block和SARHeadenc_dim: 512。图像规范化高度 48 则体现在d2s_train_image_shape: [3, 48, -1]与RecResizeImg.image_shape: [3, 48, 320]中与消融表中 04-09 的输入尺寸一致。SVTR_Tiny 骨干与 LCNet 变体的实现分别位于 rec_svtrnet.py 与 rec_mv1_enhance.py。2GTCAttention 指导 CTC 训练策略GTCGuided Training of CTC利用 Attention 模块指导 CTC 训练融合多种文本特征的表达是一种有效提升文本识别的策略。使用该策略后预测时完全去除 Attention 模块推理阶段不增加任何耗时识别模型准确率进一步提升到 75.8%1.82%。在 PP-OCRv3_mobile_rec.yml 中可以看到该策略的配置落点CTCHead的 svtr Neck 设置了use_guide: True即训练期开启 Attention 对 CTC 的指导而PostProcess与评估仅使用CTCLabelDecode——推理时只走 CTC 分支SAR/Attention 分支不参与预测这正对应文档中预测时完全去除 Attention 模块的描述。SARHead与SARLoss的存在MultiLoss组合CTCLossSARLoss保证了 Attention 分支在训练期有独立监督从而能持续为 CTC 提供高质量的指导信号。3TextConAug挖掘文字上下文信息的数据增广策略TextConAug 是一种挖掘文字上下文信息的数据增广策略主要思想来源于论文 ConCLR该论文提出 ConAug 数据增广在一个 batch 内对 2 张不同的图像进行联结组成新图像并进行自监督对比学习。PP-OCRv3 将此方法应用到有监督学习任务中设计了 TextConAug 数据增强方法可以丰富训练数据上下文信息、提升训练数据多样性。使用该策略后识别模型准确率进一步提升到 76.3%0.5%。其实现位于 rec_img_aug.py 的RecConAug类配置参数与训练流水线中的语义一一对应prob0.5触发增广的概率ext_data_num2从 batch 中取最多 2 张外部图像参与拼接image_shape: [48, 320, 3]拼接目标的规范化尺寸高度 48max_text_length两张图标签拼接后的总长度上限。从源码看__call__以prob概率触发增广随后遍历 batch 内其他样本ext_data在两个约束下执行拼接一是标签长度之和不超过max_text_length二是拼接后的宽高比不超过max_wh_ratio320/48merge_ext_data将两张图像统一缩放到高度 48 后沿水平方向np.concatenate并把标签字符串直接连接data[label] ext_data[label]。这正是把 batch 内不同文本行联结成新图像、为单行样本补充上下文的直观实现PP-OCRv3_mobile_rec.yml 的Train.dataset.transforms中即配置了RecConAug。4TextRotNet自监督的预训练模型TextRotNet 是使用大量无标注文本行数据、通过自监督方式训练的预训练模型参考论文 STR-Fewer-Labels 的思路。该模型可以初始化 SVTR_LCNet 的初始权重从而帮助文本识别模型收敛到更佳位置。使用该策略后识别模型准确率进一步提升到 76.9%0.6%。在训练流程上TextRotNet 以文本行旋转预测为自监督任务预训练得到的骨干特征直接作为下游 SVTR_LCNet 的初始化减少了小数据量下的过拟合并加速收敛。5UDML联合互学习策略UDMLUnified-Deep Mutual Learning联合互学习是 PP-OCRv2 中就采用的、对文本识别非常有效的策略。在 PP-OCRv3 中针对两个不同的 SVTR_LCNet 和 Attention 结构对它们之间的 PP-LCNet 特征图、SVTR 模块的输出和 Attention 模块的输出同时进行监督训练。使用该策略后识别模型准确率进一步提升到 78.4%1.5%。这一策略在 PP-OCRv3_mobile_rec_distillation.yml 中有清晰落地Architecture同样声明DistillationModelTeacher与Student均为结构一致的SVTR_LCNetMobileNetV1Enhance CTCHead/SARHead 双头。Loss段的CombinedLoss组合了DistillationDMLLossname: dml_ctcweight 1.0在ctc头输出上让两个模型互相监督对应SVTR 模块输出互学习DistillationDMLLossname: dml_sarweight 0.5在sar头输出上互学习对应Attention 模块输出互学习DistillationDistanceLossmode l2keybackbone_out对骨干特征图做 L2 距离蒸馏对应PP-LCNet 特征图监督DistillationCTCLoss/DistillationSARLoss两个模型各自的真实标注损失。三个维度的监督骨干特征图、SVTR 输出、Attention 输出与文档描述逐条对应且multi_head: True表明损失只作用于 MultiHead 中指定的子头。6UIM无标注数据挖掘方案UIMUnlabeled Images Mining是一种简单的无标注数据挖掘方案核心思想是利用高精度的文本识别大模型对无标注数据进行预测获取伪标签并选择预测置信度高的样本作为训练数据用于训练小模型。使用该策略后识别模型准确率进一步提升到 79.4%1%。实际操作中官方使用全量数据集训练了一个高精度 SVTR_Tiny 中文识别模型acc82.5%进行数据挖掘该模型可在 PaddleOCR 的模型下载页获取配套文档介绍了如何用其做无标注数据挖掘。对工程侧而言UIM 的意义在于不增加标注成本仅靠大模型打分 置信度过滤即可把无标注数据转化为高质量训练样本是识别模型在真实业务数据上持续迭代的常用手段。4. 端到端评估结果经过以上优化PP-OCRv3 在速度可比的情况下中文场景端到端 Hmean 指标相比 PP-OCRv2 提升 5%具体指标如下| Model | Hmean | Model Size (M) | Time Cost (CPU, ms) | Time Cost (T4 GPU, ms) | | - | - | - | - | - | | PP-OCR mobile | 50.30% | 8.1 | 356.00 | 116.00 | | PP-OCR server | 57.00% | 155.1 | 1056.00 | 200.00 | | PP-OCRv2 | 57.60% | 11.6 | 330.00 | 111.00 | | PP-OCRv3 | 62.90% | 15.6 | 331.00 | 86.64 |测试环境CPU 型号为 Intel Gold 6148CPU 预测时开启 MKLDNN 加速。可以看到 PP-OCRv3 以 15.6M 的轻量模型取得了超过 155.1M 的 PP-OCR server 模型的精度且 CPU 耗时与 PP-OCRv2 基本持平331ms vs 330ms、T4 GPU 耗时反而更低86.64ms vs 111ms。除了更新中文模型本次升级也同步优化了英文数字模型端到端效果提升 11%| Model | Recall | Precision | Hmean | | - | - | - | - | | PP-OCR_en | 38.99% | 45.91% | 42.17% | | PP-OCRv3_en | 50.95% | 55.53% | 53.14% |同时也对已支持的 80 余种语言识别模型进行了升级更新在有评估集的四种语系中识别准确率平均提升 5% 以上| Model | 拉丁语系 | 阿拉伯语系 | 日语 | 韩语 | | - | - | - | - | - | | PP-OCR_mul | 69.60% | 40.50% | 38.50% | 55.40% | | PP-OCRv3_mul | 75.20% | 45.37% | 45.80% | 60.10% |5. 仓库中的关键文件索引与延伸如果你想复现或研究 PP-OCRv3 的模型与训练流程可以从以下仓库文件入手训练配置检测CML 蒸馏Student/Student2 Teacher 三模型联合训练PP-OCRv3_det_cml.yml检测单模型部署形态PP-OCRv3_mobile_det.yml识别SVTR_LCNet GTC TextConAugPP-OCRv3_mobile_rec.yml、en_PP-OCRv3_mobile_rec.yml识别UDML 蒸馏PP-OCRv3_mobile_rec_distillation.yml多语言识别配置位于 configs/rec/PP-OCRv3/multi_language/ 目录。核心源码检测 NeckRSEFPN、RSELayer、LKPAN、DBFPN 等db_fpn.py识别骨干SVTR_Tiny、MobileNetV1Enhance 等rec_svtrnet.py、rec_mv1_enhance.pyTextConAug 数据增广实现rec_img_aug.py。训练/评估工具训练入口 train.py、检测推理 infer_det.py、识别推理 infer_rec.py、评估 eval.py。从源码结构看PP-OCRv3 引入的 RSEFPN、LKPAN 等组件并未随着版本迭代而被废弃仓库中 PP-OCRv4、PP-OCRv5 的检测配置如 PP-OCRv4_mobile_det.yml、PP-OCRv5_mobile_det.yml依然构建在 RSEFPN 之上说明大核感受野 残差注意力 FPN CML 蒸馏这一组合已成为 PaddleOCR 检测模型的长期技术基线。对研究者而言PP-OCRv3 这篇文档PP-OCRv3_introduction.md与其配套配置、源码一起构成了一份完整的算法改进 → 消融数据 → 工程落地参考样例。需要说明的是文中所有精度与耗时数据均出自 PP-OCRv3 技术博客原文其测试环境为 Intel Gold 6148 CPU开启 MKLDNN 加速与 T4 GPU在你自己的硬件上复测时数值会有所差异横向对比时应保持一致的测试条件。【免费下载链接】PaddleOCR飞桨多语言OCR工具包实用超轻量OCR系统支持80种语言识别提供数据标注与合成工具支持服务器、移动端、嵌入式及IoT设备端的训练与部署 Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80 languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices)项目地址: https://gitcode.com/paddlepaddle/PaddleOCR创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考