C# onnx资料

概念

1. 数值,向量,矩阵,张量:
数值 x=0
向量 point=[1,1]    point=[1,1,1]
矩阵 m=[
    [1,1,1],
    [1,1,1]
]
张量 tensor=[
    [
        [1,1,1],
        [1,1,1]
    ],
    [
        [1,1,1],
        [1,1,1]
    ]
] 三维或更高维度的就叫张量tensor ;矩阵也可以叫二维的张量,向量叫 一维的张量, 标量(数值)叫 零维的张量,但不习惯这样说。

例如: 1x2个像素的图像张量 以  1x高x宽x三通道写成

[

[ r1,g1,b1]  ]

],

[

[r2,g2,b2 ]

]   

 

即 [  [ [ [r1,g1,b1]][ [ [r2,g2,b2] ]  ]     

红色[]维度1  绿色[]维度为高 黑色[]维度为宽 橙色为3

具体看42集:https://www.douyin.com/user/self?modal_id=7011820443808058655&showTab=favorite_collectionicon-default.png?t=N7T8https://www.douyin.com/user/self?modal_id=7011820443808058655&showTab=favorite_collection

2. PyTorch是一个基于Python的开源机器学习库,用于构建深度学习模型。先了解即可。

模型查看

最好找到对应的GitHub 上找信息,如果没有介绍,才看模型输入输出猜

onnx查看网址:https://lutzroeder.github.io/netron 或

NetronVisualizer for neural network, deep learning and machine learning models.icon-default.png?t=N7T8https://netron.app/

24年3月最新 exe 版下载https://github.com/lutzroeder/netron/releases/tag/v7.5.4icon-default.png?t=N7T8https://github.com/lutzroeder/netron/releases/tag/v7.5.4,网页卡住的要本地看,本地也要等很久

caffe查看网址:http://ethereon.github.io/netscope/#/editor

openvino :https://lw112190.blog.csdn.net/article/details/134771928icon-default.png?t=N7T8https://lw112190.blog.csdn.net/article/details/134771928

处理篇

 预处理:

图像转输入张量

1.NCHW(Batch, Channels, Height, Width)排布   先排前面,通道则比像素优先, RGB三通道的R先排每个像素的,然后到G,B

2.若是NHWC(Batch, Height, Width, Channels), 即 每个像素的,RGB三通道排完再下一个像素的

有些要归一化(0~1)要除255.0f 

范围 -1~1的 除127.5f 减 1

后处理:

输出张量转图片:

1. 输出张量 为图像 时, 可以逆转 预处理(预处理除了255.0f的 要乘回255.0f)

2.  输出张量 为抠图的透明度信息 时, 

(1)每个像素的颜色=该像素点  被抠图的*透明度; 然后底部放背景图。

(2)如果要融合  每个像素的颜色=该像素点  被抠图的*透明度+ 背景的颜色*(最大透明度值-透明度)。如果255表示最大透明度,那就是255-透明度,是1 则是 1-透明度

3.  为点 线信息时, 按模型说明处理

AI封装库篇

 NuGet :yolov5-net(物体识别)yolov7  yolov8 的

人脸处理:

GitHub : ViewFaceCore (都很方便使用,功能多,小部分人脸对比还是有缺陷)

语言转文字:

whisper.net  

文生图:

GitHub - DarthAffe/StableDiffusion.NET: C# Wrapper for StableDiffusion.cpp

C# StableDiffusion StableDiffusionSharp 脱离python臃肿的环境-CSDN博客

加速篇

Microsoft.ML.OnnxRuntime (使用其它运行时删掉这一项)

默认都是CPU, 速度慢

Microsoft.ML.OnnxRuntime.DirectML

.NET ML 框架  DML加速 Any CPU 改成x64 之后加速的相关配置才不报错(显卡要DirectX版本12以上,大部分电脑都有,大多不用安装加速推理的环境) 

官网说明及API示例: Windows - DirectML | onnxruntimeInstructions to execute ONNX Runtime with the DirectML execution providericon-default.png?t=N7T8https://onnxruntime.ai/docs/execution-providers/DirectML-ExecutionProvider.html

Microsoft.ML.OnnxRuntime.MKLML

.NET ML 框架  的DNN 加速 cuDNN 等环境 英特尔CPU(未测)

Microsoft.ML.OnnxRuntime.Gpu

.NET ML 框架  的GPU 加速 要对应显卡的 CUDA环境  

https://www.cnblogs.com/zhuoss/p/17697706.html   安装CUDA过程,

cuDNN则到另一处下载,按上面的教程覆盖:

cuDNN Archive | NVIDIA Developer  登录后选择对应版本下载,覆盖 

对应版本参考 NVIDIA - CUDA | onnxruntime

最后 报错 [ErrorCode:RuntimeException] D:\a\_work\1\s\onnxruntime\core\session\provider_bridge_ort.cc:1209 onnxruntime::ProviderLibrary::Get [ONNXRuntimeError] : 1 : FAIL : LoadLibrary failed with error 126 ""  

1.13版本运行时也不行。

参考:

Windows版 CUDA安装_win cuda安装-CSDN博客     (安装只选CUDA,相对少选一些)

参考:OnnxRuntime 1.7.3 depends on both cuda122 and cuda118 · Issue #20490 · microsoft/onnxruntime · GitHub

按照依赖工具测试,对应的 onnxruntime_providers_cuda.dll 缺超多dll, 

直接放弃,CUDA12.2 还是换11.8吧 ,

tensorflow GitHub - NVIDIA/TensorRT: NVIDIA® TensorRT™ is an SDK for high-performance deep learnin

### 如何在C#中使用ONNXRuntime 为了在C#项目中集成并利用ONNX Runtime执行推理操作,需先安装对应的NuGet包[^2]。 #### 安装ONNX Runtime NuGet包 可以通过Visual Studio中的NuGet管理器来添加`Microsoft.ML.OnnxRuntime`到当前解决方案。这一步骤确保了开发环境具备必要的依赖库支持。 #### 加载模型文件 一旦完成上述准备工作之后,在程序里加载预先训练好的ONNX格式模型: ```csharp using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; // 创建会话选项实例 var sessionOptions = new SessionOptions(); sessionOptions.ExecutionMode = ExecutionMode.ORT_SEQUENTIAL; // 初始化InferenceSession对象用于后续调用 using var inferenceSession = new InferenceSession("path/to/model.onnx", sessionOptions); ``` 此处路径参数应当指向实际存储的`.onnx`模型位置。 #### 准备输入数据 根据具体应用场景准备相应的张量作为模型预测时所需的输入。这里假设有一个简单的二维浮点数数组作为样本输入: ```csharp float[] inputData = { /* your input data here */ }; var tensor = new DenseTensor<float>(inputData, new int[] { 1, inputData.Length }); Dictionary<string, IDisposableReadOnlyRandomAccessStream> inputs = new Dictionary<string, IDisposableReadOnlyRandomAccessStream>(); inputs.Add(inferenceSession.InputMetadata.First().Key, MemoryBuffer.CreateFrom(tensor)); ``` 注意:这里的键名应匹配所使用的特定模型定义中的预期名称。 #### 执行推理过程 准备好一切后就可以调用`Run()`函数来进行前向传播计算得到输出结果: ```csharp using IDisposableReadOnlyCollection<DisposableNamedOnnxValue> results = inferenceSession.Run(inputs); foreach (var result in results) { Console.WriteLine($"Output name: {result.Key}"); // 处理输出... } ``` 以上代码片段展示了基本的工作流程,对于更复杂的情况可能还需要额外处理诸如多批次输入、不同类型的张量转换等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值