Yolov8训练方式以及C#中读取yolov8+onnx模型进行目标检测.NET 6.0

目录

首先你要定义v8的模型特征文件

下方是完整的模型编写函数

然后你要在控件窗体中定义应用这些方法以及函数

一、定义你的标签

二、下方是定义模块和坐标的方法

三、画框

完整推理函数代码块

效果展示

完整源码


训练其实和yolov10差不多 因为v10就是在v8的基础上做了优化

YoloV10 训练自己的数据集(推理,转化,C#部署)_c# yolo-CSDN博客

首先你要定义v8的模型特征文件

下方是完整的模型编写函数

复制代码
protected List<Prediction> ParseOutput(DenseTensor<float> output, Image image)
{
    DenseTensor<float> output2 = output;
    ConcurrentBag<Prediction> result = new ConcurrentBag<Prediction>();
    int width = image.Width;
    int height = image.Height;
    int w = width;
    int h = height;
    float num = (float)base.ModelInputWidth / (float)w;
    float num2 = (float)base.ModelInputHeight / (float)h;
    float val = num;
    float val2 = num2;
    float gain = Math.Min(val, val2);
    num = ((float)base.ModelInputWidth - (float)w * gain) / 2f;
    float num3 = ((float)base.ModelInputHeight - (float)h * gain) / 2f;
    float xPad = num;
    float yPad = num3;
    Parallel.For(0, output2.Dimensions[0], delegate (int i)
    {
        Parallel.For(0, (int)(output2.Length / output2.Dimensions[1]), delegate (int j)
        {
            float xMin = (output2[new int[3] { i, 0, j }] - output2[new int[3] { i, 2, j }] / 2f - xPad) / gain;
            float yMin = (output2[new int[3] { i, 1, j }] - output2[new int[3] { i, 3, j }] / 2f - yPad) / gain;
            float xMax = (output2[new int[3] { i, 0, j }] + output2[new int[3] { i, 2, j }] / 2f - xPad) / gain;
            float yMax = (output2[new int[3] { i, 1, j }] + output2[new int[3] { i, 3, j }] / 2f - yPad) / gain;
            xMin = Utils.Clamp(xMin, 0f, w);
            yMin = Utils.Clamp(yMin, 0f, h);
            xMax = Utils.Clamp(xMax, 0f, w - 1);
            yMax = Utils.Clamp(yMax, 0f, h - 1);
            Parallel.For(0, base.ModelOutputDimensions - 4, delegate (int l)
            {
                float num4 = output2[new int[3]
                {
                    i,
                    4 + l,
                    j
                }];
                if (!(num4 < base.Confidence))
                {
                    result.Add(new Prediction
                    {
                        Label = base.Labels[l],
                        Score = num4,
                        Rectangle = new RectangleF(xMin, yMin, xMax - xMin, yMax - yMin)
                    });
                }
            });
        });
    });
    return result.ToList();
} 

然后你要在控件窗体中定义应用这些方法以及函数

一、定义你的标签

标签你也可以将其写成txt文件再用ReadAllText方法进行读取也是可以的

二、下方是定义模块和坐标的方法

三、画框

完整推理函数代码块
复制代码
private void showimg(OpenFileDialog dialog)
{
    string imgpath = dialog.FileName;

    Image image = System.Drawing.Image.FromFile(imgpath);
    Form form = new Form();
    form.Text = dialog.SafeFileName + " " + image.Width + "x" + image.Height;

    PictureBox pictureBox = new PictureBox();
    pictureBox.Parent = form;
    //图像预测
    var predictions = yolov8.Predict(image);
    // Draw your boxes
    //using var graphics = Graphics.FromImage(image);
    foreach (var pred in predictions)
    {
        var originalImageHeight = image.Height;
        var originalImageWidth = image.Width;

        var x = Math.Max(pred.Rectangle.X, 0);
        var y = Math.Max(pred.Rectangle.Y, 0);
        Console.WriteLine(x);
        Console.WriteLine(y);
        var width = Math.Min(originalImageWidth - x, pred.Rectangle.Width);
        var height = Math.Min(originalImageHeight - y, pred.Rectangle.Height);

        // 框定义
        string text = $"{pred.Label.Name} [{pred.Score}]";

        using (Graphics graphics = Graphics.FromImage(image))
        {
            graphics.CompositingQuality = CompositingQuality.HighQuality;
            graphics.SmoothingMode = SmoothingMode.HighQuality;
            graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;

            // 
            Font drawFont = new Font("consolas", 11, FontStyle.Regular);
            SizeF size = graphics.MeasureString(text, drawFont);
            SolidBrush fontBrush = new SolidBrush(Color.Black);
            Point atPoint = new Point((int)x, (int)y - (int)size.Height - 1);

            // 
            Pen pen = new Pen(Color.Yellow, 2.0f);
            SolidBrush colorBrush = new SolidBrush(Color.Yellow);

            // 画框
            graphics.FillRectangle(colorBrush, (int)x, (int)(y - size.Height - 1), (int)size.Width, (int)size.Height);
            graphics.DrawString(text, drawFont, fontBrush, atPoint);

            // Draw bounding box on image
            graphics.DrawRectangle(pen, x, y, width, height);
        }
    }
    
    pictureBox.Width = image.Width;
    pictureBox.Height = image.Height;
    pictureBox1.Image = (Bitmap)image.Clone();


}
效果展示
完整源码

C#+Yolov8+onnxnet6.0目标检测推理资源-CSDN文库

相关推荐
QQ676580085 分钟前
基于cnn的YOLOV8算法 智慧城市环境治理之河道垃圾检测 地面垃圾落地识别 碎料垃圾检测 深度学习第10422期
深度学习·yolo·cnn·环境治理·河道垃圾检测·地面垃圾落地识别·碎料垃圾检测
QQ6765800812 小时前
服装计算机视觉数据集 连衣裙数据集 衣服类别识别 毛衣数据集 夹克衫AI识别 衬衫识别 裤子 数据集 yolo格式数据集
人工智能·yolo·计算机视觉·连衣裙·衣服类别·毛衣数据集·夹克衫ai
云程笔记18 小时前
021.损失函数深度解读:YOLO的定位、置信度、分类损失计算
人工智能·yolo·机器学习·计算机视觉·分类·数据挖掘
羊羊小栈19 小时前
基于「YOLO目标检测 + 多模态AI分析」的智慧农业茶叶病害检测预警系统
人工智能·yolo·目标检测·计算机视觉·毕业设计·大作业
angleboy820 小时前
【原创】如何WIN 10/11系统下解决YOLOv13训练异常的安装指南
人工智能·深度学习·yolo
前端摸鱼匠21 小时前
YOLOv11 在零售领域实战:利用公开的商品检测数据集 (如 SKU110K 的子集),训练一个 YOLOv11 模型,用于识别货架上的各种商品
人工智能·yolo·目标检测·ai·目标跟踪·视觉检测·零售
深度学习lover1 天前
<数据集>yolo微藻识别<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·微藻识别
superior tigre1 天前
某为25.9.28 Yolo检测器中的anchor聚类(python实现)
python·yolo·聚类
小卡布聊技术1 天前
YOLOv8
yolo
动物园猫1 天前
电缆损坏目标检测数据集分享(YOLO系列)| 电缆断裂 雷击损伤 断股 烧蚀痕迹 输电线路巡检 目标检测标注
人工智能·yolo·目标检测