【PaddleInferenceSharp】基于C#和Paddle Inference 部署PaddlePaddle模型

article/2025/8/22 17:13:18

在这里插入图片描述

1. 项目介绍

  Paddle Inference 是飞桨的原生推理库, 提供服务器端的高性能推理能力,直接基于飞桨的训练算子,因此它支持飞桨训练出的所有模型的推理;Paddle Inference 功能特性丰富,性能优异,针对不同平台不同的应用场景进行了深度的适配优化,做到高吞吐、低时延,保证了飞桨模型在服务器端即训即用,快速部署。

  但由于Paddle Inference目前只提供了Python、C++、C、Go语言方法接口,C#无法直接使用。近几年以来 ,C#语言快速发展,并跻身于编程语言排行榜前几名的位置,为了能够在C#语言中调用Paddle Inference模型推理库,根据C++动态链接库的原理,推出PaddleInferenceSharp,实现直接在C#平台调用Paddle Inference部署深度学习模型。其实现原理可以参考下图:

在这里插入图片描述

2.项目环境配置

 为了防止复现代码出现问题,列出以下代码开发环境,可以根据自己需求设置。

  • 操作系统:Windows 11
  • CUDA:11.4
  • cuDNN:8.2.4
  • TensorRT:8.4.0.6
  • OpenCV:4.5.5
  • Visual Studio:2022
  • C#框架:.NET 6.0
  • OpenCvSharp:OpenCvSharp4

 此处最重要的是需要安装Paddle Inference C++版,具体安装方式可以参考下面的连接:Paddle Inference C++ 依赖库安装(Windows)。对于其他依赖项安装可以参考以下链接:NVIDIA TensorR 安装 (Windows C++)、OpenCV C++安装和配置。

3.项目下载方式

 项目所使用的源码均已经在Github和Gitee上开源,

Github:git clone https://github.com/guojin-yan/PaddleInferenceSharp.gitGitee:git clone https://gitee.com/guojin-yan/PaddleInferenceSharp.git

4. PaddleInfer类

4.1 API 方法

序号API参数解释说明
1方法PaddleInfer()构造函数,初始化推理核心,读取本地模型
参数string model_path静态图模型文件
string params_path模型配置文件信息,默认为空
2方法void set_divice()设置推理设备支持 CPU、GPU、ONNX runtime、oneDNN
参数Divice divice设备名称选择
int num 对于CPU、ONNX runtime代表线程数,默认为10;
对于GPU代表显卡编号,默认为0;
对于oneDNN代表cache数量,默认为1
ulong memory_init_size显存分配空间(在使用GPU时作用),默认为500
int workspace_size显存工作空间(在使用GPU时作用),默认为30
3方法List <string> get_input_names()获取输入节点名字
4方法void set_input_shape()设置输入节点形状根据节点维度设置
参数int[] input_shape形状数组
string input_name节点名称
5方法void load_input_data()设置图片/普通输入数据方法重载
参数string input_name输入节点名称
float[] input_data输入数据
参数string input_name输入节点名称
byte[] image_data图片数据
ulong image_size图片长度
int type数据处理类型:
type == 0: 均值方差归一化、直接缩放
type == 1: 普通归一化、直接缩放
type == 2: 均值方差归一化、仿射变换
6方法void infer()模型推理
7方法List <string> get_output_names()获取输出节点名字
8方法List <int> get_shape()获取指定节点形状
参数string node_name节点名称
9方法void T[] read_infer_result <T>()读取推理结果数据支持读取Float32、Int32、Int64格式数据
参数string output_name输出节点名
int data_size输出数据长度
10方法void delet()删除内存地址

4.2 枚举

序号枚举名枚举变量含义
1Divice
设备名称
CPU使用CPU推理
GPU使用GPU推理
ONNX_runtime使用ONNX_runtime推理
oneDNN使用oneDNN推理

 关于上述方法的使用,后续会更新县官的案例教程以及详细的技术文档,敬请期待。


http://chatgpt.dhexx.cn/article/W6PgjXNL.shtml

相关文章

Paddle Inference C++ 依赖库安装(Windows)

