YoloDotNet
YoloDotNet - A C# .NET 8.0 project for Classification, Object Detection, OBB Detection, Segmentation and Pose Estimation in both images and live video streams.
Install / Use
/learn @NickSwardh/YoloDotNetREADME
<img src="https://github.com/NickSwardh/YoloDotNet/assets/35733515/994287a9-556c-495f-8acf-1acae8d64ac0" height=24> YoloDotNet v4.2 🚀
Blazing-fast, production-ready YOLO inference for .NET
YoloDotNet is a modular, lightweight C# library for real-time computer vision and YOLO-based inference in .NET.
It provides high-performance inference for modern YOLO model families (YOLOv5u through YOLOv26, YOLO-World, YOLO-E, and RT-DETR), with explicit control over execution, memory, and preprocessing.
Built on .NET 8, ONNX Runtime, and SkiaSharp, YoloDotNet intentionally
avoids heavy computer vision frameworks such as OpenCV.
There is no Python runtime, no hidden preprocessing, and no implicit behavior —
only the components required for fast, predictable inference on Windows,
Linux, and macOS.
No Python. No magic. Just fast, deterministic YOLO — done properly for .NET.
⭐ Why YoloDotNet?
YoloDotNet is designed for developers who need:
- ✅ Pure .NET — no Python runtime, no scripts
- ✅ Real performance — CPU, CUDA / TensorRT, OpenVINO, CoreML, DirectML
- ✅ Explicit configuration — predictable accuracy and memory usage
- ✅ Production readiness — engine caching, long-running stability
- ✅ Multiple vision tasks — detection, OBB, segmentation, pose, classification
Ideal for desktop apps, backend services, and real-time vision pipelines that require deterministic behavior and full control.
🆕 What’s New v4.2
- Added Region of Interest (ROI) support, allowing inference to run on selected areas of an image or video stream
(useful for surveillance, monitoring zones, and performance-focused pipelines) - Added the option to draw edges on segmented objects for improved visual clarity
- Added helper methods for JSON export:
ToJson()— convert inference results to JSONSaveJson()— save inference results directly to a JSON file
- Added helper methods for YOLO-formatted annotations:
ToYoloFormat()— convert results to YOLO annotation formatSaveYoloFormat()— save results as YOLO-compatible training data
- Added
GetContourPoints()helper for extracting ordered contour points from segmented objects - Updated YOLOv26 inference execution to align with other tasks, improving consistency and overall execution efficiency
📖 Full release history: CHANGELOG.md
[!TIP] See the demos
Practical, runnable examples showcasing YoloDotNet features are available in the demo projects:
👉 Browse the demo folder
🚀 Quick Start
💡 ONNX Model Export Requirements
- For YOLOv26 models, export with opset=18
- For YOLOv5u–YOLOv12, export with opset=17
[!IMPORTANT] Using the correct opset ensures optimal compatibility and performance with ONNX Runtime.
For more information on how to export models to ONNX, refer to https://docs.ultralytics.com/modes/export/
Example export commands (Ultralytics CLI):
# For YOLOv5u–YOLOv12 (opset 17)
yolo export model=yolov8n.pt format=onnx opset=17
# For YOLOv26 (opset 18)
yolo export model=yolo26n.pt format=onnx opset=18
[!WARNING] Model License Notice:
YoloDotNet is MIT licensed, but most Ultralytics YOLO models are AGPL-3.0 or require a commercial license for commercial use.
You are responsible for ensuring your use of any model complies with its license.
See Ultralytics Model Licensing for details.
1️⃣ Install the core package
dotnet add package YoloDotNet
2️⃣ Install exactly one(!) execution provider
# CPU (recommended starting point)
dotnet add package YoloDotNet.ExecutionProvider.Cpu
# Hardware-accelerated execution (choose one)
dotnet add package YoloDotNet.ExecutionProvider.Cuda
dotnet add package YoloDotNet.ExecutionProvider.OpenVino
dotnet add package YoloDotNet.ExecutionProvider.CoreML
dotnet add package YoloDotNet.ExecutionProvider.DirectML
💡 Note: The CUDA execution provider includes optional TensorRT acceleration.
No separate TensorRT package is required.
3️⃣ Run object detection
using SkiaSharp;
using YoloDotNet;
using YoloDotNet.Models;
using YoloDotNet.Extensions;
using YoloDotNet.ExecutionProvider.Cpu;
using var yolo = new Yolo(new YoloOptions
{
ExecutionProvider = new CpuExecutionProvider("model.onnx")
});
using var image = SKBitmap.Decode("image.jpg");
// Note: The IoU parameter is used for NMS-based models.
// For YOLOv10 and YOLOv26, IoU is ignored since post-processing is handled internally by the model.
var results = yolo.RunObjectDetection(image, confidence: 0.25, iou: 0.7);
image.Draw(results);
image.Save("result.jpg");
You’re now running YOLO inference in pure C#.
💡 Important: Accuracy Depends on Configuration
YOLO inference accuracy is not automatic.
Preprocessing settings such as image resize mode, sampling method, and confidence/IoU thresholds must match how the model was trained.
These settings directly control the accuracy–performance tradeoff and should be treated as part of the model itself.
📖 Before tuning models or comparing results, read:
👉 Accuracy & Configuration Guide
Supported Tasks
| Classification | Object Detection | OBB Detection | Segmentation | Pose Estimation | |---------------|------------------|---------------|--------------|-----------------| | <img src="https://user-images.githubusercontent.com/35733515/297393507-c8539bff-0a71-48be-b316-f2611c3836a3.jpg" width=300> | <img src="https://user-images.githubusercontent.com/35733515/273405301-626b3c97-fdc6-47b8-bfaf-c3a7701721da.jpg" width=300> | <img src="https://github.com/NickSwardh/YoloDotNet/assets/35733515/d15c5b3e-18c7-4c2c-9a8d-1d03fb98dd3c" width=300> | <img src="https://github.com/NickSwardh/YoloDotNet/assets/35733515/3ae97613-46f7-46de-8c5d-e9240f1078e6" width=300> | <img src="https://github.com/NickSwardh/YoloDotNet/assets/35733515/b7abeaed-5c00-4462-bd19-c2b77fe86260" width=300> | | <sub>pexels.com</sub> | <sub>pexels.com</sub> | <sub>pexels.com</sub> | <sub>pexels.com</sub> | <sub>pexels.com</sub> |
✅ Verified YOLO Models
The following YOLO models have been tested and verified with YoloDotNet using official Ultralytics exports and default heads.
| Classification | Object Detection | Segmentation | Pose Estimation | OBB Detection | |----------------|------------------|--------------|------------------|---------------| | YOLOv8-cls<br>YOLOv11-cls<br>YOLOv12-cls<br>YOLOv26-cls | YOLOv5u<br>YOLOv8<br>YOLOv9<br>YOLOv10<br>YOLOv11<br>YOLOv12<br>YOLOv26<br>RT-DETR | YOLOv8-seg<br>YOLOv11-seg<br>YOLOv12-seg<br>YOLOv26-seg<br>YOLO-World (v2) | YOLOv8-pose<br>YOLOv11-pose<br>YOLOv12-pose<br>YOLOv26-pose | YOLOv8-obb<br>YOLOv11-obb<br>YOLOv12-obb<br>YOLOv26-obb<br> |
📁 Demos
Hands-on examples are available in the demo folder:
Includes image inference, video streams, GPU acceleration, segmentation, and large-image workflows.
Execution Providers
| Provider | Windows | Linux | macOS | Documentation | |--------------------|---------|-------|-------|---------------| | CPU | ✅ | ✅ | ✅ | CPU README | | CUDA / TensorRT | ✅ | ✅ | ❌ | CUDA README | | OpenVINO | ✅ | ✅ | ❌ | OpenVINO README | | CoreML | ❌ | ❌ | ✅ | CoreML README | | DirectML | ✅ | ❌ | ❌ | DirectML README |
ℹ️ Only one execution provider package may be referenced.
Mixing providers will cause native runtime conflicts.
⚡ Performance Characteristics
YoloDotNet focuses on stable, low-overhead inference where runtime cost is dominated by the execution provider and model.
📊 Benchmarks: /test/YoloDotNet.Benchmarks
- Stable latency after warm-up
- Clean scaling from CPU → GPU → TensorRT
- Predictable allocation behavior
- Suitable for real-time and long-running services
🚀 Modular Execution Providers
- Core package is provider-agnostic
- Execution providers are separate NuGet packages
- Native ONNX Runtime dependencies are isolated
Why this matters: fewer conflicts, predictable deployment, and production-safe behavior.
Support YoloDotNet
⭐ Star the repo
💬 Share feedback
🤝 Sponsor development
License
MIT License
Copyright (c) Niklas Swärd
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
Related Skills
docs-writer
98.7k`docs-writer` skill instructions As an expert technical writer and editor for the Gemini CLI project, you produce accurate, clear, and consistent documentation. When asked to write, edit, or revie
model-usage
329.7kUse CodexBar CLI local cost usage to summarize per-model usage for Codex or Claude, including the current (most recent) model or a full model breakdown. Trigger when asked for model-level usage/cost data from codexbar, or when you need a scriptable per-model summary from codexbar cost JSON.
Design
Campus Second-Hand Trading Platform \- General Design Document (v5.0 \- React Architecture \- Complete Final Version)1\. System Overall Design 1.1. Project Overview This project aims t
arscontexta
2.8kClaude Code plugin that generates individualized knowledge systems from conversation. You describe how you think and work, have a conversation and get a complete second brain as markdown files you own.
