FastDeploy部署paddlecls分类模型(windows)

news2025/1/8 3:07:31

目录

         写在前面

总体步骤

C++ SDK编译库

方式1:编译安装

方式2:下载预编译库

准备模型、文件、代码和数据

模型文件类型

samples代码

待预测图像

使用 FastDeploy C++ SDK

将cpp源码编译为exe

编写cpp代码

cpp代码编译exe

运行可执行程序exe

将cpp源码编译为dll

调用动态库dll文件

两个关键接口


写在前面

为何要自己进行编译呢?因为如果我们直接使用如下链接中预编译好的zip,你会发现,不能用,会报错【具体为啥报错,目前不太清楚】,因此,还是得我们亲自走一遍【编译】。

参考github链接:GitHub - PaddlePaddle/FastDeploy

总体步骤

1. C++ SDK编译库(以GPU部署环境为例)
2. 准备模型、文件、代码和数据
3. 使用 FastDeploy C++ SDK

C++ SDK编译库

方式1:编译安装

○ 环境要求

Windows 10/11 x64
cuda >= 11.2
cudnn >= 8.2
cmake >= 3.12
Visual Studio 16 2019
注意:安装CUDA时,需要勾选Visual Studio Integration, 或者手动将C:\Program Files \NVIDIA GPU Computing Toolkit \ CUDA \v11.7 \extras \ visual_studio_integration \MSBuildExtensions\文件夹下的4个文件,复制到C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\BuildCustomizations\文件夹。


查看电脑cuda版本,如图所示为117.1:


下载cuda对应的版本,网址:CUDA Toolkit Archive | NVIDIA Developer
下载cudnn对应的版本,网址:https://developer.nvidia.com/rdp/cudnn-download
否则,执行cmake命令时,可能会遇到No CUDA toolset found报错。

○ CMake GUI编译

参考链接:FastDeploy/build_on_win_with_gui.md

提示:如果自行编译SDK,理论上支持Windows 10/11,VS 2019/2022,CUDA 11.x 以及 TensorRT 8.x等配置,但建议使用默认配置,即:Windows 10, VS 2019, CUDA 11.2 和 TensorRT 8.4.x版本。

另外,如果编译过程中遇到中文字符的编码问题(如UIE example必须传入中文字符进行预测),可参考Visual Studio的官方文档,设置源字符集为/utf-8解决(/utf-8(将源字符集和执行字符集设置为 UTF-8) | Microsoft Learn)。

配置如下参数,然后点击 Configure。

Configure之后,会生成如下文件。

然后进行Generate,Generate后,会自动填充如下内容,可以看到:所有编译需要的include路径和lib路径已经被设置好了。


并且,会在指定目录下,出现如下内容,可以看到已经生成fastdeploy.sln解决方案文件。


接下来,我们使用Visual Studio 2019打开这个解决方案文件。


在Visual Studio 2019点击"ALL BUILD"->右键点击"生成"开始编译。(注意,该步骤比较耗时,在4090上大约消耗30分钟。)


成功后,输出如下提示:


编译完成后,在Visual Studio 2019点击"INSTALL"->右键点击"生成",将编译好的SDK安装到先前指定的目录。


如下提示,说明SDK安装成功!

同时,在指定的CMAKE_ INSTALL PREFIX目录中,也会出现如下文件。

进入到examples/vision/classification/paddlecls/cpp目录中,就会看到paddlecls的预测源码http://infer.cc文件。



方式2:下载预编译库

经过测试了1.0.7版本,不太行!

Release版 下载链接:https://bj.bcebos.com/fastdeploy/release/cpp/fastdeploy-win-x64-gpu-1.0.3.zip

准备模型、文件、代码和数据

模型文件类型

①.pdmodel、.pdiparams;

注意:原始模型文件(.pdparams、.pdopt、.pdstates)经过paddle inference模型转换工具,即可得到。

②inference_cls.yaml

FastDeploy会从yaml文件中获取模型在推理时需要的预处理信息。

samples代码

