当前位置: 首页 > news >正文

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

【官方框架地址】

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不支持
 

相关文章:

  • 从无到有制作docker镜像、容器详细步骤
  • 【cmu15445c++入门】(5)c++中的模板类
  • flask flask-sqlalchemy sqlit3
  • 如何顺滑使用华为云编译构建平台?
  • J3-DenseNet实战
  • 并发编程(九)
  • Vue3组件库 -- element plus 树形选择器组件怎样显示已有的树形菜单?
  • VuePress部署到GitHub Pages
  • Spark SQL基础
  • 浅研究下 DHCP 和 chrony
  • BSP视频教程第29期:J1939协议栈CAN总线专题,源码框架,执行流程和应用实战解析,面向车通讯,充电桩,模组通信等(2024-01-08)
  • Python 基础(八):函数
  • 一种DevOpts的实现方式:基于gitlab的CICD(二)
  • ROS OpenCV 图像基本处理函数
  • kylin集群使用nginx反向代理
  • 自己简单写的 事件订阅机制
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【comparator, comparable】小总结
  • es6
  • GitUp, 你不可错过的秀外慧中的git工具
  • java正则表式的使用
  • Vim Clutch | 面向脚踏板编程……
  • VUE es6技巧写法(持续更新中~~~)
  • 对超线程几个不同角度的解释
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 全栈开发——Linux
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 微信开源mars源码分析1—上层samples分析
  • 小而合理的前端理论:rscss和rsjs
  • 应用生命周期终极 DevOps 工具包
  • 终端用户监控:真实用户监控还是模拟监控?
  • gunicorn工作原理
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • 说说我为什么看好Spring Cloud Alibaba
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • # Panda3d 碰撞检测系统介绍
  • # 数论-逆元
  • (12)Hive调优——count distinct去重优化
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转)fock函数详解
  • .NET MVC 验证码
  • .net 按比例显示图片的缩略图
  • /*在DataTable中更新、删除数据*/
  • /etc/skel 目录作用
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • [16/N]论得趣
  • [2008][note]腔内级联拉曼发射的,二极管泵浦多频调Q laser——
  • [ai笔记3] ai春晚观后感-谈谈ai与艺术
  • [Asp.net MVC]Bundle合并,压缩js、css文件
  • [BUG]vscode插件live server无法自动打开浏览器
  • [cocos2d-x]关于CC_CALLBACK