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

相关推荐
大模型码小白9 小时前
AI 对话流性能调优:万级消息的虚拟滚动落地
java·大数据·前端·javascript·人工智能·算法·机器学习
Mickey Q9 小时前
深度学习经典网络架构
人工智能·深度学习
天国梦9 小时前
读后续写批改难题怎么破?天学网AI批改工具实测解析
人工智能
阿里云云原生10 小时前
OpenTelemetry eBPF 在 AI 场景的应用:配置 ack-onepilot 实现 LLM 调用链追踪
人工智能·阿里云·云监控
sel_910 小时前
【多轮对话论文导读(三)】多轮对话与Agent论文阅读笔记:用户模拟、轨迹生成与长期记忆
论文阅读·人工智能·笔记·深度学习·算法·机器学习
玫瑰互动GEO10 小时前
从工程视角拆解海外ClaudeGEO关键词优化:如何拿到AI搜索引用席位,获得B端采购选择
人工智能
数据库小学妹10 小时前
AI Agent记忆怎么存?Redis+向量库三层记忆架构实战
人工智能·架构·向量数据库·ai数据库·数据库趋势·ai agent记忆
HySpark10 小时前
从 VAD、声纹嵌入到聚类优化的一套解决思路
人工智能·语音识别·熙瑾会悟
YOLO数据集集合10 小时前
垃圾目标检测数据集 |垃圾检测 智慧环卫 城市管理 生活垃圾堆检测 生活垃圾 垃圾场 9023期
人工智能·目标检测·视觉检测·生活·垃圾检测·垃圾
cxr82810 小时前
混沌背后的秩序:T-Π-O 框架与复杂系统理解的认识论重构
人工智能·认知框架