首页
/ PaddleOCR 文字识别模型训练全流程指南:数据准备、训练调优、评估与部署

PaddleOCR 文字识别模型训练全流程指南:数据准备、训练调优、评估与部署

2026-09-10 12:17:54作者:昌雅子Ethen

本文以 PaddleOCR 文本识别(Text Recognition)任务为主线,系统讲解从数据集准备、字典构建、数据增强,到模型训练、断点恢复、混合精度与分布式训练、多语言模型训练,再到指标评估、单图预测与 inference 模型导出的完整链路。文中所有配置与命令均以当前仓库(docs/version2.x/ppocr/model_train/recognition.md 为骨架)的实际源码与配置文件为准,读者学完后可独立完成一套识别模型的训练、调优与部署。

1. 数据准备:PaddleOCR 支持的两种数据格式

PaddleOCR 的识别任务支持两种数据集存储格式,分别对应两个数据集类(见 ppocr/data/init.pybuild_dataloader 支持的 SimpleDataSetLMDBDataSet):

  • lmdb:以 LMDB 数据库形式存储的数据集,由 LMDBDataSet 加载,实现见 ppocr/data/lmdb_dataset.py,适用于超大数据集的高效随机读取;
  • 通用数据:以普通文本文件记录图片路径与标签的数据集,由 SimpleDataSet 加载,实现见 ppocr/data/simple_dataset.py,是目前最常用、最易上手的格式。

训练数据的默认存储路径是 PaddleOCR/train_data。如果数据集已存在于磁盘其他位置,只需创建软链接到该目录,无需拷贝:

# linux and mac os
ln -sf <path/to/dataset> <path/to/paddle_ocr>/train_data/dataset
# windows
mklink /d <path/to/paddle_ocr>/train_data/dataset <path/to/dataset>

从源码看,SimpleDataSet 在解析标注行时默认使用 \t 作为分隔符(self.delimiter = dataset_config.get("delimiter", "\t")),同时支持 URL 图片路径(标注行以 http://https:// 开头时直接下载,并内置了按 epoch 预取与 LRU 缓存机制),并支持通过 ratio_list 按比例采样多个数据源。

1.1 自定义数据集:通用数据格式详解

以通用数据格式为例,准备识别训练数据需要两个部分:一个存放训练图片的文件夹,以及一个标注文件 rec_gt_train.txt

训练集标注文件rec_gt_train.txt)每行由图片路径和标签组成:

" 图像文件名                 图像标注信息 "

train_data/rec/train/word_001.jpg   简单可依赖
train_data/rec/train/word_002.jpg   用科技让复杂的世界更简单
...

注意: txt 文件中默认请将图片路径和图片标签用 \t 分割,如用其他方式分割将造成训练报错。

最终训练集应具有如下目录结构:

|-train_data
  |-rec
    |- rec_gt_train.txt
    |- train
        |- word_001.png
        |- word_002.jpg
        |- word_003.jpg
        | ...

同一标签多图写法(离线增广数据):除了"单张图像为一行"的格式之外,PaddleOCR 也支持对离线增广后的数据进行训练。为了防止相同样本在同一个 batch 中被多次采样,可以将相同标签对应的图片路径写在一行、以 JSON 列表形式给出,训练时 PaddleOCR 会随机选择列表中的一张图片。对应地,标注文件格式如下:

["11.jpg", "12.jpg"]   简单可依赖
["21.jpg", "22.jpg", "23.jpg"]   用科技让复杂的世界更简单
3.jpg   ocr

