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

在这里插入图片描述

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.git

Gitee:

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推理

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

### 回答1: PaddlePaddle是一个开源的深度学习框架,提供了丰富的工具库,可以方便地训练模型。以下是使用PaddlePaddle训练模型的一些好处: 1. 高效性:PaddlePaddle采用了全异步、动态图等技术,可以充分利用硬件资源,提高训练效率。 2. 灵活性:PaddlePaddle支持多种神经网络模型,包括卷积神经网络、循环神经网络、生成对抗网络等,用户可以自由选择适合自己的模型。 3. 易用性:PaddlePaddle提供了丰富的API工具,包括模型训练、模型优化、模型转换等,用户可以轻松地完成整个模型训练过程。 4. 可视化:PaddlePaddle提供了可视化工具,可以实时监控训练过程,了解模型的学习情况。 5. 社区支持:PaddlePaddle拥有一个活跃的社区,用户可以在社区中获取技术支持、分享经验、提出问题等。 总之,PaddlePaddle是一个功能强大、易用性高、效率高的深度学习框架,可以帮助用户快速训练出高质量的模型。 ### 回答2: PaddlePaddle是一个广泛应用于深度学习的开源框架,具有许多优点使其成为一个好用的训练模型工具。 首先,PaddlePaddle为用户提供了丰富的深度学习模型库,其中包括了各种领域的经典模型。这些经过验证的模型可以帮助用户快速构建自己的模型,并且被广泛用于各种任务,包括图像识别、自然语言处理等。用户可以直接使用这些模型,或者在其基础上进行修改优化。 其次,PaddlePaddle具有高效的模型训练推理能力。PaddlePaddle部署模型时可以自动进行模型优化性能调整,以提高模型的效率。此外,PaddlePaddle还支持多卡并行训练分布式训练,用户可以充分利用硬件资源,提高训练速度模型的效果。 再者,PaddlePaddle提供了友好的编程接口文档支持。PaddlePaddle的API设计简洁明了,易于使用学习。同时,配套的文档非常详细,几乎覆盖了框架的所有功能特性,用户可以通过查阅文档解决遇到的问题。 此外,PaddlePaddle还支持跨平台部署移动端模型优化。用户可以将训练好的模型轻松部署到不同的平台上,以满足不同的应用需求。同时,PaddlePaddle还提供了针对移动端模型的量化压缩工具,可以有效减小模型的尺寸,提高在移动设备上的性能效率。 综上所述,PaddlePaddle除了具有丰富的模型库、高效的训练推理能力、友好的编程接口文档支持外,还支持跨平台部署移动端模型优化,这些优点使其成为一个好用的训练模型工具。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

椒颜皮皮虾྅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值