训练后的模型部署,首先要进行训练
0.训练流程见文章
PaddleOCR字符识别,训练自己的数据集全流程(环境、标注、训练、推理)-CSDN博客文章浏览阅读1.6k次,点赞53次,收藏23次。PaddleOCR是基于百度飞桨框架的开源OCR工具,支持80多种语言,适用于复杂文本场景。本文介绍了PaddleOCR的环境配置、数据集制作和模型训练流程。首先通过conda创建虚拟环境并安装PaddlePaddle和PaddleOCR,然后使用PPOCRLabel工具标注数据集,划分训练集、验证集和测试集。接着下载预训练权重,分别训练文本检测和识别模型,最后评估模型性能并导出静态图模型。整个过程涵盖了从数据准备到模型部署的完整OCR开发流程,适用于票据识别、文档数字化等应用场景。https://blog.csdn.net/wwwwww7733/article/details/150445308?spm=1001.2014.3001.5502
1.安装环境
这个环境要求太苛刻了,经常出现版本不兼容的情况,很烦
pip install paddle2onnx==0.9.7
pip install paddleocr==3.1.0
2.导出Paddle推理模型
python3 tools/export_model.py -c /home/boshi/AI_programming/PaddleOCR/output/rec_ppocr_v4/config.yml -o Global.pretrained_model=/home/boshi/AI_programming/PaddleOCR/output/rec_ppocr_v4/best_model/model.pdparams Global.save_inference_dir=/home/boshi/AI_programming/PaddleOCR/output/rec_ppocr_v4/best_model
参数解释:
-c 训练时配置文件路径
Global.pretrained_model=../best_model/model.pdparams 训练生成的pdparams模型路径
Global.save_inference_dir=../best_model 推理模型想要保存到的路径
3.Paddle推理模型转换ONNX模型
paddle2onnx --model_dir /home/boshi/AI_programming/PaddleOCR/output/rec_ppocr_v4/best_model --model_filename=inference.pdmodel --params_filename=inference.pdiparams --save_file=/home/boshi/AI_programming/PaddleOCR/output/rec_ppocr_v4/best_model/model.onnx --opset_version 16 --enable_onnx_checker True
--model_dir | 指向包含 Paddle 模型的文件夹路径,里面通常有 inference.pdmodel 和 inference.pdiparams |
--model_filename | 指定模型结构文件的文件名,一般是 inference.pdmodel |
--params_filename | 指定模型参数权重文件的文件名,一般是 inference.pdiparams |
--save_file | 转换后导出的 ONNX 模型保存路径,如 /home/best_model/model.onnx |
--opset_version | 指定 ONNX 的 opset 版本,常用 11 或 16,版本越高支持的算子越多 |
--enable_onnx_checker | 是否在导出后自动运行 ONNX 的合法性检查,True 表示启用,建议开启 |
4.ONNX使用onnx_optimizer.py转换为simply-onnx
import onnx
import onnxsim
import onnx.helper as helperdef rename_io_names(model_path, new_input_name, new_output_name):# 加载ONNX模型model = onnx.load(model_path)# 获取模型的输入和输出inputs = model.graph.inputoutputs = model.graph.output# 创建新的输入和输出Tensor, 保留原有属性new_input = helper.make_tensor_value_info(new_input_name,inputs[0].type.tensor_type.elem_type,[d.dim_param if d.dim_param else d.dim_value for d in inputs[0].type.tensor_type.shape.dim])new_output = helper.make_tensor_value_info(new_output_name,outputs[0].type.tensor_type.elem_type,[d.dim_param if d.dim_param else d.dim_value for d in outputs[0].type.tensor_type.shape.dim])# 替换图中的节点引用for node in model.graph.node:for index, inp in enumerate(node.input):if inp == inputs[0].name:node.input[index] = new_input_namefor index, out in enumerate(node.output):if out == outputs[0].name:node.output[index] = new_output_name# 替换旧的输入输出名model.graph.input.remove(inputs[0])model.graph.output.remove(outputs[0])model.graph.input.insert(0, new_input)model.graph.output.insert(0, new_output)return modelif __name__ == "__main__":model_onnx = rename_io_names("/home/boshi/AI_programming/PaddleOCR/output/rec_ppocr_v4/best_model/model.onnx", "images", "output")model_onnx.ir_version = 9# 检查导入的onnx modelonnx.checker.check_model(model_onnx)print(f"Simplifying with onnx-simplifier {onnxsim.__version__}...")model_onnx, check = onnxsim.simplify(model_onnx)assert check, "assert check failed"onnx.save(model_onnx, "/home/boshi/AI_programming/PaddleOCR/output/rec_ppocr_v4/best_model/tkx-ocr_sim.onnx")
这段脚本把 PaddleOCR 导出的 ONNX 模型的输入、输出节点重命名为固定名字 images
/ output
,并做简化,从而让后续 TensorRT、ONNXRuntime 等推理框架在不知道原模型细节的情况下也能直接加载运行。
5.ONNX转换为trt
trtexec --onnx=tkx-ocr_sim.onnx --minShapes=images:1x3x48x640 --optShapes=images:1x3x48x640 --maxShapes=images:8x3x48x640 --memPoolSize=workspace:2048 --saveEngine=tkx-ocr_sim.trt --fp16
参数 | 说明 |
---|---|
--onnx=tkx-ocr_sim.onnx | 指定输入的 ONNX 模型文件路径。 |
--minShapes=images:1x3x48x640 | 为动态 shape 输入设置最小允许尺寸;这里规定 images 张量的最小形状是 NCHW = 1×3×48×640。 |
--optShapes=images:1x3x48x640 | 设置优化目标形状,TensorRT 会在这个尺寸上做最多的 kernel 搜索与调优;通常选你实际推理时最常见的 batch/size。 |
--maxShapes=images:8x3x48x640 | 设置最大允许尺寸,运行时不允许超过该形状;构建引擎时也会为这一上限预留资源。 |
--memPoolSize=workspace:2048 | 新版 TensorRT 用来替代已废弃的 --workspace ;指定构建引擎时可用的临时显存(workspace)上限为 2048 MB。 |
--saveEngine=tkx-ocr_sim.trt | 把构建好的 TensorRT 引擎序列化并保存到指定文件,方便后续 C++/Python 推理直接加载。 |
--fp16 | 启用 FP16 精度模式;如果 GPU 支持 Tensor Core,可显著减少显存占用并提升速度,精度一般可接受。 |
6.最终所有的文件列表