上例中,"11.jpg"和"12.jpg"标签相同(都是 简单可依赖),训练时该行标注会随机选择其中一张图片。此逻辑在源码中对应 SimpleDataSet._try_parse_filename_listppocr/data/simple_dataset.py):当文件名以 [ 开头时,将其解析为 JSON 列表并 random.choice 随机取一张。

验证集:与训练集类似,验证集需要一个包含全部图片的文件夹(test)和一个 rec_gt_test.txt,结构如下:

|-train_data
  |-rec
    |- rec_gt_test.txt
    |- test
        |- word_001.jpg
        |- word_002.jpg
        |- word_003.jpg
        | ...

1.2 数据下载:ICDAR2015 与多语言合成数据

若本地没有数据集,可以使用 ICDAR2015 数据快速验证,也可以参考 DTRB 下载其提供的 lmdb 格式 benchmark 数据集。

如果使用 icdar2015 公开数据集,PaddleOCR 提供了配套标签文件下载命令:

# 训练集标签
wget -P ./train_data/ic15_data  https://paddleocr.bj.bcebos.com/dataset/rec_gt_train.txt
# 测试集标签
wget -P ./train_data/ic15_data  https://paddleocr.bj.bcebos.com/dataset/rec_gt_test.txt

PaddleOCR 还提供了数据格式转换脚本,可将 ICDAR 官网 label 转换为 PaddleOCR 支持的格式。转换工具位于 ppocr/utils/gen_label.py,其 gen_rec_label 会将官网 图片路径,标签 的 CSV 行改写为 图片路径\t标签,以训练集为例:

# 将官网下载的标签文件转换为 rec_gt_label.txt
python gen_label.py --mode="rec" --input_path="{path/of/origin/label}" --output_label="rec_gt_label.txt"

数据样式如下图,(a) 为原始图片,(b) 为每张图片对应的 Ground Truth 文本文件:

ICDAR 识别数据格式示意图:左侧为原始文本行图片,右侧为对应的标注文本

多语言数据集:多语言模型的训练集通常为 100w 级合成数据,使用了开源合成工具 text_renderer 生成;少量字体可通过百度网盘(提取码 frgi)下载。

1.3 字典:字符与索引的映射

训练识别模型需要提供一个字典文件 {word_dict_name}.txt,使模型在训练时可以将所有出现的字符映射为字典索引。字典需包含所有希望被正确识别的字符,每行一个字符,以 utf-8 编码保存:

l
d
a
d
r
n

word_dict.txt 每行一个单字,将字符与数字索引一一映射,例如 "and" 将被映射为 [2 5 1](索引从 0 开始,a→2, d→5, n→1)。

内置字典:PaddleOCR 内置了多语种字典,可按需直接使用(均位于 ppocr/utils 及其子目录 ppocr/utils/dict):

字典文件 语种 字符数
ppocr/utils/ppocr_keys_v1.txt 中文 6623
ppocr/utils/ic15_dict.txt 英文(ICDAR15) 36
ppocr/utils/dict/french_dict.txt 法语 118
ppocr/utils/dict/japan_dict.txt 日语 4399
ppocr/utils/dict/korean_dict.txt 韩语 3636
ppocr/utils/dict/german_dict.txt 德语 131
ppocr/utils/en_dict.txt 英文 96

仓库 ppocr/utils/dict 下还提供了阿拉伯语、斯拉夫语、梵文、泰语、越南语等数十个语种字典。文档编写时多语言模型仍处于 demo 阶段,欢迎社区提供其他语言的字典和字体。

自定义字典:如需自定义字典,在 configs/rec/PP-OCRv3/en_PP-OCRv3_mobile_rec.yml 中设置 character_dict_path 字段指向新字典路径即可。从源码看,字典加载发生在后处理类 BaseRecLabelDecode.__init__ppocr/postprocess/rec_postprocess.py),逐行读取字典文件并构建字符列表;字符数最终会注入网络 Head 的 out_channels(见 tools/train.py),因此更换字典后模型输出维度会自动随之改变

1.4 添加空格类别

如果希望模型支持识别"空格"类别,将 yml 配置文件中的 use_space_char 字段设置为 True 即可。从源码看,use_space_char 会在解码器初始化时决定是否在字符表末尾追加空格字符(与字典加载逻辑同处 ppocr/postprocess/rec_postprocess.py)。

1.5 数据增强

PaddleOCR 默认配置中已内置数据增广,默认扰动方式包括:颜色空间转换(cvtColor/hsv)、模糊(blur)、抖动(jitter)、高斯噪声(Gaussian noise)、随机切割(random crop)、透视变换(perspective)、颜色反转(reverse)以及 TIA 数据增广,具体实现见 ppocr/data/imaug/rec_img_aug.py

