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有问题,推理也是乱码

相关推荐
aqi0017 分钟前
15天学会AI应用开发(八)使用向量数据库实现RAG功能
人工智能·python·大模型·ai编程·ai应用
混沌福王2 小时前
Electron三端统一架构:运行时Adapter、IPC能力边界与分层设计
人工智能·agent·ai编程
说了很好2 小时前
马尔可夫扩散链+损失函数推导,手把手实现原生Diffusion
人工智能
聂二AI落地内参2 小时前
合同抽取别停在 JSON:标准规则和交易日历才是硬仗
人工智能
冬哥聊AI2 小时前
滴滴Agent岗二面:RAG 系统的 LLM 幻觉怎么治?从两类根源讲到四道防线
人工智能
lyshlc2 小时前
# AI Agent的推迟判定协议:不确定性下的最优策略
人工智能
用户329901675052 小时前
用zod在运行时兜住AI返回的JSON
人工智能
George3752 小时前
第一章:本体论是什么(以及它不是什么)
人工智能
贵慜_Derek2 小时前
《从零实现 Agent 系统》连载 32|闭集 IE 与小模型:分类、意图与字段抽取
人工智能·架构·agent