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

目录

[1. 用PPOCRLabel标注数据](#1. 用PPOCRLabel标注数据)

[2. 搭建训练环境](#2. 搭建训练环境)

[2.1 拉取预安装 PaddlePaddle 的镜像](#2.1 拉取预安装 PaddlePaddle 的镜像)

[2.2 下载PaddleOCR源码](#2.2 下载PaddleOCR源码)

[2.3 下载预训练模型](#2.3 下载预训练模型)

[2.4 数据存放目录结构](#2.4 数据存放目录结构)

[2.5 用镜像构建并进入Docker容器](#2.5 用镜像构建并进入Docker容器)

[2.6 配置动态库搜索路径](#2.6 配置动态库搜索路径)

[3. 训练PP-OCRv5检测模型](#3. 训练PP-OCRv5检测模型)

[3.1 修改配置文件](#3.1 修改配置文件)

[3.2 检测模型训练](#3.2 检测模型训练)

[4. 训练PP-OCRv5识别模型](#4. 训练PP-OCRv5识别模型)

[4.1 修改配置文件](#4.1 修改配置文件)

[4.2 识别模型训练](#4.2 识别模型训练)

[5. 模型评估](#5. 模型评估)

[5.1 检测模型评估](#5.1 检测模型评估)

[5.2 识别模型评估](#5.2 识别模型评估)

[6. 模型导出](#6. 模型导出)

[6.1 检测模型导出](#6.1 检测模型导出)

[6.2 识别模型导出](#6.2 识别模型导出)

[7. 模型格式转化](#7. 模型格式转化)

[8. 官方文档](#8. 官方文档)


1. 用PPOCRLabel标注数据

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

1.1 创建虚拟环境

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

bash 复制代码
conda create -n ppocrlabel python=3.10

1.2 激活虚拟环境

bash 复制代码
conda activate ppocrlabel

1.3 安装飞桨框架paddlepaddle

备注:目前采用cpu版本

bash 复制代码
python -m pip install paddlepaddle -i https://www.paddlepaddle.org.cn/packages/stable/cpu/

1.4 安装标注工具PPOCRLabel

bash 复制代码
pip install PPOCRLabel -i https://pypi.tuna.tsinghua.edu.cn/simple

1.5 安装paddlexocr

bash 复制代码
pip install "paddlex[ocr]" -i https://pypi.tuna.tsinghua.edu.cn/simple

1.6 运行PPOCRLabel.py脚本

1.6.1 进入PPOCRLabel安装目录

例如:

bash 复制代码
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 方式运行需要等待一段时间才能看到界面

bash 复制代码
python PPOCRLabel.py --lang ch 

1.6.2.4 备注:报错修复

XML 复制代码
(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 环境:

bash 复制代码
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源码,复制到训练环境,放在标注数据集同一目录
bash 复制代码
git clone https://github.com/PFCCLab/PPOCRLabel.git

|- labeled_dataset

|- PPOCRLabel

  • 进入PPOCRLabel安装目录:
bash 复制代码
cd ./PPOCRLabel # 将目录切换到PPOCRLabel文件夹下
  • 执行脚本,生成划分后的数据集train_data:
bash 复制代码
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. 搭建训练环境

2.1 拉取预安装 PaddlePaddle 的镜像

  • 镜像版本信息:3.3.1-gpu-cuda13.0-cudnn9.13
bash 复制代码
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

bash 复制代码
# 推荐方式
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容器

bash 复制代码
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 配置动态库搜索路径

容器内默认缺少 CUDA lib64 动态库搜索路径,Paddle 找不到 cudart/cuda 运行库,判定 GPU 不可用

bash 复制代码
export LD_LIBRARY_PATH=/lib/x86_64-linux-gnu:/usr/local/cuda/lib64:$LD_LIBRARY_PATH

3. 训练PP-OCRv5检测模型

3.1 修改配置文件

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

例如:

3.2 检测模型训练

bash 复制代码
#单卡训练 (默认训练方式)
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 识别模型训练

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

模型输出目录:

5. 模型评估

5.1 检测模型评估

bash 复制代码
python tools/eval.py -c configs/det/PP-OCRv5/PP-OCRv5_server_det.yml -o Global.pretrained_model=output/PP-OCRv5_server_det/latest.pdparams 

5.2 识别模型评估

bash 复制代码
python tools/eval.py -c configs/rec/PP-OCRv5/PP-OCRv5_server_rec.yml -o Global.pretrained_model=output/PP-OCRv5_server_rec/latest.pdparams

6. 模型导出

6.1 检测模型导出

bash 复制代码
python tools/export_model.py -c configs/det/PP-OCRv5/PP-OCRv5_server_det.yml -o Global.pretrained_model=output/PP-OCRv5_server_det/latest.pdparams Global.save_inference_dir="./PP-OCRv5_server_det_infer/"

6.2 识别模型导出

bash 复制代码
python tools/export_model.py -c configs/rec/PP-OCRv5/PP-OCRv5_server_rec.yml -o Global.pretrained_model=output/PP-OCRv5_server_rec/latest.pdparams Global.save_inference_dir="./PP-OCRv5_server_rec_infer/"

7. 模型格式转化

pdparams格式转onnx格式

bash 复制代码
paddlex --paddle2onnx  --paddle_model_dir  PP-OCRv5_server_det_infer --onnx_model_dir PP-OCRv5_server_det_infer_onnx --opset_version 11 

8. 官方文档

PaddleOCR 文档

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

标注:

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

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

训练微调:

模块概述 - PaddleOCR 文档

文本检测模块 - PaddleOCR 文档

文本识别模块 - PaddleOCR 文档

获取 ONNX 模型:

获取ONNX模型 - PaddleOCR 文档

相关推荐
2301_764441331 小时前
基于AI的本地文件归档智能管理工具梳理
人工智能·python·算法·目标检测·交互
二十七剑1 小时前
LangGraph 源码深度解析:Node 节点 Protocol 与 StateNodeSpec 核心机制
开发语言·python
AC赳赳老秦1 小时前
OpenClaw + 云数据库运维:自动备份、扩容、迁移 RDS/MySQL 云数据库
运维·开发语言·数据库·人工智能·python·mysql·openclaw
Tbisnic1 小时前
AI大模型学习第十二天:Coze工作流与智能体开发
人工智能·python·ai·大模型·智能体·coze
冷小鱼1 小时前
高级研发编码习惯:从规范到艺术,再到AI+时代的人机协同
java·开发语言·python·编码习惯
matrixmind82 小时前
HTTPX:Python 下一代 HTTP 客户端
python·其他·http·httpx
怪兽学LLM2 小时前
LeetCode 21 合并两个有序链表:彻底理解虚拟头节点(Dummy)套路
python·leetcode·链表
XLYcmy2 小时前
一个基于 Python 的轻量级 LLM(大语言模型)API 客户端程序:从API交互到LLM应用架构
服务器·python·ai·llm·prompt·agent·token