小白的第一篇csdn...最近在准备小论文,大概率是目标检测方向了,没经验,慢慢学,本文只是跟着b站的天才up主一起训练和复现,这里只是我记录yolov5的学习历程,都是大白话,没有专业术语,肯定也会说错很多东西,但是我都想记录在这里,这样就不会忘记啦,如果有幸被人刷到我的博客,也请多多指点,多多交流!
one step: 先去github上把官方的yolov5的代码都拉下来了 链接如下:GitHub - ultralytics/yolov5: YOLOv5 in PyTorch > ONNX > CoreML > TFLite
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
配合up主的讲解食用效果更佳~:2. 数据增强细节_哔哩哔哩_bilibili
ok 写到这里,我突然发现这个up主讲的我有些听不懂了,于是我又去寻觅一个讲的更接地气一点的up主:我是土堆 突然发现从一开始 他就真的讲的好细致,推荐推荐推荐!!!! 不过上述讲解数据增强的部分还是很值得一听的,多学点东西肯定没坏处。
为什么我说土堆细呢,是因为一开始他就解决了困扰我很久的问题,也就是我们经常在视频中看到的从github上下载下来的代码跟我们实际自己拉下来的代码不一样,这是因为作者会对代码进行更新,解决办法就是我们可以自行选择作者上传的版本....(也许很多人已经知道了,但也不妨碍还有很多人不知道,比如我...)
首先,找到这个项目的requirements.txt文件,一般来说我们只用执行上面的pip指令,就能够将这个项目所需要的包下载到自己的pytorch环境中。(注意,要从base环境转到自己的pytorch环境中哦)如果作者没有写这个文件的话,那就只能自己去运行的时候,根据报错来安装缺少的包了。
即开源作者为我们提供了训练好的模型,我们如何用这个模型在实际场景中进行应用,看一下在不同场景中它的检测效果如何。
首先对模型做了一个简单的对比 我们会发现右边有YOLOv5s6---x6 越往下代表模型结构越复杂。
其次,作者还放上了一些教程,比如如何训练自己的数据集,如果想训练出好的结果,作者给出的相关建议和日志等等。
最后来看一下Inference,讲解的是如何利用已经训练好的模型进行网络预测。
可以参考这个博客,我报错的问题跟里面是一模一样的,如果有小伙伴也是这种问题,直接跟着操作一遍就ok。
yolov5 5.0 报错日常Can‘t get attribute ‘SPPF‘ on <module ‘models.common‘ from ‘D:\\Pycharm\\Code\\yolov5_:)�东东要拼命的博客-CSDN博客
关于YOLOv5-p5和YOLOv6-p6
我们在输入一张图片的时候,会将其resize到我们指定的图片大小,那么问题就来了,输出的时候我们的图片大小是不是就变了?答案是否定的
我们输出的图片大小依然与输入图片大小保持一致,只是在网络训练的过程中把尺寸进行缩放。
NMS:非极大值抑制
在检测过程中,会圈出不同的区域,我们就要想办法从这些框中选择最优框,NMS就是用来解决这个问题的。
这种情况下,我们采用的是IOU的方法
什么是IOU呢?-----即两个区域的交并比
在图片中我已经记录了detect.py文件中每个参数的意义和作用,上述所创建的参数,最后都会被保存在opt这个变量中。
在开始之前,up主分两种情况讲解了炼丹的过程,分别是在自己电脑的CPU上 or 在云端GPU上,我用的是实验室的服务器,应该没什么大问题,简单记录一下,如果up主有详解代码的部分,我会直接将视频链接贴在下方,大家可以自行观看。如果我的训练过程除了啥问题,我也会记录下来,希望我能够顺畅的炼完丹!!!!!
跑模型时遇见的问题记录:
问题出现的原因:setuptools的版本太高导致
问题解决:
1.pip uninstall setuptools 记住,一定不可以使用conda uninstall 原因我这个小白也不是很清楚 我搜索的时候得到的答案是说 因为conda在卸载的时候会自动分析与其相关的库 然后全部删除,这样的话,可能很多你本来不想删除的东西都被删除了...
2.pip或者conda install setuptools==58.0.4 (如果你安装的是59的版本 很可能安装不上 因为现在的setuptools版本已经更新到67了吧 很多老版本只是部分保留下来了 anyway 如果58这个版本能装就装这个!)
这个错误是发生在自动下载COCO数据集前128张图片时出现的,下载到94%的时候跟我说下载失败....服咯
解决办法呢 就是自己点开这个下载网址,下载解压以后一定要放到和yolov5同一级目录下,如果跟我一样用服务器的话,必须要上传到服务器里才可以,不能放到yolov5文件夹下面,要和它是同一级才可以!!!!
1.如果我们有数据集,那么要对其进行标注
2.如果没有数据集,要根据自己的需要获得数据集,进行人工标注
3.自己获得数据集,半人工标注(利用已经训练好的网络,对数据集进行简单的标注,然后自己进行微调)
4.仿真数据集(GAN,数字图像处理的方式)
假设我们要做与汽车相关的数据集:
1.首先去搜索有关汽车的图片,或者自己拍下来的汽车图片,保存到电脑中
2.使用Make Sense在线标注工具创建标签
如何导出数据?
这样就可以下载下来了
标注工作和下载工作我们都做好了,接下来要去建立我们的数据集文件夹了。
在我们编译器中的yolov5项目里新建一个数据集文件夹,名字自己取。
然后我们需要创建一个mydata.yaml文件,用来指定我们的数据集。
然后就可以愉快的跑自己数据集的代码了,最后可以用detect.py测试一下~
注意:
1.正常情况下是不能拿训练集的数据来进行测试的,up主这里只是简单演示一下
2.一般,作者都会把数据集放在项目的外面,或者将数据集标注成excluded
到这里,yolov5就告一段落了,后续还会继续记录俺的学习历程的,加油加油!