PaddleOCR PP-OCRv6:多语言 OCR 的三档轻量模型,端侧部署不再二选一
【免费下载链接】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
PaddleOCR 是百度开源的 OCR 工具箱,PP-OCRv6 是其中最新的文字识别模型族。本文沿数据流拆一遍 PPLCNetV4 骨干与检测/识别链路,读完你能判断三档模型各自的适用边界,也能用 5 行代码跑通一条识别。
这一代到底解决了什么
上一代 v5 的麻烦在于:端侧和服务端各维护一套骨干与颈部,参数规模不统一,多语言覆盖则靠"换字典换模型"来拼凑。PP-OCRv6 的取舍是:一个 PPLCNetV4 骨干同时服务检测与识别,用通道宽度而不是网络深度区分 tiny/small/medium 三档,再用一份字典容纳 50 种语言。代价也很明确——tiny 档为了守住约 1.1M 参数的输出层规模,放弃日文。
拆开看:数据怎么流过整个模型
整条链路的形状是"输入 → 骨干 → 颈部 → 头 → 输出"。输入分两种:检测侧吃 640×640 的整图,识别侧吃检测裁剪出的 48×320 文字条。
骨干:一个 PPLCNetV4 通吃两个任务
骨干负责从像素里提取特征。PP-OCRv6 的检测和识别共用同一个 PPLCNetV4,每个基础块遵循 MetaFormer 思路:先处理"位置"再处理"通道"——3×3 深度卷积只搬运空间邻域信息(Token Mixer,可选 SE 通道注意力),1×1 卷积做通道变换(Channel Mixer,扩展 2 倍 + GELU 激活)。核心计算只有一条:
$$\mathbf{y} = W_2,\sigma(W_1,\text{SE}(\text{DW}(\mathbf{x}))) + \text{SE}(\text{DW}(\mathbf{x}))$$
空间卷积部分还有一个结构重参数化设计:训练时是"大核 + 小核 + 恒等"三条路并联,部署前用 rec_lcnetv4.py#L439 中的LCNetV4Block.rep()在数学上等价地合并回单个卷积——训练吃多分支的梯度红利,推理零额外开销。
同一个骨干怎么适配两种任务,靠的是下采样策略。检测需要多尺度特征图:标准 stride-2 下采样产出 4 级输出,medium 档通道从 128 逐级翻倍到 896(见 rec_lcnetv4.py#L80)。识别则需要 1D 序列:Stage 3/4 改用非对称 stride (2,1),只压高度、保留宽度,让字符的横向顺序不被下采样打散,最后沿高度平均池化得到序列特征。配置里这一行就是区别所在(PP-OCRv6_medium_rec.yml#L158):
"blocks4": [ [3, 256, 512, (2, 1), False],检测颈部:大感受野换小目标召回
检测侧解决的是"文字在哪"。v5 的 RSEFPN 用 3×3 普通卷积提特征,感受野太小,小字号和密集排版容易漏。RepLKFPN 把这部分换成 7×7 深度大核,且训练时是"1 个 7×7 + 3 个膨胀小卷积"并联(见 db_fpn.py#L307 的RepLKFPN与 db_fpn.py#L554 的DilatedReparamBlock),部署时同样合并回单卷积,零推理成本。颈部把 4 级特征做自底向上加法融合,并用 IntraCL 模块做通道内交互;训练态在 P2/P3/P4 各挂一个辅助预测头(db_fpn.py#L419),给小文本更强的梯度信号,推理态只返回融合结果:
aux_weight_p4: 0.2 aux_weight_p3: 0.3 aux_weight_p2: 0.4识别颈部:局部卷积打底,两层注意力看全局
颈部把骨干的 2D 特征加工成对解码友好的序列。EncoderWithLightSVTR 的做法是:1×1 卷积压通道,接 1×7 深度卷积注入局部上下文——字符识别主要靠横向邻域,宽度 7 正好覆盖一个字符的宽度;然后展平成序列过 2 层全局自注意力,最后输出加回 1×1 卷积的跳变特征(rnn.py#L242)。注意这里用的是加法而不是 v5 的拼接,省下一截参数。
解码端是 CTCHead 逐位对齐,推理时它一个就够;NRTRHead 只在训练时通过MultiLoss提供第二份监督,推理时整个移除(rec_multi_head.py#L67)。
输出:50 种语言其实只是两份字典
DB 检测头输出概率图,阈值二值化加连通域分析变成多边形框;识别侧 CTCLabelDecode 贪心解码出字符索引。所谓 50 语言不是 50 套权重,而是同一套权重配不同字典:medium/small 档用 1.87 万行字符表(ppocrv6_dict.txt),tiny 档用 6900 行(ppocrv6_tiny_dict.txt),约 200 个带变音符号字符靠字典扩展纳入,推理时贪心解码后按字典还原 50 种语言的文本。
数字说话:精度和速度到底涨了多少
两个单点数字最有冲击力:PP-OCRv6_medium 相比 PP-OCRv5_server,GPU 推理快 2.37 倍,识别精度还高 5.1 个百分点(根据官方内部多场景基准);tiny 档仅 1.1M 参数,识别准确率已超过对比表中 4 个大型视觉语言模型。
| 档位 | 参数量 | 检测 Hmean / 识别 W-Avg (%) | 端到端速度 (s/张) |
|---|---|---|---|
| v6_medium | 34.5M | 86.2 / 83.2 | 0.29(A100) |
| v6_small | — | 84.1 / 81.3 | 0.25(A100) |
| v6_tiny | ~1.1M | 80.6 / 73.5 | 0.13(A100) |
| v5_server(对照) | — | 81.6 / 78.1 | 0.32(A100) |
(精度为官方内部多场景基准 16 类检测 + 15 类识别平均;速度为官方 200 张图端到端测试,含读图与前后处理。)
对选型的含义:medium 在 A100 上比 v5_server 快 1.1 倍且精度更高,替换是零风险决策;tiny 比 v5_mobile 快 6.1 倍(Apple M4,PaddlePaddle 后端)而精度反而更高;v5_server 在 Intel Xeon 上要 7.3s/张,v6_medium 用 OpenVINO 只需 1.4s/张,CPU 部署的收益最大。
跑起来:5 行代码跑通第一条识别
Python API 默认加载 medium 档:
from paddleocr import PaddleOCR ocr = PaddleOCR( use_doc_orientation_classify=False, use_doc_unwarping=False, use_textline_orientation=False, ) result = ocr.predict("general_ocr_002.png") for res in result: res.print()CLI 对应写法:
paddleocr ocr -i general_ocr_002.png \ --use_doc_orientation_classify False \ --use_doc_unwarping False \ --use_textline_orientation False三个关键参数值得解释。use_doc_orientation_classify是文档方向分类,处理整页 180° 颠倒的扫描件;use_doc_unwarping是文档矫正,把弯曲拍照的页面拉直;use_textline_orientation是文本行方向分类,处理上下颠倒的文字行。三者各是一个独立的前置模型,关掉就是省掉三次推理——纯电子图、印刷件直接关,倾斜扫描件再开。
上生产之前:部署与二次开发入口
- 🚀 兼容 Windows / Linux / Mac 主流系统
- 支持 NVIDIA GPU、Intel CPU、昇腾、昆仑芯
- 可启用 enable_hpi,走 ONNX Runtime 加速
- 提供高稳定性服务化部署方案
- 支持自定义数据集训练、字典扩展、模型微调
- 模型可导出,接入 C++ 推理与移动端 SDK
怎么选:三档模型的选型建议
| 场景 | 推荐档位 | 理由 |
|---|---|---|
| 服务端高吞吐、精度优先 | medium | 精度速度双超 v5_server |
| 移动端 / 桌面端实时 | small | 精度接近 medium,速度更快 |
| 端侧 / IoT、延迟敏感 | tiny | 全平台最快,注意不支持日文 |
如果只记一句话:先上 medium 保精度,测出延迟瓶颈再降档,别一上来就选最小的。
【免费下载链接】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),仅供参考