本文档涵盖了 PaddleOCR 的模型导出与优化系统,该系统将训练好的模型从动态计算图转换为优化的静态推理模型。导出过程处理动态到静态的转换、特定算法的优化以及为跨不同平台部署生成的推理配置。
有关训练流程和模型架构的信息,请参阅 训练流程 和 模型架构 有关部署特定信息,请参阅 部署与推理。
模型导出系统通过一个处理各种算法和优化要求的、多阶段的流程,将训练好的 PaddleOCR 模型转换为随时可部署的推理模型。
导出流程
导出过程始于 export() 函数,该函数负责协调模型转换、优化和配置文件生成。该流程处理单个模型和包含多个子模型的蒸馏模型。
来源: ppocr/utils/export_model.py423-551
dynamic_to_static() 函数将 PaddlePaddle 的动态计算图转换为针对推理优化的静态图。此转换需要特定算法的输入规范,并处理各种模型架构。
特定算法的输入规范
在静态转换期间,不同的算法需要特定的输入张量形状和配置。系统会自动检测算法并应用适当的规范。
来源: ppocr/utils/export_model.py169-365
导出系统围绕几个关键函数构建,这些函数处理转换过程的不同方面。
| 功能 | 目的 | 关键参数 |
|---|---|---|
export() | 主导出协调器 | config, base_model, save_path |
export_single_model() | 单模型导出 | model, arch_config, save_path, quanter |
dynamic_to_static() | 图转换 | model, arch_config, input_shape |
dump_infer_config() | 配置生成 | config, path, logger |
apply_to_static() | 训练时转换 | model, config, logger |
导出函数依赖
导出过程涉及多个协调的函数调用,用于模型构建、优化和配置生成。
来源: ppocr/utils/export_model.py423-551 ppocr/utils/export_model.py368-408
导出系统为不同的 OCR 算法提供了专门的处理,每种算法在输入形状、处理模式和优化策略方面都有独特的要求。
识别模型导出路径
文本识别模型根据其架构类型需要不同的输入规范和字符字典处理。
来源: ppocr/utils/export_model.py194-307 ppocr/utils/export_model.py432-471
文档理解导出配置
文档理解模型需要复杂的、多模态的输入规范和专门的预处理配置。
来源: ppocr/utils/export_model.py309-330 ppocr/utils/export_model.py267-307
导出系统在代码库中广泛使用 is_export 标志来启用与训练行为不同的、特定于部署的优化。
导出标志对模型组件的影响
导出标志会跨不同模型组件触发优化,从而实现静态操作模式和优化推理路径。
来源: ppocr/modeling/backbones/rec_resnetv2.py88-135 ppocr/modeling/heads/rec_latexocr_head.py277-285
导出系统包含了专门的 Padding 函数,可在推理过程中更有效地处理动态形状。
| 组件 | 训练模式 | 导出模式 |
|---|---|---|
StdConv2dSame | pad_same() | pad_same_export() |
MaxPool2dSame | 动态 Padding | 带张量的静态 Padding |
注意力机制 | 动态掩码 | 静态掩码操作 |
来源: ppocr/modeling/backbones/rec_resnetv2.py279-299 ppocr/modeling/backbones/rec_resnetv2.py302-314
dump_infer_config() 函数生成 YAML 配置文件,这些文件为导出的模型指定了预处理、后处理和部署参数。
推理配置组件
推理配置包括预处理变换、后处理参数、字符字典和硬件加速设置。
系统根据模型算法和预期的部署场景自动生成适当的动态形状配置。
来源: ppocr/utils/export_model.py41-166 ppocr/utils/export_model.py53-108
PaddleOCR 同时支持新的 PIR(Program Intermediate Representation)和遗留 IR 系统,可根据 PaddlePaddle 版本和环境标志自动选择。
IR 系统选择逻辑
导出系统根据 PaddlePaddle 版本和配置标志自动选择合适的中间表示。
来源: ppocr/utils/export_model.py388-404
导出功能通过 apply_to_static() 函数与训练系统集成,该函数支持算法的静态图训练。
训练时静态图转换
系统支持特定算法的静态图训练,需要预定义的输入形状和序列长度。