当前位置:   article > 正文

C# onnx资料

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 learning inference on NVIDIA GPUs. This repository contains the open source components of TensorRT.

结果配置时不报错,推理卡住 ,

查询资料,有些说1050Ti 以上,有些说要1060以上

我的1050Ti 还看到缺基本个dll, 11.8版到是不缺CUDA相关的dll而已。没程序崩溃信息,不知道是dll 还是 硬件问题。

去系统日志查看

发现是cuDNN的问题, 重新去看github上11.8对应的cuDNN, 不是官网对应的8.5.0, 是当前最新的8.9.7, 换了之后,成功解决!!! 

速度对比

DML  和 GPU  人脸画质增强模型 对比:

1050Ti  , 机械盘,运行时1.15.1  的:

GPU(CUDA11.8) : 210~240ms,偶尔240~250ms  ;第二次210~230ms,偶尔230~250ms

DML: 188~210ms, 一次217ms (没测试GPU加速前 速度250ms左右, DML 加速一直是个迷,有时会加快)

1050Ti  , 机械盘,运行时1.17.3(当前最新)  的:

GPU(CUDA11.8) : 预热9000ms,开始速度215~240ms,偶尔240~250ms  ;持续一分钟后数组上升到280ms

DML :预热270ms,  开始速度185~202ms, 持续一分钟后数值上升到250~260ms

使用

//GPU 的 onnx官方的配置1
        var cudaProviderOptions = new OrtCUDAProviderOptions(); // Dispose this finally
        var providerOptionsDict = new Dictionary<string, string>();
        providerOptionsDict["device_id"] = "0";
        providerOptionsDict["gpu_mem_limit"] = "3791728742";   //内存分配 2791728742=3G-256MB  2147483648=2G
        providerOptionsDict["arena_extend_strategy"] = "kSameAsRequested";
        providerOptionsDict["cudnn_conv_algo_search"] = "HEURISTIC";   //设置改为HEURISTIC或EXHAUSTIVE以寻找最优的卷积算法,EXHAUSTIVE 预热很久,DEFAULT默认
        providerOptionsDict["do_copy_in_default_stream"] = "1";
        providerOptionsDict["cudnn_conv_use_max_workspace"] = "1";
        providerOptionsDict["cudnn_conv1d_pad_to_nc1d"] = "1";

        cudaProviderOptions.UpdateOptions(providerOptionsDict);

        options = SessionOptions.MakeSessionOptionWithCudaProvider(cudaProviderOptions);
        options.GraphOptimizationLevel = GraphOptimizationLevel.ORT_ENABLE_ALL;

GPU(CUDA11.8) : 只有预热加快到880~1000+ms,其它变化不大

值得注意的是 以下Python脚本是测试不到的,ML.NET 还是可以正常运行CUDA加速

import torch

def check_cuda_cudnn():
    # 检查CUDA是否可用
    if not torch.cuda.is_available():
        print("CUDA is not available.")
    else:
        print(f"CUDA is available. Version: {torch.version.cuda}")

    # 检查cuDNN是否可用
    if not torch.backends.cudnn.is_available():
        print("cuDNN is not available.")
    else:
        print(f"cuDNN is available. Version: {torch.backends.cudnn.version()}")

if __name__ == "__main__":
    check_cuda_cudnn()

onpenvino 框架 gpu加速 要相关的几G软件 CUDA等安装, onnxruntime 官方查看具体资料

---------------------------------

下载资源篇:

onnx 地址合集:

1. C++ AI工具库,  关联的onnx模型,同时还分组了,模型有大有小的, 列出了链接,链接有介绍但不一定有onnx模型下载

 https://github.com/DefTruth/lite.ai.toolkit/blob/main/docs/hub/lite.ai.toolkit.hub.onnx.md

2.  github 官方 onnx 模型 ,很多,但没什么介绍,只分了文件夹

GitHub - onnx/models: A collection of pre-trained, state-of-the-art models in the ONNX format

3.  onnx 搜索下载,英文页面,数量多 搜索方便,有些无详细说明

https://huggingface.co

4.   其它环境下载:

