【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 枚举

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

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

猜你喜欢

转载自blog.csdn.net/grape_yan/article/details/127689090
今日推荐