yolov5解读,训练,复现

小白的第一篇csdn...最近在准备小论文,大概率是目标检测方向了,没经验,慢慢学,本文只是跟着b站的天才up主一起训练和复现,这里只是我记录yolov5的学习历程,都是大白话,没有专业术语,肯定也会说错很多东西,但是我都想记录在这里,这样就不会忘记啦,如果有幸被人刷到我的博客,也请多多指点,多多交流!

one step: 先去github上把官方的yolov5的代码都拉下来了  链接如下:GitHub - ultralytics/yolov5: YOLOv5 in PyTorch > ONNX > CoreML > TFLite

一、几种数据增强的方法

正文之前:  提一下rectangularyolov5解读,训练,复现_第1张图片

up主解释了一下,这是yolov5中为了加快模型训练而采取的一种策略

在原来的训练数据过程中,由于每张图片宽和高不相同,而我们会将每张图片shape到一个固定的大小,这样一来,不同尺寸的图片就可以丢到同一个batch中进行训练了。但是有些图片进行resize后会出现黑边,这种黑边会影响我们训练和预测的速度。

基于原来的现象,在yolov5中进行了改进,也就是说在同一个batch里面尽可能的保证每张图片保留自己的shape(宽高),满足这个batch中的所有图片都会有较小的黑边,如最后一张狗狗图,它在某一个batch中最后的shape是520*640,这样一来,它能减少的计算量是非常可观的。

这里不得不说,up主真的很良心,把所有的数据增强的实例都放在这个这个jupyter上面,大家可以去这个github上自行搜索一下:yolov5_in_tf2_keras/data at master · yyccR/yolov5_in_tf2_keras · GitHub

yolov5解读,训练,复现_第2张图片

 配合up主的讲解食用效果更佳~:2. 数据增强细节_哔哩哔哩_bilibili

ok 写到这里,我突然发现这个up主讲的我有些听不懂了,于是我又去寻觅一个讲的更接地气一点的up主:我是土堆  突然发现从一开始 他就真的讲的好细致,推荐推荐推荐!!!! 不过上述讲解数据增强的部分还是很值得一听的,多学点东西肯定没坏处。

为什么我说土堆细呢,是因为一开始他就解决了困扰我很久的问题,也就是我们经常在视频中看到的从github上下载下来的代码跟我们实际自己拉下来的代码不一样,这是因为作者会对代码进行更新,解决办法就是我们可以自行选择作者上传的版本....(也许很多人已经知道了,但也不妨碍还有很多人不知道,比如我...)

yolov5解读,训练,复现_第3张图片

 二、环境的配置问题

首先,找到这个项目的requirements.txt文件,一般来说我们只用执行上面的pip指令,就能够将这个项目所需要的包下载到自己的pytorch环境中。(注意,要从base环境转到自己的pytorch环境中哦)如果作者没有写这个文件的话,那就只能自己去运行的时候,根据报错来安装缺少的包了。yolov5解读,训练,复现_第4张图片

 三、如何利用yolov5进行预测

 即开源作者为我们提供了训练好的模型,我们如何用这个模型在实际场景中进行应用,看一下在不同场景中它的检测效果如何。

3.1  README.md中有什么

 首先对模型做了一个简单的对比 我们会发现右边有YOLOv5s6---x6 越往下代表模型结构越复杂。

yolov5解读,训练,复现_第5张图片

yolov5解读,训练,复现_第6张图片

其次,作者还放上了一些教程,比如如何训练自己的数据集,如果想训练出好的结果,作者给出的相关建议和日志等等。

最后来看一下Inference,讲解的是如何利用已经训练好的模型进行网络预测。

yolov5解读,训练,复现_第7张图片

 3.2 我在运行detect.py时遇到的各种问题

可以参考这个博客,我报错的问题跟里面是一模一样的,如果有小伙伴也是这种问题,直接跟着操作一遍就ok。

yolov5 5.0 报错日常Can‘t get attribute ‘SPPF‘ on <module ‘models.common‘ from ‘D:\\Pycharm\\Code\\yolov5_:)�东东要拼命的博客-CSDN博客

3.3 现在来记录一下各种参数的意义和作用 

关于YOLOv5-p5和YOLOv6-p6

yolov5解读,训练,复现_第8张图片

我们在输入一张图片的时候,会将其resize到我们指定的图片大小,那么问题就来了,输出的时候我们的图片大小是不是就变了?答案是否定的

