Yolov5学习全过程:训练+运行+c#部署(无理论全实操)

  • 1.Yolov5 理论介绍
  • 2.Yolov5下载地址
  • 3.Yolov5使用方法
  • 4.制作训练样本
    • 4.1 labelImg 下载
    • 4.2 labelImg 注意事项
    • 4.3 labelImg 使用
  • 5.C#调用yolo的可用方法
  • 6.C# 部署onnx分类模型(我的学习全过程)
    • 6.1 导出 onnx 模型
    • 6.2 yolov5-net-master使用
      • 6.2.1使用yolov5 5.0导出模型
      • 6.2.2使用yolov5 6.1导出模型

1.Yolov5 理论介绍

使用一种算法前最好还是先了解它的来龙去脉,这里介绍一篇文章给大家YOLO系列详解

2.Yolov5下载地址

我在做项目的时候主要用了两个版本的:Yolov5 5.0 和 Yolov5 6.1,至于为什么要用两种后续会说明(主要是有的问题Yolov5 5.0解决不了改用 Yolov5 6.1)。像图片中更换Tag就可以看到不同的版本啦。
     yolov5下载地址:下载地址

3.Yolov5使用方法

刚开始的时候什么都不会,python基础也不扎实,只能上哔哩哔哩看看有什么好用的资料。分享一个非常好的学习视频yolo实操视频,我就是跟着视频学的。内容包含了如何安装环境、如何打标签、如何训练、如何修改参数等等;而且在评论区留下邮箱,up的爬虫自动发送真的不要太方便!

4.制作训练样本

网上也有很多LabelImg的资料,不过我觉得挺杂的,下面就直接分享怎么做的就好,方便大家学习。

4.1 labelImg 下载

制作样本我是用的是labelImg,它的选框都是矩形不可调整的,我们课程项目是制作芯片样本,正方形的,所以非常适用。听同学说labelIme也可以适用,而且还能框选一些不规则的图形(还没尝试过)。
这里分享我的网盘给大家:

4.2 labelImg 注意事项

1、我给大家的的 labelImg 是Win 10 exe版本(labelImg网盘:提取码abaa),真的非常方便,网上有的资料是github代码,还要配置环境才能运行。
       2、labelImg的exe文件路径一定要没有中文,不然会报错!报错图忘记留下来了,反正更换个路径,创建快捷方式放在桌面就好了!

4.3 labelImg 使用

(1)基本操作
打开之后进行以下操作:
①打开存放大量样本图片的文件
②修改文件保存的路径

       多熟悉上面的快捷键,框选起来才够快。

(2)一些其他操作
  由于我制作的样本只有一个标签‘chip’,为了以防软件总是弹出让我输入标签名字的窗口,操作②③步之后他就会自动默认所有标签都是‘chip’

5.C#调用yolo的可用方法

我们的任务是使用C#语言调用yolo,网上有好几种方法:

(1)导出onnx模型,c# 部署onnx分类模型。这分享一个github的代码:yolo-net-master。我一直都是在研究这一部分的,下面会详细讲讲。

(2)opencv中调用,c++转c#。网上有一篇教怎么使用opencv调用yolo onnx 模型.openCV调用YOLOv5 ONNX模型。我们后来也用这种方法,不过需要比较扎实的语言基础,通晓两种语言的转换。这一部分是我同学搞定的,我搞不赢,所以就不放别人的成果啦。感兴趣的可以试一下