(1)下载cmake-3.28.0-rc5-windows-x86_64.msi
 https://cmake.org/download/
 (2)下载 openVINO2021 环境
 https://www.intel.com/content/www/us/en/developer/tools/openvino-toolkit/download.html?VERSION=v_2021_4_2&ENVIRONMENT=DEV_TOOLS&OP_SYSTEM=WINDOWS&DISTRIBUTION=OFFLINE_INSTALLER

5. 其它onnx 免费下载,  参考篇的  11 12

6. 魔搭社区创客空间  RapidOCRDemo 包含onnx模型,Python代码,转C#后个别模型报错,改ch_ppocr_server_v2.0_rec_infer.onnx可用

参考篇:

封装的yolov5使用 

1.  net6下[WPF+yolov5+opencvsharp]:
https://www.cnblogs.com/hngyElectronic/archive/2023/10/04/17742907.html

2.  winform 的  OpenCvSharp+Yolov5Net+Onnx 完整Demo

OpenCvSharp+Yolov5Net+Onnx 完整Demo_opencvsharp yolov5-CSDN博客文章浏览阅读690次。OpenCvSharp+Yolov5Net+Onnx 完整Demo。_opencvsharp yolov5https://blog.csdn.net/lw112190/article/details/130601322

3. https://blog.csdn.net/lw112190/category_12285317.htmlicon-default.png?t=N7T8https://blog.csdn.net/lw112190/category_12285317.html    这个大佬的 C#+AI专题文章

C# Onnx Yolov8 Detect 戴安全帽检测(未测)

LaMa Image Inpainting 图像修复 Onnx Demo(未测)

C# OpenVINO 百度PaddleSeg实时人像抠图PP-MattingV2:(已测,速度一般,1050Ti 110ms)

C# PaddleInference.PP-HumanSeg 人像分割 替换背景色_c# paddleseg 实时人像分割-CSDN博客

C# Onnx 百度PaddleSeg发布的实时人像抠图PP-MattingV2_抠图 onnx模型-CSDN博客

另外 :飞桨CSDN官方 后处理介绍 :

精度96.63%、FPS 63,SOTA人像分割方案PP-HumanSeg v2开箱即用!-CSDN博客文章浏览阅读2k次。一键实现人像丝滑抠图,SOTA级人像分割算法和14K开源人像数据等你来拿!_pp-humanseghttps://blog.csdn.net/PaddlePaddle/article/details/126652209

damoyolo  (已测,速度不错, 1050Ti 能达到25~30FPS)

stable-diffusion(暂时运行不了,环境问题)

4.OpenVINO + C# 参考,(C盘满了,CUDA安装不了, 未测)开发者实战 | 基于 C# 和 OpenVINO™ 2023.0部署 YOLOv8 全系列模型-CSDN博客文章浏览阅读3.2k次,点赞2次,收藏29次。点击蓝字关注我们,让开发变得更有趣以下文章来源英特尔物联网文章作者:颜国进 飞桨开发者技术专家(PPDE),OpenVINOSharp 工具包作者,中国矿业大学硕士研究生文章指导:杨雪锋 英特尔边缘计算创新大使,中国矿业大学副教授1基于 C# 和 OpenVINO™2023.0部署YOLOv8 全系列模型1.1项目简介1.1.1OpenVINO™英特尔发行版 OpenVINO™ 工具套件基于 ..._c# yolov8https://blog.csdn.net/OpenVINOCC/article/details/131843178

5. 基于C# WinForm平台部署Yolov8 (未测)

实例推理框架(OpaenVINP /TensorRT /ONNX Runtime/OpenCv)、推理模型(yoloV8-det yoloV8-seg yoloV8-cls yoloV8-pose)

https://github.com/guojin-yan/Csharp_deploy_Yolov8/tree/mastericon-default.png?t=N7T8https://github.com/guojin-yan/Csharp_deploy_Yolov8/tree/master其附带的 Python方式下载和转换

https://github.com/guojin-yan/Csharp_deploy_Yolov8/blob/master/doc/Yolov8_download_conv.md

6. 基于C#和TensorRT部署Yolov8全系列模型   ,TensorRT加速也是要CUDA,(未测)

