YoloDotNet 2.1.0
See the version list below for details.
dotnet add package YoloDotNet --version 2.1.0
NuGet\Install-Package YoloDotNet -Version 2.1.0
<PackageReference Include="YoloDotNet" Version="2.1.0" />
paket add YoloDotNet --version 2.1.0
#r "nuget: YoloDotNet, 2.1.0"
// Install YoloDotNet as a Cake Addin #addin nuget:?package=YoloDotNet&version=2.1.0 // Install YoloDotNet as a Cake Tool #tool nuget:?package=YoloDotNet&version=2.1.0
YoloDotNet v2.1
YoloDotNet is a blazing-fast C# .NET 8 implementation of Yolov8 all the way up to Yolov11 for real-time object detection in images and videos. Powered by ML.NET and ONNX Runtime, and supercharged with GPU acceleration using CUDA, this app is all about detecting objects at lightning speed!
YoloDotNet supports the following:
✓ Classification
Categorize an image
✓ Object Detection
Detect multiple objects in a single image
✓ OBB Detection
OBB (Oriented Bounding Box)
✓ Segmentation
Separate detected objects using pixel masks
✓ Pose Estimation
Identifying location of specific keypoints in an image
Batteries not included.
What's new in YoloDotNet v2.1?
YoloDotNet 2.1 is here, packing more punch than ever! This release builds on the foundation of the previous "Speed Demon" v2.0 update and adds some exciting new features while keeping everything buttery smooth. Compatibility with older versions has been ensured, and a few tweaks were made for even faster object detection performance. Check out what's new:
Yolov11 Support: The latest and greatest object detection model is now available. Why settle for anything less?
Backward Compatibility for Yolov9: Missing the good ol' Yolov9? Now you can switch between Yolov8-v11 versions. Yay!
Minor Optimizations: A sprinkle of tweaks here and there for even faster object detection, because... uh, more speed is always better!
OnnxRuntime Update: Now featuring support for CUDA 12.x and cuDNN 9.x. The GPU will definitely be happy with this one!
YoloDotNet v2.1 – faster, smarter, and packed with more Yolo goodness 😉
Nuget
> dotnet add package YoloDotNet
Install CUDA (optional)
YoloDotNet with GPU-acceleration requires CUDA Toolkit 12.x and cuDNN 9.x.
ONNX runtime's current compatibility with specific versions.
- Install CUDA v12.x
- Install cuDNN v9.x
- Update your system PATH-variable
- Open File Explorer and navigate to the folder where the cuDNN-dll's are installed. The typical path looks like:
C:\Program Files\NVIDIA\CUDNN\v9.x\bin\v12.x
(where x is your version) - Once you are in this specific folder (which contains .dll files), copy the folder path from the address bar at the top of the window.
- Add the cuDNN-Path to your System Variables:
- Type
env
in windows search - Click on
Edit the system environment variables
- Click on
Environment Variables
- Under
System Variables
select thePath
-variable and clickEdit
- Click on
New
and paste in your cuDNN dll-folder path - Click Ok a million times to save the changes
- Type
- Super-duper-important! In order for Windows to pick up the changes in your Environment Variables, make sure to close all open programs before you continue whatever you were doing 😉
Export Yolo models to ONNX
All models must be exported to ONNX format. How to export to ONNX format.
The ONNX-models included in this repo are from Ultralytics s-series (small). https://docs.ultralytics.com/models.
Verify your model
using YoloDotNet;
// Instantiate a new Yolo object with your ONNX-model
using var yolo = new Yolo(@"path\to\model.onnx");
Console.WriteLine(yolo.OnnxModel.ModelType); // Output modeltype...
Example - Image inference
using YoloDotNet;
using YoloDotNet.Enums;
using YoloDotNet.Models;
using YoloDotNet.Extensions;
using SkiaSharp;
// Instantiate a new Yolo object
using var yolo = new Yolo(new YoloOptions
{
OnnxModel = @"path\to\model.onnx", // Your Yolo model in onnx format
ModelVersion = ModelVersion.V11, // Set the version of your yolo model. Default V8
ModelType = ModelType.ObjectDetection, // Set your model type
Cuda = false, // Use CPU or CUDA for GPU accelerated inference. Default = true
GpuId = 0 // Select Gpu by id. Default = 0
PrimeGpu = false, // Pre-allocate GPU before first inference. Default = false
});
// Load image
using var image = SKImage.FromEncodedData(@"path\to\image.jpg");
// Run inference and get the results
var results = yolo.RunObjectDetection(image, confidence: 0.25, iou: 0.7);
// Draw results
using var resultImage = image.Draw(results);
// Save to file
resultImage.Save(@"save\as\new_image.jpg", SKEncodedImageFormat.Jpeg, 80);
Example - Video inference
[!IMPORTANT] Processing video requires FFmpeg and FFProbe
- Download FFMPEG
- Add FFmpeg and ffprobe to the Path-variable in your Environment Variables
using YoloDotNet;
using YoloDotNet.Enums;
using YoloDotNet.Models;
// Instantiate a new Yolo object
using var yolo = new Yolo(new YoloOptions
{
OnnxModel = @"path\to\model.onnx", // Your Yolov8 or Yolov10 model in onnx format
ModelVersion = ModelVersion.V11, // Set the version of your yolo model. Default V8
ModelType = ModelType.ObjectDetection, // Set your model type
Cuda = false, // Use CPU or CUDA for GPU accelerated inference. Default = true
GpuId = 0 // Select Gpu by id. Default = 0
PrimeGpu = false, // Pre-allocate GPU before first. Default = false
});
// Set video options
var options = new VideoOptions
{
VideoFile = @"path\to\video.mp4",
OutputDir = @"path\to\output\dir",
//GenerateVideo = true,
//DrawLabels = true,
//FPS = 30,
//Width = 640, // Resize video...
//Height = -2, // -2 automatically calculate dimensions to keep proportions
//Quality = 28,
//DrawConfidence = true,
//KeepAudio = true,
//KeepFrames = false,
//DrawSegment = DrawSegment.Default,
//PoseOptions = MyPoseMarkerConfiguration // Your own pose marker configuration...
};
// Run inference on video
var results = yolo.RunObjectDetection(options, 0.25, 0.7);
// Do further processing with 'results'...
Custom Pose-marker configuration
Example on how to configure PoseOptions for a Pose Estimation model
// Pass in a PoseOptions parameter to the Draw() extension method. Ex:
image.Draw(poseEstimationResults, poseOptions);
Access ONNX metadata and labels
The internal ONNX metadata such as input & output parameters, version, author, description, date along with the labels can be accessed via the yolo.OnnxModel
property.
Example:
using var yolo = new Yolo(@"path\to\model.onnx");
// ONNX metadata and labels resides inside yolo.OnnxModel
Console.WriteLine(yolo.OnnxModel);
Example:
// Instantiate a new object
using var yolo = new Yolo(@"path\to\model.onnx");
// Display metadata
foreach (var property in yolo.OnnxModel.GetType().GetProperties())
{
var value = property.GetValue(yolo.OnnxModel);
Console.WriteLine($"{property.Name,-20}{value!}");
if (property.Name == nameof(yolo.OnnxModel.CustomMetaData))
foreach (var data in (Dictionary<string, string>)value!)
Console.WriteLine($"{"",-20}{data.Key,-20}{data.Value}");
}
// Get ONNX labels
var labels = yolo.OnnxModel.Labels;
Console.WriteLine();
Console.WriteLine($"Labels ({labels.Length}):");
Console.WriteLine(new string('-', 58));
// Display
for (var i = 0; i < labels.Length; i++)
Console.WriteLine($"index: {i,-8} label: {labels[i].Name,20} color: {labels[i].Color}");
// Output:
// ModelType ObjectDetection
// InputName images
// OutputName output0
// CustomMetaData System.Collections.Generic.Dictionary`2[System.String,System.String]
// date 2023-11-07T13:33:33.565196
// description Ultralytics YOLOv8n model trained on coco.yaml
// author Ultralytics
// task detect
// license AGPL-3.0 https://ultralytics.com/license
// version 8.0.202
// stride 32
// batch 1
// imgsz [640, 640]
// names {0: 'person', 1: 'bicycle', 2: 'car' ... }
// ImageSize Size [ Width=640, Height=640 ]
// Input Input { BatchSize = 1, Channels = 3, Width = 640, Height = 640 }
// Output ObjectDetectionShape { BatchSize = 1, Elements = 84, Channels = 8400 }
// Labels YoloDotNet.Models.LabelModel[]
//
// Labels (80):
// ---------------------------------------------------------
// index: 0 label: person color: #5d8aa8
// index: 1 label: bicycle color: #f0f8ff
// index: 2 label: car color: #e32636
// index: 3 label: motorcycle color: #efdecd
// ...
Donate
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net8.0
- Microsoft.ML.OnnxRuntime.Gpu (>= 1.19.2)
- SkiaSharp (>= 2.88.8)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on YoloDotNet:
Package | Downloads |
---|---|
VL.YoloDotNet
YoloDotNet for VL |
GitHub repositories
This package is not used by any popular GitHub repositories.
YoloDotNet 2.1, packing more punch than ever! This release builds on the foundation of the previous "Speed Demon" v2.0 update and adds some exciting new features while keeping everything buttery smooth. Compatibility with older versions has been ensured, and a few tweaks were made for even faster object detection performance. Check out what's new:
Yolov11 Support: The latest and greatest object detection model is now available. Why settle for anything less?
Backward Compatibility for Yolov9: Missing the good ol' Yolov9? Now you can switch between Yolov8-v11 versions. Yay!
Minor Optimizations: A sprinkle of tweaks here and there for even faster object detection, because... uh, more speed is always better!
OnnxRuntime Update: Now featuring support for CUDA 12.x and cuDNN 9.x. The GPU will definitely be happy with this one!
YoloDotNet v2.1 – faster, smarter, and packed with more Yolo goodness ;)
Repo at: https://github.com/NickSwardh/YoloDotNet