DeploySharp是一个专为C#开发者设计的跨平台模型部署框架,由椒颜皮皮虾团队开发并开源。这个框架的核心目标是简化计算机视觉模型从训练到实际部署的全流程,特别是在工业检测、安防监控、自动驾驶等需要高性能推理的场景中表现出色。
提示:DeploySharp遵循Apache 2.0许可协议,这意味着开发者可以自由地将其用于商业项目而无需担心授权问题。
DeploySharp采用了清晰的模块化设计,主要分为以下几个核心组件:
这种分层设计使得框架具有很好的扩展性,开发者可以轻松添加新的模型类型或推理引擎支持。
DeploySharp原生支持三种主流推理引擎,为不同硬件环境提供最优解决方案:
| 推理引擎 | 支持设备 | 性能特点 | 适用场景 |
|---|---|---|---|
| OpenVINO | CPU/GPU/NPU | Intel硬件优化 | Intel平台部署 |
| ONNX Runtime | CPU/GPU(CUDA/DirectML) | 跨平台兼容性好 | 多平台兼容需求 |
| TensorRT | NVIDIA GPU | 极致性能优化 | NVIDIA GPU高性能推理 |
框架提供了两种图像处理实现,满足不同场景需求:
csharp复制// 使用ImageSharp(纯C#实现)
var config = new ModelConfig {
ImageProcessor = ImageProcessorType.ImageSharp
};
// 使用OpenCvSharp(OpenCV封装)
var config = new ModelConfig {
ImageProcessor = ImageProcessorType.OpenCvSharp
};
ImageSharp特点:
OpenCvSharp特点:
DeploySharp兼容广泛的.NET运行时环境:
这种广泛的运行时支持确保了框架可以在从传统Windows应用到最新跨平台应用的各种环境中运行。
DeploySharp为YOLOv26系列模型提供了全方位的支持,涵盖了计算机视觉中最常见的几种任务类型:
| 模型类型 | 功能描述 | 典型应用场景 |
|---|---|---|
| YOLOv26Det | 目标检测 | 安防监控、工业质检 |
| YOLOv26Seg | 实例分割 | 医学图像分析、自动驾驶 |
| YOLOv26Pose | 人体姿态估计 | 动作识别、体育分析 |
| YOLOv26Obb | 旋转框检测 | 遥感图像、文档分析 |
DeploySharp为YOLOv26设计了清晰的三层架构:
接口层:定义统一的模型接口
csharp复制public interface IYolov26Model {
Task<DetectionResult[]> PredictAsync(Image input);
// 其他通用方法...
}
配置层:提供灵活的模型参数设置
csharp复制public class Yolov26Config {
public float ConfidenceThreshold { get; set; } = 0.5f;
public float NmsThreshold { get; set; } = 0.4f;
// 其他配置项...
}
实现层:针对不同后端的具体实现
这种设计使得代码具有很好的复用性和扩展性,新模型类型的添加变得非常简单。
首先需要通过NuGet安装必要的包:
bash复制# 基础包
Install-Package JYPPX.DeploySharp
# 图像处理扩展(二选一)
Install-Package JYPPX.DeploySharp.ImageSharp
Install-Package JYPPX.DeploySharp.OpenCvSharp
# 推理引擎运行时(根据需要选择)
Install-Package JYPPX.TensorRT.CSharp.API.runtime.win-x64.cuda12
以下是使用ImageSharp和TensorRT进行目标检测的完整示例:
csharp复制using DeploySharp;
using DeploySharp.Model;
using SixLabors.ImageSharp;
public class ObjectDetectionDemo {
public static void Run() {
// 1. 初始化配置
var config = new Yolov26DetConfig("yolo26s.engine") {
MaxBatchSize = 2,
ConfidenceThreshold = 0.5f
};
config.SetTargetInferenceBackend(InferenceBackend.TensorRT);
// 2. 加载模型
var model = new Yolov26DetModel(config);
// 3. 加载图像
using var image = Image.Load("test.jpg");
// 4. 执行推理
var results = model.Predict(image);
// 5. 结果可视化
var visualized = Visualize.DrawDetResult(results, image);
visualized.Save("result.jpg");
}
}
注意:TensorRT的.engine文件是硬件相关的,在不同型号GPU上需要分别生成。
首次推理通常较慢,因为需要初始化各种资源:
csharp复制// 预热推理
for(int i = 0; i < 3; i++) {
model.Predict(warmupImage);
}
充分利用GPU的并行计算能力:
csharp复制var batchImages = new List<Image> { img1, img2, img3 };
var batchResults = model.Predict(batchImages);
根据硬件环境选择最优推理引擎:
| 硬件环境 | 推荐引擎 | 配置示例 |
|---|---|---|
| Intel CPU | OpenVINO | SetTargetInferenceBackend(OpenVINO) |
| NVIDIA GPU | TensorRT | SetTargetInferenceBackend(TensorRT) |
| 跨平台需求 | ONNX Runtime | SetTargetInferenceBackend(OnnxRuntime) |
症状:初始化时抛出异常,提示模型格式不正确
解决方案:
症状:FPS远低于预期
排查步骤:
csharp复制model.ModelInferenceProfiler.PrintAllRecords();
症状:长时间运行后内存持续增长
解决方法:
可以重写默认的预处理流程:
csharp复制public class CustomModel : Yolov26DetModel {
protected override Image Preprocess(Image input) {
// 自定义预处理逻辑
return base.Preprocess(input);
}
}
组合不同模型实现复杂功能:
csharp复制// 先检测再分割
var detections = detector.Predict(image);
var masks = segmenter.Predict(image, detections);
无需重启服务即可切换模型:
csharp复制model.Reload("new_model.engine");
对于需要持续运行的应用程序,建议实现以下机制:
DeploySharp拥有丰富的扩展包生态:
| 包名 | 功能描述 |
|---|---|
| JYPPX.DeploySharp.ImageSharp | ImageSharp图像处理扩展 |
| JYPPX.DeploySharp.OpenCvSharp | OpenCV图像处理扩展 |
| JYPPX.DeploySharp.Web | Web API集成支持 |
| JYPPX.DeploySharp.GPU | 高级GPU管理工具 |
根据官方信息,DeploySharp未来将重点关注:
对于需要特定功能的企业用户,可以考虑直接参与开源项目贡献或联系核心开发团队获取定制支持。