各扰动以 40% 概率被选择,这对应 RecAugBaseDataAugmentation 中各概率参数的默认值(tia_prob=0.4, crop_prob=0.4, reverse_prob=0.4, noise_prob=0.4, jitter_prob=0.4, blur_prob=0.4, hsv_aug_prob=0.4)。训练时数据按 DecodeImage → RecAug(或 RecConAug)→ MultiLabelEncode → RecResizeImg → KeepKeys 的顺序经过变换管线。

注意: 由于 OpenCV 兼容性问题,部分扰动操作暂时只支持 Linux。

2. 开始训练:以 PP-OCRv3 英文识别模型为例

PaddleOCR 提供训练脚本(tools/train.py)、评估脚本(tools/eval.py)和预测脚本(tools/infer_rec.py),本节以 PP-OCRv3 英文识别模型为例逐步说明。

2.1 启动训练

首先下载预训练模型,在 icdar2015 数据上进行 finetune:

cd PaddleOCR/
# 下载英文PP-OCRv3的预训练模型
wget -P ./pretrain_models/ https://paddleocr.bj.bcebos.com/PP-OCRv3/english/en_PP-OCRv3_rec_train.tar
# 解压模型参数
cd pretrain_models
tar -xf en_PP-OCRv3_rec_train.tar && rm -rf en_PP-OCRv3_rec_train.tar

开始训练(若安装的是 CPU 版本,请将配置文件中的 use_gpu 字段修改为 false):

# GPU训练 支持单卡,多卡训练
# 训练icdar15英文数据 训练日志会自动保存为 "{save_model_dir}" 下的train.log

# 单卡训练(训练周期长,不建议)
python3 tools/train.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_mobile_rec.yml -o Global.pretrained_model=./pretrain_models/en_PP-OCRv3_rec_train/best_accuracy

# 多卡训练,通过--gpus参数指定卡号
python3 -m paddle.distributed.launch --gpus '0,1,2,3'  tools/train.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_mobile_rec.yml -o Global.pretrained_model=./pretrain_models/en_PP-OCRv3_rec_train/best_accuracy

正常启动训练后会看到如下 log 输出:

[2022/02/22 07:58:05] root INFO: epoch: [1/800], iter: 10, lr: 0.000000, loss: 0.754281, acc: 0.000000, norm_edit_dis: 0.000008, reader_cost: 0.55541 s, batch_cost: 0.91654 s, samples: 1408, ips: 153.62133
[2022/02/22 07:58:13] root INFO: epoch: [1/800], iter: 20, lr: 0.000001, loss: 0.924677, acc: 0.000000, norm_edit_dis: 0.000008, reader_cost: 0.00236 s, batch_cost: 0.28528 s, samples: 1280, ips: 448.68599
[2022/02/22 07:58:23] root INFO: epoch: [1/800], iter: 30, lr: 0.000002, loss: 0.967231, acc: 0.000000, norm_edit_dis: 0.000008, reader_cost: 0.14527 s, batch_cost: 0.42714 s, samples: 1280, ips: 299.66507

log 中各字段含义:

字段 含义
epoch 当前迭代轮次
iter 当前迭代次数
lr 当前学习率
loss 当前损失函数
acc 当前 batch 的准确率
norm_edit_dis 当前 batch 的编辑距离
reader_cost 当前 batch 数据处理耗时
batch_cost 当前 batch 总耗时
samples 当前 batch 内的样本数
ips 每秒处理图片的数量

PaddleOCR 支持训练和评估交替进行,可在 configs/rec/PP-OCRv3/en_PP-OCRv3_mobile_rec.yml 中通过 eval_batch_step 设置评估频率,默认每 2000 个 iter 评估一次;评估过程中默认将最佳 acc 模型保存为 output/en_PP-OCRv3_mobile_rec/best_accuracy。如果验证集很大,评估会比较耗时,建议减少评估次数,或训练完再评估。

