基于ONNXRuntime C#实现的高性能YOLO推理框架
·
功能特色
- 支持所有YOLO任务:目标检测、图片分类、实例分割、姿势估计、OBB
- 支持多种部署方案:CPU, CUDA / TensorRT, OpenVINO, CoreML, DirectML
- 可以批量检测图片,性能大幅优于单线程串行执行
- 图像处理使用OpenCVSharp
- 推理引擎:ONNX Runtime 是一个跨平台的机器学习模型加速器
示例Demo
| Object Detection | Image Classification |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
使用示例
1 导出模型为onnx格式

from ultralytics import YOLO
# Load a model
model = YOLO('path/to/best.pt')
# Export the model to ONNX format
model.export(format='onnx')

2 YoloSharpOnnx初始化
安装Nuget 包YoloSharpOnnx, OnnxRuntime, OpenCvSharp4.runtime
CPU推理
dotnet add package YoloSharpOnnx dotnet add package OpenCvSharp4.runtime.win dotnet add package Microsoft.ML.OnnxRuntime
using YoloSharp yolo = new YoloSharp(new ExecutionProviderCPU("yolo11n.onnx"));
CoreML推理
dotnet add package YoloSharpOnnx dotnet add package OpenCvSharp4.runtime.osx.10.15-x64 dotnet add package Microsoft.ML.OnnxRuntime
using YoloSharp yolo = new YoloSharp(new ExecutionProviderCoreML("yolo11n.onnx"));
CUDA/TensorRT推理
dotnet add package YoloSharpOnnx dotnet add package OpenCvSharp4.runtime.win dotnet add package Microsoft.ML.OnnxRuntime.Gpu.Windows
using YoloSharp yolo = new YoloSharp(new ExecutionProviderCUDA("yolo11n.onnx",0));
using YoloSharp yolo = new YoloSharp(new ExecutionProviderTensorRT("yolo11n.onnx",0));
DirectML推理
dotnet add package YoloSharpOnnx dotnet add package OpenCvSharp4.runtime.win dotnet add package Microsoft.ML.OnnxRuntime.DirectML
using YoloSharp yolo = new YoloSharp(new ExecutionProviderDirectML("yolo11n.onnx",0));
OpenVINO Inference
dotnet add package YoloSharpOnnx dotnet add package OpenCvSharp4.runtime.win dotnet add package Intel.ML.OnnxRuntime.OpenVino
using YoloSharp yolo = new YoloSharp(new ExecutionProviderOpenVINO("yolo11n.onnx", IntelDeviceType.NPU));
基本的API,加载模型并进行预测

using Mat image = Cv2.ImRead("bus.jpg");
using YoloSharp yolo = new YoloSharp(new ExecutionProviderCPU("yolo11n.onnx"));
List<DetectionResult> res = yolo.RunDetect(image);
yolo.DrawDetections(image,res);
Cv2.ImWrite("bus_res.jpg", image);
string printString = res.Summary();
Console.WriteLine(printString);

性能测试API

using Mat image = Cv2.ImRead("bus.jpg");
using YoloSharp yolo = new YoloSharp(new ExecutionProviderDirectML("yolo11n.onnx",1));
var res = yolo.RunDetectWithTime(item.FullName);
Console.WriteLine($"{res.ToString()}, {res.SpeedResult.ToString()}");

配置参数

using Mat image = Cv2.ImRead("bus.jpg");
using YoloSharp yolo = new YoloSharp(new ExecutionProviderCPU("yolo11n.onnx"));
yolo.YoloConfiguration.IoU = 0.4f;
yolo.YoloConfiguration.Confidence = 0.3f;
yolo.YoloConfiguration.ResizeAlgorithm = InterpolationFlags.Linear;
yolo.YoloConfiguration.ImageExtsBatch = [".jpg", ".png"];
var res = yolo.RunDetect(image);

批量处理API
更多推荐













所有评论(0)