【Yolov8】基于C#和TensorRT部署Yolov8全系列模型_\tensorrtsharpexterm.dll-CSDN博客文章浏览阅读5k次,点赞18次,收藏68次。该项目主要基于TensorRT模型部署套件,在C#平台部署Yolov8模型,包括Yolov8系列的对象检测、图像分割、姿态识别和图像分类模型,实现C#平台推理加速Yolov8模型。_\tensorrtsharpexterm.dllhttps://blog.csdn.net/grape_yan/article/details/130241872对应 OpenVINO 【Yolov8】基于C#和OpenVINO部署Yolov8全系列模型_yolov8 openvino-CSDN博客文章浏览阅读3.2k次,点赞20次,收藏59次。该项目主要基于OpenVINO™模型部署套件,在C#平台部署Yolov8模型,包括Yolov8系列的对象检测、图像分割、姿态识别和图像分类模型,实现C#平台推理加速Yolov8模型。_yolov8 openvinohttps://blog.csdn.net/grape_yan/article/details/130240378【TensorRT】基于C#调用TensorRT 部署Yolov5模型 - 下篇:

【TensorRT】基于C#调用TensorRT 部署Yolov5模型 - 下篇:部署Yolov5模型_c#支不支持tensorrt-CSDN博客文章浏览阅读1.6k次,点赞5次,收藏15次。目前TensorRT无法直接在C#调用函数接口实现模型部署,此处利用动态链接库功能,构建TensorRTSharp,实现C#部署模型。_c#支不支持tensorrthttps://blog.csdn.net/grape_yan/article/details/128551878

8.  onnx 相关的各种基础概念 实践 / C# 在 ONNX 上运行 YOLOv3/4/5,并使用 DirectML 加速 - 知乎主旨本文将介绍 ONNX 及 DirectML,并从零开始在 .NET 5 中使用 ONNX Runtime 对 YOLO 模型进行推理,同时利用 DirectML 进行硬件加速。 什么是 ONNX?ONNX[音:欧尼克思](Open Neural Network Exchange) 开放式神…icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/421994173

9.  GitHub  mini-openvino-facedetection 项目 人脸检测 (源码可运行,速度很快,换模型不懂为何加载报错)

其使用的 face-detection-0200 模型的解释

https://github.com/openvinotoolkit/open_model_zoo/tree/master/models/intel/face-detection-0200icon-default.png?t=N7T8https://github.com/openvinotoolkit/open_model_zoo/tree/master/models/intel/face-detection-020010. yolov7 CSDN 资源包下载: yolov7-tiny的c# 调用,vs2022使用opencvsharp推理(未测)

https://download.csdn.net/download/vokxchh/85993605

11. damo-yolo  (已测,速度不错, 测试图像输入640x480的模型 ,1050Ti 能达到25~30FPS)

27个onnx模型, onnx文件需要从百度云盘下载。

链接:https://pan.baidu.com/s/10-5ke_fs2omqUMSgKTJV0Q 提取码:w9kp

GitHub 下载https://github.com/tinyvision/DAMO-YOLO/blob/master/README_cn.md

80个类名称顺序为:(GitHub上的Python代码)

class_names = ['person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 
'truck', 'boat', 'traffic light', 'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 
'horse', 'sheep', 'cow', 'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase',
 'frisbee', 'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard', 
 'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple', 'sandwich', 'orange',
 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch', 'potted plant', 'bed', 'dining table', 'toilet',
 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone', 'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book',
 'clock', 'vase', 'scissors', 'teddy bear', 'hair drier', 'toothbrush']

 基础程序制作参考:

C# Onnx 阿里达摩院开源DAMO-YOLO目标检测_damoyolo demo-CSDN博客

12. 字节跳动的 RobustVideoMatting (主要抠图人物,推理速度相对PP-MattingV2快一倍,精度高略好一点,抠图还不是完全稳定,但是是目前最佳)

https://github.com/PeterL1n/RobustVideoMatting/blob/master/README_zh_Hans.md

  • 输入: [srcr1ir2ir3ir4idownsample_ratio].
    • src:输入帧,RGB 通道,形状为 [B, C, H, W],范围为0~1
    • rXi:记忆输入,初始值是是形状为 [1, 1, 1, 1] 的零张量。
    • downsample_ratio 下采样比,张量形状为 [1]
    • 只有 downsample_ratio 必须是 FP32,其他输入必须和加载的模型使用一样的 dtype
  • 输出: [fgrphar1or2or3or4o]
    • fgr, pha:前景和透明度通道输出,范围为 0~1
    • rXo:记忆输出。

 下采样比:

模型在内部将高分辨率输入缩小做初步的处理,然后再放大做细分处理。

建议设置 downsample_ratio 使缩小后的分辨率维持在 256 到 512 像素之间. 例如,1920x1080 的输入用 downsample_ratio=0.25,缩小后的分辨率 480x270 在 256 到 512 像素之间。

根据视频内容调整 downsample_ratio。若视频是上身人像,低 downsample_ratio 足矣。若视频是全身像,建议尝试更高的 downsample_ratio。但注意,过高的 downsample_ratio 反而会降低效果。

13.   其它语言版参考,部分有onnx模型

(1)Python 版本的 卡通化

GAN动漫人像生成实现(附带源码)_漫画风格迁移 c++-CSDN博客

扩展: 

代码放在GitHub上的:
https://github.com/hahahappyboy/Pytorch-and-CPP-OnnxRuntime

训练好的模型以及导出的onnx模型在这:
链接:https://pan.baidu.com/s/1m35zq0wqTeaOZ5rj2L2dKA
提取码:iimp
                        
原文链接:https://blog.csdn.net/iiiiiiimp/article/details/120621682

(2) Python 版本的 photo2cartoon 一个普通的卡通化的

GitHub - minivision-ai/photo2cartoon: 人像卡通化探索项目 (photo-to-cartoon translation project)

(3)C++ 版本的 pix2pix(   效果普通,免费提供百度onnx格式模型)

C++和PytorchOnnxRuntime使用方法(附代码)_windows安装onnxruntime-gpu c++-CSDN博客

