DeploySharp 全面支持 YOLO26 系列,助力開發者快速部署落地應用
一、DeploySharp 簡介
DeploySharp 是一個專為 C# 開發者設計的跨平台模型部署框架,旨在提供從模型加載、配置管理到推理執行的端到端解決方案。該項目由 椒顏皮皮蝦開發並開源,遵循 Apache 2.0 許可協議,目前在 GitHub 上獲得了廣泛關注。
DeploySharp 採用了清晰的模塊化架構設計:
- 根命名空間:
DeploySharp作為統一入口,集成模型加載、推理執行等核心功能 - 子命名空間:通過
DeploySharp.Engine、DeploySharp.Data、DeploySharp.Model等子命名空間實現模塊化分層 - 泛型設計:關鍵類採用泛型設計,支持圖像處理、分類、檢測等多任務標準數據交互
項目地址:
https://github.com/guojin-yan/DeploySharp.git
1. 多引擎支持
DeploySharp 原生支持三種主流推理引擎:
| 推理引擎 | 狀態 | 支持設備 | 性能特點 |
|---|---|---|---|
| OpenVINO | 完成 | CPU、GPU0(集顯)、GPU1(獨顯)、NPU | Intel 硬件優化 |
| ONNX Runtime | 完成 | CPU、GPU(CUDA/DML) | 跨平台兼容性好 |
| TensorRT | 完成 | GPU(TensorRT) | NVIDIA GPU 極致性能 |
2. 圖像處理支持
框架提供了兩種圖像處理庫的選擇:
| 圖像處理庫 | 特點 | 適用場景 |
|---|---|---|
| ImageSharp | 純 C# 實現,跨平台兼容性好,無原生依賴 | 跨平台應用、Web 應用 |
| OpenCvSharp | OpenCV 的 C# 封裝,功能強大,性能優異 | 桌面應用、高性能場景 |
3. 跨平台運行時支持
DeploySharp 兼容了廣泛的 .NET 運行時環境:
- .NET Framework 4.8 / 4.8.1
- .NET Core 3.1
- .NET 5.0
- .NET 6.0
- .NET 7.0
- .NET 8.0
- .NET 9.0
- .NET 10.0
4. NuGet 包生態
4.1 核心包
| 包名 | 描述 | NuGet 鏈接 |
|---|---|---|
| JYPPX.DeploySharp | DeploySharp API 核心庫 |
核心包功能:
- 推理引擎抽象接口
- 數據結構定義
- 模型配置基類
- 性能分析工具
- 日誌系統
- 可視化基礎功能
4.2 圖像處理擴展包
| 包名 | 描述 | NuGet 鏈接 |
|---|---|---|
| JYPPX.DeploySharp.ImageSharp | 使用 ImageSharp 的圖像處理擴展 | |
| JYPPX.DeploySharp.OpenCvSharp | 使用 OpenCvSharp 的圖像處理擴展 |
擴展包功能:
- 圖像加載和保存
- 圖像預處理實現
- 可視化功能實現
- 批量處理支持
5. 模型支持列表
截至目前,DeploySharp 已經完成了以下模型的封裝,更多模型持續更新中:
| Model Name | Model Type | OpenVINO | ONNX Runtime | TensorRT |
|---|---|---|---|---|
| YOLOv5 | Detection | ✅ | ✅ | ✅ |
| YOLOv5 | Segmentation | ✅ | ✅ | ✅ |
| YOLOv6 | Detection | ✅ | ✅ | ✅ |
| YOLOv7 | Detection | ✅ | ✅ | ✅ |
| YOLOv8 | Detection | ✅ | ✅ | ✅ |
| YOLOv8 | Segmentation | ✅ | ✅ | ✅ |
| YOLOv8 | Pose | ✅ | ✅ | ✅ |
| YOLOv8 | Oriented Bounding Boxes | ✅ | ✅ | ✅ |
| YOLOv9 | Detection | ✅ | ✅ | ✅ |
| YOLOv9 | Segmentation | ✅ | ✅ | ✅ |
| YOLOv10 | Detection | ✅ | ✅ | ✅ |
| YOLOv11 | Detection | ✅ | ✅ | ✅ |
| YOLOv11 | Segmentation | ✅ | ✅ | ✅ |
| YOLOv11 | Pose | ✅ | ✅ | ✅ |
| YOLOv11 | Oriented Bounding Boxes | ✅ | ✅ | ✅ |
| YOLOv12 | Detection | ✅ | ✅ | ✅ |
| Anomalib | Segmentation | ✅ | ✅ | ✅ |
| PP-YOLOE | Detection | ✅ | ✅ | ✅ |
| DEIMv2 | Detection | ✅ | ✅ | ✅ |
| RFDETR | Detection | ✅ | ✅ | ✅ |
| RFDETR | Segmentation | ✅ | ✅ | ✅ |
| RTDETR | Detection | ✅ | ✅ | ✅ |
| YOLO26 | Detection | ✅ | ✅ | ✅ |
| YOLO26 | Segmentation | ✅ | ✅ | ✅ |
| YOLO26 | Pose | ✅ | ✅ | ✅ |
| YOLO26 | Oriented Bounding Boxes | ✅ | ✅ | ✅ |
二、DeploySharp 對 YOLOv26 的全面支持
DeploySharp 框架為 YOLOv26 系列模型提供了全方位的支持,涵蓋了目標檢測、實例分割、姿態估計和旋轉框檢測四種主要任務類型。
2.1 支持的 YOLOv26 模型類型
| 模型類型 | 功能描述 | 枚舉值 | 配置類 |
|---|---|---|---|
| YOLOv26Det | 目標檢測 | ModelType.YOLOv26Det |
Yolov26DetConfig |
| YOLOv26Seg | 實例分割 | ModelType.YOLOv26Seg |
Yolov26SegConfig |
| YOLOv26Pose | 人體姿態估計 | ModelType.YOLOv26Pose |
Yolov26PoseConfig |
| YOLOv26Obb | 旋轉框檢測 | ModelType.YOLOv26Obb |
Yolov26ObbConfig |
2.2 架構設計
DeploySharp 為 YOLOv26 提供了三層架構設計:
接口層 (IYolov26XxxModel)
在核心庫 DeploySharp 中定義了統一的接口:
// YOLOv26 檢測接口
// IYolov26DetModel 繼承自 IYolov10DetModel
// 這種設計使得 YOLOv26 可以複用 YOLOv10 的成熟實現
public abstract class IYolov26DetModel : IYolov10DetModel
{
/// <summary>
/// 構造函數,接收模型配置
/// </summary>
/// <param name="config">YOLOv26 檢測模型配置對象</param>
public IYolov26DetModel(Yolov26DetConfig config) : base(config)
{
// 使用日誌系統記錄模型初始化信息
MyLogger.Log.Info($"Initializing {this.GetType().Name}, Config:\n{config}");
}
}
配置層 (Yolov26XxxConfig)
每種模型類型都有對應的配置類,提供靈活的參數設置:
// YOLOv26 檢測配置類
// 繼承自 Yolov10DetConfig,複用 YOLOv10 的成熟配置
public class Yolov26DetConfig : Yolov10DetConfig
{
/// <summary>
/// 默認構造函數
/// </summary>
public Yolov26DetConfig() { }
/// <summary>
/// 帶模型路徑的構造函數
/// 自動設置合理的默認參數
/// </summary>
/// <param name="modelPath">模型文件路徑</param>
public Yolov26DetConfig(string modelPath)
{
...
}
}
實現層 (Yolov26XxxModel)
分別提供 ImageSharp 和 OpenCvSharp 兩種實現,開發者可以根據需求選擇。
2.3 類繼承關係圖
YoloDetConfig (基類)
├── Yolov8DetConfig
├── Yolov10DetConfig
└── Yolov26DetConfig (繼承自 Yolov10DetConfig)
YoloModel (基類)
├── Yolov8DetModel
├── Yolov10DetModel
└── Yolov26DetModel (繼承自 Yolov10DetModel)
這種繼承設計的優勢:
- 代碼複用:YOLOv26 可以複用 YOLOv10 的成熟實現
- 一致性:保持與其他 YOLO 版本的 API 一致性
- 易維護:共享的代碼邏輯集中管理
三、YOLOv26 目標檢測代碼實現
3.1 使用 ImageSharp 作為圖像處理庫 + TensorRT 推理後端
(1)NuGet 包安裝
使用 ImageSharp 作為圖像處理庫、TensorRT 作為推理後端時,需要安裝以下核心包:
DeploySharp 基礎庫及擴展庫:
JYPPX.DeploySharp
JYPPX.DeploySharp.ImageSharp
TensorRT Runtime 庫:
JYPPX.TensorRT.CSharp.API.runtime.win-x64.cuda11
或
JYPPX.TensorRT.CSharp.API.runtime.win-x64.cuda12
注意:TensorRT Runtime 庫的版本需根據本地設備安裝的 CUDA 版本進行選擇。
(2)代碼實現
以下代碼可直接複製運行:
using DeploySharp.Model; // 引入模型相關定義
using DeploySharp.Data; // 引入數據處理相關
using DeploySharp.Engine; // 引入推理引擎核心
using DeploySharp; // 引入 DeploySharp 主庫
using SixLabors.ImageSharp; // ImageSharp 圖像處理庫
using SixLabors.ImageSharp.PixelFormats; // ImageSharp 像素格式
namespace DeploySharp.ImageSharp.Demo
{
/// <summary>
/// YOLO26目標檢測演示類
/// 該類展示瞭如何加載 TensorRT 引擎文件,對圖像進行推理並可視化結果。
/// </summary>
public class YOLOv26DetDemo
{
public static void Run()
{
// ==========================================
// 1. 路徑配置
// ==========================================
// 模型下載提示:模型和測試圖片可以前往QQ羣(945057948)下載
// 設置 .engine 文件路徑。
// 注意:TensorRT 的 .engine 文件是硬件相關的,即在 RTX 3090 上生成的 engine 通常不能在 RTX 4090 上運行。
string modelPath = @"D:\Program Files\TensorRT-10.13.0.35-cu11\bin\yolo26s.engine";
// 設置待推理的圖片路徑
string imagePath = @"E:\Data\image\bus.jpg";
// ==========================================
// 2. 模型配置初始化
// ==========================================
// 創建 YOLO26 的配置對象,傳入模型路徑
Yolov26DetConfig config = new Yolov26DetConfig(modelPath);
// 設置最大批處理大小。
// 即使只推理一張圖片,設置適當的 BatchSize 有時也能利用 GPU 並行能力。
// 此處設為 2 表示引擎內部最大可以一次處理 2 張圖,但要首先保證模型支持。
config.MaxBatchSize = 2;
// 顯式指定推理後端為 TensorRT。
// DeploySharp 支持多種後端(如 ONNX Runtime, OpenVINO 等),這裏強制使用 TensorRT 以獲得最佳性能。
config.SetTargetInferenceBackend(InferenceBackend.TensorRT);
// ==========================================
// 3. 類別字典定義
// ==========================================
// COCO 數據集的 80 個類別名稱列表
// YOLO 模型通常輸出的是類別的索引(0-79),我們需要將其映射為人類可讀的字符串。
List<string> d = new List<string> { "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" };
// 將列表轉換為字典,Key 為索引,Value 為類別名稱
Dictionary<int, string> CategoryDict = new Dictionary<int, string>();
for (int i = 0; i < d.Count; i++)
{
CategoryDict[i] = d[i];
}
// 將類別字典賦值給配置對象,用於後續結果解析
config.CategoryDict = CategoryDict;
// ==========================================
// 4. 模型實例化
// ==========================================
// 根據配置初始化檢測器模型。
// 此步驟會加載 engine 文件到內存,並初始化 GPU 上下文。
Yolov26DetModel model = new Yolov26DetModel(config);
// 使用 SixLabors.ImageSharp 加載圖片。
// Image.Load 會自動根據文件擴展名解碼圖片。
var img = Image.Load(imagePath);
// ==========================================
// 5. 模型推理與性能測試
// ==========================================
// 執行第一次推理。
// 注意:TensorRT 的首次推理通常包含 Kernel 初始化等開銷,速度會比後續推理慢。
DetResult[] result = model.Predict(img);
// 執行第二次推理。
// 這次推理的時間更能代表模型在實際場景中的平均推理速度。
result = model.Predict(img);
// 執行第三次推理(可選),用於進一步取平均值或確保穩定性。
result = model.Predict(img);
// 打印推理性能分析記錄。
// 這通常會輸出預處理、推理、後端處理各階段的耗時(毫秒級)。
model.ModelInferenceProfiler.PrintAllRecords();
// 初始化一個列表,雖然本例未直接使用,但在處理多圖結果時可能會用到。
List<Image<Rgb24>> resultsMat = new List<Image<Rgb24>>();
// ==========================================
// 6. 結果可視化與保存
// ==========================================
// 將推理結果繪製在原圖上。
// Visualize.DrawDetResult 會根據 DetResult 中的座標和置信度畫框和文字。
// 需要將 img 強制轉換為 Image<Rgb24>,因為 DrawDetResult 通常需要特定的像素格式。
var resultImg = Visualize.DrawDetResult(result, (Image<Rgb24>)img, new VisualizeOptions(1.0f));
// 保存帶有檢測框的圖片到當前目錄下。
// 文件名包含配置的模型類型,便於區分不同模型的結果。
resultImg.Save(@$"./result_{config.ModelType}.jpg");
}
}
}
(3)代碼詳解
-
配置模型參數:
Yolov26DetConfig config = new Yolov26DetConfig(modelPath); config.MaxBatchSize = 2; config.SetTargetInferenceBackend(InferenceBackend.TensorRT);- 創建配置對象,使用 TensorRT 引擎進行推理
- 設置最大批量大小為 2,支持最多 2 張圖片的批量推理
-
創建模型實例:
Yolov26DetModel model = new Yolov26DetModel(config);模型實例化時會自動加載 .engine 文件並初始化 TensorRT 引擎。
-
執行推理:
DetResult[] result = model.Predict(img);Predict()方法返回檢測結果數組,每個元素包含邊界框、置信度和類別信息。 -
性能分析:
model.ModelInferenceProfiler.PrintAllRecords();打印詳細的性能統計,包括預處理、推理、後處理各階段的耗時。
(4)結果展示
控制枱打印輸出:

推理結果圖片:

3.2 使用 OpenCvSharp做圖像處理庫+ONNX Runtime推理後端
(1)NuGet 包安裝
使用 OpenCvSharp 作為圖像處理庫、ONNX Runtime 作為推理後端時,需要安裝以下核心包:
DeploySharp 基礎庫及擴展庫:
JYPPX.DeploySharp
JYPPX.DeploySharp.OpenCvSharp
OpenCvSharp Runtime 庫:
OpenCvSharp4.runtime.win
可選加速包:ONNX Runtime 支持多種推理加速方式,除默認 CPU 加速外,可根據需求安裝以下 NuGet 包:
| 加速方式 | NuGet 包名 |
|---|---|
| OpenVINO 加速 | Intel.ML.OnnxRuntime.OpenVino |
| DirectML 加速 | Microsoft.AI.DirectML |
| CUDA 加速 | Microsoft.ML.OnnxRuntime.Gpu |
更多加速方式請參考 ONNX Runtime 官方文檔。本節以 DirectML 為例進行演示。
(2)代碼實現
推理代碼如下所示,可直接複製運行:
using OpenCvSharp; // 引入 OpenCvSharp,用於圖像的讀取、顯示和矩陣操作
using DeploySharp.Model; // 引入模型定義和配置類
using DeploySharp.Data; // 引入數據處理相關的類
using DeploySharp.Engine; // 引入推理引擎核心接口和枚舉
using DeploySharp; // 引入 DeploySharp 主庫和可視化工具
namespace DeploySharp.OpenCvSharp.Demo
{
/// <summary>
/// YOLO26 目標檢測演示 (基於 ONNX Runtime + OpenCvSharp)
/// 本示例展示瞭如何加載 ONNX 模型,並配置使用 DirectML 在 GPU 上進行推理。
/// </summary>
public class Yolov26DetDemo
{
public static void Run()
{
// ==========================================
// 1. 路徑配置
// ==========================================
// 模型下載提示:模型和測試圖片可以前往QQ羣(945057948)下載
// 注意:此處加載的是標準的 .onnx 模型文件,而不是 TensorRT 的 .engine 文件。
// ONNX 模型具有良好的跨平台特性。
string modelPath = @"E:\Model\yolov28\yolo26s.onnx";
// 設置待檢測的圖片路徑
string imagePath = @"E:\Data\image\bus.jpg";
// ==========================================
// 2. 模型配置與推理後端設置
// ==========================================
// 創建 YOLO26 的配置對象,傳入模型路徑
Yolov26DetConfig config = new Yolov26DetConfig(modelPath);
// [關鍵步驟] 設置推理後端為 ONNX Runtime。
// 這意味着模型將通過 ONNX Runtime 進行加載和執行,而不是 TensorRT。
config.SetTargetInferenceBackend(InferenceBackend.OnnxRuntime);
// 設置目標設備類型為 GPU 0。
// 這是一個邏輯設定,具體執行取決於 ONNX Runtime 的提供程序。
config.SetTargetDeviceType(DeviceType.GPU0);
// [關鍵步驟] 設置 ONNX Runtime 的具體執行提供程序為 DML (DirectML)。
// DirectML 是 Windows 上的高性能硬件加速接口,支持 AMD、NVIDIA 和 Intel 顯卡。
// 如果不加這一行,ONNX Runtime 可能默認使用 CPU 進行推理,速度較慢。
config.SetTargetOnnxRuntimeDeviceType(OnnxRuntimeDeviceType.DML);
// ==========================================
// 3. 類別字典定義 (COCO 80類)
// ==========================================
// 定義 COCO 數據集的 80 個類別名稱
// 這些名稱將用於在結果可視化時標註檢測到的物體
List<string> d = new List<string> { "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" };
// 構建<索引, 類別名>字典
Dictionary<int, string> CategoryDict = new Dictionary<int, string>();
for (int i = 0; i < d.Count; i++)
{
CategoryDict[i] = d[i];
}
// 將類別字典賦值給配置對象
config.CategoryDict = CategoryDict;
// ==========================================
// 4. 模型初始化
// ==========================================
// 實例化模型,傳入配置。
// 此時 DeploySharp 會根據配置加載 ONNX 模型,並初始化 DirectML 會話。
Yolov26DetModel model = new Yolov26DetModel(config);
// 使用 OpenCvSharp 讀取圖片到 Mat 對象中
// Mat 是 OpenCV 中用於存儲圖像數據的核心矩陣結構
Mat img = Cv2.ImRead(imagePath);
// ==========================================
// 5. 模型推理 (預熱與測試)
// ==========================================
// 執行多次推理。
// 第一次推理通常包含模型加載、內存分配等初始化開銷,耗時較長。
Result[] result = model.Predict(img);
// 後續推理用於測試穩定的推理速度。
result = model.Predict(img);
result = model.Predict(img);
result = model.Predict(img);
// 打印性能分析記錄。
// 這將輸出推理過程中各階段(如預處理、推理執行、後處理)的耗時統計。
model.ModelInferenceProfiler.PrintAllRecords();
// 初始化列表,用於存儲處理後的圖像(本例主要用於演示)
List<Mat> resultsMat = new List<Mat>();
// ==========================================
// 6. 結果可視化與顯示
// ==========================================
// 調用可視化工具,將檢測框(矩形框)和類別標籤繪製在原圖上。
// VisualizeOptions(1.0f) 可能指定了縮放比例或字體大小等參數。
var resultImg = Visualize.DrawDetResult(result, img, new VisualizeOptions(1.0f));
// 將繪製好的圖像加入列表
resultsMat.Add(resultImg);
// 使用 OpenCV 的窗口顯示結果圖像。
// "image" 是窗口的標題。
Cv2.ImShow("image", resultImg);
// 等待按鍵輸入。
// 參數 0 表示無限期等待,直到用户按下鍵盤任意鍵。
// 這是為了防止控制枱程序執行完畢後窗口立即閃退。
Cv2.WaitKey();
}
}
}
(3)代碼詳解
上述代碼與 3.1 節的代碼結構基本相似,主要區別在於推理後端的配置:
-
設置推理後端為 ONNX Runtime:
config.SetTargetInferenceBackend(InferenceBackend.OnnxRuntime); -
設置推理設備為 GPU(此處使用獨顯設備):
config.SetTargetDeviceType(DeviceType.GPU0); -
配置 DirectML 加速:DirectML 是 Windows 上的高性能硬件加速接口,支持 AMD、NVIDIA 和 Intel 顯卡,使用簡單且無需複雜配置。
config.SetTargetOnnxRuntimeDeviceType(OnnxRuntimeDeviceType.DML);
(4)結果展示
控制枱輸出如下。使用 DirectML 調用顯卡加速,雖在速度上與 TensorRT 相比有所差距,但其配置簡單、無需複雜設置的優勢依然明顯,適合快速開發驗證。