http://infer.cc、CMakeLists.txt,SDK编译成功后,就会出现在example文件夹中。

待预测图像

暂不展示。

使用 FastDeploy C++ SDK

将cpp源码编译为exe

创建空项目
打开Visual Studio 2019,点击"创建新项目"->点击"控制台程序",从而创建新的sln工程项目。参考文档:FastDeploy/use_sdk_on_windows.md

编写cpp代码

将http://infer.cc文件的推理代码粘贴过来,也可以进行二次开发。

然后,点击创建,便创建了一个空的sln工程。我们直接从examples里面拷贝http://infer.cc的代码这里(直接替换默认的初始代码即可)。代码路径为:E:\xxxxxx\FastDeploy\build\fastdeploy-win-x64-gpu\examples\vision\classification\paddleclas\cpp


cpp代码编译exe

将工程配置设置成"Release x64"配置


配置头文件include路径:鼠标选择项目,单击右键,即可弹出下来菜单,在其中单击“属性”。


在弹出来的属性页中选择:C/C++ —> 常规 —> 附加包含目录,然后在添加 fastdeploy 和 opencv 的头文件路径。如:
fastdeploy路径为:E:\xxxxxx\FastDeploy\build\fastdeploy-win-x64-gpu\include
opencv路径为:E:\xxxxxx\FastDeploy\build\fastdeploy-win-x64-gpu\third_libs\install\opencv\build\include
注意:由于测试时,出现“ “cuda_runtime_api.h”: No such file or directory”失败的提示,因此,又将cuda的头文件路径添加进去了!
cuda路径为:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6\include

然后,配置lib路径和添加库文件。属性页中,选择:链接器—>常规—> 附加库目录,然后在添加 fastdeploy 和 opencv 的lib路径。如:
fastdeploy路径为:E:\xxxxxx\FastDeploy\build\fastdeploy-win-x64-gpu\lib
opencv路径为:E:\xxxxxx\FastDeploy\build\fastdeploy-win-x64-gpu\third_libs\install\opencv\build\x64\vc15\lib


添加库文件。在链接器—>输入—> 附加依赖项中,只需要填写:fastdeploy.lib 和 opencv_world3416.lib。

编译工程并运行获取结果。点击菜单栏“生成”->“生成解决方案”。


编译成功后,出现结果如下(包含exe的保存路径):
保存路径:E:\xxxxxxx\fastdeploy-use-test\infer_ppcls\x64\Release\infer_ppcls.exe


运行可执行程序exe

执行可执行文件,获得推理结果。

首先,需要拷贝所有的dll到exe所在的目录下。特别说明,exe运行时所需要的依赖库配置方法。FastDeploy提供了工具,可以帮助我们快速将所有依赖库,拷贝至可执行程序所在目录。通过如下命令,将所有依赖的dll文件拷贝至可执行程序所在的目录。

cd  E:\xxxxxx\FastDeploy\build\fastdeploy-win-x64-gpu

fastdploy_init.bat install %cd% E:\xxxxx\fastdeploy-use-test2\infer_ppcls2\x64\Release

将dll依赖的其他dll全部复制到当前目录!


注意一下:

  • 在此步骤中,使用到的fastdeploy_init.bat提供更多其它功能,帮忙开发者使用,包括
    ✓ 查看SDK中所有dll, lib和include的路径
    ✓ 安装SDK中所有dll至指定目录
    ✓ 配置SDK环境变量
  • fastdeploy_init.bat工具,具体可参考如下文档:FastDeploy/usage_of_fastdeploy_init_bat.md
  • 同时,也需要把ppcls的模型文件(不要忘记inference_cls.ymal)和测试图片,拷贝到exe所在的目录。

cmd命令行中运行exe程序,共输入4个参数:
第1个参数:infer_ppcls.exe
第2个参数:模型文件名
第3个参数:图片文件名
第4个参数:推理程序代号


例如,当传入第4个参数为1时,表示进行gpu推理。
命令行代码为:1.png 1