(4)Python 版本的 AnimeGANv2-ONNX-Sample( 有onnx格式模型下载,还行的人物油画化,C#运行速度一般,无法实时化)

GitHub - Kazuhito00/AnimeGANv2-ONNX-Sample: 「PyTorch Implementation of AnimeGANv2」のPythonでのONNX推論サンプル

(5)Python和C++ 版本的 很多例子介绍,github链接提供百度网盘下载onnx模型 

使用opencv-dnn部署深度学习推理 - 知乎

(6) Python版本的模型资料总结,内容很多,但无onnx模型

深度学习系列资料总结(三) - 掘金

(7)Python版本的,    很多模型,并分类,部分往下点到具体说明,可以看到onnx的网址,删减后成了下载地址! Unity版本的ailia模型存储库, 无WPF的

GitHub - axinc-ai/ailia-models: The collection of pre-trained, state-of-the-art AI models for ailia SDK

①其中 找到 风格转换(Style transfer)类的beauty_gan,两图互换风格。测试效果也不怎么样,AI说对抗神经网络不怎么理想GitHub - axinc-ai/ailia-models: The collection of pre-trained, state-of-the-art AI models for ailia SDK

②其中 年龄变化 0~100,输入1图,出各个年龄图 (未测)https://github.com/axinc-ai/ailia-models/tree/master/generative_adversarial_networks/sam

③其中 去雾霾 效果看着还行(未测,csdn有相应C#应用的)

https://github.com/axinc-ai/ailia-models/tree/master/image_manipulation/dehamer

④其中  降噪,去虚影。效果看着还行(未测)

https://github.com/axinc-ai/ailia-models/tree/master/image_restoration/nafnet

(8) AnimeGANv2Python版本的 动漫化  AnimeGANv2 ,有V3 V2版本的onnx模型下载

14.  H5,ONNX.JS  ONNX.js 是一个在浏览器上运行 ONNX 模型的库,它采用了 WebAssembly 和 WebGL 技术,并在 CPU 或 GPU 上推理 ONNX 格式的预训练模型。
https://zhuanlan.zhihu.com/p/51387600   
演示地址:https://microsoft.github.io/onnxjs-demo/#/yolo    本地做了一个加载其它的,结果不兼容int64, 只能转换 或 把这个地址的onnx下载来测试

推理速度对比
https://www.bilibili.com/video/BV11u411N7ji/?spm_id_from=333.337.search-card.all.click&vd_source=7131bd5d24cfefde3fce7ab6d1686c4d


 H5 浏览器推理介绍:
这里列出三个常见的推理引擎 对比

tensorflow.js(下面简称为tfjs)
ONNX.js
WebDNN
https://zhuanlan.zhihu.com/p/349500443


 react with onnxjs demo
https://github.com/Narsil/face

15. JAVA 安卓

GitHub - ZTMIDGO/Anime: 基于DCT-Net:用于肖像风格化的Android应用程序

16.  线上API 体验:

(1)百度 飞桨

①在线应用体验
https://aistudio.baidu.com/application/center

②另外 ,.net 部署,非onnx模型, 是封装好的飞桨人像分割,  GPU加速收费,

doc/UseInCsharp.md · 明月心/PaddleSegSharp - Gitee.com

OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "*.*|*.bmp;*.jpg;*.jpeg;*.tiff;*.tiff;*.png";
            if (ofd.ShowDialog() == true)
            {
                string modelPath = null;
                //参数
                MattingParameter parameter = new MattingParameter();
                //初始化引擎
                PaddleSegMattingEngine engine = new PaddleSegMattingEngine();
                parameter.use_gpu = true;   //提示要购买
                parameter.gpu_id = 0;
                parameter.Enable_mkldnn = true;
                parameter.outbgfile = false; //是否 输出黑白前后背景图,当为true,输出路径为seg第三个参数。
                parameter.bgtransparent = false; //是否背景透明,当为true时,Setbackground,SetbackgroundFile都无效。                         
                engine.Init(modelPath, parameter); //初始化引擎   
                engine.Setbackground(45, 145, 255); //设置背景颜色
                engine.SetbackgroundFile(Environment.CurrentDirectory+@"/images/bg.png"); //与Setbackground互斥,SetbackgroundFile优先
                string outfile = System.IO.Path.Combine(Environment.CurrentDirectory + @"/images/bgOut.png"); //分割后的文件
                Console.WriteLine($"{outfile}  {ofd.FileName}");
                engine.Seg(ofd.FileName, outfile, "输出黑白前后背景图路径,parameter.outbgfile为true时有效");
            }
            else
            {
                // 用户取消操作
                return;
            }

(2)阿里 线上API 有很多,图片风格处理,视频换脸等
https://vision.aliyun.com/?crowd=personal&spm=a2cvz.27725973.J_8228568030.1.9a4250b5s7f0ak

(3)字节跳动 的 火山引擎API调用,暂没发现AI模型分享
https://cv-api.bytedance.com/doc/openapi/1818/readme 

(4)软虹 虹软视觉开放平台—以免费人脸识别技术为核心的人脸识别算法开放平台 ,C++SDK, 没C#

转换篇

1. onnx量化 是啥? 

yolov8 Onnx 模型的静态量化和动态量化:

https://lw112190.blog.csdn.net/article/details/133030553

AI 模型量化格式介绍

2.C# Sdcb.Paddle2Onnx Paddle(飞桨)模型通过C#转换为ONNX模型(C#完整demo): 

https://lw112190.blog.csdn.net/article/details/131696894

3.飞桨模型导出?未测:

飞桨框架模型导出-PaddlePaddle深度学习平台

4.C# OpenVINO 直接读取百度Paddle模型实现物体检测( yolov3_darknet):

https://lw112190.blog.csdn.net/article/details/134770797

5. C# EmguCV bitmap 转 Mat

https://lw112190.blog.csdn.net/article/details/132080975

6. 在线 模型转换网址,不能其它格式转onnx格式:

一键转换 Caffe, ONNX, TensorFlow 到 NCNN, MNN, Tengine

7.  yolov8 官方转换代码

pose 模型转换参考官方:

 Pose - Ultralytics YOLOv8 Docs

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n-pose.pt')  # load an official model
#model = YOLO('path/to/best.pt')  # load a custom trained model 我注释掉这句才能运行

# Export the model
model.export(format='onnx')

下载 YOLOk库,之后执行  Python yolo.py predict model=yolov8n-pose.onnx

会下载和转换模型

8.   魔塔转换onnx

部分支持而已,官网文档中心有具体列举的,不用案例的ID, 导出异常,地址无对应文件夹无法导出

参考: 

魔搭社区

 # 导出模型

from modelscope.models import Model from modelscope.exporters import Exporter model_id = 'damo/nlp_structbert_sentence-similarity_chinese-base'

model = Model.from_pretrained(model_id) output_files = Exporter.from_model(model).export_onnx(opset=13, output_dir='/tmp', shape=(2, 256)) print(output_files)

将 DCTNet 模型转换为 ONNX 格式:

官方文档没有,搜索到 dctnet模型如何转onnx格式_问答-阿里云开发者社区

不过魔塔上3D动漫化的模型是pb格式,是 Tensorflow使用的格式,以下代码未测:

  1. import onnx
  2. from dctnet import DCTNet
  3. # 加载DCTNet模型
  4. model = DCTNet()
  5. model.load_state_dict(torch.load('dctnet.pth'))
  6. model.eval()
  7. input_shape = (1, 3, 224, 224)
  8. input_data = torch.randn(input_shape)
  9. # 导出模型为ONNX格式
  10. nx_model = onnx.export(model, input_data, 'dctnet.onnx', verbose=True)

9.  C#  步骤有些多的NHWC 转 NCHW ,(10~13ms, 还行,但不如多线程操作指针 或 操作Mat复制重排 的耗时1~5ms)

安装 NumSharp +NumsharpOpencvSharpConvertor  加上之前的OpenCVSharp4 

public DenseTensor<float> ProcessImage(Mat image)
{
            // 确保图像是8位无符号整数类型
            if (image.Type() != MatType.CV_8UC3)
            {
                throw new InvalidOperationException("图像类型必须是8位无符号整数(CV_8UC3)");
            }

            // 将图像从BGR转换为RGB
            Cv2.CvtColor(image, image, ColorConversionCodes.BGR2RGB);

            // 转换Mat到NDArray ,先复制数据
            byte[] imageData = new byte[image.Rows*image.Cols* 3];
            Marshal.Copy(image.Data, imageData,0,imageData.Length);


            var ndArray = np.array(imageData).astype(np.float32).reshape(image.Height, image.Width, 3); ;
           // NDArray ndArray = image.ToNdArray(); //0.20.5 版本可以0.30.0报错不全

            调整维度顺序从[H, W, C]到[C, H, W]
            int[] dims = { 2, 0, 1 };
            ndArray = ndArray.transpose(dims);

            展平NDArray到1D
            var flattenedArray = ndArray.flatten().ToArray<float>();
           // float[] flattenedArray = ndArray.ToArray<float>();
            // 创建DenseTensor
            var inputTensor = new DenseTensor<float>(flattenedArray, new[] { 1, 3, image.Height, image.Width });

            return inputTensor;
}

速度对比参考:

GitHub - zhangchaosd/ModelInferBench: For testing model inference speed

PC/batch_size14128
Python PyTorch CPU172 ms514 ms*
Python ONNX Runtime CPU12 ms30 ms*
Python OpenVINO CPU11 ms29 ms*
C++ ONNX Runtime CPU10 ms34 ms3800 ms
C++ OpenVINO CPU10 ms26 ms*
C# ONNX Runtime CPU170 ms473 ms3876 ms
Python PyTorch 1070Ti11 ms23 ms*
Python ONNX Runtime 1070Ti7 ms18 ms430 ms
Python OpenVINO 1070Ti49 ms**
C++ ONNX Runtime 1070Ti7 ms17 ms424 ms
C# ONNX Runtime 1070Ti7 ms17 ms427 ms
C# DirectML 1070Ti12 ms31 ms812 ms
Python OpenVINO A77010 ms15 ms919 ms
C++ OpenVINO A7707 ms10 ms870 ms
C# DirectML A7709 ms19 ms485 ms

看了 A 卡的DX12 性能比 相对突出,使用DML 推理相对快 。

-------------------------------------------------------------------

DML加速时使用DX12, Graphics_1使用率上升。

另外有时实践中 DML 加速有些迷,

情况1: 某个模型突然再运行,速度提升了,情况不明

情况2: 抠图模型1,循环推理60ms, 开发应用抠图模型2的程序,回来运行抠图模型1的程序,发现速度提升了

情况3:图像增强(修复)模型1 和 2  也类似情况2

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/779040
推荐阅读
相关标签
  

闽ICP备14008679号