PaddlePaddle / PaddleOCR

Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80+ languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices)
https://paddlepaddle.github.io/PaddleOCR/
Apache License 2.0
43.92k stars 7.8k forks source link

CPU版本的onnx比paddleserver模型的运行速度慢很多,差距在6倍左右(onnxruntime的版本为1.1.0),单独运行识别模型,若onnxruntime版本为1.6.0,速度将变得更慢,求解决方案。 #6169

Closed tumi678 closed 2 years ago

tumi678 commented 2 years ago

请提供下述完整信息以便快速定位问题/Please provide the following information to quickly locate the problem

tink2123 commented 2 years ago

这与ONNX的执行策略有关, Paddle-Inference 做了很多算子融合的加速策略,因此速度很快。

由于模型中存在大量shape和constant的操作,这几个op计算在onnx中必须执行在CPU上,为了避免数据拷贝,onnx把网络结构前后整块操作都放在了cpu上,导致识别模型预测速度很慢。

如果没有特殊理由的话,建议直接使用paddle-inference预测

caidou05 commented 2 years ago

这与ONNX的执行策略有关, Paddle-Inference 做了很多算子融合的加速策略,因此速度很快。

由于模型中存在大量shape和constant的操作,这几个op计算在onnx中必须执行在CPU上,为了避免数据拷贝,onnx把网络结构前后整块操作都放在了cpu上,导致识别模型预测速度很慢。

如果没有特殊理由的话,建议直接使用paddle-inference预测

用官方提供的那个rec模型ch_ppocr_server_v2.0_rec_infer,转为onnx之后速度在cpu上快了很多,一样的配置文件,自己数据训练的模型转为onnx,速度下降了好几倍

caidou05 commented 2 years ago

官方提供的此模型:ch_ppocr_server_v2.0_rec_infer,使用paddle的predict_rec在本地I5,CPU上的推理100多张图,耗时22s,转为onnx模型,使用numpy输入后,只需要3s多。但是自己一样的ch_ppocr_server_v2.0_rec_infer配置文件,训练的模型转为onnx之后却耗费30S左右,官方大大知道这是什么原因吗,百思不得其解

nissansz commented 6 months ago

官方提供的此模型:ch_ppocr_server_v2.0_rec_infer,使用paddle的predict_rec在本地I5,CPU上的推理100多张图,耗时22s,转为onnx模型,使用numpy输入后,只需要3s多。但是自己一样的ch_ppocr_server_v2.0_rec_infer配置文件,训练的模型转为onnx之后却耗费30S左右,官方大大知道这是什么原因吗,百思不得其解

有办法改善onnx速度了吗?