例如,预测结果如下:标签和得分。
原始图像为:


类别为3,3表示小狗,预测正确!

由于实际上在预测时,需要在代码中传入图像路径,模型文件路径,因此,修改了源码。

将cpp源码编译为dll

创建空项目
选择“Windows桌面向导”模板并选择“DLL”作为应用程序类型。


在“解决方案资源管理器”中,右键单击项目,然后选择“添加”->“新建项”。


在“添加新项”对话框中,选择“C++文件(.cpp)”类型,命名文件并单击“添加”。


○ 编写cpp代码编写
将源代码复制到cpp文件中,修改程序,然后保存文件。


○ cpp代码编译dll
将debug模式调整为release模式(x64),在“解决方案资源管理器”中,右键单击项目,并选择“属性”选项。在“属性页”中,选择“配置属性”->“常规”,确保“配置类型”设置为“动态库(.dll)”。


在弹出来的属性页中选择:C/C++ —> 常规 —> 附加包含目录,然后在添加 fastdeploy 和 opencv 的头文件路径。如:
fastdeploy路径为:E:\xxxxxx\FastDeploy\build\fastdeploy-win-x64-gpu\include
opencv路径为:E:\xxxxxx\FastDeploy\build\fastdeploy-win-x64-gpu\third_libs\install\opencv\build\include


注意:由于测试时,出现“ “cuda_runtime_api.h”: No such file or directory”失败的提示,因此,又将cuda的头文件路径添加进去了!
cuda路径为:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include


在“属性页”中,选择“配置属性”->“链接器”->“常规”,然后将“附加库目录”设置为库文件所在的目录。
fastdeploy路径为:E:\xxxxxxx\FastDeploy\build\fastdeploy-win-x64-gpu\lib
opencv路径为:E:\xxxxxxx\FastDeploy\build\fastdeploy-win-x64-gpu\third_libs\install\opencv\build\x64\vc15\lib


在“属性页”中,选择“配置属性”->“链接器”->“输入”,然后在“附加依赖项”字段中添加需要链接的库文件。
只需要填写:fastdeploy.lib 和 opencv_world3416.lib。
单击“应用”并单击“确定”。

单击“生成”->“生成解决方案”以构建DLL文件。


出现如下提示,说明构建成功。

DLL文件将位于项目输出目录下的“Release”文件夹中。

FastDeploy提供了工具,可以帮助我们快速将所有依赖库,拷贝至可执行程序所在目录。通过如下命令,将所有依赖的dll文件拷贝至可执行程序所在的目录。
cd E:\xxxxxxxx\FastDeploy\build\fastdeploy-win-x64-gpu
fastdeploy_init.bat install %cd% E:\xxxxxxxx\fastdeploy-use-test2\infer_ppcls2\x64\Release

将dll依赖的其他dll全部复制到当前目录!


注意一下:


调用动态库dll文件

到这一步就简单了,我们可以编写代码调用dll。

两个关键接口

● PaddleClas C++接口
○ PaddleClas类

fastdeploy::vision::classification::PaddleClasModel(
        const string& model_file,
        const string& params_file,
        const string& config_file,
        const RuntimeOption& runtime_option = RuntimeOption(),
        const ModelFormat& model_format = ModelFormat::PADDLE)

PaddleClas模型加载和初始化,其中model_file, params_file为训练模型导出的Paddle inference文件。
参数
➢ model_file(str): 模型文件路径
➢ params_file(str): 参数文件路径
➢ config_file(str): 推理部署配置文件
➢ runtime_option(RuntimeOption): 后端推理配置,默认为None,即采用默认配置
➢ model_format(ModelFormat): 模型格式,默认为Paddle格式

○ Predict函数
PaddleClasModel::Predict(cv::Mat* im, ClassifyResult* result, int topk = 1)
模型预测接口,输入图像直接输出检测结果。
参数
● im: 输入图像,注意需为HWC,BGR格式
● result: 分类结果,包括label_id,以及相应的置信度, ClassifyResult说明参考FastDeploy/docs/api/vision_results
● topk(int):返回预测概率最高的topk个分类结果,默认为1。

