目录
1. 用PPOCRLabel标注数据
1.1 创建虚拟环境
1.2 激活虚拟环境
1.3 安装飞桨框架paddlepaddle
1.4 安装标注工具PPOCRLabel
1.5 安装paddlex[ocr]
1.6 运行PPOCRLabel.py脚本
1.7 标注
1.8 数据集划分
2. 搭建训练环境
2.1 拉取预安装 PaddlePaddle 的镜像
2.2 下载PaddleOCR源码
2.3 下载预训练模型
2.4 数据存放目录结构
2.5 用镜像构建并进入Docker容器
2.6 安装其余训练依赖
2.7 配置动态库搜索路径
3. 训练PP-OCRv6检测模型
3.1 修改配置文件
3.2 检测模型训练
4. 训练PP-OCRv6识别模型
4.1 修改配置文件
4.2 识别模型训练
5. 模型评估
5.1 检测模型评估
5.2 识别模型评估
6. 模型导出
6.1 检测模型导出
6.2 识别模型导出
7. pdparams格式转onnx格式
7.1 安装paddlex[ocr]
7.2 安装paddle2onnx
7.3 执行格式转换
7.4 转换报错及解决
8. 官方文档
PP-OCRv6简介 - PaddleOCR 文档
PP-OCRv6是 PP-OCR 最新一代通用文字识别解决方案。PP-OCRv6 基于全新设计的 PPLCNetV4 统一骨干网络,提供 tiny、small、medium 三档模型,分别面向端侧/IoT、移动端/桌面端、服务端场景。PP-OCRv6 在语言覆盖方面实现重大突破,medium/small 档单一模型统一支持简体中文、繁体中文、英文、日文及 46 种拉丁语系语言共 50 种语言(tiny 档支持 49 种,不含日文)。在内部多场景综合评估集上,PP-OCRv6_medium 相比 PP-OCRv5_server 识别精度提升 5.1%、检测精度提升 4.6%,同时 GPU 推理速度提升 2.37×;以仅 34.5M 参数的规模,精度超越 Qwen3-VL-235B、GPT-5.5 等大型视觉语言模型。
PP-OCRv6 的主要贡献如下:
- 统一可扩展的模型族:提供覆盖 1.5M 至 34.5M 参数的三档完整 OCR 模型族。medium 档达到 86.2% 检测 Hmean 和 83.2% 识别准确率,可作为工业部署和大规模数据管线的高效生产级基础设施。
- 面向 OCR 的轻量级架构创新:提出一系列专为 OCR 任务定制的轻量级架构组件——(i) LCNetV4:集成结构重参数化的 MetaFormer 风格轻量骨干;(ii) RepLKFPN:利用膨胀可重参数化深度卷积实现大感受野的检测颈部;(iii) EncoderWithLightSVTR:基于局部-全局注意力和加性跳跃连接的识别颈部。
- 广泛的多语言与多场景泛化:单一模型扩展至支持 50 种语言和多种挑战性工业场景(如数码显示屏、点阵字符、轮胎印字等),显著提升了传统通用视觉语言模型难以覆盖的专业场景 OCR 性能。
1. 用PPOCRLabel标注数据
- 标注环境:Windows系统
- PPOCRLabel版本:v3.1.6
- 注意:安装用清华源加速
1.1 创建虚拟环境
注意:高版本python PPOCRLabel 依赖的库兼容性问题,目前用python3.10
conda create -n ppocrlabel python=3.101.2 激活虚拟环境
conda activate ppocrlabel1.3 安装飞桨框架paddlepaddle
备注:目前采用cpu版本
PPOCRLabel有自动标注功能,会用到paddlepaddle做模型推理
python -m pip install paddlepaddle -i https://www.paddlepaddle.org.cn/packages/stable/cpu/1.4 安装标注工具PPOCRLabel
pip install PPOCRLabel -i https://pypi.tuna.tsinghua.edu.cn/simple1.5 安装paddlex[ocr]
pip install "paddlex[ocr]" -i https://pypi.tuna.tsinghua.edu.cn/simple1.6 运行PPOCRLabel.py脚本
1.6.1 进入PPOCRLabel安装目录
例如:
cd D:\ProgramData\miniconda3\envs\ppocrlabel\Lib\site-packages\PPOCRLabel1.6.2 运行PPOCRLabel.py脚本
注意:
1.6.2.1 运行脚本的方式会看到报错信息
1.6.2.2 第一次启动要用脚本,要下载模型(默认路径 C:\Users\xxx\.paddlex\official_models)
1.6.2.3 PPOCRLabel --lang ch 方式运行需要等待一段时间才能看到界面
python PPOCRLabel.py --lang ch1.6.2.4 备注:报错修复
(ppocrlabel) D:\ProgramData\miniconda3\envs\ppocrlabel\Lib\site-packages\PPOCRLabel>python PPOCRLabel.py --lang ch 信息: 用提供的模式无法找到文件。 D:\ProgramData\miniconda3\envs\ppocrlabel\lib\site-packages\paddle\utils\cpp_extension\extension_utils.py:712: UserWarning: No ccache found. Please be aware that recompiling all source files may be required. You can download and install ccache from: https://github.com/ccache/ccache/blob/master/doc/INSTALL.md warnings.warn(warning_message) Traceback (most recent call last): File "D:\ProgramData\miniconda3\envs\ppocrlabel\Lib\site-packages\PPOCRLabel\PPOCRLabel.py", line 86, in <module> from paddleocr import PaddleOCR, PPStructureV3, TextRecognition, TextDetection File "D:\ProgramData\miniconda3\envs\ppocrlabel\lib\site-packages\paddleocr\__init__.py", line 44, in <module> from ._api_client import ( File "D:\ProgramData\miniconda3\envs\ppocrlabel\lib\site-packages\paddleocr\_api_client\__init__.py", line 16, in <module> from .async_client import AsyncPaddleOCRClient File "D:\ProgramData\miniconda3\envs\ppocrlabel\lib\site-packages\paddleocr\_api_client\async_client.py", line 21, in <module> import aiohttp File "D:\ProgramData\miniconda3\envs\ppocrlabel\lib\site-packages\aiohttp\__init__.py", line 6, in <module> from .client import ( File "D:\ProgramData\miniconda3\envs\ppocrlabel\lib\site-packages\aiohttp\client.py", line 83, in <module> from .connector import ( File "D:\ProgramData\miniconda3\envs\ppocrlabel\lib\site-packages\aiohttp\connector.py", line 918, in <module> _SSL_CONTEXT_VERIFIED = _make_ssl_context(True) File "D:\ProgramData\miniconda3\envs\ppocrlabel\lib\site-packages\aiohttp\connector.py", line 901, in _make_ssl_context sslcontext = ssl.create_default_context() File "D:\ProgramData\miniconda3\envs\ppocrlabel\lib\ssl.py", line 771, in create_default_context context.load_default_certs(purpose) File "D:\ProgramData\miniconda3\envs\ppocrlabel\lib\ssl.py", line 592, in load_default_certs self._load_windows_store_certs(storename, purpose) File "D:\ProgramData\miniconda3\envs\ppocrlabel\lib\ssl.py", line 584, in _load_windows_store_certs self.load_verify_locations(cadata=certs) ssl.SSLError: [ASN1: NOT_ENOUGH_DATA] not enough data (_ssl.c:4040)尝试重新安装 OpenSSL 并修复 Conda 环境:
conda install openssl -c conda-forge --force-reinstall1.7 标注
1.7.1 打开目录
1.7.2 标注
菜单栏:帮助-》操作步骤:
1.安装与运行:使用上述命令安装与运行程序。
2.打开文件夹:在菜单栏点击“文件”-打开目录选择待标记图片的文件夹。
3.自动标注:点击“自动标注”,使用PPOCR超轻量模型对图片文件名前图片状态为“X”的图片进行自动标注。
4.手动标注:点击“矩形标注”(推荐直接在英文模式下点击键盘中的“W”),用户可对当前图片中模型未检出的部分进行手动绘制标记框。点击键盘P,则使用四点标注模式(或点击“编辑”-“四点标注”),用户依次点击4个点后,双击左键表示标注完成。
5.标记框绘制完成后,用户点击“确认”,检测框会先被预分配一个“待识别”标签。
6.重新识别:将图片中的所有检测画绘制/调整完成后,点击“重新识别”,PPOCR模型会对当前图片中的**所有检测框**重新识别。
7.内容更改:双击识别结果,对不准确的识别结果进行手动更改。
8.保存:点击“保存”,图片状态切换为“✔”,跳转至下一张。
9.删除:点击“删除图像”,图片将会被删除至回收站。
10.标注结果:关闭应用程序或切换文件路径后,手动保存过的标签将会被存放在所打开图片文件夹下的“Label.txt”中。在菜单栏点击“PaddleOCR”-保存识别结果后,会将此类图片的识别训练数据保存在*crop_img*文件夹下,识别标签保存在*rec_gt.txt*中。
菜单栏:帮助-》快捷键:
w:矩形标注
q:多点标注
1.7.3 导出标记结果
1.7.4 导出识别结果
1.8 数据集划分
路径问题:如果在Windows下划分数据,但计划在Linux系统下训练,需要注意文件路径的差异,可能会因路径前缀问题导致训练时找不到文件。建议尽量在最终训练的环境(如Linux、Docker容器等)中直接进行数据划分
- 下载PPOCRLabel源码,复制到训练环境,放在标注数据集同一目录
git clone https://github.com/PFCCLab/PPOCRLabel.git|- labeled_dataset
|- PPOCRLabel
- 进入PPOCRLabel安装目录:
cd ./PPOCRLabel # 将目录切换到PPOCRLabel文件夹下- 执行脚本,生成划分后的数据集train_data:
python gen_ocr_train_val_test.py --trainValTestRatio 7:2:1 --datasetRootPath ../labeled_dataset|- labeled_dataset
|- PPOCRLabel
|- train_data
|- det
|- rec
| 参数 | 参数说明 |
| --trainValTestRatio | 训练集验证集测试集比例 |
| --datasetRootPath | 已标注数据集路径 |
| --detRootPath | 划分后的检测数据集存放路径 |
| --recRootPath | 划分后的识别数据集存放路径 |
2. 搭建训练环境
- 飞桨快速安装【docker方式】: 开始使用_飞桨-源于产业实践的开源深度学习平台
- 硬件配置:
- GPU: NVIDIA GeForce RTX 5080
2.1 拉取预安装 PaddlePaddle 的镜像
- 镜像版本信息:3.3.1-gpu-cuda13.0-cudnn9.13
docker pull ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlepaddle/paddle:3.3.1-gpu-cuda13.0-cudnn9.132.2 下载PaddleOCR源码
PaddleOCR:v3.7.0
# 推荐方式 git clone https://github.com/PaddlePaddle/PaddleOCR2.3 下载预训练模型
文本检测模块 - PaddleOCR 文档
文本识别模块 - PaddleOCR 文档
2.4 数据存放目录结构
|-- workspace/ppocr/ppocrv6
|-- PaddleOCR #源码
|-- pretrained_model #预训练模型
|-- train_data #拆分后的标注数据集
|-- labeled_dataset #原始数据集
|-- PPOCRLabel #用于数据集划分
2.5 用镜像构建并进入Docker容器
docker run -itd --name paddleocr --gpus all --shm-size=8g -v /home/xxx/workspace:/workspace/ppocr ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlepaddle/paddle:3.3.1-gpu-cuda13.0-cudnn9.13 /bin/bash2.6 安装其余训练依赖
进入PaddleOCR源码目录,安装其余训练依赖
python -m pip install -r requirements.txt2.7 配置动态库搜索路径
export LD_LIBRARY_PATH=/lib/x86_64-linux-gnu:/usr/local/cuda/lib64:$LD_LIBRARY_PATH容器内默认缺少 CUDA lib64 动态库搜索路径,Paddle 找不到 cudart/cuda 运行库,判定 GPU 不可用,报错如下:
/usr/local/lib/python3.10/dist-packages/paddle/base/framework.py:829: UserWarning: You are using GPU version Paddle, but your CUDA device is not set properly. CPU device will be used by default. warnings.warn( Skipping import of the encryption module. E0615 05:28:28.237717 22589 place.cc:424] Cannot use GPU because there is no GPU detected on your machine. Traceback (most recent call last): File "/workspace/ppocr/ppocrv6/PaddleOCR/tools/train.py", line 297, in <module> config, device, logger, vdl_writer = program.preprocess(is_train=True) File "/workspace/ppocr/ppocrv6/PaddleOCR/tools/program.py", line 976, in preprocess device = paddle.set_device(device) File "/usr/local/lib/python3.10/dist-packages/paddle/device/__init__.py", line 631, in set_device place = device_to_place(device) File "/usr/local/lib/python3.10/dist-packages/paddle/device/__init__.py", line 392, in device_to_place device = _convert_to_place(device) File "/usr/local/lib/python3.10/dist-packages/paddle/device/__init__.py", line 448, in _convert_to_place place = core.CUDAPlace(device_id) ValueError: (InvalidArgument) use wrong place, Please check. (at /paddle/paddle/fluid/pybind/place.cc:427)3. 训练PP-OCRv6检测模型
3.1 修改配置文件
configs/det/PP-OCRv6/PP-OCRv6_medium_det.yml
例如:
备注:如果报显存错误 Out of memory error on GPU 0,可以将batch_size_per_card改小
Train -> loader -> batch_size_per_card: 8 改成 4
3.2 检测模型训练
#单卡训练 (默认训练方式) python tools/train.py -c configs/det/PP-OCRv6/PP-OCRv6_medium_det.yml模型输出目录:
4. 训练PP-OCRv6识别模型
4.1 修改配置文件
configs/rec/PP-OCRv6/PP-OCRv6_medium_rec.yml
4.2 识别模型训练
#单卡训练 (默认训练方式) python tools/train.py -c configs/rec/PP-OCRv6/PP-OCRv6_medium_rec.yml模型输出目录:
5. 模型评估
5.1 检测模型评估
python tools/eval.py -c configs/det/PP-OCRv6/PP-OCRv6_medium_det.yml -o Global.pretrained_model=output/PP-OCRv6_medium_det/best_accuracy.pdparams5.2 识别模型评估
python tools/eval.py -c configs/rec/PP-OCRv6/PP-OCRv6_medium_rec.yml -o Global.pretrained_model=output/PP-OCRv6_medium_rec/best_accuracy.pdparams6. 模型导出
6.1 检测模型导出
python tools/export_model.py -c configs/det/PP-OCRv6/PP-OCRv6_medium_det.yml -o Global.pretrained_model=output/PP-OCRv6_medium_det/best_accuracy.pdparams Global.save_inference_dir="./PP-OCRv6_medium_det_infer/"6.2 识别模型导出
python tools/export_model.py -c configs/rec/PP-OCRv6/PP-OCRv6_medium_rec.yml -o Global.pretrained_model=output/PP-OCRv6_medium_rec/best_accuracy.pdparams Global.save_inference_dir="./PP-OCRv6_medium_rec_infer/"7. pdparams格式转onnx格式
7.1 安装paddlex[ocr]
pip install "paddlex[ocr]"7.2 安装paddle2onnx
paddlex --install paddle2onnx版本信息:
paddlex:3.7.1
paddle2onnx:2.0.2rc3
7.3 执行格式转换
检测模型转onnx
paddlex --paddle2onnx --paddle_model_dir PP-OCRv6_medium_det_infer --onnx_model_dir PP-OCRv6_medium_det_infer_onnx --opset_version 11识别模型转onnx
paddlex --paddle2onnx --paddle_model_dir PP-OCRv6_medium_rec_infer --onnx_model_dir PP-OCRv6_medium_rec_infer_onnx --opset_version 117.4 转换报错及解决
报错信息:
root@f5079c5ab22a:/workspace/ppocr/ppocrv6/PaddleOCR# paddlex --paddle2onnx --paddle_model_dir PP-OCRv6_medium_det_infer --onnx_model_dir PP-OCRv6_medium_det_infer_onnx --opset_version 11 Input dir: PP-OCRv6_medium_det_infer Output dir: PP-OCRv6_medium_det_infer_onnx Paddle2ONNX conversion starting... /usr/local/lib/python3.10/dist-packages/paddle/base/framework.py:829: UserWarning: You are using GPU version Paddle, but your CUDA device is not set properly. CPU device will be used by default. warnings.warn( [Paddle2ONNX] Start parsing the Paddle model file... [Paddle2ONNX] Use opset_version = 11 for ONNX export. 2026-06-16 02:59:02 [ERROR] Failed to convert PaddlePaddle model: (Unimplemented) the 0th elementwise MUST be ir::FloatAttribute [Hint: Expected array_list[0].isa<::pir::FloatAttribute>() == true, but received array_list[0].isa<::pir::FloatAttribute>():0 != true:1.] (at /github/workspace/paddle2onnx/parser/pir_parser.cc:814) . Paddle2ONNX conversion failed with exit code 255 root@f5079c5ab22a:/workspace/ppocr/ppocrv6/PaddleOCR#解决方案:新起一个容器环境,将paddlepaddle_gpu替换为3.2.1,重新导出模型,再执行格式转换命令
参考链接:Failed to convert PaddlePaddle model: (Unimplemented) the 0th elementwise MUST be ir::FloatAttribute · Issue #77757 · PaddlePaddle/Paddle · GitHub
8. 官方文档
PaddleOCR 文档
https://github.com/PaddlePaddle/PaddleOCR
PP-OCRv6: 使用教程 - PaddleOCR 文档
标注:
其它数据标注工具 - PaddleOCR 文档
PPOCRLabelv3: PPOCRLabel/README_ch.md at main · PFCCLab/PPOCRLabel · GitHub
训练微调:
模块概述 - PaddleOCR 文档
文本检测模块 - PaddleOCR 文档
文本识别模块 - PaddleOCR 文档
获取 ONNX 模型:
获取ONNX模型 - PaddleOCR 文档
注意:PP-OCRv6 2026/06/11发布,训练流程和PP-OCRv5相似,PP-OCRv5微调参见:用自定义数据集微调PP-OCRv5文本检测、识别模型-CSDN博客