Paddle Inference C 依赖库安装 1. 环境准备2. 下载安装库3. 设置环境变量4. VS C 项目配置 Paddle Inference 是飞桨的原生推理库&#xff0c; 提供服务器端的高性能推理能力。由于 Paddle Inference 能力直接基于飞桨的训练算子&#xff0c;因此它支持飞桨训练出的所有模型的…

ESIM:Enhanced LSTM for Natural Language Inference

原文链接&#xff1a;https://aclanthology.org/P17-1152.pdf ACL 2017 概述 对于自然语言推理任务&#xff0c;Bowman等人在2015年提出了一个大数据集&#xff0c;大多数工作就开始使用神经网络来对该任务进行训练。但作者认为序列模型的潜力还没有完全被挖掘&#xff0c;因此…

Triton Inference Server教程2

本文介绍如何编写一个config文件&#xff0c;config.pbtxt文件中包含哪些可以配置的参数&#xff0c;这些参数又会对triton server产生什么影响。 必须指定的模型参数 platform/backend&#xff1a;模型要在什么backend上面运行&#xff0c;可以用两种参数指定&#xff0c;一…

变分推断(variational inference)/variational EM

诸神缄默不语-个人CSDN博文目录 由于我真的&#xff0c;啥都不会&#xff0c;所以本文基本上就是&#xff0c;从0开始。 我看不懂的博客就是写得不行的博客。所以我只写我看得懂的部分。 持续更新。 文章目录 1. 琴生不等式2. 香农信息量/自信息I3. 信息熵4. 相对熵/KL散度/信…

Hugging Face - 推理(Inference)解决方案

每天&#xff0c;开发人员和组织都在使用 Hugging Face 平台上托管的模型&#xff0c;将想法变成概念验证&#xff08;proof-of-concept&#xff09;的 demo&#xff0c;再将 demo 变成生产级的应用。 Transformer 模型已成为广泛的机器学习&#xff08;ML&#xff09;应用的流…

变分推断(Variational Inference)解析

一、什么是变分推断 假设在一个贝叶斯模型中&#xff0c; x x x为一组观测变量&#xff0c; z z z为一组隐变量&#xff08;参数也看做随机变量&#xff0c;包含在 z z z中&#xff09;&#xff0c;则推断问题为计算后验概率密度 P ( z ∣ x ) P(z|x) P(z∣x)。根据贝叶斯公式…

深度学习-在线推断(Inference)技术

深度学习一般分为训练和在线推断两个部分&#xff0c;大家平时经常关注的多为训练阶段&#xff0c;也就是搜索和求解模型最优参数的阶段。而当模型参数已经求解出来&#xff0c;如何使用模型&#xff0c;以及在在线环境中部署模型&#xff0c;也是非常重要的。 一般会比较关注其…

推理(Inference)与预测(Prediction)

在机器学习的背景下&#xff0c;很多人似乎混淆了这两个术语。这篇文章将试图澄清我们所说的这两个词是什么意思&#xff0c;每一个词在哪里有用&#xff0c;以及它们是如何应用的。在这里&#xff0c;我将举几个例子来直观地理解两者之间的区别。 推理和预测这两个术语都描述…

嵌入式C语言自我修养:从芯片、编译器到操作系统(附送书籍)

关注星标公众号&#xff0c;不错过精彩内容 来源 | 宅学部落 最近&#xff0c;阅读了王工&#xff08;王利涛&#xff09;赠送的一本由他编著的书籍《嵌入式C语言自我修养》&#xff0c;感觉写的挺不错。今天分享一下这本书籍《嵌入式C语言自我修养》&#xff1a;从芯片、编译器…

进行嵌入式C语言编程调试的通用办法

总结了一下调试我们嵌入式C程序的一些基本的办法和思想&#xff0c;供大家学习参考&#xff1a; 打印日志&#xff1a;在代码中添加打印语句&#xff0c;输出变量值、函数调用等信息&#xff0c;以便在程序运行时观察程序执行情况。 断点调试&#xff1a;在代码中添加断点&…

linux c与c语言的区别吗,嵌入式c语言与c语言的区别

