1. YOLO26与ONNX Runtime集成概述
YOLO26作为Ultralytics推出的新一代目标检测模型,其最显著的特点是采用了端到端的检测架构,完全移除了传统YOLO系列模型中的NMS(非极大值抑制)后处理步骤。这种设计使得模型输出直接就是最终的检测结果,格式为(N, 300, 6)的张量,其中N是批次大小,300是每张图像的最大检测数量,6对应[x1, y1, x2, y2, confidence, class_id]。
在C#环境中使用ONNX Runtime加载和运行YOLO26模型,相比Python环境需要特别注意内存管理和张量处理的细节。ONNX Runtime提供了C# API,可以高效地执行模型推理,但需要开发者手动处理输入输出的张量数据。典型的流程包括:加载ONNX模型、创建推理会话、准备输入张量、运行推理以及解析输出结果。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与项目配置
2.1 开发环境要求
要开始C# ONNX YOLO26检测项目,需要准备以下环境:
- Visual Studio 2019或更高版本(建议使用2022)
- .NET Core 3.1或.NET 5+运行时
- ONNX Runtime库(通过NuGet安装)
- OpenCVSharp(可选,用于图像处理)
通过NuGet安装必要的包:
bash复制Install-Package Microsoft.ML.OnnxRuntime
Install-Package Microsoft.ML.OnnxRuntime.Gpu # 如需GPU支持
Install-Package OpenCvSharp4
Install-Package OpenCvSharp4.runtime.win
2.2 YOLO26模型准备
首先需要获取YOLO26模型文件。可以通过以下方式之一:
- 直接从Ultralytics官方仓库下载预训练模型:
python复制from ultralytics import YOLO
model = YOLO('yolo26n.pt') # 加载官方模型
model.export(format='onnx') # 导出为ONNX格式
- 使用自定义数据训练后导出:
python复制model = YOLO('yolo26n.pt')
model.train(data='custom.yaml', epochs=100)
model.export(format='onnx', dynamic=False) # 静态形状更易部署
导出的ONNX模型应检查其输入输出形状:
- 输入:1x3x640x640(批次x通道x高度x宽度)
- 输出:1x300x6(端到端检测格式)
3. C# ONNX Runtime集成实现
3.1 模型加载与会话创建
在C#中加载ONNX模型并创建推理会话:
csharp复制using Microsoft.ML.OnnxRuntime;
using Microsoft.ML.OnnxRuntime.Tensors;
var modelPath = "yolo26n.onnx";
var sessionOptions = new SessionOptions();
sessionOptions.GraphOptimizationLevel = GraphOptimizationLevel.ORT_ENABLE_ALL;
// 根据硬件选择执行提供程序
if (OrtEnv.Instance().GetAvailableProviders().Contains("CUDAExecutionProvider"))
{
sessionOptions.AppendExecutionProvider_CUDA();
}
else
{
sessionOptions.AppendExecutionProvider_CPU();
}
var session = new InferenceSession(modelPath, sessionOptions);
3.2 输入数据预处理
YOLO26要求输入图像为640x640分辨率,BGR格式,并做归一化处理:
csharp复制using OpenCvSharp;
Mat Prepro
