PaddleOCR 是目前最好的开源OCR框架, 但paddle框架的兼容性实在不怎么好, 部署的时候容易出现各种各样的问题. 如果能把PaddleOCR转成ONNX, 就可以跳过paddle框架坑的同时, 又可以白嫖PaddleOCR的强大检测性能.
本文会介绍一下, 如何把最新的PP_OCRv4模型转成onxx格式, 并正确运行.
步骤1: PaddleOCR模型转ONNX
-
原始网络权重下载
在PaddleOCR的项目主页 https://github.com/PaddlePaddle/PaddleOCR 下载最新的v4版检测与识别模型. -
模型权重转ONNX
用pip安装PaddlePaddle到ONNX的模型转换工具: https://github.com/PaddlePaddle/Paddle2ONNX.
参照如下命令转换paddle格式模型到ONNX格式.paddle2onnx --model_dir /mnt/d/Downloads/202406/paddelocr/pp/ch_PP-OCRv4_det_infer/ --model_filename inference.pdmodel --params_filename inference.pdiparams --opset_version 11 --save_file /mnt/d/Downloads/202406/paddelocr/onnx/ch_PP-OCRv4_det_infer.onnx paddle2onnx --model_dir /mnt/d/Downloads/202406/paddelocr/pp/ch_PP-OCRv4_rec_infer/ --model_filename inference.pdmodel --params_filename inference.pdiparams --opset_version 11 --save_file /mnt/d/Downloads/202406/paddelocr/onnx/ch_PP-OCRv4_rec_infer.onnx
步骤2: ONNX推理运行
转换格式成功后得到的ONNX模型可以进行推理。若要用于识别任务,还需补充输入图片的预处理和检测结果的输出等外围数据处理步骤。
https://github.com/jingsongliujing/OnnxOCR
该项目基于转换后的ppocr_server_v2.0模型,已经完成了文本识别所需的外围数据处理部分。
经过测试,pp_ocr系列模型的预处理和后处理部分是通用的。只需在此代码基础上集成转换好的ONNX模型即可。
https://github.com/CKboss/pp_onnx
这是基于原项目fork后的修改版,支持运行PP_OCRv4,并能调用v4版本的det和rec OCR模型。旋转检测部分的cls模型保持不变,仍使用server_v2.0版本。此外,还修改了可能导致引用冲突的包名和部分模型输入参数。
注:
转换为ONNX格式后的模型精度损失情况尚不明确,但从简单的demo来看,模型能够正常进行推理。