[C#]winform部署yolov5-onnx模型

news/2024/7/11 1:13:45 标签: YOLO

【官方框架地址】

https://github.com/ultralytics/yolov5
【算法介绍】

Yolov5,全称为You Only Look Once version 5,是计算机视觉领域目标检测算法的一个里程碑式模型。该模型由ultralytics团队开发,并因其简洁高效的特点而备受关注。Yolov5在保留了前代模型(Yolov3)优点的同时,进一步优化了网络结构,提高了检测速度和准确率。

Yolov5的核心思想是利用深度学习和神经网络,对输入的图像进行多尺度特征提取,并利用回归方法预测出图像中目标物体的位置和类别信息。相较于传统的目标检测算法,Yolov5具有更高的检测精度和更快的运行速度。

Yolov5模型结构主要包括三个部分:骨干网络(Backbone)、特征金字塔网络(Feature Pyramid Network)和检测头(Detection Head)。

  1. 骨干网络:Yolov5采用了轻量级的网络结构,如CSPDarknet53和EfficientNet等,用于提取图像的多尺度特征。这些网络结构在保持高性能的同时,显著降低了模型的计算复杂度。
  2. 特征金字塔网络:特征金字塔网络在骨干网络的基础上,进一步提取多尺度的特征信息,为后续的目标检测提供丰富的特征信息。
  3. 检测头:检测头负责根据特征金字塔网络输出的特征信息,进行目标物体的位置和类别预测。Yolov5采用了类似于anchor box的方法,通过预测物体与anchor box的交并比(Intersection over Union)和类别信息,实现目标检测。

相较于前代模型,Yolov5在训练过程中采用了许多优化策略,如数据增强、学习率衰减、知识蒸馏等,进一步提高了模型的性能。此外,Yolov5还支持多任务学习(Multi-task Learning),可以在同一模型中同时进行目标检测、实例分割和关键点检测等任务,提高了模型的泛化能力。

在实际应用中,Yolov5表现出了优秀的性能。在COCO、PASCAL VOC等目标检测数据集上,Yolov5取得了领先于其他算法的准确率。此外,由于Yolov5的简洁高效特点,该模型在移动设备、嵌入式系统等领域也有着广泛的应用前景。

总的来说,Yolov5是计算机视觉领域目标检测算法的一个重要进展。它不仅提高了目标检测的准确率和速度,而且具有较低的计算复杂度和良好的泛化能力。未来,随着深度学习技术的不断发展,相信会有更多优秀的目标检测算法涌现出来,推动计算机视觉领域的技术进步。

【效果展示】


【参考实现部分代码】

using SixLabors.Fonts;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Drawing.Processing;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;
using System;
using Yolov5Net.Scorer;
using Yolov5Net.Scorer.Models;

using var image = await Image.LoadAsync<Rgba32>("Assets/test.jpg");
{
    using var scorer = new YoloScorer<YoloCocoP5Model>("Assets/Weights/yolov5n.onnx");
    {
        var predictions = scorer.Predict(image);

        var font = new Font(new FontCollection().Add("C:/Windows/Fonts/consola.ttf"), 16);

        foreach (var prediction in predictions) // draw predictions
        {
            var score = Math.Round(prediction.Score, 2);

            var (x, y) = (prediction.Rectangle.Left - 3, prediction.Rectangle.Top - 23);

            image.Mutate(a => a.DrawPolygon(new Pen(prediction.Label.Color, 1),
                new PointF(prediction.Rectangle.Left, prediction.Rectangle.Top),
                new PointF(prediction.Rectangle.Right, prediction.Rectangle.Top),
                new PointF(prediction.Rectangle.Right, prediction.Rectangle.Bottom),
                new PointF(prediction.Rectangle.Left, prediction.Rectangle.Bottom)
            ));

            image.Mutate(a => a.DrawText($"{prediction.Label.Name} ({score})",
                font, prediction.Label.Color, new PointF(x, y)));
        }

        await image.SaveAsync("Assets/result.jpg");
    }
}


【源码下载】
【测试环境】

vs2019
netframework4.7.2
onnxruntime1.16.3
opencvsharp4.8.0

注意模型在yolov5-6.0和yolov5-7.0测试通过,<6.0不支持
 


http://www.niftyadmin.cn/n/5322322.html

相关文章

HarmonyOS开发FA应用模型下多个页面的声明方式

目录 方式1 方式2 HarmonyOS配套的IDE是DevEco Studio&#xff0c;目前的版本是3.1。官网可以直接下载 HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 ​ 方式1 ​在DevEco Studio如果是在pages目录通过右键New->ArkTS File生成的文件&#xff0c;需要注意&…

UCB Data100:数据科学的原理和技巧:第二十一章到第二十六章

二十一、SQL II 原文&#xff1a;SQL II 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 学习成果 介绍过滤组的能力 在 SQL 中执行数据清理和文本操作 跨表连接数据 在本讲座中&#xff0c;我们将继续上次的工作&#xff0c;介绍一些高级的 SQL 语法。 首先&…

打印日期c++

给出年份 y和一年中的第 d天&#xff0c;算出第 d天是几月几号。 输入格式 输入包含多组测试数据。 每组数据占一行&#xff0c;包含两个整数 y 和 d。 输出格式 每组数据输出一行一个结果&#xff0c;格式为 yyyy-mm-dd。 数据范围 输入最多包含 100 组数据, 1≤y≤3000, 1≤d…

如何控制docker服务的日志输出?

引言 通过docker部署的线上服务&#xff0c;由于宿主机存储空间有限&#xff0c;加上长时间累积的客观条件下&#xff0c;会出现docker服务的控制台日志过大。再三思量后决定不输出控制台日志&#xff0c;从而从根源解决此问题。 在Docker Compose中&#xff0c;您可以通过添加…

权值初始化

一、梯度消失与爆炸 在神经网络中&#xff0c;梯度消失和梯度爆炸是训练过程中常见的问题。 梯度消失指的是在反向传播过程中&#xff0c;梯度逐渐变小&#xff0c;导致较远处的层对参数的更新影响较小甚至无法更新。这通常发生在深层网络中&#xff0c;特别是使用某些激活函…

C++指针与引用的对比

交换a、b值 方法一 使用指针&#xff0c;需在传参时传递地址&#xff0c;并且需新定义两个指针变量分别指向a、b。 void Swap(int* p1, int* p2) {int t;t *p1;*p2 *p1;*p2 t; }//注意两处的*含义不同&#xff0c;第一处*是定义指针变量&#xff0c;*只是起到说明作用 /…

jenkins环境搭建

jenkins环境搭建 1.环境说明2.环境准备1.jdk安装2.安装Git3.安装sshpass4.安装Maven 3.安装Jenkins(war包方式安装)1.安装2.镜像加速 4.官网提供的yum方式安装5.访问 1.环境说明 keyvalue环境centos7jdk版本11git2.43.0maven3.9.6jenkins最新版本http://mirrors.jenkins-ci.or…

RTTI结构详细分析(VC++)

对于RTTI结构的资料真的屈指可数,类的逆向也一直是一个不好弄的问题.对此我只想贡献我的一份力量。 文中我不会分析类的内存布局,因为有很多资料已经分析的挺好的了(见参考资料)。但是现有我能找到的资料对RTTI结构的表述不完整,或者表述模糊不清,参考Clang的部分源码后&#…