C++版 PPyolo+部署记录
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版
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的模型应用程序基本上就编译好了。运行结果如下:
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的博客-CSDN博客_unbuntu 安装 gcc 8.2
在按照 linux_build.md 进行编译时,遇到了opencv找不到so 库的情况。因此重新编译了ffmpeg 和opencv,参考了如下博客:
ffmpeg 源码编译 ffmpeg源码编译_liupenglove的博客-CSDN博客_ffmpeg源码编译
opencv源码编译 linux或arm下源码编译opencv库_spirits_of_snail的博客-CSDN博客_arm linux opencv
Linux下OPencv+ffmpeg编译和进行视频播放_泰勒朗斯的博客-CSDN博客
编译完成后 记得修改 ./script/build.sh 里面的路径。
然后按照 linux_build.md 来就可以,最后会生产 main
在执行是会发现缺少 libpaddle2onnx.so 等文件,在paddle_inference 下,找到,cp到/usr/lib 下就可以
C++版 PPyolo+部署记录相关推荐
- 曙光服务器通过ipmi安装系统,曙光服务器ipmi部署记录版.docx
最新资料推荐 最新资料推荐 PAGE PAGE # 服务器ipmi服务部署记录 ESXI地址 ipmi地址 PXE启动测试 ipmimac 地址 172.16.10.32 172.16.11.32 9 ...
- Redis哨兵模式(sentinel)学习总结及部署记录(主从复制、读写分离、主从切换)
Redis的集群方案大致有三种:1)redis cluster集群方案:2)master/slave主从方案:3)哨兵模式来进行主从替换以及故障恢复. 一.sentinel哨兵模式介绍 Sentine ...
- Schedulis 普通版环境部署
## Schedulis 普通版环境部署 一).使用前置 请基于 Linux 操作系统操作(建议 CentOS) 创建新用户 hadoop, 并为该用户赋予 root 权限,用于部署schedulis ...
- 仰邦LED(BX-Y08)二次开发的java版流程梳理记录
仰邦LED-bx_y08二次开发的java版流程梳理记录 首次开发的项目是一个停车场主要显示剩余多少车辆 遇到很多难题;主要还要搞清楚二次开发LED的发送流程,在这记录下 //初始化API环境 仅一次 ...
- Docker网络解决方案-Flannel部署记录
Docker跨主机容器间网络通信实现的工具有Pipework.Flannel.Weave.Open vSwitch(虚拟交换机).Calico实现跨主机容器间的通信.其中Pipework.Weave. ...
- kafka 基础知识梳理及集群环境部署记录
一.kafka基础介绍 Kafka是最初由Linkedin公司开发,是一个分布式.支持分区的(partition).多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特 ...
- Docker网络解决方案 - Calico部署记录
Docker网络解决方案 - Calico部署记录 参考文章: (1)Docker网络解决方案 - Calico部署记录 (2)https://www.cnblogs.com/kevingrace/p ...
- ArcGIS Enterprise 10.5.1 静默安装部署记录(Centos 7.2 minimal)- 2、安装WebAdapter
解压webadapter安装包,tar -xzvf Web_Adaptor_Java_Linux_1051_156442.tar.gz 进入下Webadapter目录下静默安装 ./Setup -m ...
- 【解决方案】SpringCloud项目优雅发版、部署
[解决方案]SpringCloud项目优雅发版.部署 参考文章: (1)[解决方案]SpringCloud项目优雅发版.部署 (2)https://www.cnblogs.com/fonxian/p/ ...
最新文章
- 从 Nginx 优秀的核心架构设计,揭秘其为何能支持高并发?
- sql左连接_【PL/SQL 练习题】左连接条件里的And和Where
- 二、Java面向对象(7)_封装思想——this关键字
- 11.2.2 例题11-3 Buy or Build
- 7-7 字符串修改 (15 分)
- 【洛谷4005】小Y和地铁(搜索)
- 百度Ueditor编辑器wordimage踩坑
- Numpy 数据精度
- 搭建Docker环境---Docker概述
- 程序员Mac常用软件之效率工具
- 二、optimizer_trace基本使用
- 共射级放大电路—实现最大输出振幅的方法竟如此简单
- Win10 Office2016 激H失败错误代码0x80080005
- 哈工大2019年春算法设计与分析期末复习
- ORACLE的sql语句查询一对一,一对多,多对多
- VirtualLab基础实验教程-7.偏振(2)
- 5G时代下催生了云电脑,云电脑带来了什么?
- 西安前端开发工程师待遇|哎呦不错呦
- mysql max_allowed_packet 到底什么意思
- bzoj4716假摔
热门文章
- xml错误The validator XML Schema Validator is a delegating validator but no delegat
- 中国知名IT企业的资料
- 【小罗的hdlbits刷题笔记3】从Edgedetect对阻塞赋值和非阻塞赋值的思考
- vue 腾讯地图展示用户定位附近的门店
- 35美金可以在Fiverr上让人帮你设计1个NFT卡通头像
- 聚焦行业,2022巨杉客户案例及产品荣获多项殊荣
- 数据集成平台,多数据统一存储和管理
- 哄女朋友开心的html源码,很好玩的代码,哄女票开心用
- Windows下redis的启动
- Zemax学习笔记(9)- 双胶合透镜消除色差的实例