提示: 可通过 -c 参数选择 configs/rec/ 路径下的多种模型配置进行训练。训练中文数据推荐使用 configs/rec/PP-OCRv3/PP-OCRv3_mobile_rec_distillation.yml。若想尝试其他算法在中文数据集上的效果,参考下列配置说明修改:

PP-OCRv3_mobile_rec_distillation.yml 为例:

Global:
  ...
  # 添加自定义字典,如修改字典请将路径指向新字典
  character_dict_path: ppocr/utils/ppocr_keys_v1.txt
  ...
  # 识别空格
  use_space_char: True


Optimizer:
  ...
  # 添加学习率衰减策略
  lr:
    name: Cosine
    learning_rate: 0.001
  ...

...

Train:
  dataset:
    # 数据集格式,支持LMDBDataSet以及SimpleDataSet
    name: SimpleDataSet
    # 数据集路径
    data_dir: ./train_data/
    # 训练集标签文件
    label_file_list: ["./train_data/train_list.txt"]
    transforms:
      ...
      - RecResizeImg:
          # 修改 image_shape 以适应长文本
          image_shape: [3, 48, 320]
      ...
  loader:
    ...
    # 单卡训练的batch_size
    batch_size_per_card: 256
    ...

Eval:
  dataset:
    # 数据集格式,支持LMDBDataSet以及SimpleDataSet
    name: SimpleDataSet
    # 数据集路径
    data_dir: ./train_data
    # 验证集标签文件
    label_file_list: ["./train_data/val_list.txt"]
    transforms:
      ...
      - RecResizeImg:
          # 修改 image_shape 以适应长文本
          image_shape: [3, 48, 320]
      ...
  loader:
    # 单卡验证的batch_size
    batch_size_per_card: 256
    ...

注意:预测/评估时的配置文件请务必与训练一致。

2.2 断点训练

如果训练程序中断,希望从断点恢复训练,可通过 Global.checkpoints 指定要加载的模型路径:

python3 tools/train.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_mobile_rec.yml -o Global.checkpoints=./your/trained/model

注意: Global.checkpoints 的优先级高于 Global.pretrained_model,即同时指定两个参数时优先加载 Global.checkpoints 指定的模型;若 Global.checkpoints 指定的路径有误,会回退加载 Global.pretrained_model 指定的模型。该优先级逻辑在 ppocr/utils/save_load.pyload_model 中体现:先判断 checkpoints 是否存在并校验 .pdparams 文件,再处理 pretrained_model 分支,且断点恢复时还会顺带加载 .pdopt 优化器状态与 .states 指标状态。

2.3 更换 Backbone 训练

PaddleOCR 将识别网络划分为四部分,目录结构如下,输入数据将按顺序依次通过:

├── architectures # 网络的组网代码
├── transforms    # 网络的图像变换模块
├── backbones     # 网络的特征提取模块
├── necks         # 网络的特征增强模块
└── heads         # 网络的输出模块

以上模块分别位于 ppocr/modeling/architecturesppocr/modeling/transformsppocr/modeling/backbonesppocr/modeling/necksppocr/modeling/heads

如果要更换的 Backbone 在 PaddleOCR 中已有对应实现,直接修改配置 yml 中 Backbone 部分参数即可。以 configs/rec/PP-OCRv3/en_PP-OCRv3_mobile_rec.yml 为例,PP-OCRv3 英文识别模型实际采用 SVTR_LCNet 算法,Backbone 为 MobileNetV1Enhance(scale=0.5),Head 为 CTC + SAR 双头的 MultiHead 结构。

如果要使用新的 Backbone,操作步骤如下:

  1. ppocr/modeling/backbones 文件夹下新建文件,如 my_backbone.py
  2. my_backbone.py 内添加网络代码,示例:
import paddle
import paddle.nn as nn
import paddle.nn.functional as F


class MyBackbone(nn.Layer):
    def __init__(self, *args, **kwargs):
        super(MyBackbone, self).__init__()
        # your init code
        self.conv = nn.xxxx

    def forward(self, inputs):
        # your network forward
        y = self.conv(inputs)
        return y
  1. ppocr/modeling/backbones/init.py 内导入 MyBackbone 模块,然后在配置文件中配置 Backbone 即可使用:
Backbone:
  name: MyBackbone
  args1: args1

注意: 若要更换网络的其他模块(transforms/necks/heads),可参考算法新增文档(docs/version2.x/algorithm/add_new_algorithm.md)。

2.4 混合精度训练

如果想进一步加快训练速度,可以使用 PaddlePaddle 的自动混合精度训练,以单机单卡为例:

python3 tools/train.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_mobile_rec.yml \
     -o Global.pretrained_model=./pretrain_models/en_PP-OCRv3_rec_train/best_accuracy \
     Global.use_amp=True Global.scale_loss=1024.0 Global.use_dynamic_loss_scaling=True

tools/train.py 源码看,Global.use_amp=True 时训练主循环会构造 paddle.amp.GradScaler(初始缩放系数取 Global.scale_loss,并可按 Global.use_dynamic_loss_scaling 开启动态缩放),同时可通过 Global.amp_level(默认 O2)与 Global.amp_dtype(默认 float16)进一步控制精度优化级别。

2.5 分布式训练

多机多卡训练时,通过 --ips 设置机器 IP 地址,通过 --gpus 设置 GPU ID:

python3 -m paddle.distributed.launch --ips="xx.xx.xx.xx,xx.xx.xx.xx" --gpus '0,1,2,3' tools/train.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_mobile_rec.yml \
     -o Global.pretrained_model=./pretrain_models/en_PP-OCRv3_rec_train/best_accuracy

注意: (1)多机多卡训练时需要将 --ips 替换为您机器的地址,机器之间需能相互 ping 通;(2)训练时需在多台机器上分别启动命令,查看机器 IP 的命令为 ifconfig;(3)更多分布式训练的性能优势等请参考分布式训练教程(docs/version2.x/ppocr/blog/distributed_training.md)。

2.6 知识蒸馏训练

PaddleOCR 支持基于知识蒸馏的文本识别模型训练,更多内容参考知识蒸馏说明文档(docs/version2.x/ppocr/model_compress/knowledge_distillation.md)。

2.7 多语言模型训练

PaddleOCR 已支持 80 种(除中文外)语种识别,configs/rec/multi_languages 路径下提供了多语言配置文件模板 rec_multi_language_lite_train.yml。按语系划分,模板默认支持的语种与网络结构如下:

配置文件 算法名称 backbone trans seq pred language
rec_chinese_cht_lite_train.yml CRNN Mobilenet_v3 small 0.5 None BiLSTM ctc 中文繁体
rec_en_lite_train.yml CRNN Mobilenet_v3 small 0.5 None BiLSTM ctc 英语(区分大小写)
rec_french_lite_train.yml CRNN Mobilenet_v3 small 0.5 None BiLSTM ctc 法语
rec_ger_lite_train.yml CRNN Mobilenet_v3 small 0.5 None BiLSTM ctc 德语
rec_japan_lite_train.yml CRNN Mobilenet_v3 small 0.5 None BiLSTM ctc 日语
rec_korean_lite_train.yml CRNN Mobilenet_v3 small 0.5 None BiLSTM ctc 韩语
rec_latin_lite_train.yml CRNN Mobilenet_v3 small 0.5 None BiLSTM ctc 拉丁字母
rec_arabic_lite_train.yml CRNN Mobilenet_v3 small 0.5 None BiLSTM ctc 阿拉伯字母
rec_cyrillic_lite_train.yml CRNN Mobilenet_v3 small 0.5 None BiLSTM ctc 斯拉夫字母
rec_devanagari_lite_train.yml CRNN Mobilenet_v3 small 0.5 None BiLSTM ctc 梵文字母

更多支持语种请参考多语言模型文档(docs/version2.x/ppocr/blog/multi_languages.md)。该模板实际的网络配置可在 rec_multi_language_lite_train.yml 中查看:算法为 CRNN,Backbone 为 MobileNetV3 small 0.5,Neck 为 SequenceEncoder(rnn,hidden_size 48),Head 为 CTCHead,图像输入尺寸 [3, 32, 320]

在现有模型基础上做多语言调优时,以 rec_french_lite_train 为例修改配置:

Global:
  ...
  # 添加自定义字典,如修改字典请将路径指向新字典
  character_dict_path: ./ppocr/utils/dict/french_dict.txt
  ...
  # 识别空格
  use_space_char: True

...

Train:
  dataset:
    # 数据集格式,支持LMDBDataSet以及SimpleDataSet
    name: SimpleDataSet
    # 数据集路径
    data_dir: ./train_data/
    # 训练集标签文件
    label_file_list: ["./train_data/french_train.txt"]
    ...

Eval:
  dataset:
    # 数据集格式,支持LMDBDataSet以及SimpleDataSet
    name: SimpleDataSet
    # 数据集路径
    data_dir: ./train_data
    # 验证集标签文件
    label_file_list: ["./train_data/french_val.txt"]
    ...

2.8 其他训练环境

  • Windows GPU/CPU:Windows 平台只支持单卡训练与预测,指定 GPU 训练使用 set CUDA_VISIBLE_DEVICES=0;Windows 平台 DataLoader 只支持单进程模式,因此需将 num_workers 设置为 0;
  • macOS:不支持 GPU 模式,需在配置文件中设置 use_gpu 为 False,其余训练评估预测命令与 Linux GPU 完全相同;
  • Linux DCU:DCU 设备上运行需设置环境变量 export HIP_VISIBLE_DEVICES=0,1,2,3,其余命令与 Linux GPU 完全相同。

2.9 模型微调

实际使用中建议加载官方预训练模型,在自己的数据集上进行微调,识别模型微调方法参考模型微调教程(docs/version2.x/ppocr/model_train/finetune.md)。

3. 模型评估与预测

3.1 指标评估

训练过程中模型参数默认保存在 Global.save_model_dir 目录下。评估指标时,设置 Global.checkpoints 指向保存的参数文件;评估数据集可通过 configs/rec/PP-OCRv3/en_PP-OCRv3_mobile_rec.yml 中 Eval 的 label_file_list 修改。

# GPU 评估, Global.checkpoints 为待测权重
python3 -m paddle.distributed.launch --gpus '0' tools/eval.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_mobile_rec.yml -o Global.checkpoints={path/to/weights}/best_accuracy

3.2 测试识别效果

根据配置文件中 save_model_dirsave_epoch_step 字段,训练过程会保存以下几类文件:

output/rec/
├── best_accuracy.pdopt
├── best_accuracy.pdparams
├── best_accuracy.states
├── config.yml
├── iter_epoch_3.pdopt
├── iter_epoch_3.pdparams
├── iter_epoch_3.states
├── latest.pdopt
├── latest.pdparams
├── latest.states
└── train.log

其中 best_accuracy.* 是评估集上的最优模型;iter_epoch_x.* 是以 save_epoch_step 为间隔保存的模型;latest.* 是最后一个 epoch 的模型。

使用训练好的模型进行单图预测(默认预测图片存储在 infer_img,通过 -o Global.pretrained_model 加载参数文件):

# 预测英文结果
python3 tools/infer_rec.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_mobile_rec.yml -o Global.pretrained_model={path/to/weights}/best_accuracy  Global.infer_img=doc/imgs_words/en/word_1.png

英文识别单图预测示例图

得到输入图像的预测结果:

infer_img: doc/imgs_words/en/word_1.png
        result: ('joint', 0.9998967)

预测使用的配置文件必须与训练一致。例如通过 python3 tools/train.py -c configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0.yml 完成中文模型训练后,可用如下命令预测中文:

# 预测中文结果
python3 tools/infer_rec.py -c configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0.yml -o Global.pretrained_model={path/to/weights}/best_accuracy Global.infer_img=doc/imgs_words/ch/word_1.jpg

中文识别单图预测示例图

得到输入图像的预测结果:

infer_img: doc/imgs_words/ch/word_1.jpg
        result: ('韩国小馆', 0.997218)

4. 模型导出与预测

