Train Yolo model in C# with TorchSharp.
With the help of this project you won't have to transform .pt model to onnx, and can train your own model in C#.
- Written in C# only.
- Train and predict your own model.
- Support Yolov5, Yolov5u, Yolov8, Yolov11 and Yolov12 now.
- Support Predict and Segment now.
- Support n/s/m/l/x size.
- Support LetterBox and Mosaic4 method for preprocessing images.
- Support NMS with GPU.
- Support Load PreTrained models from ultralytics/yolov5/yolov8/yolo11 and yolov12(converted).
- Support .Net6 or higher.
You can download yolov5/yolov8 pre-trained models here.
Prediction Checkpoints
model | n | s | m | l | x |
---|---|---|---|---|---|
yolov5 | yolov5n | yolov5s | yolov5m | yolov5l | yolov5x |
yolov5 | yolov5nu | yolov5su | yolov5mu | yolov5lu | yolov5xu |
yolov8 | yolov8n | yolov8s | yolov8m | yolov8l | yolov8x |
yolov11 | yolov11n | yolov11s | yolov11m | yolov11l | yolov11x |
Segmention Checkpoints
model | n | s | m | l | x |
---|---|---|---|---|---|
yolov8 | yolov8n | yolov8s | yolov8m | yolov8l | yolov8x |
yolov11 | yolov11n | yolov11s | yolov11m | yolov11l | yolov11x |
You can download the code or add it from nuget.
dotnet add package IntptrMax.YoloSharp
Note
Please add one of libtorch-cpu, libtorch-cuda-12.1, libtorch-cuda-12.1-win-x64 or libtorch-cuda-12.1-linux-x64 version 2.5.1.0 to execute.
In your code you can use it as below.
You can use it with the code below:
MagickImage predictImage = new MagickImage(predictImagePath);
// Create predictor
Predictor predictor = new Predictor(sortCount, yoloType: yoloType, deviceType: deviceType, yoloSize: yoloSize, dtype: dtype);
// Train model
predictor.LoadModel(preTrainedModelPath, skipNcNotEqualLayers: true);
predictor.Train(trainDataPath, valDataPath, outputPath: outputPath, batchSize: batchSize, epochs: epochs, useMosaic: true);
//ImagePredict image
predictor.LoadModel(Path.Combine(outputPath, "best.bin"));
List<Predictor.PredictResult> predictResult = predictor.ImagePredict(predictImage, predictThreshold, iouThreshold);
Use yolov5n pre-trained model to detect.
You can use it with the code below:
MagickImage predictImage = new MagickImage(predictImagePath);
// Create segmenter
Segmenter segmenter = new Segmenter(sortCount, yoloType: yoloType, deviceType: deviceType, yoloSize: yoloSize, dtype: dtype);
segmenter.LoadModel(preTrainedModelPath, skipNcNotEqualLayers: true);
// Train model
segmenter.Train(trainDataPath, valDataPath, outputPath: outputPath, batchSize: batchSize, epochs: epochs, useMosaic: false);
segmenter.LoadModel(Path.Combine(outputPath, "best.bin"));
// ImagePredict image
var (predictResult, resultImage) = segmenter.ImagePredict(predictImage, predictThreshold, iouThreshold);
Use yolov8n-seg pre-trained model to detect.