当前位置:   article > 正文

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

yolo c#

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("执行完毕!");//查看是否执行了
   
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

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,大家别搞错啦!
在这里插入图片描述
  最后还要再改多一个地方,就可以成功调用啦!图片识别效果不太好请见谅,还没有加大轮数训练。
在这里插入图片描述
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/311685
推荐阅读
相关标签
  

闽ICP备14008679号