inference 模型(paddle.jit.save 保存的模型)是训练完成后将模型结构和参数固化到文件中的部署模型,多用于预测部署场景;训练过程中保存的是 checkpoints 模型,只保存模型参数,多用于恢复训练。与 checkpoints 模型相比,inference 模型额外保存结构信息,在预测部署、加速推理上性能更优,更适合实际系统集成。

识别模型转 inference 模型命令如下:

# 开启旧 IR 模式
export FLAGS_enable_pir_api=0

# -c 后面设置训练算法的yml配置文件
# -o 配置可选参数
# Global.pretrained_model 参数设置待转换的训练模型地址,不用添加文件后缀 .pdmodel,.pdopt或.pdparams。
# Global.save_inference_dir参数设置转换的模型将保存的地址。

python3 tools/export_model.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_mobile_rec.yml -o Global.pretrained_model=./pretrain_models/en_PP-OCRv3_rec_train/best_accuracy  Global.save_inference_dir=./inference/en_PP-OCRv3_mobile_rec/

注意: 如果是在自己的数据集上训练且调整了中文字符的字典文件,请修改配置文件中的 character_dict_path 为自定义字典文件。

转换成功后目录下有三个文件:

inference/en_PP-OCRv3_mobile_rec/
    ├── inference.pdiparams         # 识别inference模型的参数文件
    ├── inference.pdiparams.info    # 识别inference模型的参数信息,可忽略
    └── inference.pdmodel           # 识别inference模型的program文件

注意: 如需以新 IR 模式(FLAGS_enable_pir_api=1)导出并存储 .json 文件,请执行:

export FLAGS_enable_pir_api=1
python3 tools/export_model.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_mobile_rec.yml -o Global.pretrained_model=./pretrain_models/en_PP-OCRv3_rec_train/best_accuracy  Global.save_inference_dir=./inference/en_PP-OCRv3_mobile_rec/

新 IR 模式转换成功后目录下文件为:

inference/en_PP-OCRv3_mobile_rec/
    ├── inference.pdiparams         # 识别inference模型的参数文件
    └── inference.json              # 识别inference模型的program文件

自定义模型推理:如果训练时修改了文本字典,使用 inference 模型预测时需通过 --rec_char_dict_path 指定字典路径,更多推理超参数配置与解释参考模型推理超参数教程(docs/version2.x/ppocr/blog/inference_args.md):

python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words_en/word_336.png" --rec_model_dir="./your inference model" --rec_image_shape="3, 48, 320" --rec_char_dict_path="your text dict path"

5. 常见问题 FAQ

Q1:训练模型转 inference 模型之后预测效果不一致?

A:此类问题出现较多,多数是 trained model 预测时的预处理、后处理参数与 inference model 预测时的预处理、后处理参数不一致导致的。建议对比训练使用的配置文件与预测时使用的预处理、后处理参数是否存在差异,并确保预测/评估配置与训练配置完全一致。

6. 训练管线源码速览

将上述流程串联起来的核心调度逻辑位于 tools/train.pytools/program.pytrain.py 依次完成数据集构建(build_dataloader)、后处理/模型/损失/优化器/指标构建、预训练模型加载(load_model)、AMP/EMA 初始化,最后调用 program.train 进入 epoch 循环。识别任务中,字典字符数会在建模型前被动态写入 Head 的 out_channelstools/train.py),因此只需修改 character_dict_path 即可适配任意字符集合。数据侧,SimpleDataSet 负责解析 \t 分隔的标注、支持 JSON 列表随机采样、URL 图片预取与按比例采样多数据源(ppocr/data/simple_dataset.py);图像侧,RecResizeImgimage_shape 等比缩放并做 (x/255-0.5)/0.5 归一化与右侧 padding,同时输出 valid_ratio 供 CTC 解码忽略 padding 区域(ppocr/data/imaug/rec_img_aug.py)。理解这些底层实现,有助于在调参(如 image_shape 适配长文本、batch_size_per_cardnum_workers 平衡吞吐)时做出有依据的决策。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
34
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.16 K
2.78 K
docsdocs
暂无描述
Markdown
904
5.83 K
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
934
1.86 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
862
1.36 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
535
606
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.38 K
1.47 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.97 K
1.03 K
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
549
399
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.06 K
536