【C#深度学习之路】如何使用C#实现Yolo5/8/11全尺寸模型的训练和推理

【C#深度学习之路】如何使用C#实现Yolo5/8/11全尺寸模型的训练和推理

本文为原创文章,若需要转载,请注明出处。

原文地址:https://blog.csdn.net/qq_30270773/article/details/144918684

项目对应的Github地址:https://github.com/IntptrMax/YoloSharp

C#深度学习之路专栏地址:https://blog.csdn.net/qq_30270773/category_12829217.html

关注我的Github,可以获取更多资料,请为你感兴趣的项目送上一颗小星星:https://github.com/IntptrMax

另外本人已经在多平台上发现了不做任何修改直接照抄就发布我的文章的盗版行为,还将我的开源免费资源当成付费资源发布的行为,对此表示强烈的不满。这种"盗窃知识"的行为严重损害了开源项目作者的个人利益以及开源共享精神。

项目背景

本人已经在Github及CSDN上连续发布了Yolov5,Yolov8,Yolov11模型的训练及推理的源码及实现方法介绍,这些项目成功实现了Yolo模型在C#平台上的训练。不过仍有一些小伙伴表示项目用起来还是存在一定的困难。因此我将几个项目进行了封装,实现了调用方法的统一,以方便小伙伴们使用。

如果该资料对你有帮助,请在我的Github上送我一颗小星星。该项目的Github链接为https://github.com/IntptrMax/YoloSharp

项目实现

对于单独的Yolov5、Yolov8、Yolov11的实现原理及代码,请参考C#深度学习之路专栏内的相关文章。

建立一个Predictor类,用来统一Yolov5、Yolov5u、Yolov8、Yolov11的调用。其中Yolov5的Detect和Loss与Yolov8、Yolov11有很大的差异。Ultralytics为了将Yolov5统一进模型中,故又提供了Yolov5u模型。Predictor中提供了Train和Predict方法,以方便调用。

调用方法

可以直接从Github或CSDN上下载源码进行编译,生成dll以方便在其他项目中调用。另外还在Nuget中发布了这个包,使用包管理器搜索IntptrMax.YoloSharp,也可以使用.net cli工具拉取

csharp 复制代码
dotnet add package IntptrMax.YoloSharp --version 1.0.0

或者

csharp 复制代码
PM> NuGet\Install-Package IntptrMax.YoloSharp -Version 1.0.0

另外还需要一个环境依赖,仍旧是在Nuget中拉取依赖包。根据使用环境不同,可以选用

libtorch-cpu, libtorch-cuda-12.1, libtorch-cuda-12.1-win-x64 或

libtorch-cuda-12.1-linux-x64 version 2.5.1.0

其中任意一个即可。

环境配置完成后,调用方法如下:

csharp 复制代码
string trainDataPath = @"..\..\..\Assets\coco128"; // Training data path, it should be the same as coco dataset.
string valDataPath = @"..\..\..\Assets\coco128"; // If valDataPath is "", it will use trainDataPath as validation data.
string outputPath = "result";    // Trained model output path.
string preTraindModelPath = @"..\..\..\Assets\PreTrainedModels\yolov8n.bin"; // Pretrained model path.
string predictImagePath = @"..\..\..\Assets\TestImage\zidane.jpg";
int batchSize = 8;
int sortCount = 80;
int epochs = 100;
float predictThreshold = 0.5f;
float iouThreshold = 0.5f;

YoloType yoloType = YoloType.Yolov8;
DeviceType deviceType = DeviceType.CUDA;
ScalarType dtype = ScalarType.Float32;
YoloSize yoloSize = YoloSize.n;

Bitmap inputBitmap = new Bitmap(predictImagePath);

// Create predictor
Predictor predictor = new Predictor(sortCount, yoloType: yoloType, deviceType: deviceType, yoloSize: yoloSize, dtype: dtype);