我们输出的图片大小依然与输入图片大小保持一致,只是在网络训练的过程中把尺寸进行缩放。

 yolov5解读,训练,复现_第9张图片

 NMS:非极大值抑制

 在检测过程中,会圈出不同的区域,我们就要想办法从这些框中选择最优框,NMS就是用来解决这个问题的。

yolov5解读,训练,复现_第10张图片

这种情况下,我们采用的是IOU的方法

什么是IOU呢?-----即两个区域的交并比

yolov5解读,训练,复现_第11张图片

 yolov5解读,训练,复现_第12张图片

yolov5解读,训练,复现_第13张图片

 在图片中我已经记录了detect.py文件中每个参数的意义和作用,上述所创建的参数,最后都会被保存在opt这个变量中。

 四、训练yolov5模型(开始炼丹了...)

在开始之前,up主分两种情况讲解了炼丹的过程,分别是在自己电脑的CPU上 or 在云端GPU上,我用的是实验室的服务器,应该没什么大问题,简单记录一下,如果up主有详解代码的部分,我会直接将视频链接贴在下方,大家可以自行观看。如果我的训练过程除了啥问题,我也会记录下来,希望我能够顺畅的炼完丹!!!!!

跑模型时遇见的问题记录:

1.module 'distutils' has no attribute 'version'  

问题出现的原因:setuptools的版本太高导致

问题解决:

1.pip uninstall setuptools 记住,一定不可以使用conda uninstall  原因我这个小白也不是很清楚 我搜索的时候得到的答案是说 因为conda在卸载的时候会自动分析与其相关的库 然后全部删除,这样的话,可能很多你本来不想删除的东西都被删除了...

2.pip或者conda install setuptools==58.0.4 (如果你安装的是59的版本 很可能安装不上 因为现在的setuptools版本已经更新到67了吧 很多老版本只是部分保留下来了 anyway 如果58这个版本能装就装这个!)

2.Dataset autodownload failureyolov5解读,训练,复现_第14张图片

这个错误是发生在自动下载COCO数据集前128张图片时出现的,下载到94%的时候跟我说下载失败....服咯  

解决办法呢 就是自己点开这个下载网址,下载解压以后一定要放到和yolov5同一级目录下,如果跟我一样用服务器的话,必须要上传到服务器里才可以,不能放到yolov5文件夹下面,要和它是同一级才可以!!!!

 五、如何制作和训练自己的数据集

1.如果我们有数据集,那么要对其进行标注

2.如果没有数据集,要根据自己的需要获得数据集,进行人工标注

3.自己获得数据集,半人工标注(利用已经训练好的网络,对数据集进行简单的标注,然后自己进行微调)

4.仿真数据集(GAN,数字图像处理的方式)

假设我们要做与汽车相关的数据集:

1.首先去搜索有关汽车的图片,或者自己拍下来的汽车图片,保存到电脑中

2.使用Make Sense在线标注工具创建标签

yolov5解读,训练,复现_第15张图片

yolov5解读,训练,复现_第16张图片

yolov5解读,训练,复现_第17张图片

yolov5解读,训练,复现_第18张图片

yolov5解读,训练,复现_第19张图片

yolov5解读,训练,复现_第20张图片

yolov5解读,训练,复现_第21张图片

yolov5解读,训练,复现_第22张图片

 yolov5解读,训练,复现_第23张图片

yolov5解读,训练,复现_第24张图片

yolov5解读,训练,复现_第25张图片

yolov5解读,训练,复现_第26张图片

如何导出数据?

yolov5解读,训练,复现_第27张图片

yolov5解读,训练,复现_第28张图片

 这样就可以下载下来了

 标注工作和下载工作我们都做好了,接下来要去建立我们的数据集文件夹了。

在我们编译器中的yolov5项目里新建一个数据集文件夹,名字自己取。

 yolov5解读,训练,复现_第29张图片

然后我们需要创建一个mydata.yaml文件,用来指定我们的数据集。

yolov5解读,训练,复现_第30张图片

yolov5解读,训练,复现_第31张图片

 然后就可以愉快的跑自己数据集的代码了,最后可以用detect.py测试一下~

yolov5解读,训练,复现_第32张图片

yolov5解读,训练,复现_第33张图片

注意:

1.正常情况下是不能拿训练集的数据来进行测试的,up主这里只是简单演示一下

2.一般,作者都会把数据集放在项目的外面,或者将数据集标注成excluded

yolov5解读,训练,复现_第34张图片

到这里,yolov5就告一段落了,后续还会继续记录俺的学习历程的,加油加油!

你可能感兴趣的:(深度学习,计算机视觉,人工智能,目标检测)