3.3 使用 OpenCvSharp 作為圖像處理庫 + OpenVINO 推理後端
(1)NuGet 包安裝
使用 OpenCvSharp 作為圖像處理庫、OpenVINO 作為推理後端時,需要安裝以下核心包:
DeploySharp 基礎庫及擴展庫:
JYPPX.DeploySharp
JYPPX.DeploySharp.OpenCvSharp
Runtime 庫:
OpenCvSharp4.runtime.win
OpenVINO.runtime.win
(2)代碼實現
推理代碼如下所示,可直接複製運行:
using OpenCvSharp; // 引入 OpenCvSharp,用於圖像的讀取、顯示和矩陣操作
using DeploySharp.Model; // 引入模型定義和配置類
using DeploySharp.Data; // 引入數據處理相關的類
using DeploySharp.Engine; // 引入推理引擎核心接口和枚舉
using DeploySharp; // 引入 DeploySharp 主庫和可視化工具
namespace DeploySharp.OpenCvSharp.Demo
{
/// <summary>
/// YOLO26 目標檢測演示 (基於OpenVINO + OpenCvSharp)
/// </summary>
public class Yolov26DetDemo
{
public static void Run()
{
// ==========================================
// 1. 路徑配置
// ==========================================
// 模型下載提示:模型和測試圖片可以前往QQ羣(945057948)下載
// 注意:此處加載的是標準的 .onnx 模型文件,而不是 TensorRT 的 .engine 文件。
// ONNX 模型具有良好的跨平台特性。
string modelPath = @"E:\Model\yolov28\yolo26s.onnx";
// 設置待檢測的圖片路徑
string imagePath = @"E:\Data\image\bus.jpg";
// ==========================================
// 2. 模型配置
// ==========================================
// 創建 YOLO26Det 的配置對象,傳入模型路徑
Yolov26DetConfig config = new Yolov26DetConfig(modelPath);
// ==========================================
// 3. 類別字典定義 (COCO 80類)
// ==========================================
// 定義 COCO 數據集的 80 個類別名稱
// 這些名稱將用於在結果可視化時標註檢測到的物體
List<string> d = new List<string> { "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" };
// 構建<索引, 類別名>字典
Dictionary<int, string> CategoryDict = new Dictionary<int, string>();
for (int i = 0; i < d.Count; i++)
{
CategoryDict[i] = d[i];
}
// 將類別字典賦值給配置對象
config.CategoryDict = CategoryDict;
// ==========================================
// 4. 模型初始化
// ==========================================
// 實例化模型,傳入配置。
// 此時 DeploySharp 會根據配置加載 ONNX 模型,並初始化 DirectML 會話。
Yolov26DetModel model = new Yolov26DetModel(config);
// 使用 OpenCvSharp 讀取圖片到 Mat 對象中
// Mat 是 OpenCV 中用於存儲圖像數據的核心矩陣結構
Mat img = Cv2.ImRead(imagePath);
// ==========================================
// 5. 模型推理 (預熱與測試)
// ==========================================
// 執行多次推理。
// 第一次推理通常包含模型加載、內存分配等初始化開銷,耗時較長。
Result[] result = model.Predict(img);
// 後續推理用於測試穩定的推理速度。
result = model.Predict(img);
result = model.Predict(img);
result = model.Predict(img);
// 打印性能分析記錄。
// 這將輸出推理過程中各階段(如預處理、推理執行、後處理)的耗時統計。
model.ModelInferenceProfiler.PrintAllRecords();
// 初始化列表,用於存儲處理後的圖像(本例主要用於演示)
List<Mat> resultsMat = new List<Mat>();
// ==========================================
// 6. 結果可視化與顯示
// ==========================================
// 調用可視化工具,將檢測框(矩形框)和類別標籤繪製在原圖上。
// VisualizeOptions(1.0f) 可能指定了縮放比例或字體大小等參數。
var resultImg = Visualize.DrawDetResult(result, img, new VisualizeOptions(1.0f));
// 將繪製好的圖像加入列表
resultsMat.Add(resultImg);
// 使用 OpenCV 的窗口顯示結果圖像。
// "image" 是窗口的標題。
Cv2.ImShow("image", resultImg);
// 等待按鍵輸入。
// 參數 0 表示無限期等待,直到用户按下鍵盤任意鍵。
// 這是為了防止控制枱程序執行完畢後窗口立即閃退。
Cv2.WaitKey();
}
}
}
(3)代碼詳解
上述代碼與 3.2 節的代碼結構基本相似。使用 OpenVINO 作為推理後端時,通常無需額外設置,因為 DeploySharp 默認支持 OpenVINO。
若設備配備英特爾的集成顯卡、獨立顯卡或 NPU,可通過以下代碼指定推理設備以獲得更好的性能:
config.SetTargetInferenceBackend(InferenceBackend.OpenVINO);
config.SetTargetDeviceType(DeviceType.GPU0); // 設置設備為集顯
// 或
config.SetTargetDeviceType(DeviceType.GPU1); // 設置推理設備為獨立顯卡
// 或
config.SetTargetDeviceType(DeviceType.NPU); // 設置推理設備為 NPU
(4)結果展示
控制枱輸出如下。使用 OpenVINO 在 CPU 上進行推理時,雖因設備限制推理速度有限,但 OpenVINO 已是 CPU 環境下推理速度最快的工具之一,且配置簡單,全面支持英特爾全系設備,歡迎開發者使用。