结束啦!有任何不明白,请欢迎咨询!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2272977.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电脑如何无线控制手机?

想在电脑上无线控制手机,需要用到Total Control控制软件,具体步骤如下: 1、首先我们在电脑上安装上控制软件Total Control并打开。 2、开启手机USB调试和ADB仅充电模式。 3、手机电脑均连接上相同局域网。 4、连接(首次使用需要用手机U…

C++ Qt练习项目 QChar功能测试

个人学习笔记 代码仓库 GitCode - 全球开发者的开源社区,开源代码托管平台 新建项目 设计UI 1、拖入group box去掉名字 2、拖入2个LineEdit 3、拖入两个Label 4、拖入两个PushButton 5、点栅格布局 1、拖入GroupBox 2、拖入4个PushButton 3、点栅格布局 1、拖入GroupBo…

QT c++ 样式 设置 标签(QLabel)的渐变色美化

上一篇文章中描述了按钮的纯色&#xff0c;本文描述标签的渐变色美化。 1.头文件 #ifndef WIDGET_H #define WIDGET_H #include <QWidget> //#include "CustomButton.h"#include <QVBoxLayout> #include <QLinearGradient> #include <QLabel…

【C++面向对象——输入输出流】处理二进制文件(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 相关知识 一、流类库中常用的类及其成员函数 二、标准输入输出及格式控制 三、文件的应用方法&#xff08;二进制文件、文本文件&#xff09; 编程要求 实验步骤 通关代码 测试结果 任务描述 本关任务&#xff1a; 用二进制方式打开指定的…

基于大数据爬虫+Python+数据可视化大屏的慧游数据爬虫与推荐分析系统(源码+论文+PPT+部署文档教程等)

博主介绍&#xff1a;**CSDN毕设辅导第一人、**全网粉丝50W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流 **技术范围&#xff1a;**S…

Linux Shell 脚本编程基础知识篇—awk的条件判断(3)

ℹ️大家好&#xff0c;我是练小杰&#xff0c;今天周五了&#xff0c;又是一周过去了&#x1f606; 本文是有关Linux shell脚本编程的awk命令的条件语句&#xff0c;后续我会不断增加相关内容 ~~ 回顾:【awk字符串函数和内置变量】 更多Linux 相关内容请点击&#x1f449;【Li…

MITRE ATTCK 简介:初学者指南

网络安全已成为当今数字世界的一个关键问题。随着网络威胁日益复杂&#xff0c;组织需要一种结构化的方法来理解和应对这些风险。这就是 MITRE ATT&CK 框架发挥作用的地方。如果您是网络安全新手或刚刚开始探索威胁分析和缓解&#xff0c;本指南将为 MITRE ATT&CK 提供…

生物医学信号处理--绪论

前言 参考书籍&#xff1a;刘海龙&#xff0c;生物医学信号处理&#xff0c;化学工业出版社 生物医学信号分类 1、由生理过程自发或者诱发产生的电生理信号和非电生理信号 • 电生理信号&#xff1a;ECG/心电、EEG/脑电、EMG/肌电、 EGG/胃电、 EOG/眼电 • 非电生理信号&am…

理解 Tomcat 架构与自定义实现

前言 Tomcat 是一个轻量级的 Web 容器&#xff0c;被广泛应用于 Java Web 开发中。通过它&#xff0c;我们可以轻松地部署和运行 Web 应用。在本文中&#xff0c;我们将深入分析 Tomcat 的核心架构&#xff0c;同时结合一段代码&#xff0c;手动实现一个简化的 Tomcat 服务&am…

怎样修改el-table主题样式

起因&#xff1a;el-table有主题样式&#xff0c;部分需要单独设置 环境&#xff1a;ideanodejs插件谷歌浏览器 第一步&#xff1a;找到scss文件&#xff1a; 谷歌浏览器打开表格页面&#xff0c;ctrlshifti打开开发者工具&#xff0c;点击后鼠标移动到表格单元格上单击一下…

模型 九屏幕分析法

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。九屏幕法&#xff1a;全方位分析问题的系统工具。 1 九屏幕分析法的应用 1.1 新产品研发的市场分析 一家科技公司计划开发一款新型智能手机&#xff0c;为了全面评估市场潜力和风险&#xff0c;他们…

CSS 学习之 padding 与图形绘制

padding 属性和 background-clip 属性配合&#xff0c;可以在有限的标签下实现一些 CSS 图形绘制效果&#xff0c;我这里举两个小例子&#xff0c;重在展示可行性。 例 1:不使用伪元素&#xff0c;仅一层标签实现大队长的“三道杠”分类图标效果。此效果在移动端比较常见&…

AI在电子制造中的应用:预测质量控制

一、 电子制造中存在的质量问题 电子制造过程中&#xff0c;由于生产工艺复杂、材料种类繁多、生产环境要求高等因素&#xff0c;可能会出现各种质量问题。 常见质量问题如下&#xff1a; 1. 空焊 原因&#xff1a;锡膏活性较弱、钢网开孔不佳、铜铂间距过大或大铜贴小元件、…

(已开源-AAAI25) RCTrans:雷达相机融合3D目标检测模型

在雷达相机融合三维目标检测中&#xff0c;雷达点云稀疏、噪声较大&#xff0c;在相机雷达融合过程中提出了很多挑战。为了解决这个问题&#xff0c;我们引入了一种新的基于query的检测方法 Radar-Camera Transformer (RCTrans)。具体来说&#xff1a; 首先设计了一个雷达稠密…

WPS计算机二级•数据查找分析

听说这里是目录哦 通配符&#x1f30c;问号&#xff08;?&#xff09;星号&#xff08;*&#xff09;波形符&#xff08;~&#xff09; 排序&#x1f320;数字按大小排序以当前选定区域排序以扩展选定区域排序 文字按首字母排序 快速筛选分类数据☄️文字筛选数字筛选颜色筛选…

(leetcode算法题)191. 位1的个数 和 338. 比特位计数

对于一个正整数 n&#xff0c;如果对这个正整数执行 n & (n - 1); 的代码&#xff0c;将会得到一个整数m n 和 m的关系&#xff1a;n 的二进制表示 与 m的二进制表示中除了n最右边的1取值不同&#xff0c;其他都相同 比如114514 和 114512 的二进制表示中第2位&#xff0…

mongodb==安装prisma连接

官网下载mongodb,解压安装 Download MongoDB Community Server | MongoDB 修改bin/mongod.cfg # mongod.conf# for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/# Where and how to store data. storage:dbPat…

安装Cockpit服务,使用Web页面管理你的Linux服务器

说起管理 Linux 服务器&#xff0c;大家首先想到的使用 SecureCRT、Xshell、MobaXterm 等工具远程到服务器&#xff0c;然后使用命令行管理服务器。今天给大家介绍一个好玩的工具&#xff0c;名字叫Cockpit&#xff0c; Cockpit 是一个免费开源的基于 web 的 Linux 服务器管理…

Excel | 空格分隔的行怎么导入excel?

准备工作&#xff1a;windows&#xff0c;一个记事本程序和微软的Excel软件。 打开记事本&#xff0c;选中所有内容&#xff0c;按CtrlA全选&#xff0c;然后复制(CtrlC)。 在Excel中&#xff0c;定位到你想粘贴的单元格&#xff0c;按CtrlV进行粘贴。粘贴后&#xff0c;你会在…

深度评测uni-app x:开启跨平台开发新篇章

文章目录 一、引言1.1 跨平台开发的崛起1.2 uni-app x 初印象 二、uni-app x 核心特性评测2.1 uts 语言&#xff1a;跨平台编程新利器2.2 uvue 渲染引擎&#xff1a;原生渲染新体验2.3 强大的组件和 API 支持2.4 插件生态&#xff1a;拓展无限可能 三、与 uni-app 对比&#xf…