原标题:嵌入式c语言与c语言的区别 最广泛使用的系统编程语言是C语言,它是使用自由格式源代码的简单编程语言;它曾用于以前用汇编语言构建的应用程序中。嵌入式C是C语言的扩展,它在嵌入式系统中应用于编写嵌入式软件,那么二者之间究竟有什么差异呢? 一、启动过程 1. 通用c…

嵌入式C语言——常见面试题

1、描述一下gcc编译过程&#xff1f; gcc编译过程分为4步骤&#xff1a;预处理、编译、汇编、链接。 预处理&#xff1a;头文件包含、宏替换、条件编译、删除注释。编译&#xff1a;主要进行词法、语法、语义分析等等&#xff0c;检查无误后把预处理好的文件编译成汇编文件。…

c语言对嵌入式的作用是什么,关于嵌入式C语言它有些什么意义

描述 首先&#xff0c;在当前产业结构升级的大背景下&#xff0c;机械行业未来的自动化、智能化程度会越来越高&#xff0c;所以机械类相关专业的知识结构必然会不断得到丰富和发展&#xff0c;而学习编程语言对于机械类专业来说具有较为实际的意义&#xff0c;尤其是C语言。 机…

总结嵌入式C语言难点(2部分)

结构类型和对齐 C语言提供自定义数据类型来描述一类具有相同特征点的事务&#xff0c;主要支持的有结构体&#xff0c;枚举和联合体。其中枚举通过别名限制数据的访问&#xff0c;可以让数据更直观&#xff0c;易读&#xff0c;实现如下&#xff1a; 联合体的是能在同一个存储…

嵌入式c语言教程 题库 百度云,嵌入式c语言视频教程尚观主讲视频教程

嵌入式C语言培训-01C语言概述-01C语言概念-发展历史-特点.mp4 嵌入式C语言培训-01C语言概述-02C基本程序结构-第一个helloworld程序-Linux下编辑编译执行.mp4 嵌入式C语言培训-01C语言概述-03C语言第2个程序第3个程序.mp4 嵌入式C语言培训-01C语言概述-04C程序开发过程.mp4 嵌入…

《嵌入式C语言》C语言介绍及环境搭建

--最具价值的嵌入式C语言1 C语言简介 C语言是国际上广泛流行的高级语言&#xff0c;是在B语言的基础上发展起来的&#xff0c; 1970年&#xff0c; 美国贝尔实验室的D.M.Ritchie设计了B 语言, 并用于编写了第一个UNIX操作系统。 1973年&#xff0c; D.M.Ritchie 在B语言的基础…

嵌入式C语言深入篇之 —— 变量

新建一个物联网行业交流学习QQ群&#xff0c;感兴趣可加&#xff1a;928840648 CUT 变量 可执行程序存储区 当一个C/C原码文件被编译链&#xff08;比如gcc/g&#xff09;编译及链接成为可执行程序后&#xff0c;由4个段组成&#xff0c;分别是&#xff1a;代码段&#xff…

嵌入式C语言编程技巧

基础语法编程技巧 变量 &#xff08;1&#xff09;变量名需见名知意&#xff0c;用英文单词命名&#xff0c;尽可能避免出现 a b 等单一字母的变量 &#xff08;2&#xff09;变量在定义同时进行初始化&#xff0c;防止乱码数据 &#xff08;3&#xff09;变量序号尽可能用英语…

嵌入式C语言强化学习——(嵌入式学习路线1)

前言 从零开始记录自己学习嵌入式&#xff0c;之前看稚晖君的视频&#xff0c;里面的费曼学习法觉得对自己很有帮助&#xff0c;所以准备把自己学习到的东西分享出来&#xff0c;便于学的更深&#xff08;符合费曼学习法&#xff09; 众所周知&#xff0c;嵌入式编一般是使用C…

嵌入式C语言开发

这是我的第一篇对ARM有有疑问并展开调查的文档总结&#xff0c;以备之后查阅。 首先的疑惑是发现之前的源码中都是在对寄存器做操作&#xff0c;所以对寄存器的地址是怎么被确定的就很疑惑。 搜索引擎关键词&#xff1a;嵌入式 寄存器 基地址 使用 参考《嵌入式15——HAL 库中…