// Train model
predictor.LoadModel(preTraindModelPath);
predictor.Train(trainDataPath, valDataPath, outputPath: outputPath, batchSize: batchSize, epochs: epochs);

// Predict image
predictor.LoadModel(Path.Combine(outputPath, "best.bin"));
var results = predictor.ImagePredict(inputBitmap, predictThreshold, iouThreshold);

results保存了推理的结果。result这个类结构如下:

csharp 复制代码
public class PredictResult
{
	public int ClassID;
	public float Score;
	public int X;
	public int Y;
	public int W;
	public int H;
}

得到的结果以图片形式展示并保存:

csharp 复制代码
// Draw results
Graphics g = Graphics.FromImage(inputBitmap);
foreach (var result in results)
{
	Point point = new Point(result.X - result.W / 2, result.Y - result.H / 2);
	string str = string.Format("Sort:{0}, Score:{1:F1}%", result.ClassID, result.Score * 100);
	g.DrawRectangle(Pens.Red, new Rectangle(point, new Size(result.W, result.H)));
	g.DrawString(str, new Font(FontFamily.GenericMonospace, 10), new SolidBrush(Color.Red), point);
	Console.WriteLine(str);
}
g.Save();
inputBitmap.Save("pred.jpg");

这样就完成了该项目的使用,使用完整的训练+推理,核心代码只有5行,真正简化了项目的使用。

项目效果如下

项目展望

目前已经实现了Yolov5、Yolov8、Yolov11的训练和推理方法,并且已经可以成功加载官方的预训练模型进行,或作为训练的基础权重。

目前本人正在适配Segment方法,过段时间估计会有新的进展。

写在最后

使用C#深度学习项目是很多人所希望的。不过在该方向上资料很少,开发难度大。常规使用C#进行深度学习项目的方法为使用Python训练,转为Onnx模型再用C#调用。

目前我希望能够改变这一现象,希望能用纯C#平台进行训练和推理。这条路还很长,也很困难,希望有兴趣的读者能跟我一起让让C#的深度学习开发环境更为完善,以此能帮助到更多的人。

另外随着项目的关注度增多,已经开始有人盗版我的项目并将免费开源的项目当成付费项目在卖了。这种行为极其恶劣,请各位小伙伴积极抵制这种行为,还开源项目一片干净的环境,也让开源项目开发者有动力继续贡献更多的项目。

我在Github上已经将完整的代码发布了,项目地址为:https://github.com/IntptrMax/YoloSharp,期待你能在Github上送我一颗小星星。在我的Github里还GGMLSharp这个项目,这个项目也是C#平台下深度学习的开发包,希望能得到你的支持。

项目下载链接

https://download.csdn.net/download/qq_30270773/89969923

相关推荐
聆风吟º2 小时前
CANN runtime 全链路拆解:AI 异构计算运行时的任务管理与功能适配技术路径
人工智能·深度学习·神经网络·cann
AI_56782 小时前
AWS EC2新手入门:6步带你从零启动实例
大数据·数据库·人工智能·机器学习·aws
User_芊芊君子2 小时前
CANN大模型推理加速引擎ascend-transformer-boost深度解析:毫秒级响应的Transformer优化方案
人工智能·深度学习·transformer
智驱力人工智能3 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
工程师老罗3 小时前
YOLOv1 核心结构解析
yolo
懒人咖3 小时前
缺料分析时携带用料清单的二开字段
c#·金蝶云星空
人工不智能5773 小时前
拆解 BERT:Output 中的 Hidden States 到底藏了什么秘密?
人工智能·深度学习·bert
h64648564h3 小时前
CANN 性能剖析与调优全指南:从 Profiling 到 Kernel 级优化
人工智能·深度学习
心疼你的一切3 小时前
解密CANN仓库:AIGC的算力底座、关键应用与API实战解析
数据仓库·深度学习·aigc·cann
Lun3866buzha4 小时前
YOLOv10-BiFPN融合:危险物体检测与识别的革新方案,从模型架构到实战部署全解析
yolo