PaddleOCR v4模型转onnx踩坑记

1、训练得到的模型格式及推理格式

在训练的时候,我的paddlepaddle用的版本是3.2.0,用的是pp-ocrv4_mobile_rec的预训练模型,

训练命令是

复制代码
python tools/train.py -c configs/rec/PP-OCRv4/PP-OCRv4_mobile_rec.yml  

训练出来得模型是这种格式

./output/rec_ppocr_v4/best_model

├── model.pdopt

├── model.pdparams

转成推理模型的时候,是参照官方的命令

PaddleOCR/docs/version3.x/module_usage/text_recognition.md at main · PaddlePaddle/PaddleOCR · GitHub

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

得出来的模型结构是

./PP-OCRv4_mobile_rec_infer/

├── inference.json

├── inference.pdiparams

├── inference.yml

这种推理模型,在paddlepaddle的环境下是可以正常推理的

2、所遇到的困境1(model.pdparams转inference.pdmodel和inference.pdiparams)

但是这种推理模型,是不能够使用paddle2onnx工具转成onnx模型的

要使用paddle2onnx工具转成onnx模型,得是下面这种推理结构

./PP-OCRv4_mobile_rec_old_infer/

├── inference.pdmodel

├── inference.pdiparams

├── inference.yaml

├── inference.pdiparams.info

要得到.pdmodel和.pdiparams的推理格式,得用paddlepaddle==2.4.2的版本,但是现在所有的镜像上好像都没有了paddlepaddle==2.4.2的版本

幸运的是,我搜到了另一个博客

https://blog.csdn.net/weixin_27219587/article/details/159817838

这个博主整理了一个对照表,我先在我原先的paddlepaddle==3.2.0的版本上测试,没有成功;我想新建个conda环境,尝试安装一下paddlepaddle==3.0.0b2的版本

复制代码
#新建环境
conda create --name paddleonnx2 python==3.9.12
#安装paddlepaddle==3.0.0b2
pip install paddlepaddle==3.0.0b2 -i https://pypi.tuna.tsinghua.edu.cn/simple
#安装PaddleOCR包中的依赖项
pip install -r requirements.txt

使用上面博主这个命令

复制代码
# 强制使用传统IR格式导出(兼容性最佳)
python tools/export_model.py \
    -c configs/rec/PP-OCRv4/en_PP-OCRv4_mobile_rec.yml \
    -o Global.export_with_pir=null \
    Global.checkpoints="output/rec_ppocr_v4/best" \
    Global.save_inference_dir="./output"

再尝试转换,成功了

但是测试的时候,乱码

3、所遇到的困境2(inference.pdmodel和inference.pdiparams转onnx)

在上面这个环境中,我安装paddle2onnx工具,版本是2.1.0,进行onnx模型的转换,转换命令是

复制代码
paddle2onnx --model_dir ./output/rec_ppocr_v4_oldinference --model_filename inference.pdmodel --params_filename inference.pdiparams --save_file ./inference/rec_ppocr_v4_onnx/rec.onnx --opset_version 11 --enable_onnx_checker True

最后转换错误,报错

复制代码
ImportError: DLL load failed while importing paddle2onnx_cpp2py_export: 找不指定的程序

这个时候,我又搜到了另外一个博主的博客

https://blog.csdn.net/weixin_46028455/article/details/159731735

于是我想着既然有inference.pdmodel和inference.pdiparams,跟paddlepaddle环境没关系了,再新建一个环境好了。

复制代码
#新建环境
conda create --name paddleonnx3 python==3.8
#安装特定 nightly 版 paddlepaddle(CPU)
pip install paddlepaddle==3.0.0.dev20250426 -i https://www.paddlepaddle.org.cn/packages/nightly/cpu/ --pre
#安装 paddle2onnx
pip install paddle2onnx

再安装上缺少的相关依赖,转换成功了

但是最后onnx有问题,推理也是乱码

相关推荐
小雨青年3 小时前
GitHub Copilot CLI 完全指南:把终端里的 AI 助手真正用起来
人工智能·github·copilot
黎阳之光3 小时前
黎阳之光:深耕视频孪生核心领域 构筑数字孪生全域数智新标杆
大数据·人工智能·算法·安全·数字孪生
郭龙_Jack3 小时前
自有广告系统设计与实践
大数据·人工智能
自小吃多3 小时前
AI本地部署快速步骤
人工智能
漫游的渔夫3 小时前
前端开发者做 AI 工程:别停在脚本阶段,用 2 个 API 把 Agent 交给前端调用
前端·人工智能·typescript
AustinXu3 小时前
构建 AI Agent 系统:从复杂 Agent Skills到企业级 AI Agent
人工智能
ZGi.ai3 小时前
业务负责人的AI焦虑:花了钱、用了工具,但什么都没留下来
人工智能·chatgpt·企业ai·ai焦虑·ai资产
RuoyiOffice3 小时前
低代码平台荣耀不再:AI 浪潮下,企业系统为什么重新回到原生代码
人工智能·spring boot·低代码·ai·vue·uniapp·ruoyioffice
Ehtan_Zheng3 小时前
Prompt Engineering 提示词技术核心
人工智能