PaddleOCR 2.1版本 GPU部署 (C++/CUDA 11.0)

PaddleOCR 2.1版本 GPU部署 (C++)

时隔一年,由于工作原因,对PaddleOCR进行GPU版本的部署,同时对识别精度和速度要求更高,故对GPU版本进行部署,和CPU版本大差不差,但是可能坑和细节更多,因此本文详细部署不做过多叙述,可能着重放在变化上
CPU版本部署见上篇文章:https://blog.csdn.net/qq_43814893/article/details/119415960?spm=1001.2014.3001.5502

一.模型准备

首先是老三步,项目文件,识别/检测/方向分类器模型,预测模型
1.项目文件: https://github.com/PaddlePaddle/PaddleOCR/tree/release/2.1 虽然已经更新到了2.5版本但是配置文件变化还蛮大的,所以采用稍微新点的2.1
2.PaddleOCR系列模型:
这次全部选用服务器端模型PaddleOCR 2.1版本 GPU部署 (C++/CUDA 11.0)_第1张图片

3.C++预测库(使用对应的CUDA版本)*
比起CPU版本,要选择对应的CUDA和CUDNN版本
PaddleOCR 2.1版本 GPU部署 (C++/CUDA 11.0)_第2张图片
在paddle_inference下可以检查预测库版本和配置
PaddleOCR 2.1版本 GPU部署 (C++/CUDA 11.0)_第3张图片
PaddleOCR 2.1版本 GPU部署 (C++/CUDA 11.0)_第4张图片

二.CMAKE编译PaddleOCR 2.1版本 GPU部署 (C++/CUDA 11.0)_第5张图片

若要编译使用GPU版本的项目则必须勾选WITH_GPU,CUDA_LIB与CUDNN_LIB路径一致:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\lib\x64(根据实际路径更改)
剩下的和CPU编译一样,点击configure和generate生成项目文件,警告不管

三.ocr_system.sln配置

PaddleOCR 2.1版本 GPU部署 (C++/CUDA 11.0)_第6张图片

将配置改成Release X64,检查连接器-输入里的附加依赖项
在这里插入图片描述 相比较cpu版本多了cuda的lib文件,由于版本的更新,之前出现的paddle_inference.lib不匹配的情况也做了修改
PaddleOCR 2.1版本 GPU部署 (C++/CUDA 11.0)_第7张图片
和cpu版本一样直接生成exe文件。注意还是把paddle_inference_install_dir\paddle\lib文件路径下的paddle_inference.dll 文件拷贝过来。

后面去PaddleOCR-release\deploy\cpp_infer\tools下找到config配置文件更改配置
PaddleOCR 2.1版本 GPU部署 (C++/CUDA 11.0)_第8张图片

检测模型和方向模型的地址和以前一样就不做赘述了。注意一定要把use_gpu打开,调成1,gpu_id是选择的gpu

之后将对应的dll文件目录加入环境变量或复制到工程目录运行
PaddleOCR 2.1版本 GPU部署 (C++/CUDA 11.0)_第9张图片

四.ocr_system.exe运行

.\ocr_system.exe D:\programfiles\OCR\PaddleOCR-release-2.1\deploy\cpp_infer\tools\config.txt D:\programfiles\OCR\PaddleOCR-release-2.1\doc\imgs\00006737.jpg

运行识别结果如下
PaddleOCR 2.1版本 GPU部署 (C++/CUDA 11.0)_第10张图片
运行速度还算是比较快,识别效果也还行,但是依然存在不少处条形码误检测
相比较老模型我感觉也没提升多少,也不知道训练了个啥= =

五.补充(可能帮助优化的几个点)

PaddleOCR 2.1版本 GPU部署 (C++/CUDA 11.0)_第11张图片
1.在PaddleOCR-release\deploy\cpp_infer\tools下的config.txt文件有些参数可以修改,帮助提高识别的精度,现对部分参数作用做些归纳总结,

max_side_len:改变检测算法中图片规范化的最大值,当图片的长宽都小于max_side_len,则使用原图预测,否则会将图片等比例缩放到最大值进行预测,默认设置为960。 如果输入图片的分辨率较大,可以根据图片尺寸适当增大该数值。(对效果提升较为明显)
det_db_thresh: 用于DB模型的二值化输出图的阈值(二值化阈值的用法目前还在学习,详情可见这篇文章:https://blog.csdn.net/weixin_43776739/article/details/121101675 有关DB模型的原理,解说的很详细,也有二值化阈值设定的用处)
det_db_box_thresh:输出框的阈值,低于此值的预测框会被屏蔽,识别太少的可以适当调低此值。
det_db_unclip_ratio:DB模型输出框扩大的比例,可以适当扩大提高检测框检测范围。
use_polygon_score:是否使用多边形框计算bbox score,0表示使用矩形框计算。矩形框计算速度更快,多边形框对弯曲文本区域计算更准确。(虽然很多用了还是识别不出来orz )
cls_thresh:方向分类器的得分阈值
visualize :1 对结果进行可视化,为1时,会在当前文件夹下保存文件名为ocr_vis.png的预测结果。

更多的一些细节,还有速度测试等后续上线试运行完毕后再做补充吧,希望赶紧把新疆项目完结,想出门旅游了qwq

你可能感兴趣的:(paddleocr,C++,c++,人工智能,深度学习)