C++版 PPyolo+部署记录

PaddleDetection部署指南
本文详细介绍了PaddleDetection模型在Windows和Linux环境下使用C++进行部署的过程,包括配置环境、编译代码及解决常见问题的方法。

PaddlePaddle 框架从18年就开始用了,最近因为工作要做目标检测,因此选择了PaddleDetection 使用了ppyoloe_plus_m 模型进行训练。训练完成后使用

export_model.py -c configs/ppyoloe/ppyoloe_plus_crn_m_80e_coco.yml -o weights=/path/model_final.pdparams

导出模型。

在项目中,使用的是 PaddleDetection /deploy 中的python 版进行 部署的。目前在项目中已经跑起来了。但考虑到以后和其他业务端对接,可能使用C++ 版的更方便,因此尝试打通C++版的推理预测,在这里记录下分别基于windows 和linux 下的模型部署流程。

一、 windows版

  1. CPU 版

windows 版相对来说较容易一下,首先尝试不使用gpu 的版本。

按照 说明文档中 的记录,下载 使用cpu 版的 paddle_inference , 版本要求是使用vs2017 ,但我使用vs 2019 进行编译是可以的。

然后需要下载opencv , 下载完成后,最好将 opencv\build\x64\vc15\bin 放到环境变量中。这个其实是用的opencv 3 .X 版本的,跟现在项目中的环境还是有些差别(项目中用到opencv 4.5)后续考虑编译一个opencv4.X 版本的。使用

cmake .  

-G "Visual Studio 16 2019" -A x64 -T host=x64  

-DWITH_GPU=OFF  

-DWITH_MKL=ON  

-DCMAKE_BUILD_TYPE=Release  

-DPADDLE_DIR=D:\projects\packages\paddle_inference  

-DPADDLE_LIB_NAME=paddle_inference  

-DOPENCV_DIR=D:\projects\packages\opencv3_4_6  

-DWITH_KEYPOINT=ON

在deploy/cpp 目录下生成 .sln ,然后使用vs 打开,生成后的代码文件如下:

使用 生成-> 生成解决方案,生成main.exe

我在生成过程中遇到了有些 lib 库没有找到的情况,在main -> 属性->链接器 常规和输入中看看是否添加了该lib

以上window下基于CPU的模型应用程序基本上就编译好了。运行结果如下:

  1. GPU版

当跑起来CPU 版之后,发现GPU 版的也没有那么难了。首先要确定下当前机器下GPU 环境

本机环境如下:

CUDA=11.6

cudnn=8.4.1

TensorRT=8.4.0.6

首先肯定是要下载好对应的软件版本,可以参考这个

对应好 cuda ,cudnn tensorRT 版本后编译能轻松点。然后下载对应版本下的paddle_inference, 这个也需要下载opencv,跟上面用到的一样就可以,使用cmake 进行编译

cmake .   -G "Visual Studio 16 2019" -A x64 -T host=x64  

-DWITH_GPU=OFF  

-DWITH_MKL=ON  

-DCMAKE_BUILD_TYPE=Release  

-DCUDA_LIB="C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v11.6\lib\x64"  

-DCUDNN_LIB="C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6\lib"  

-DPADDLE_DIR=D:\work\Project\pro_cuda\paddle_inference  

-DPADDLE_DIR=D:\projects\packages\paddle_inference  

-DPADDLE_LIB_NAME=paddle_inference  

-DOPENCV_DIR=D:\projects\packages\opencv3_4_6  

-DWITH_KEYPOINT=ON

也是生成.sln 然后生成,产生main.exe 文件。运行结果如下:

二、Linux版

linux 版下我也是先跑通CPU ,在用GPU 。因为公司电脑是在运行项目,不敢随意测试,因此使用了云GPU, 开始的时候使用的是 恒源云GPU ,但他家的下载速度和网速实在太慢,后来使用了AutoDL 的云GPU ,网速挺快,还能连接百度网盘,挺香的。

首先重新编译了下gcc ,因为deploy 要求gcc是8.2版本的,参考

UbuntU18.04u安装GCC8.2.0~9.1_fpcc的博客-优快云博客_unbuntu 安装 gcc 8.2

在按照 linux_build.md 进行编译时,遇到了opencv找不到so 库的情况。因此重新编译了ffmpeg 和opencv,参考了如下博客:

ffmpeg 源码编译 ffmpeg源码编译_liupenglove的博客-优快云博客_ffmpeg源码编译

opencv源码编译 linux或arm下源码编译opencv库_spirits_of_snail的博客-优快云博客_arm linux opencv

Linux下OPencv+ffmpeg编译和进行视频播放_泰勒朗斯的博客-优快云博客

编译完成后 记得修改 ./script/build.sh 里面的路径。

然后按照 linux_build.md 来就可以,最后会生产 main

在执行是会发现缺少 libpaddle2onnx.so 等文件,在paddle_inference 下,找到,cp到/usr/lib 下就可以

05-21
### Ppyolo 模型简介 Ppyolo 是基于 PaddlePaddle 开发的一种高效目标检测模型,属于 YOLO 系列的改进本之一。它通过一系列优化措施提升了性能和推理效率,在实际应用中表现出良好的准确性与速度平衡[^3]。 #### 配置文件说明 在使用 Ppyolo 进行开发时,通常需要指定一个 YAML 格式的配置文件来定义模型参数、数据预处理方式以及训练策略等内容。例如,可以参考官方提供的默认配置文件 `ppyolo_r18vd_coco.yml` 来构建基础环境[^2]: ```yaml architecture: PPYOLO use_fine_grained_loss: true ... ``` 此配置文件包含了模型架构的选择 (`PPYOLO`) 及其他高级选项 (如损失函数设置),开发者可以根据具体需求调整这些超参以适配特定应用场景。 #### 转化至嵌入式设备流程 当完成模型训练之后,如果希望将其部署到像 Raspberry Pi 这样的低功耗硬件平台上,则需执行如下操作步骤转换为静态图模式并导出用于推断的服务端接口: 运行命令如下所示: ```bash python -u tools/export_model.py \ -c /path/to/your_config_file.yml \ --output_dir=./inference_model_final \ -o weight=/path/to/trained_weights.pdparams ``` 该指令会依据给定路径加载对应的权重文件,并按照设定好的规格保存最终成果供后续调用[^1]. #### 主要特点概述 - **高精度**: 继承自经典 YOLO 架构的同时引入更多创新机制从而获得更高的预测质量. - **易扩展性**: 支持多种尺寸变体(Small, Medium etc.), 方便针对资源受限场合做出取舍决策. - **跨平台兼容性强**: 不仅限于云端服务器集群内部署方案, 同样适用于边缘计算节点比如ARM Cortex-A系列处理器驱动下的单板计算机. ```python from paddle.inference import Config, create_predictor def load_inference_model(model_path): config = Config(f"{model_path}/model.pdmodel", f"{model_path}/model.pdiparams") predictor = create_predictor(config) return predictor ``` 以上代码片段展示了如何利用 Python API 加载已经过序列化的 inference model 并初始化相应的 runtime context , 便于进一步集成进应用程序框架当中去实现自动化流水线作业等功能模块.
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值