PaddleOCR 的 PP-OCR 系列全景解析:从两阶段架构到 v2/v3/v4 版本演进与实战部署
【免费下载链接】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
PP-OCR 是 PaddleOCR 自研的超轻量 OCR 系统,围绕"精度与速度平衡、可产业落地"的目标,在文本检测、方向分类与文本识别三段式 pipeline 上持续迭代。本文以 PP-OCR 系列为核心,完整梳理其系统架构、从 PP-OCR 到 PP-OCRv4 的版本演进与技术要点、模型特性与 benchmark 口径,并结合仓库中的配置文件与源码给出可复现的安装、命令行、Python 调用与模型选型方案。
1. 系统定位与总体架构
PP-OCR 是 PaddleOCR 自研的实用型超轻量 OCR 系统,它在实现前沿算法的基础上,考虑精度与速度的平衡,通过模型瘦身与深度优化,尽可能满足产业落地需求。
PP-OCR 是一个两阶段 OCR 系统,核心由三个模块串联组成:
- 文本检测模块:选用 DB(Differentiable Binarization) 算法,负责在整图中定位文本区域;
- 文本方向分类模块:在检测与识别之间插入文本方向分类器,用于纠正 0°/180° 旋转的文本行,应对不同方向的文本识别;
- 文本识别模块:选用 CRNN 算法,将检测出的文本行图像转换为文字序列。
从仓库源码结构看,这一三段式流程在 paddleocr/_pipelines/ocr.py 中有对应实现:检测结果经方向分类器矫正后送入识别器,最终返回"文本框 + 文本 + 置信度"的结构化结果。而在配置层面,三套模型分别由configs/det/、configs/cls/、configs/rec/下的 YAML 文件定义,例如 PP-OCRv4_mobile_det.yml、cls_mv3.yml、PP-OCRv3_mobile_rec.yml。
PP-OCR 系统持续迭代,目前已发布PP-OCR、PP-OCRv2、PP-OCRv3、PP-OCRv4四个版本,下文按版本逐一拆解其演进脉络。
2. 版本演进:从 PP-OCR 到 PP-OCRv4
2.1 PP-OCR:19 个策略打造 3.5M 超轻量模型
第一代 PP-OCR 从骨干网络选择与调整、预测头部设计、数据增强、学习率变换策略、正则化参数选择、预训练模型使用、模型自动裁剪量化共 8 个方面入手,采用19 个有效策略,对各个模块的模型进行效果调优与瘦身,最终得到:
- 3.5M 的超轻量中英文 OCR 模型;
- 2.8M 的英文数字 OCR 模型。
更多细节可参考 PP-OCR 技术报告(arXiv:2009.09941)。
2.2 PP-OCRv2:5 个方向的重点优化
PP-OCRv2 在 PP-OCR 基础上进一步在 5 个方面重点优化:
- 检测模型:采用CML(Collaborative Mutual Learning)协同互学习知识蒸馏策略与CopyPaste 数据增广策略;
- 识别模型:采用LCNet 轻量级骨干网络、UDML 改进知识蒸馏策略与 Enhanced CTC loss 损失函数改进。
以上策略在推理速度与预测效果上均取得明显提升,技术细节见 PP-OCRv2 技术报告(arXiv:2109.03144)。
2.3 PP-OCRv3:9 个方面的系统升级
PP-OCRv3 保持与 PP-OCRv2 相同的整体 pipeline,但针对检测与识别模型共进行了9 个方面的升级,详见 PP-OCRv3 技术解读:
检测模块(3 项)
- LK-PAN:大感受野的 PAN 结构,将 path augmentation 中的卷积核从
3*3扩大为9*9,更易检测大字与极端长宽比文本; - DML:教师模型间的 Deep Mutual Learning 互学习策略;
- RSE-FPN:残差注意力机制的 FPN 结构,在 FPN 通道数较小的前提下引入残差结构缓解特征抑制问题。
识别模块(6 项)
- SVTR_LCNet:将基于 Transformer 的 SVTR 与轻量级 CNN 网络 PP-LCNet 融合的轻量级文本识别网络;
- GTC:Attention 指导 CTC 的训练策略,推理时完全去除 Attention 模块,不增加任何耗时;
- TextConAug:挖掘文字上下文信息的数据增广策略(借鉴 ConCLR 思想,在一个 batch 内联结 2 张不同图像);
- TextRotNet:利用大量无标注文本行数据自监督训练的预训练模型;
- UDML:联合互学习策略,对 PP-LCNet 特征图、SVTR 输出与 Attention 输出同时监督;
- UIM:无标注数据挖掘方案,用高精度大模型打伪标签并筛选高置信度样本训练小模型。
PP-OCRv3 系统 pipeline 如下:
从效果上看,速度可比情况下:中文场景较 PP-OCRv2 提升超 5%,英文数字场景提升 11%,多语言场景(80+ 语种)平均准确率提升超 5%。
2.4 PP-OCRv4:10 个方面的进一步优化
PP-OCRv4 延续 v3 pipeline,在数据、网络结构、训练策略等多个模块继续优化,详见 PP-OCRv4 技术解读:
检测模块(4 项)
- LCNetV3:精度更高的骨干网络(替换 MobileNetV3);
- PFHead:并行 head 分支融合结构,经过转置卷积后并行上采样与转置卷积分支,级联融合输出概率图;
- DSR:训练中动态增加 shrink ratio(随 epoch 从 0.4 线性增至 0.6);
- CML 增强:在 Student 与 Teacher 网络的 distill loss 中额外添加 KL div loss,拉近两者 response maps 分布。
识别模块(6 项)
- SVTR_LCNetV3:精度更高的骨干网络;
- Lite-Neck:精简参数的 Neck 结构,可将识别模型从 12M 降至 8.5M 且精度不变;
- GTC-NRTR:用训练更稳定的 Transformer 模型 NRTR 作为指导分支(替代 v3 中基于 RNN 的 SAR 分支);
- Multi-Scale:多尺度训练策略,每个 iter 从 (32, 48, 64) 三种高度中随机选择进行 resize;
- DF:数据挖掘方案(Data Filter),先剔除置信度 >0.95 的冗余样本,再剔除 <0.15 的噪声样本,将千万级数据精简至百万级;
- DKD:DKD 蒸馏策略,NRTR head 使用 DKD loss,CTC head 将 logits 沿文本长度维度求均值做分类监督。
效果上,速度可比情况下:中文场景端到端 Hmean 较 PP-OCRv3 提升 4.5%,英文场景识别准确率提升 6%,多语言(80 语种)平均识别准确率提升超 8%。
3. 特性与模型体量概览
PP-OCR 系列的核心竞争力在于"超轻量"与"多语言",官方给出的模型体量组合如下:
| 系列 | 检测模型 | 方向分类器 | 识别模型 | 整体 |
|---|---|---|---|---|
| 超轻量 PP-OCRv3 系列 | 3.6M | 1.4M | 12M | 17.0M |
| 超轻量 PP-OCRv2 系列 | 3.1M | 1.4M | 8.5M | 13.0M |
| PP-OCR mobile 移动端系列 | 3.0M | 1.4M | 5.0M | 9.4M |
| PP-OCR server 通用系列 | 47.1M | 1.4M | 94.9M | 143.4M |
此外还支持:
- 中英文数字组合识别、竖排文本识别、长文本识别;
- 多语言识别:韩语、日语、德语、法语等约80 种语言。
各语言对应的模型字典文件位于 ppocr/utils/dict/,例如韩文korean_dict.txt、日文japan_dict.txt、拉丁文latin_dict.txt等,可在模型列表中按语种查阅对应配置与下载地址。
4. Benchmark 口径
PP-OCR 系列模型之间的性能对比(检测/识别精度、模型大小、CPU 推理耗时等),统一收录在 benchmark 文档中。需要特别说明的是,各版本技术报告中的速度数据受测试环境影响较大:PP-OCRv2/v3 消融实验多基于Intel Gold 6148 CPU + MKLDNN 加速,PP-OCRv4 消融实验基于Intel Gold 6148 CPU + OpenVINO 预测引擎,且识别模型测试输入尺寸分为(3,32,320)与(3,48,320)两档。实际预测时图像为变长输入,速度会有变化,横向对比时应以相同环境为准。
5. 效果展示
PP-OCRv3 系列模型在中文、英文、多语言场景下的可视化效果可参考 效果展示页,其中包含:
- PP-OCRv3 中文模型:中文通用文档与场景图识别示例;
- PP-OCRv3 英文模型:英文文档识别示例;
- PP-OCRv3 多语言模型:日文、韩文等语种识别示例。
6. 使用教程:从快速体验到全流程开发
6.1 快速体验
- 在线体验:可在 Paddle 官方在线场景(ocr 场景)直接体验超轻量 PP-OCR mobile 模型效果;
- 移动端 Demo:基于 EasyEdge 与 Paddle-Lite 提供 iOS/Android 安装包,可下载体验端侧推理;
- 一行命令快速使用:详见快速开始(中英文/多语言)。
6.2 安装
安装 PaddlePaddle(以 CPU 为例):
pip install "paddlepaddle<=2.6"若机器安装 CUDA 11,则安装 GPU 版本:
pip install "paddlepaddle-gpu<=2.6"更多版本需求参照飞桨官网安装文档;如果没有基础 Python 运行环境,可先参考运行环境准备。
安装 PaddleOCR whl 包:
pip install "paddleocr<3.0"Windows 用户若遇到 shapely 的[winError 126] 找不到指定模块问题,需要手动安装预编译的 shapely 包。
6.3 命令行使用
下载官方测试图片并解压后,切换到图片目录即可开始:
cd /path/to/ppocr_img检测 + 方向分类器 + 识别全流程(--use_angle_cls true启用方向分类器识别 180° 旋转文字,--use_gpu false关闭 GPU):
paddleocr --image_dir ./imgs/11.jpg --use_angle_cls true --use_gpu false输出是一个 list,每个 item 包含文本框、文字与识别置信度:
[[[28.0, 37.0], [302.0, 39.0], [302.0, 72.0], [27.0, 70.0]], ('纯臻营养护发素', 0.9658738374710083)]单独使用检测(--rec false):
paddleocr --image_dir ./imgs/11.jpg --rec false单独使用识别(--det false):
paddleocr --image_dir ./imgs_words/ch/word_1.jpg --det false支持 PDF 输入,通过--page_num控制推理页数,0 表示全部页:
paddleocr --image_dir ./xxx.pdf --use_angle_cls true --use_gpu false --page_num 2多语言切换:通过--lang参数切换语种,例如英文--lang=en:
paddleocr --image_dir ./imgs_en/254.jpg --lang=en常用语种缩写对照:中文ch、英文en、繁体中文chinese_cht、法文fr、德文german、意大利文it、日文japan、韩文korean、俄罗斯文ru;完整语种列表见多语言模型教程。
版本选择:paddleocr默认使用 PP-OCRv4 模型(--ocr_version PP-OCRv4),可手动指定其他版本:
| 版本名称 | 版本说明 |
|---|---|
| PP-OCRv4 | 支持中、英文检测和识别,方向分类器,支持多语种识别 |
| PP-OCRv3 | 支持中、英文检测和识别,方向分类器,支持多语种识别 |
| PP-OCRv2 | 支持中英文的检测和识别,方向分类器,多语言暂未更新 |
| PP-OCR | 支持中、英文检测和识别,方向分类器,支持多语种识别 |
6.4 Python 脚本使用
whl 包会自动下载 PP-OCR 轻量级模型作为默认模型。中英文全流程示例:
from paddleocr import PaddleOCR, draw_ocr # 支持通过 lang 参数切换语种,如 ch / en / fr / german / korean / japan ocr = PaddleOCR(use_angle_cls=True, lang="ch") # 首次运行自动下载并加载模型 img_path = './imgs/11.jpg' result = ocr.ocr(img_path, cls=True) for idx in range(len(result)): res = result[idx] for line in res: print(line) # 结果可视化 from PIL import Image result = result[0] image = Image.open(img_path).convert('RGB') boxes = [line[0] for line in result] txts = [line[1][0] for line in result] scores = [line[1][1] for line in result] im_show = draw_ocr(image, boxes, txts, scores, font_path='./fonts/simfang.ttf') im_show = Image.fromarray(im_show) im_show.save('result.jpg')PDF 输入:通过page_num指定页码,ocr.ocr(pdf_path, cls=True)直接识别,空页返回None时跳过,避免报错;可视化时可用fitz将 PDF 页渲染为图像后叠加绘制结果。
超大图滑动窗口:对超长/超大图像,可通过slice参数字典启用滑动窗口检测与识别,例如:
ocr = PaddleOCR(use_angle_cls=True, lang="en") slice = {'horizontal_stride': 300, 'vertical_stride': 500, 'merge_x_thres': 50, 'merge_y_thres': 35} results = ocr.ocr(img_path, cls=True, slice=slice)更全面的切片操作说明见切片操作文档。
6.5 模型训练、压缩与推理部署
PP-OCR 系列模型的训练、压缩(裁剪/量化)、推理部署教程,均可在 docs/version2.x/ppocr 目录下找到:model_train/覆盖检测、识别、方向分类器的训练与微调;model_compress/覆盖模型压缩;模型列表 则给出了推理模型、训练模型、预训练模型与 Paddle-Lite nb 模型的完整下载入口。仓库根目录的 configs 目录存放全部训练配置文件,tools/train.py与tools/export_model.py分别对应训练与模型导出入口。
7. 模型库:中英文 PP-OCR 系列选型
PP-OCR 中英文模型列表如下(完整下载地址见 PP-OCR 系列模型下载,各模型均提供推理模型与训练/预训练模型两类文件):
| 模型简介 | 模型名称 | 推荐场景 |
|---|---|---|
| 中英文超轻量 PP-OCRv3 模型(16.2M) | ch_PP-OCRv3_xx | 移动端 & 服务器端 |
| 英文超轻量 PP-OCRv3 模型(13.4M) | en_PP-OCRv3_xx | 移动端 & 服务器端 |
| 中英文超轻量 PP-OCRv2 模型(13.0M) | ch_PP-OCRv2_xx | 移动端 & 服务器端 |
| 中英文超轻量 PP-OCR mobile 模型(9.4M) | ch_ppocr_mobile_v2.0_xx | 移动端 & 服务器端 |
| 中英文通用 PP-OCR server 模型(143.4M) | ch_ppocr_server_v2.0_xx | 服务器端 |
7.1 模型类型说明
PaddleOCR 提供的可下载模型分为四类,格式与用途各不相同:
| 模型类型 | 模型格式 | 简介 |
|---|---|---|
| 推理模型 | inference.pdmodel、inference.pdiparams | 用于预测引擎推理(详见 Python 推理文档) |
| 训练模型 / 预训练模型 | *.pdparams、*.pdopt、*.states | 训练过程保存的参数、优化器状态与中间信息,用于指标评估与恢复训练 |
| nb 模型 | *.nb | 经 Paddle-Lite 优化后的端侧模型,适用于移动端 / IoT 端部署 |
其中,训练模型是基于预训练模型在真实数据与竖排合成文本数据上 finetune 得到的,在真实场景表现更好;预训练模型直接基于全量真实数据与合成数据训练,更适合在自己的数据集上继续 finetune。
7.2 源码与配置文件对照
仓库中的配置文件与模型一一对应,例如:
- 检测: PP-OCRv4_mobile_det.yml、PP-OCRv4_server_det.yml(v4 检测配置位于
configs/det/PP-OCRv4/); - 方向分类: cls_mv3.yml;
- 识别: PP-OCRv3_mobile_rec_distillation.yml、PP-OCRv4_mobile_rec_distillation.yml(多语言配置位于
configs/rec/PP-OCRv3/multi_language/)。
配置文件中的Architecture、Loss、Optimizer、Metric等字段定义了网络结构、损失函数与训练策略,读者可对照 训练文档 理解每个参数的作用。更多英文数字模型、多语言模型与 Paddle-Lite 模型,可在 PP-OCR 系列模型下载 中按语种和部署场景检索。
8. 小结
PP-OCR 系列以"检测 + 方向分类 + 识别"的两阶段 pipeline 为骨架,历经四代迭代:从 PP-OCR 的 19 个策略瘦身,到 PP-OCRv2 引入 CML 蒸馏与 LCNet,再到 PP-OCRv3 以 SVTR_LCNet 为核心的 9 项升级,最终在 PP-OCRv4 中以 LCNetV3/PFHead/DF/DKD 等 10 项改进进一步拉高精度上限。整体模型体量从 mobile 系列的 9.4M 到 server 系列的 143.4M 覆盖不同算力场景,并通过 whl 包命令行、Python API 与 80 种语言模型支持快速落地。无论你是要快速体验 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
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考