四、YOLOv26 實例分割
4.1 代碼使用示例
using OpenCvSharp; // 引入 OpenCvSharp,用於圖像讀取、顯示及矩陣操作
using DeploySharp.Model; // 引入模型配置相關的類
using DeploySharp.Data; // 引入數據結果定義相關的類
using DeploySharp.Engine; // 引入推理引擎核心接口
using DeploySharp; // 引入 DeploySharp 主庫及可視化工具
namespace DeploySharp.OpenCvSharp.Demo
{
/// <summary>
/// YOLO26Seg 實例分割演示類
/// 本示例展示如何加載 TensorRT 引擎文件,對圖像進行實例分割推理,並將掩碼繪製在原圖上。
/// </summary>
public class Yolov26SegDemo
{
public static void Run()
{
// ==========================================
// 1. 路徑配置
// ==========================================
// 模型下載提示:模型和測試圖片可以前往QQ羣(945057948)下載
// 設置 TensorRT 引擎文件路徑。
// 注意:這裏使用的是 .engine 文件,它是針對特定 GPU 和 TensorRT 版本編譯的。
// 文件名中的 '-seg' 表示這是一個帶有分割頭的實例分割模型。
string modelPath = @"D:\Program Files\TensorRT-10.13.0.35-cu11\bin\yolo26s-seg.engine";
// 設置待推理的圖片路徑
string imagePath = @"E:\Data\image\bus.jpg";
// ==========================================
// 2. 模型配置與初始化
// ==========================================
// 創建 YOLO26Seg (實例分割) 的配置對象,傳入模型路徑
Yolov26SegConfig config = new Yolov26SegConfig(modelPath);
// [關鍵設置] 指定推理後端為 TensorRT。
// 利用 TensorRT 可以在 NVIDIA GPU 上獲得極高的推理速度。
config.SetTargetInferenceBackend(InferenceBackend.TensorRT);
// 實例化模型。
// 此時會加載引擎文件,初始化 GPU 顯存上下文。
Yolov26SegModel model = new Yolov26SegModel(config);
// ==========================================
// 3. 圖像加載
// ==========================================
// 使用 OpenCvSharp 讀取圖片。
// img 是一個 Mat 對象,包含了圖像的像素數據。
Mat img = Cv2.ImRead(imagePath);
// ==========================================
// 4. 模型推理 (預熱與性能測試)
// ==========================================
// 執行第一次推理。
// 首次運行通常包含模型加載、顯存分配等開銷,耗時較長。
var result = model.Predict(img);
// 執行後續多次推理。
// 這是為了排除初始化開銷,測試模型在穩定狀態下的推理速度。
result = model.Predict(img);
result = model.Predict(img);
result = model.Predict(img);
// 打印推理性能分析記錄。
// 這將輸出預處理、推理計算、後處理(包括掩碼生成)各階段的耗時。
model.ModelInferenceProfiler.PrintAllRecords();
// ==========================================
// 5. 結果可視化
// ==========================================
// 調用可視化工具,繪製分割結果。
// 注意這裏使用的是 DrawSegResult (繪製分割結果),而不是 DrawDetResult (繪製檢測框)。
// 該函數會將檢測到的物體框、類別標籤以及彩色的半透明掩碼繪製在原圖上。
var resultImg = Visualize.DrawSegResult(result, img, new VisualizeOptions(1.0f));
// 使用 OpenCV 窗口顯示渲染後的結果圖像。
Cv2.ImShow("image", resultImg);
// 等待按鍵輸入,防止窗口閃退。
Cv2.WaitKey();
}
}
}
4.2 代碼詳解
-
創建分割配置:
Yolov26SegConfig config = new Yolov26SegConfig(modelPath); config.SetTargetInferenceBackend(InferenceBackend.TensorRT);Yolov26SegConfig是 YOLOv26 分割模型的配置類。 -
執行分割推理:
var result = model.Predict(img);分割推理返回
SegResult[]數組,每個元素包含邊界框、置信度、類別和分割掩碼。 -
可視化分割結果:
var resultImg = Visualize.DrawSegResult(result, img, new VisualizeOptions(1.0f));DrawSegResult會為每個檢測到的對象繪製不同顏色的掩碼,疊加在原圖上。
4.3 分割結果展示
控制枱輸出
以下三張截圖分別展示了在 TensorRT GPU、ONNX Runtime(DirectML) GPU、OpenVINO CPU 設備下的推理性能。不同引擎各有優勢,開發者可根據自身硬件環境選擇最適合的方案。
TensorRT GPU:

ONNX Runtime (DirectML) GPU:

OpenVINO CPU:

推理結果繪製
下圖為官方預訓練模型導出後的推理結果示例:

五、YOLOv26 人體姿態估計
5.1 功能介紹
YOLO26 Pose 模型用於檢測人體關鍵點,通常支持 17 個關鍵點(頭部、頸部、肩膀、手肘、手腕、臀部、膝蓋、腳踝等)。
關鍵點定義(COCO 格式):
| 關鍵點 | 名稱 | 描述 |
|---|---|---|
| 0 | nose | 鼻子 |
| 1 | left_eye | 左眼 |
| 2 | right_eye | 右眼 |
| 3 | left_ear | 左耳 |
| 4 | right_ear | 右耳 |
| 5 | left_shoulder | 左肩 |
| 6 | right_shoulder | 右肩 |
| 7 | left_elbow | 左肘 |
| 8 | right_elbow | 右肘 |
| 9 | left_wrist | 左腕 |
| 10 | right_wrist | 右腕 |
| 11 | left_hip | 左髖 |
| 12 | right_hip | 右髖 |
| 13 | left_knee | 左膝 |
| 14 | right_knee | 右膝 |
| 15 | left_ankle | 左踝 |
| 16 | right_ankle | 右踝 |
5.2 代碼使用示例
using OpenCvSharp; // 引入 OpenCvSharp,用於圖像的讀取、顯示和矩陣操作
using DeploySharp.Model; // 引入模型定義和配置類
using DeploySharp.Data; // 引入數據結果相關的類
using DeploySharp.Engine; // 引入推理引擎核心接口
using DeploySharp; // 引入 DeploySharp 主庫和可視化工具
using System; // 引入 System 命名空間以使用 Console
namespace DeploySharp.OpenCvSharp.Demo
{
/// <summary>
/// YOLO26Pose 姿態估計演示類
/// 本示例展示瞭如何加載 ONNX 模型進行人體關鍵點檢測,並可視化骨骼連接。
/// </summary>
public class Yolov26PoseDemo
{
public static void Run()
{
// ==========================================
// 1. 路徑配置
// ==========================================
// 模型下載提示:模型和測試圖片可以前往QQ羣(945057948)下載
// 設置 ONNX 模型文件路徑。
// '-pose' 後綴表示這是一個專門用於姿態估計(關鍵點檢測)的模型。
string modelPath = @"E:\Model\yolov28\yolo26s-pose.onnx";
// 設置待推理的圖片路徑
string imagePath = @"E:\Data\image\demo_9.jpg";
// ==========================================
// 2. 模型配置與初始化
// ==========================================
// 創建 YOLO26Pose (姿態估計) 的配置對象,傳入模型路徑
Yolov26PoseConfig config = new Yolov26PoseConfig(modelPath);
// [關鍵設置] 設置推理後端為 ONNX Runtime。
// 這使得模型可以跨平台運行,不僅限於 NVIDIA GPU(取決於 ONNX Runtime 的安裝提供程序)。
config.SetTargetInferenceBackend(InferenceBackend.OnnxRuntime);
// 實例化姿態估計模型。
// 模型加載時會解析 ONNX 圖結構,準備好輸入輸出節點。
Yolov26PoseModel model = new Yolov26PoseModel(config);
// ==========================================
// 3. 圖像加載
// ==========================================
// 使用 OpenCvSharp 讀取圖片。
Mat img = Cv2.ImRead(imagePath);
// ==========================================
// 4. 模型推理與結果查看
// ==========================================
// 執行推理。
// 第一次推理通常較慢,包含初始化開銷。
var result = model.Predict(img);
// 執行多次推理以測試穩定狀態下的性能。
result = model.Predict(img);
result = model.Predict(img);
result = model.Predict(img);
// 打印第一個結果的詳細信息到控制枱。
// 姿態估計的 Result 對象通常包含檢測框信息以及一個關鍵點數組。
// 這一行有助於開發者調試,查看模型輸出的原始數據結構。
Console.WriteLine(result[0].ToString());
// 打印性能分析記錄,查看各階段耗時。
model.ModelInferenceProfiler.PrintAllRecords();
// ==========================================
// 5. 結果可視化
// ==========================================
// 調用可視化工具,繪製姿態估計結果。
// 注意這裏使用的是 DrawPoses,它會自動將識別出的關鍵點(如眼睛、肩膀、肘部等)
// 用圓點標出,並根據人體結構連接成骨架。
// VisualizeOptions(1.0f) 可能指定了繪製時的線條粗細或字體縮放比例。
var resultImg = Visualize.DrawPoses(result, img, new VisualizeOptions(1.0f));
// 顯示結果圖像。
Cv2.ImShow("image", resultImg);
// 等待按鍵,防止窗口閃退。
Cv2.WaitKey();
}
}
}
5.3 代碼詳解
-
創建姿態估計配置:
Yolov26PoseConfig config = new Yolov26PoseConfig(modelPath); config.SetTargetInferenceBackend(InferenceBackend.OnnxRuntime);Yolov26PoseConfig是 YOLOv26 姿態估計模型的配置類。 -
執行姿態估計推理:
var result = model.Predict(img);姿態估計推理返回
KeyPointResult[]數組,每個元素包含人體邊界框、置信度和 17 個關鍵點座標。 -
可視化姿態估計結果:
var resultImg = Visualize.DrawPoses(result, img, new VisualizeOptions(1.0f));DrawPoses會繪製人體骨架(連接關鍵點)和關鍵點標記。
5.4 結果展示
控制枱輸出
以下截圖展示了在 ONNX Runtime CPU 設備下的推理性能:

推理結果繪製
下圖為官方預訓練模型導出後的推理結果示例:

六、YOLOv26 旋轉框檢測
YOLOv26 OBB (Oriented Bounding Box) 模型用於檢測旋轉物體,生成帶有旋轉角度的邊界框。這對於檢測航空影像中的建築物、遙感圖像中的車輛等場景非常重要。
6.1 代碼使用示例
以下代碼演示如何使用 TensorRT 引擎進行旋轉目標檢測:
using OpenCvSharp; // 引入 OpenCvSharp,用於圖像讀取、顯示及繪圖
using DeploySharp.Model; // 引入模型配置相關的類
using DeploySharp.Data; // 引入數據結果定義相關的類
using DeploySharp.Engine; // 引入推理引擎核心接口
using DeploySharp; // 引入 DeploySharp 主庫及可視化工具
namespace DeploySharp.OpenCvSharp.Demo
{
/// <summary>
/// YOLOv26 OBB 旋轉目標檢測演示類
/// 本示例展示如何加載 TensorRT 引擎文件,對圖像進行旋轉目標檢測,並繪製旋轉框。
/// </summary>
public class Yolov26ObbDemo
{
public static void Run()
{
// ==========================================
// 1. 路徑配置
// ==========================================
// 模型下載提示:模型和測試圖片可以前往 QQ 羣(945057948)下載
// '-obb' 表示該模型用於輸出旋轉邊界框
string modelPath = @"D:\Program Files\TensorRT-10.13.0.35-cu11\bin\yolo26s-obb.engine";
// 設置待推理的圖片路徑
// plane.png 是旋轉目標檢測的經典測試圖(飛機停機坪通常包含各種角度的飛機)。
string imagePath = @"E:\Data\image\plane.png";
// ==========================================
// 2. 模型配置與初始化
// ==========================================
// 創建 YOLOv26 OBB (旋轉目標檢測) 的配置對象,傳入模型路徑
Yolov26ObbConfig config = new Yolov26ObbConfig(modelPath);
// [關鍵設置] 指定推理後端為 TensorRT。
// 這將調用 NVIDIA GPU 進行高性能計算。
// 注意:因為使用的是 .engine 文件,所以必須選擇 TensorRT 後端。
config.SetTargetInferenceBackend(InferenceBackend.TensorRT);
// 實例化旋轉目標檢測模型。
Yolov26ObbModel model = new Yolov26ObbModel(config);
// ==========================================
// 3. 圖像加載
// ==========================================
// 使用 OpenCvSharp 讀取圖片。
Mat img = Cv2.ImRead(imagePath);
// ==========================================
// 4. 模型推理
// ==========================================
// 執行推理。
var result = model.Predict(img);
// 如果需要測試純推理速度(排除初始化開銷),可以取消註釋進行多次循環。
result = model.Predict(img);
result = model.Predict(img);
result = model.Predict(img);
// 打印性能分析記錄。
// 這將顯示預處理、TensorRT 推理、後處理(包含 OBB 解碼)的耗時。
model.ModelInferenceProfiler.PrintAllRecords();
// ==========================================
// 5. 結果可視化
// ==========================================
// 調用可視化工具,繪製旋轉檢測結果。
// DrawObbResult 會根據檢測到的 x, y, w, h 和 angle (角度) 繪製旋轉矩形。
var resultImg = Visualize.DrawObbResult(result, img, new VisualizeOptions(1.0f));
// [可選] 調整圖片大小以適應屏幕
// 航拍圖通常分辨率很大,可以縮小顯示。
//Cv2.Resize(resultImg, resultImg, new Size(resultImg.Width / 4, resultImg.Height / 4));
// 顯示結果圖像。
Cv2.ImShow("image", resultImg);
// 等待按鍵,防止窗口閃退。
Cv2.WaitKey();
}
}
}
6.2 代碼詳解
-
創建旋轉框檢測配置:
Yolov26ObbConfig config = new Yolov26ObbConfig(modelPath); config.SetTargetInferenceBackend(InferenceBackend.TensorRT);Yolov26ObbConfig是 YOLOv26 旋轉框檢測模型的配置類。 -
執行旋轉框檢測推理:
ObbResult[] result = model.Predict(img);旋轉框檢測推理返回
ObbResult[]數組,每個元素包含中心點、寬度、高度、旋轉角度和類別信息。 -
可視化旋轉框檢測結果:
var resultImg = Visualize.DrawObbResult(result, img, new VisualizeOptions(1.0f));DrawObbResult會繪製旋轉的邊界框(四邊形),而不是普通的軸對齊矩形。
6.3 旋轉框檢測結果展示
控制枱輸出
以下截圖展示了在 TensorRT GPU 設備下的推理性能:

