Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于Serving0.8.3部署OCR模型检测精度下降和识别结果问题 #6367

Closed
Yinyihang857 opened this issue May 21, 2022 · 15 comments
Closed
Assignees

Comments

@Yinyihang857
Copy link

python=3.8
paddlepaddle==2.2.2
paddle-serving-server==0.8.3
服务器是centos7,cpu

1.paddle_serving_client.convert转换ch_PP-OCRv3_rec_infer和ch_PP-OCRv3_det_infer模型
2.python3 web_service.py

通过post请求预测接口,同一张图片的预测结果和tools/infer/predict_system.py预测结果不一致,相差在20%

请问这个问题该如何解决

@Yinyihang857
Copy link
Author

补充:
图片全部是960x618,200kb左右
压测serving接口100并发平均耗时在40s左右,单次耗时在2~3秒
image

下面图片是serving日志截图:
image

在不损失精度前提下,改如何提升识别速度呢?

@DreamJokerMJ
Copy link

请问你解决了吗?我也遇到了这样的问题,修改web_service.py中的self.post_func = DBPostProcess({
"thresh": 0.3,
"box_thresh": 0.6,
"max_candidates": 1000,
"unclip_ratio": 1.5,
"min_size": 3
}),可以使精确度提高一些,但是还是会有漏检的地方。

@Yinyihang857
Copy link
Author

请问你解决了吗?我也遇到了这样的问题,修改web_service.py中的self.post_func = DBPostProcess({ "thresh": 0.3, "box_thresh": 0.6, "max_candidates": 1000, "unclip_ratio": 1.5, "min_size": 3 }),可以使精确度提高一些,但是还是会有漏检的地方。
嗯嗯,目前还没有解决,现在主要问题是CPU环境下性能上不来,推理延迟很高,您部署的环境是CPU还是GPU呢?有性能问题吗?

@DreamJokerMJ
Copy link

cpu,性能的话,目前还没处理。漏检的我已经解决了,将unclip_ratio修改为1.8后,就没有漏检的了,但是识别的有部分数据,识别的有缺漏,比如少了”c或者)“。
不过我记得cpu的话,可以使用mkldnn加速,具体的你可以参考下这个:https://github.com/PaddlePaddle/Serving/blob/v0.8.3/doc/Serving_Configure_CN.md#%E6%A8%A1%E5%9E%8B%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6

@Yinyihang857
Copy link
Author

Yinyihang857 commented May 23, 2022

哈哈好的,这个我看到了开启mkldnn加速,程序会报错抛异常导致识别失败,不知道什么原因所以目前没开启,
unclip_ratio这个参数是用来控制什么的您知道吗?

@DreamJokerMJ
Copy link

@Yinyihang857
Copy link
Author

https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.5/doc/doc_en/config_en.md ,在这里的process中
好的,原来如此,我去看看

@DreamJokerMJ
Copy link

识别方面的漏缺,我也解决了,修改下,ocr_readr.py中的
if self.character_type == "ch":
imgW = int(32 * max_wh_ratio)
将它们注掉,识别漏缺的就好了。

@Yinyihang857
Copy link
Author

识别方面的漏缺,我也解决了,修改下,ocr_readr.py中的 if self.character_type == "ch": imgW = int(32 * max_wh_ratio) 将它们注掉,识别漏缺的就好了。

好的好的,我已经迫不及待要试下了,晚点我去试试,再来给反馈,哈哈哈,谢谢啦

如果性能的问题您也有解决的话,也可以说下,我这边解决了也会把解决方式发出来

@thep0y
Copy link

thep0y commented May 24, 2022

识别方面的漏缺,我也解决了,修改下,ocr_readr.py中的 if self.character_type == "ch": imgW = int(32 * max_wh_ratio) 将它们注掉,识别漏缺的就好了。

这样改也不行,仍然只识别部分。

@DreamJokerMJ
Copy link

识别方面的漏缺,我也解决了,修改下,ocr_readr.py中的 if self.character_type == "ch": imgW = int(32 * max_wh_ratio) 将它们注掉,识别漏缺的就好了。

这样改也不行,仍然只识别部分。

你的其他后处理有没有修改成跟推理模型一致的呢?比如如果你是ppocrv3,识别的图形要设置为3, 48, 320。如果你是ppocrv2,,识别的图形要设置为3, 32, 320。总之你检查下serving部署的后处理各参数是否与推理一致,我的是一致后,还有缺漏,才注销那段代码的。

@thep0y
Copy link

thep0y commented May 24, 2022

识别方面的漏缺,我也解决了,修改下,ocr_readr.py中的 if self.character_type == "ch": imgW = int(32 * max_wh_ratio) 将它们注掉,识别漏缺的就好了。

这样改也不行,仍然只识别部分。

你的其他后处理有没有修改成跟推理模型一致的呢?比如如果你是ppocrv3,识别的图形要设置为3, 48, 320。如果你是ppocrv2,,识别的图形要设置为3, 32, 320。总之你检查下serving部署的后处理各参数是否与推理一致,我的是一致后,还有缺漏,才注销那段代码的。

我用的v3,没有改image_shape,改成[3, 48, 320]后准确率高了很多,改完后"unclip_ratio": 1.8最合适。

@DreamJokerMJ
Copy link

DreamJokerMJ commented May 25, 2022

模型加速:根据serving模型配置,可以开启mkldnn(cpu)和tensorRT(GPU)加速。此外还可进行模型剪枝和修改ocr_reader中的resize_long的大小,减小输入图片的大小,从而提高识别速度。最后还可以修改config.yml中worker_num,concurrency降低并发数和线程数加速,还有降低精度precision提速,关闭use_profile提速。开启mkldnn和tensorRT需要cpu支持avx,Linux命令:cat /proc/cpuinfo | grep avx

serving配置详情:https://github.com/PaddlePaddle/Serving/blob/v0.8.3/doc/Serving_Configure_CN.md#%E6%A8%A1%E5%9E%8B%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6

@Jaccica
Copy link

Jaccica commented Dec 1, 2022

大佬们,模型部署后的结果准确率低于部署前的准确率,怎么解决啊?

@DreamJokerMJ
Copy link

根据你的部署方式,修改其前置处理和后置处理,让它们和你的训练或推理的处理一致即可。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants