DeploySharp开源发布:让C#部署深度学习模型更加简单
<h2 id="1-简介">1. 简介</h2><p> <strong>DeploySharp</strong> 是一个专为 C# 开发者设计的跨平台模型部署框架,提供从模型加载、配置管理到推理执行的端到端解决方案。其核心架构采用模块化命名空间设计,显著降低了 C# 生态中深度学习模型的集成复杂度,</p>
<h4 id="1-架构设计与功能分层">1. <strong>架构设计与功能分层</strong></h4>
<ul>
<li>根命名空间 <code>DeploySharp</code> 作为统一入口,集成模型加载、推理执行等核心功能</li>
<li>通过子命名空间(如 <code>DeploySharp.Engine</code>)实现模块化分层设计</li>
<li>关键类采用泛型设计,支持图像处理/分类/检测等多任务标准数据交互</li>
</ul>
<h4 id="2-多引擎支持与扩展能力">2. <strong>多引擎支持与扩展能力</strong></h4>
<ul>
<li>原生支持 OpenVINO(通过<code>OpenVinoSharp</code>)、ONNX Runtime 推理引擎</li>
<li>支持 YOLOv5-v12全系列模型、Anomaly及其他主流模型部署</li>
</ul>
<h4 id="3-跨平台运行时支持">3. <strong>跨平台运行时支持</strong></h4>
<ul>
<li>兼容 .NET Framework 4.8 及 .NET 6/7/8/9</li>
<li>深度集成 .NET 运行时生态(NuGet 包管理)</li>
</ul>
<h4 id="4-高性能推理能力">4. <strong>高性能推理能力</strong></h4>
<ul>
<li>异步推理支持(<code>System.Threading.Tasks</code>)</li>
<li>支持单张/批量图片推理模式</li>
<li>丰富的预处理(ImageSharp/OpenCvSharp)和后处理操作</li>
</ul>
<h4 id="5-开发者支持体系">5. <strong>开发者支持体系</strong></h4>
<ul>
<li>中英双语代码注释与技术文档</li>
<li><code>log4net</code> 分级日志系统(错误/警告/调试)</li>
<li>提供可视化结果展示方案</li>
<li>提供完善的示例代码库</li>
</ul>
<p> 该项目开源遵循 Apache License 2.0 协议,开发者可通过 QQ 群、微信公众号等渠道获取支持。未来版本计划扩展 TensorRT 支持并优化现有引擎的异构计算能力。</p>
<p> 项目链接:</p>
<pre><code>https://github.com/guojin-yan/DeploySharp.git
</code></pre>
<h2 id="2-模型支持列表">2. 模型支持列表</h2>
<table>
<thead>
<tr>
<th style="text-align: center">Model Name</th>
<th style="text-align: center">Model Type</th>
<th style="text-align: center">OpenVINO</th>
<th style="text-align: center">ONNX Runtime</th>
<th style="text-align: center">TensorRT</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center"><strong>YOLOv5</strong></td>
<td style="text-align: center">Detection</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">ing...</td>
</tr>
<tr>
<td style="text-align: center"><strong>YOLOv5</strong></td>
<td style="text-align: center">Segmentation</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">ing...</td>
</tr>
<tr>
<td style="text-align: center"><strong>YOLOv6</strong></td>
<td style="text-align: center">Detection</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">ing...</td>
</tr>
<tr>
<td style="text-align: center"><strong>YOLOv7</strong></td>
<td style="text-align: center">Detection</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">ing...</td>
</tr>
<tr>
<td style="text-align: center"><strong>YOLOv8</strong></td>
<td style="text-align: center">Detection</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">ing...</td>
</tr>
<tr>
<td style="text-align: center"><strong>YOLOv8</strong></td>
<td style="text-align: center">Segmentation</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">ing...</td>
</tr>
<tr>
<td style="text-align: center"><strong>YOLOv8</strong></td>
<td style="text-align: center">Pose</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">ing...</td>
</tr>
<tr>
<td style="text-align: center"><strong>YOLOv8</strong></td>
<td style="text-align: center">Oriented Bounding Boxes</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">ing...</td>
</tr>
<tr>
<td style="text-align: center"><strong>YOLOv9</strong></td>
<td style="text-align: center">Detection</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">ing...</td>
</tr>
<tr>
<td style="text-align: center"><strong>YOLOv9</strong></td>
<td style="text-align: center">Segmentation</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">ing...</td>
</tr>
<tr>
<td style="text-align: center"><strong>YOLOv10</strong></td>
<td style="text-align: center">Detection</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">ing...</td>
</tr>
<tr>
<td style="text-align: center"><strong>YOLOv11</strong></td>
<td style="text-align: center">Detection</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">ing...</td>
</tr>
<tr>
<td style="text-align: center"><strong>YOLOv11</strong></td>
<td style="text-align: center">Segmentation</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">ing...</td>
</tr>
<tr>
<td style="text-align: center"><strong>YOLOv11</strong></td>
<td style="text-align: center">Pose</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">ing...</td>
</tr>
<tr>
<td style="text-align: center"><strong>YOLOv11</strong></td>
<td style="text-align: center">Oriented Bounding Boxes</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">ing...</td>
</tr>
<tr>
<td style="text-align: center"><strong>YOLOv12</strong></td>
<td style="text-align: center">Detection</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">ing...</td>
</tr>
<tr>
<td style="text-align: center"><strong>Anomalib</strong></td>
<td style="text-align: center">Segmentation</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">✅</td>
<td style="text-align: center">ing...</td>
</tr>
</tbody>
</table>
<h2 id="3-nuget-package">3. NuGet Package</h2>
<h3 id="31-core-managed-libraries">3.1 Core Managed Libraries</h3>
<table>
<thead>
<tr>
<th>Package</th>
<th>Description</th>
<th>Link</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>JYPPX.DeploySharp</strong></td>
<td>DeploySharp API core libraries</td>
<td>https://www.nuget.org/packages/JYPPX.DeploySharp/</td>
</tr>
</tbody>
</table>
<h3 id="32-native-runtime-libraries">3.2 Native Runtime Libraries</h3>
<table>
<thead>
<tr>
<th>Package</th>
<th>Description</th>
<th>Link</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>JYPPX.DeploySharp.ImageSharp</strong></td>
<td>An assembly that uses ImageSharp as an image processing tool.</td>
<td>https://www.nuget.org/packages/JYPPX.DeploySharp.ImageSharp/</td>
</tr>
<tr>
<td><strong>JYPPX.DeploySharp.OpenCvSharp</strong></td>
<td>An assembly that uses OpenCvSharp as an image processing tool.</td>
<td>https://www.nuget.org/packages/JYPPX.DeploySharp.OpenCvSharp/</td>
</tr>
</tbody>
</table>
<h2 id="4-如何安装">4. 如何安装</h2>
<h3 id="41-获取方式">4.1 获取方式</h3>
<p>大家可以直接在NuGet Gallery官网上进行查找使用:</p>
<p><img src="https://img2024.cnblogs.com/blog/2933426/202510/2933426-20251002225043382-1580173801.png"></p>
<p>或者在Visual Studio的NuGet程序包中进行查找安装:</p>
<p><img src="https://img2024.cnblogs.com/blog/2933426/202510/2933426-20251002225043372-1499450288.png"></p>
<h3 id="42-nuget-package组合使用方式">4.2 NuGet Package组合使用方式</h3>
<p> <strong>DeploySharp</strong>包含了OpenCvSharp、ImageSharp等图像处理方式,同时支持OpenVINO、ONNX Runtime模型部署引擎,因此用户可以根据自己需求自行组合,并安装对应的NuGet Package即可开箱使用。以下总结了常用的一些使用情况的NuGet Package安装场景:</p>
<ul>
<li><strong>OpenVINO推理+OpenCvSharp图像处理</strong></li>
</ul>
<pre><code class="language-shell">JYPPX.DeploySharp
JYPPX.DeploySharp.OpenCvSharp
OpenVINO.runtime.win
OpenCvSharp4.runtime.win
</code></pre>
<ul>
<li><strong>OpenVINO推理+ImageSharp图像处理</strong></li>
</ul>
<pre><code class="language-shell">JYPPX.DeploySharp
JYPPX.DeploySharp.ImageSharp
OpenVINO.runtime.win
</code></pre>
<ul>
<li><strong>ONNX Runtime推理+OpenCvSharp图像处理</strong></li>
</ul>
<pre><code class="language-shell">JYPPX.DeploySharp
JYPPX.DeploySharp.OpenCvSharp
OpenCvSharp4.runtime.win
</code></pre>
<ul>
<li><strong>ONNX Runtime推理+ImageSharp图像处理</strong></li>
</ul>
<pre><code class="language-shell">JYPPX.DeploySharp
JYPPX.DeploySharp.OpenCvSharp
</code></pre>
<ul>
<li><strong>ONNX Runtime(OpenVINO加速)推理+ImageSharp图像处理</strong></li>
</ul>
<pre><code class="language-shell">JYPPX.DeploySharp
JYPPX.DeploySharp.ImageSharp
Intel.ML.OnnxRuntime.OpenVino
</code></pre>
<ul>
<li><strong>ONNX Runtime(DML加速)推理+ImageSharp图像处理</strong></li>
</ul>
<pre><code class="language-shell">JYPPX.DeploySharp
JYPPX.DeploySharp.ImageSharp
Microsoft.ML.OnnxRuntime.DirectML
</code></pre>
<ul>
<li><strong>ONNX Runtime(CUDA加速)推理+ImageSharp图像处理</strong></li>
</ul>
<pre><code class="language-shell">JYPPX.DeploySharp
JYPPX.DeploySharp.ImageSharp
Microsoft.ML.OnnxRuntime.DirectML
</code></pre>
<p> 由于使用CUDA对ONNX Runtime加速受GPU设备型号以及软件版本影响,因此需要按照ONNX Runtime官方提供的版本对应关系进行下载使用,其中ONNX Runtime与CUDA、cuDNN对应关系请参考一下以下链接:</p>
<pre><code>https://runtime.onnx.org.cn/docs/execution-providers/CUDA-ExecutionProvider.html#requirements
</code></pre>
<p> 以上所列出的使用方式均可以通过NuGet Package一键安装,同样的,ONNX Runtime还支持更多加速方式,但需要用户自己进行代码构建,其构建流程与方式,参考官方教程即可,链接为:</p>
<pre><code>https://runtime.onnx.org.cn/docs/execution-providers/
</code></pre>
<h2 id="5-开始使用">5. 开始使用</h2>
<p> 如果你不知道如何使用,通过下面代码简单了解使用方法。</p>
<h3 id="51-imagesharp图像处理">5.1 ImageSharp图像处理</h3>
<pre><code class="language-c#">using DeploySharp.Data;
using DeploySharp.Engine;
using DeploySharp.Model;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
using System;
namespace DeploySharp.ImageSharp.Demo
{
public class YOLOv5DetDemo
{
public static void Run()
{
// 模型和测试图片可以前往QQ群(945057948)下载
// 将下面的模型路径替换为你自己的模型路径
string modelPath = @"E:\Model\Yolo\yolov5s.onnx";
// 将下面的图片路径替换为你自己的图片路径
string imagePath = @"E:\Data\image\bus.jpg";
Yolov5DetConfig config = new Yolov5DetConfig(modelPath);
//config.SetTargetInferenceBackend(InferenceBackend.OnnxRuntime);
Yolov5DetModel model = new Yolov5DetModel(config);
var img = Image.Load(imagePath);
var result = model.Predict(img);
model.ModelInferenceProfiler.PrintAllRecords();
var resultImg = Visualize.DrawDetResult(result, img as Image<Rgb24>, new VisualizeOptions(1.0f));
resultImg.Save(@$"./result_{ModelType.YOLOv5Det.ToString()}.jpg");
}
}
}
</code></pre>
<h3 id="52-opencvsharp图像处理">5.2 OpenCvSharp图像处理</h3>
<pre><code class="language-c#">using OpenCvSharp;
using System.Diagnostics;
using DeploySharp.Model;
using DeploySharp.Data;
using DeploySharp.Engine;
using DeploySharp;
using System.Net.Http.Headers;
namespace DeploySharp.OpenCvSharp.Demo
{
public class YOLOv5DetDemo
{
public static void Run()
{
// 模型和测试图片可以前往QQ群(945057948)下载
// 将下面的模型路径替换为你自己的模型路径
string modelPath = @"E:\Model\Yolo\yolov5s.onnx";
// 将下面的图片路径替换为你自己的图片路径
string imagePath = @"E:\Data\image\bus.jpg";
Yolov5DetConfig config = new Yolov5DetConfig(modelPath);
config.SetTargetInferenceBackend(InferenceBackend.OnnxRuntime);
Yolov5DetModel model = new Yolov5DetModel(config);
Mat img = Cv2.ImRead(imagePath);
var result = model.Predict(img);
model.ModelInferenceProfiler.PrintAllRecords();
var resultImg = Visualize.DrawDetResult(result, img, new VisualizeOptions(1.0f));
Cv2.ImShow("image", resultImg);
Cv2.WaitKey();
}
}
}
</code></pre>
<h2 id="6应用案例">6.应用案例</h2>
<p> 获取更多应用案例请参考:</p>
<table>
<thead>
<tr>
<th style="text-align: center">案例类型</th>
<th style="text-align: center">框架</th>
<th style="text-align: center">链接</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center">桌面应用</td>
<td style="text-align: center">.NET Framework 4.8</td>
<td style="text-align: center">https://github.com/guojin-yan/DeploySharp/tree/DeploySharpV1.0/applications/.NET Framework 4.8/DeploySharp.ImageSharp-ApplicationPlatform</td>
</tr>
<tr>
<td style="text-align: center">桌面应用</td>
<td style="text-align: center">.NET 6.0</td>
<td style="text-align: center">https://github.com/guojin-yan/DeploySharp/tree/DeploySharpV1.0/applications/.NET 6.0/DeploySharp.OpenCvSharp-ApplicationPlatform</td>
</tr>
<tr>
<td style="text-align: center">控制台应用</td>
<td style="text-align: center">.NET Framework 4.8、.NET 6.0-9.0</td>
<td style="text-align: center">https://github.com/guojin-yan/DeploySharp/tree/DeploySharpV1.0/samples</td>
</tr>
</tbody>
</table>
<p><img src="https://img2024.cnblogs.com/blog/2933426/202510/2933426-20251002225043424-970313847.png"></p>
<p> 后续会推出更多的应用案例使用介绍,敬请关注。</p>
<h2 id="7-api文档">7. API文档</h2>
<p> 如果想了解更多信息,可以参阅:DeploySharp API Documented</p>
<p><img src="https://img2024.cnblogs.com/blog/2933426/202510/2933426-20251002225043361-1579933880.png"></p>
<h2 id="8-贡献">8. 贡献</h2>
<p> 如果您对<strong>DeploySharp</strong>在C#使用感兴趣,有兴趣对开源社区做出自己的贡献,欢迎加入我们,一起开发<strong>DeploySharp</strong>。</p>
<p> 如果你对该项目有一些想法或改进思路,欢迎联系我们,指导下我们的工作。</p>
<h2 id="9--许可证书">9.许可证书</h2>
<p> 本项目的发布受Apache 2.0 license许可认证。</p>
<p> 最后如果各位开发者在使用中有任何问题,欢迎大家与我联系。</p>
<p><img src="https://img2024.cnblogs.com/blog/2933426/202510/2933426-20251002225043380-766173407.png"></p><br><br>
来源:https://www.cnblogs.com/guojin-blogs/p/19124118
頁:
[1]