PP-OCRv6 OCR:34.5M 参数三档模型实战
【免费下载链接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100+ languages.项目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCR
16 类场景的检测基准上,34.5M 参数的 PP-OCRv6 OCR 模型比 235B 参数的大型 VLM 高 40 多个点,GPU 上推理速度还比上一代 server 档快 2.37 倍。这是 PaddleOCR 的最新一代通用文字识别,首次用一个模型统一支持 50 种语言。读完能带走:一张三档选型表、一段 5 分钟跑通的推理代码、三条避坑提醒。
🚀 核心变化速览:相对 v5 的五个不同
- 统一骨干 PPLCNetV4 → 检测/识别共用一套网络,不用维护两套
- 检测颈部换 RepLKFPN 大核重参数化 → 参数少 31%,感受野 3×3 变 7×7
- 识别颈部换 LightSVTR 加性跳跃连接 → 用加法代替拼接,参数大幅减少
- 单模型统一 50 种语言 → 字典扩充约 200 个带变音符号字符
- tiny/small/medium 三档模型族 → 同一架构从端侧部署到服务端
它是怎么工作的:一张图走五步
从图像进入predict()到吐出带框文字,依次经过输入、骨干、检测颈部、识别颈部、输出,我们按推理数据流逐个看。
3.1 输入:图像进来,默认关掉三个预处理模块
默认产线上叠了三个预处理模块:文档方向分类、文档矫正、文本行方向分类,主要服务倾斜扫描件和拍照文档。设计意图很直白:纯文字图像上关掉它们,直接走检测→识别主链路,省掉一整轮预处理开销。输入侧值得注意的细节只有一个:predict()直接吃本地路径、URL 或 numpy 数组,不需要自己读图。
产线组装逻辑见 paddleocr/_pipelines/ocr.py。
3.2 骨干 PPLCNetV4:一套网络,两种下采样服务两个任务
骨干是 v6 改动最大的一块:检测和识别不再各养一套网络,同一个 PPLCNetV4 靠不同的下采样策略服务两种任务。检测走标准 stride-2 下采样,产出 stride 4/8/16/32 四级多尺度特征供金字塔聚合;识别在 Stage 4/5 用非对称 stride(2,1),只缩高度、保留宽度,再沿高度轴平均池化压成 1-D 序列喂给 CTC 解码。同一份权重、两种用法,这就是官方说的"任务自适应下采样"。
每个 Block 遵循 MetaFormer 范式:先 3×3 深度卷积做空间混合,再过扩展比为 2 的通道混合(GELU 激活),外围各带一个残差:
$$\hat{x} = \text{SE}(\text{DW}(x)) + x \qquad y = W_2,\sigma(W_1\hat{x}) + \hat{x}$$
其中最关键的实现细节是深度卷积用了 RepDWConv 三分支重参数化(训练时 3×3、1×1、identity 三个分支,部署前合并为单个卷积,零额外参数),配合 Compress 层 BN 零初始化,这是 v4 相对 v3 从 MobileNet 风格转向 MetaFormer 风格后的招牌设计。medium 档通道演进为 128 → 256 → 512 → 896,三档宽度差异一目了然,见 rec_lcnetv4.py 里的NET_CONFIG_DET/NET_CONFIG_REC两组配置。
3.3 检测颈部 RepLKFPN:少 31% 参数换 7×7 感受野
图里是 PP-OCRv6 检测沿用的 DB 框架骨架:骨干多级特征经金字塔上采样融合,DB 头输出概率图与阈值图,二值化后成框。v6 的针对性升级在金字塔本身——文本在图中尺度跨度极大,颈部需要大感受野才能把断裂的文字区域连起来。RepLKFPN 用 DilatedReparamBlock(7×7 深度卷积加膨胀分支)替换了原来的 3×3 标准卷积:训练时靠多组膨胀率(如 3、5 模式)拿大感受野,部署前调一次rep()把全部分支合并成单个大核卷积,推理零额外成本,参数总量从 172K 降到 118K,少 31%。训练时还在 P2/P3/P4 加辅助预测头做深度监督(配置里对应aux_weight_p2: 0.4、aux_weight_p3: 0.3、aux_weight_p4: 0.2),推理态只返回一路融合特征,不增加任何开销。
RepLKFPN类实现与参数量核算注释见 db_fpn.py。
3.4 识别颈部 LightSVTR:局部卷积加两层全局注意力
文字识别既要局部上下文(字形),又要全局依赖(词句级规律)。LightSVTR 颈部分两层处理:1×7 深度卷积做局部建模,随后 1–2 层 Transformer 自注意力捕捉长文本。最有意思的巧思是加性跳跃连接——用加法代替 PP-OCRv5 的拼接(concatenation),参数省了一大块。解码端是双头配置:CTC 头承担全部推理(并行、快),NRTR 头只做训练期辅助监督(配置里CTCLoss与NRTRLoss并列),推理时整个移除,训练时的双头结构在部署后不留一分钱成本。
lightsvtr分支注册在 rnn.py,双头结构见 rec_multi_head.py。
3.5 PP-OCRv6 多语言覆盖:一份字典管 50 种语言
最后一步是解码成文字。medium/small 档共用一份字典覆盖 50 种语言——简中、繁中、英文、日文加 46 种拉丁语系——字典额外扩充了约 200 个带变音符号的字符(é、ñ、ž 之类),所以单模型不需要按语言切换,max_text_length统一限制 25 个字符。tiny 档用另一份不含日文的字典。识别训练配置见 PP-OCRv6_medium_rec.yml,字典本体在 ppocrv6_dict.txt。
📊 数字说了什么:精度 +4.6 分,速度 2.37 倍
最值得注意的三个数字。一是精度:medium 档检测 Hmean 86.2%,比上一代 server 档(81.6)高 4.6 个百分点;识别加权准确率 83.2% 对 78.1%。增量集中在长尾场景——日文识别 90.5 对 73.7,屏幕显示 +14.4,古籍 +12.0。二是 VLM 对照:同一基准上 Gemini-3.1-Pro、GPT-5.5、Qwen3-VL-235B 的检测 Hmean 只有 46.8、45.6、38.3,不到 medium 的一半;VLM 还常有"基于语言先验纠错"的幻觉,把图里没有的字编出来,而 PP-OCRv6 的检测—识别管线天生没有这个问题,最小的 tiny 档识别准确率也超过了表中 4/5 的 VLM。三是速度:medium 在所有平台上至少追平 v5_server,Intel Xeon + OpenVINO 上快 5.2 倍(1.40s 对 7.30s),GPU 整体推理提速 2.37 倍。
| 模型 | 检测 Hmean | 识别准确率 | A100 速度(s/图) |
|---|---|---|---|
| PP-OCRv6_medium | 86.2 | 83.2 | 0.29 |
| PP-OCRv6_small | 84.1 | 81.3 | 0.25 |
| PP-OCRv6_tiny | 80.6 | 73.5 | 0.13 |
| PP-OCRv5_server | 81.6 | 78.1 | 0.32 |
跨平台一句话结论:tiny 档在所有测试平台上都是最快的,A100 上 0.13 s/图,Apple M4 上(ONNX Runtime)0.35 s/图。以上均为官方内部多场景基准数据,会随数据集与版本更新而变化。
🏃 跑起来:三个场景
5 分钟跑通首次 OCR
先pip install paddlepaddle paddleocr。示例用仓库自带的一张真实登机牌图,三个 False 就是关掉 3.1 节提到的预处理模块:
from paddleocr import PaddleOCR ocr = PaddleOCR( use_doc_orientation_classify=False, use_doc_unwarping=False, use_textline_orientation=False, ) for res in ocr.predict("deploy/ios_demo/PaddleOCRDemo/Resources/SampleImages/general_ocr_002.jpg"): res.print()CLI 一行等价命令:
paddleocr ocr -i general_ocr_002.jpg --use_doc_orientation_classify False --use_doc_unwarping False --use_textline_orientation False一行切换档位、语言与推理后端
- 换档位:三档共用同一套训练管线,改配置里的
model_size为tiny/small/medium即可,推理时指向对应模型名(如PP-OCRv6_small_det); - 换语言:不需要换,单模型覆盖 50 种语言,只需确认模型与字典配套;
- 换推理后端:加一个参数启用高性能推理插件(HPI),底层自动切到 ONNX Runtime:
from paddleocr import PaddleOCR ocr = PaddleOCR(enable_hpi=True)习惯 PyTorch 生态的话,还可以传engine="transformers"走 Hugging Face Transformers
【免费下载链接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100+ languages.项目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCR
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考