news 2026/6/19 14:02:58

用自定义数据集微调PP-OCRv5文本检测、识别模型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用自定义数据集微调PP-OCRv5文本检测、识别模型

目录

1. 用PPOCRLabel标注数据

2. 搭建训练环境

2.1 拉取预安装 PaddlePaddle 的镜像

2.2 下载PaddleOCR源码

2.3 下载预训练模型

2.4 数据存放目录结构

2.5 用镜像构建并进入Docker容器

2.6 安装其余训练依赖

2.7 配置动态库搜索路径

3. 训练PP-OCRv5检测模型

3.1 修改配置文件

3.2 检测模型训练

4. 训练PP-OCRv5识别模型

4.1 修改配置文件

4.2 识别模型训练

5. 模型评估

5.1 检测模型评估

5.2 识别模型评估

6. 模型导出

6.1 检测模型导出

6.2 识别模型导出

7. 模型格式转化

8. 官方文档


1. 用PPOCRLabel标注数据

  • 标注环境:Windows系统
  • PPOCRLabel版本:v3.1.6
  • 注意:安装用清华源加速

1.1 创建虚拟环境

注意:高版本python PPOCRLabel 依赖的库兼容性问题,目前用python3.10

conda create -n ppocrlabel python=3.10

1.2 激活虚拟环境

conda activate ppocrlabel

1.3 安装飞桨框架paddlepaddle

备注:目前采用cpu版本

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/simple

1.5 安装paddlex[ocr]

pip install "paddlex[ocr]" -i https://pypi.tuna.tsinghua.edu.cn/simple

1.6 运行PPOCRLabel.py脚本

1.6.1 进入PPOCRLabel安装目录

例如:

cd D:\ProgramData\miniconda3\envs\ppocrlabel\Lib\site-packages\PPOCRLabel

1.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 ch

1.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-reinstall

1.7 标注

1.7.1 打开目录

1.7.2 标注

1.7.3 导出标记结果

1.7.4 导出识别结果

1.8 数据集划分

路径问题:如果在Windows下划分数据,但计划在Linux系统下训练,需要注意文件路径的差异,可能会因路径前缀问题导致训练时找不到文件。建议尽量在最终训练的环境(如Linux)中直接进行数据划分

  • 下载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.13

2.2 下载PaddleOCR源码

PaddleOCR:v3.6.0

# 推荐方式 git clone https://github.com/PaddlePaddle/PaddleOCR

2.3 下载预训练模型

文本检测模块 - PaddleOCR 文档

文本识别模块 - PaddleOCR 文档

2.4 数据存放目录结构

|-- workspace/ppocr/ppocrv5

|-- 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/bash

2.6 安装其余训练依赖

进入PaddleOCR源码目录,安装其余训练依赖

python -m pip install -r requirements.txt

2.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-OCRv5检测模型

3.1 修改配置文件

configs/det/PP-OCRv5/PP-OCRv5_server_det.yml

例如:

3.2 检测模型训练

#单卡训练 (默认训练方式) python tools/train.py -c configs/det/PP-OCRv5/PP-OCRv5_server_det.yml

模型输出目录:

4. 训练PP-OCRv5识别模型

4.1 修改配置文件

configs/rec/PP-OCRv5/PP-OCRv5_server_rec.yml

4.2 识别模型训练

#单卡训练 (默认训练方式) python tools/train.py -c configs/rec/PP-OCRv5/PP-OCRv5_server_rec.yml

模型输出目录:

5. 模型评估

5.1 检测模型评估

python tools/eval.py -c configs/det/PP-OCRv5/PP-OCRv5_server_det.yml -o Global.pretrained_model=output/PP-OCRv5_server_det/best_accuracy.pdparams

5.2 识别模型评估

python tools/eval.py -c configs/rec/PP-OCRv5/PP-OCRv5_server_rec.yml -o Global.pretrained_model=output/PP-OCRv5_server_rec/best_accuracy.pdparams

6. 模型导出

6.1 检测模型导出