(3)c#中调用python脚本。试过了,非常慢。调用前必须打开pycharm,并且保证python文件是可运行、编译无错的。调用时间大概在20s左右,不符合要求。调用代码如下:

 private void RunPythonScript(string sArgName, string args = "", params string[] teps){Process p = new Process();//string path = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + sArgName;// 获得python文件的绝对路径(将文件放在c#的debug文件夹中可以这样操作)string path = @"F:\输入自己的路径\detect.py";//"H:\\python_codes\\0331test.py";p.StartInfo.FileName = @"F:\输入自己的路径\python.exe";//没有配环境变量的话,可以像我这样写python.exe的绝对路径。如果配了,直接写"python.exe"即可string sArguments = path;ArrayList arrayList = new ArrayList();//arrayList.Add("com4");//arrayList.Add(57600);//arrayList.Add("password");foreach (var param in arrayList)//添加参数{sArguments += " " + sigstr;}p.StartInfo.Arguments = sArguments;//python命令的参数p.StartInfo.UseShellExecute = false;p.StartInfo.RedirectStandardOutput = true;p.StartInfo.RedirectStandardInput = true;p.StartInfo.RedirectStandardError = true;p.StartInfo.CreateNoWindow = true;p.Start();//启动进程Console.ReadLine();Console.WriteLine("执行完毕!");//查看是否执行了}

6.C# 部署onnx分类模型(我的学习全过程)

网上其实有很多参考资料,具体理论我不讲了,仅分享我的实现过程,里面有我踩过的坑,也有成功实现的过程,大家选着看就行。

6.1 导出 onnx 模型

打开yolov5 5.0中的 export文件,修改以下代码,选择自己训练出来的模型路径(导出onnx前要提前配置环境,可能要下载很多东西,这部分大家就自己查资料吧~),然后运行就能导出一个onnx模型。

       导出后的模型大概长这样的,是带有切片的。我是下载Netron软件查看的,大家也可以直接到Netron网页查看Netron网页版本。

6.2 yolov5-net-master使用

6.2.1使用yolov5 5.0导出模型

这个c#文件本身是能运行的,运行结果:

  于是,我刚开始非常单纯的直接把他的测试图片路径和onnx文件路径改了就直接用了,所以非常顺利地报错了(报错为超出索引)。


  所以,我就读一下代码,改一下主要参数。只要大概学一下yolo框架,改起来就挺简单,就那几个参数。打开其一,使用5.0的改P5,使用6.0+的改P6。由于我刚开始时使用的是yolov5 5.0,所以我下面示范怎么改P5Models


  主要改的参数就这两个,其他都是默认参数,如果在python文件里面修改过其他参数的话这里就要一一对应的。                                            
  改好之后我满怀期待,这次一定能跑了吧!于是——好的,继续报错,超出索引。好家伙,给我整不会了。后面改了好久,都是这个错误,真的要哭了。

  后来看了一篇教程(onnx调用相关问题),不能成功调用的原因在于Pytorch2ONNX不支持对slice对象赋值,所以我就按照教程,修改了yolo中的部分文件,再次导出yolo onnx 模型,导出的模型如下图:

  于是!我再次满心期待调用!依旧超出索引…晕了,这下真没辙了。这项工作也滞后了一段时间,觉得此路不通,所以我们组的其他成员就开始另谋出路,把c++代码硬转成c#来用(前面提到过的,也有放链接,我的小伙伴太强了)。
  后来,听其他组的同学汇报,他们也弄yolov5-net-master这个代码,做出来了,所以我就请教他们。和他们交流的过程中发现,他们改的参数不也和我一样吗?也没什么特别啊。所以我就开始找不同。

6.2.2使用yolov5 6.1导出模型

上面报了那么多次错,和同学讨论之后,我就怀疑是不是yolov5 5.0这个版本导出来的模型有问题而不能用在yolov5-net-master。于是我就吭哧吭哧下载yolov5 6.1重新训练。过程步骤都是差不多的,会5.0肯定也能搞定6.1.

  按照常规思路,肯定要像第一次一样,去掉onnx模型中的切片(这些上面都是有讲的)。于是去掉切片后它又又又又报错了!可怕的超出索引,又是他!
   
  后面无意中发现,不切片就能调用!!!!!!(就是不要修改common和yolo代码了,直接用export导出onnx就行!)说的非常轻描淡写,实际探索了好久…至于为什么我也不太清楚,不过现在能用真的是谢天谢地!
不过这里要提醒一点,yolov5-net-master修改参数过程和上面讲过的是一样的,但是这次要改的是P6模型,不是P5,大家别搞错啦!

  最后还要再改多一个地方,就可以成功调用啦!图片识别效果不太好请见谅,还没有加大轮数训练。

Yolov5学习全过程:训练+运行+c#部署(无理论全实操)相关推荐

  1. Spring Cloud学习笔记—网关Spring Cloud Gateway官网教程实操练习

    Spring Cloud学习笔记-网关Spring Cloud Gateway官网教程实操练习 1.Spring Cloud Gateway介绍 2.在Spring Tool Suite4或者IDEA ...

  2. yolov5 windows 下训练+ c++ TensorRT 部署在qt (vs+qtcreator) 只要一篇文章即可

    目录 1.yolov5训练自己的数据集 (1).github上下载好yolov5的代码 ​编辑 (2).yolov5的环境部署(这里是anaconda的方式 也可以pycharm 打开后直接pip i ...

  3. 风变python基础语法第11关_Python基础语法学习笔记之风变第十四关项目实操

    一.明确项目目标 需要一个图书管理系统,来帮助他管理书籍的借阅情况.他希望这个简易的程序可以做到: 二.分析过程,拆解项目 第一种用法是使用类生成实例对象.类作为实例对象的模版,每个实例创建后,都将拥 ...

  4. 学习会计实操真的有用吗?

    学习对于每个人来说都有不同的定义或者效果,有人学以致用了,最后收获了好的结果,那对于他来说就是好的,有用的:有些人还没有开始学习就意向的说学习没有用,自己都没有学习那肯定是没有用的,反正对于我身边很多 ...

  5. 【20210402期AI简报】TensorFlow-YOLOv3 从本地训练到服务器部署全过程

    导读:本期为 AI 简报 20210402 期,将为您带来 8 条相关新闻,明日寒食节~ 记得有一期有小伙伴留言说需要手势识别相关,本期它来啦~ 本文一共 2200 字,通篇阅读结束需要 5~7 分钟 ...

  6. 程序如何在两个gpu卡上并行运行_深度学习分布式训练相关介绍 - Part 1 多GPU训练...

    本篇文章主要是对深度学习中运用多GPU进行训练的一些基本的知识点进行的一个梳理 文章中的内容都是经过认真地分析,并且尽量做到有所考证 抛砖引玉,希望可以给大家有更多的启发,并能有所收获 介绍 大多数时 ...

  7. 目标检测 YOLOv5 - v6.2版本模型在瑞芯微 Rockchip设备从训练到C++部署实践

    目标检测 YOLOv5 - v6.2版本模型在瑞芯微 Rockchip设备从训练到C++部署实践 flyfish 源码地址 https://github.com/shaoshengsong/rockc ...

  8. 利用多 GPU 加速深度学习模型训练

    01 - 前言 深度学习模型通常使用 GPU 训练,因为 GPU 具有相比 CPU 更高的计算能力,以 Tesla V100 为例,使用 Tensor Core 加速的半精度浮点计算能力达到 125 ...

  9. yolov5通过ncnn在安卓平台部署

    yolov5通过ncnn在安卓平台部署 目录 1.ncnn与yolov5的关系 2.ncnn模型转换 3.ncnn安卓环境部署 4.修改ncnn-android-yolov5源码 5.运行效果 --- ...

最新文章

  1. TensorFlow XLA加速编译器
  2. 阿里原来是这么干的!Spring Boot 五种热部署方式
  3. VSEARCH让你免费使用无内存限制的USEARCH
  4. spring第五讲:aop
  5. 【Linux基础】 diff命令的参数详解和实例
  6. C++自动类型推导 : auto 与 decltype 用法
  7. android 自定义指南针,如何在android中制作自定义指南针视图
  8. 解决数据库密码为YES的问题
  9. 进销存单机版 vb.net + access_某年某月_新浪博客
  10. 设为首页,加入收藏兼容360/火狐/谷歌/IE等主流浏览器的代码
  11. 【JS】每日一题:模块化
  12. 无盘工作站给服务器ip地址协议,如何给无盘工作站安装TCP IP协议
  13. TCL作价5000万美元收购美国Novatel Wireless公司MIFI业务
  14. jsp页面如何调用本机的应用程序?例如c:/netterm.exe?(转载)
  15. AML8726调试记录
  16. 现场直击汶川地震都江堰灾情(图)
  17. python执行cmd命令,并获得返回值
  18. 图像处理之LUT表的使用
  19. 墨迹天气总显示内部服务器更新,互联网要点:墨迹天气无法更新如何解决方法教程...
  20. 什么是范式?第一范式、第二范式、第三范式的区别?

热门文章

  1. C# Windows Media Player 控件的常用属性及方法
  2. C#如何定义全局变量
  3. 大学录取通知书生成php源码,大学录取通知书生成器
  4. Android Studio的RadioButton控件
  5. lambda在python_在Python中使用lambda高效操作列表的教程
  6. uiautomator2-监视操作
  7. Unity接入iOS内购
  8. css的一些基本属性
  9. 【2022持续更新】大数据最全知识点整理-数据仓库篇
  10. DataFrame基础操作巩固——股票分析(一)