推理結果繪製
下圖為官方預訓練模型導出後的推理結果示例:

七、跨引擎支持
DeploySharp 原生支持 OpenVINO、ONNX Runtime、TensorRT 三大主流推理引擎,為開發者在 CPU、GPU、NPU 等不同硬件設備上部署模型提供了最全面的解決方案。集成的 YOLOv26 系列默認支持所有推理引擎,開發者可根據實際硬件環境選擇最優的推理方案。
7.1 引擎性能對比
| 引擎 | 優勢 | 適用場景 | 性能特點 |
|---|---|---|---|
| OpenVINO | Intel 硬件優化,支持多種設備(CPU、GPU0、GPU1、NPU) | Intel CPU、Intel GPU、NPU | Intel 硬件加速 |
| ONNX Runtime | 廣泛支持,跨平台,兼容性好 | CPU、GPU(CUDA/DML)、移動端 | 平衡性能與兼容性 |
| TensorRT | NVIDIA GPU 極致性能,經過專門優化 | NVIDIA GPU 高性能場景 | 最佳 GPU 性能 |
7.2 引擎選擇建議
根據硬件環境和應用場景選擇合適的推理引擎:
| 硬件環境 | 推薦引擎 | 説明 |
|---|---|---|
| Intel CPU/GPU | OpenVINO | Intel 硬件優化,性能最佳 |
| NVIDIA GPU | TensorRT | 極致性能,適合高頻推理 |
| NVIDIA GPU (需要靈活性) | ONNX Runtime (CUDA) | 兼容性好,易於切換 |
| 通用 CPU | ONNX Runtime | 跨平台兼容性好 |
7.3 引擎切換示例
// 切換到 OpenVINO
config.SetTargetInferenceBackend(InferenceBackend.OpenVINO);
config.TargetDeviceType = DeviceType.CPU;
// 切換到 ONNX Runtime (CUDA)
config.SetTargetInferenceBackend(InferenceBackend.OnnxRuntime);
config.TargetDeviceType = DeviceType.GPU;
// 切換到 TensorRT
config.SetTargetInferenceBackend(InferenceBackend.TensorRT);
config.TargetDeviceType = DeviceType.GPU;
注意:切換推理引擎可能需要重新加載模型,建議在應用啓動時確定使用的引擎。
八、性能優化建議
8.1 預熱機制
首次推理通常較慢,因為需要加載模型、初始化推理引擎、編譯計算圖等。建議執行幾次預熱推理。
// 預熱模型(執行 3 次推理)
for (int i = 0; i < 3; i++)
{
model.Predict(img);
}
// 實際推理
var result = model.Predict(img);
8.2 批量推理
對於大量圖像,使用批量推理可以提高吞吐量,前提是模型支持多 Batch Size。
// 設置批量大小為 4
config.InferBatch = 4;
// 準備批量圖像
var imageList = new List<Image<Rgb24>>();
imageList.Add(Image.Load<Rgb24>(@"path1.jpg"));
imageList.Add(Image.Load<Rgb24>(@"path2.jpg"));
imageList.Add(Image.Load<Rgb24>(@"path3.jpg"));
imageList.Add(Image.Load<Rgb24>(@"path4.jpg"));
// 執行批量推理
var results = model.Predict(imageList);
8.3 設備選擇
根據硬件選擇最優設備:
// Intel 環境:使用 OpenVINO
config.SetTargetInferenceBackend(InferenceBackend.OpenVINO);
// NVIDIA 環境:使用 TensorRT 或 ONNX Runtime (CUDA)
config.SetTargetInferenceBackend(InferenceBackend.TensorRT);
config.TargetDeviceType = DeviceType.GPU;
九、總結
DeploySharp 對 YOLOv26 系列提供了全面而深入的支持,包括:
- 四種任務類型全覆蓋:檢測、分割、姿態估計、旋轉框檢測
- 雙圖像處理庫支持:ImageSharp 和 OpenCvSharp
- 三推理引擎兼容:OpenVINO、ONNX Runtime、TensorRT
- 完善的配置系統:靈活的參數設置
- 詳細的性能分析:內置性能分析器
- 豐富的可視化選項:支持多種結果展示方式
YOLOv26 的簡化的輸出格式和優化的架構,結合 DeploySharp 的封裝和優化,使得開發者可以輕鬆地將 YOLOv26 集成到各種 C# 應用中,構建高效、準確的計算機視覺解決方案。
隨着 YOLO 系列的持續發展,DeploySharp 也將持續跟進,為開發者提供最新模型的支持。期待 YOLOv26 及未來版本的更多創新和突破。
技術支持
如有問題或建議,歡迎通過以下方式交流:
- 📧 GitHub Issues:在項目倉庫提 Issue 或 Pull Request
- 💬 QQ 交流羣:加入 945057948,回覆更方便更快哦

作者:Guojin Yan
版本:0.0.6.1
最後更新:2026年1月
【文章聲明】
本文主要內容基於作者的研究與實踐,部分表述藉助AI工具進行了輔助優化。由於技術侷限性,文中可能存在錯誤或疏漏之處,懇請各位讀者批評指正。如果內容無意中侵犯了您的權益,請及時通過公眾號後台與我們聯繫,我們將第一時間核實並妥善處理。感謝您的理解與支持!