python tools/export_model.py -c configs/det/PP-OCRv5/PP-OCRv5_server_det.yml -o Global.pretrained_model=output/PP-OCRv5_server_det/best_accuracy.pdparams Global.save_inference_dir="./PP-OCRv5_server_det_infer/"

6.2 识别模型导出

python tools/export_model.py -c configs/rec/PP-OCRv5/PP-OCRv5_server_rec.yml -o Global.pretrained_model=output/PP-OCRv5_server_rec/best_accuracy.pdparams Global.save_inference_dir="./PP-OCRv5_server_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-OCRv5_server_det_infer --onnx_model_dir PP-OCRv5_server_det_infer_onnx --opset_version 11

识别模型转onnx

paddlex --paddle2onnx --paddle_model_dir PP-OCRv5_server_rec_infer --onnx_model_dir PP-OCRv5_server_rec_infer_onnx --opset_version 11

报错信息:

root@224d8748be67:/workspace/ppocr/ppocrv5/PaddleOCR# paddlex --paddle2onnx --paddle_model_dir PP-OCRv5_server_det_infer --onnx_model_dir PP-OCRv5_server_det_infer_onnx --opset_version 11 Input dir: PP-OCRv5_server_det_infer Output dir: PP-OCRv5_server_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:39:45 [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

8. 官方文档

PaddleOCR 文档

PP-OCRv5: 使用教程 - PaddleOCR 文档

标注:

其它数据标注工具 - PaddleOCR 文档

PPOCRLabelv3: PPOCRLabel/README_ch.md at main · PFCCLab/PPOCRLabel · GitHub

训练微调:

模块概述 - PaddleOCR 文档

文本检测模块 - PaddleOCR 文档

文本识别模块 - PaddleOCR 文档

获取 ONNX 模型

获取ONNX模型 - PaddleOCR 文档

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/19 14:02:03

华硕笔记本性能控制终极指南:5个核心模块彻底掌握G-Helper

华硕笔记本性能控制终极指南&#xff1a;5个核心模块彻底掌握G-Helper 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook…

作者头像 李华
网站建设 2026/6/19 14:00:00

MC68HC908AP LVI与Break模块详解:嵌入式系统稳定与调试的硬件基石

1. 项目概述&#xff1a;深入理解MC68HC908AP的守护者与侦察兵 在嵌入式系统&#xff0c;尤其是那些运行在严苛环境下的工业控制、汽车电子或便携设备中&#xff0c;系统的稳定性和可调试性是两个永恒的核心命题。稳定&#xff0c;意味着MCU&#xff08;微控制器单元&#xff0…

作者头像 李华
网站建设 2026/6/19 13:44:24

如何在Mac上使用CXPatcher提升CrossOver游戏性能:终极优化指南

如何在Mac上使用CXPatcher提升CrossOver游戏性能&#xff1a;终极优化指南 【免费下载链接】CXPatcher A patcher to upgrade Crossover dependencies and improve compatibility 项目地址: https://gitcode.com/gh_mirrors/cx/CXPatcher 想要在Mac上流畅运行Windows游戏…

作者头像 李华
网站建设 2026/6/19 13:42:55

169.详解DDPM核心机制,手写简易U-Net完成MNIST图像生成

摘要 扩散模型(Diffusion Models)是当前生成式AI领域最前沿的技术之一,在图像生成、音频合成、分子设计等任务中展现了超越GAN和VAE的能力。本文从数学原理出发,逐步推导扩散模型的前向扩散与反向去噪过程,并给出一个完整的、可直接运行的PyTorch实现。文章涵盖DDPM(Den…

作者头像 李华
网站建设 2026/6/19 13:41:21

豆包 专家 LeetCode 3287. 求出数组中最大序列值 Java实现

题目正确题意给你一个整数数组 nums 和正整数 k &#xff0c;需要选出长度为 2*k 的子序列&#xff0c;将其均分为前后各 k 个元素&#xff1a;- 前半段所有元素做按位或得到值 A - 后半段所有元素做按位或得到值 B - 序列值 A XOR B 求所有合法子序列中的最大序列值…

作者头像 李华