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