手把手带你调参YOLOv5 (v5.0 您所在的位置:网站首页 时间在哪儿调整 手把手带你调参YOLOv5 (v5.0

手把手带你调参YOLOv5 (v5.0

2024-07-04 06:41| 来源: 网络整理| 查看: 265

🌟想了解YOLO系列算法更多教程欢迎订阅我的专栏🌟

对于基础薄弱的同学来说,推荐阅读《目标检测蓝皮书》📘,里面涵盖了丰富的目标检测实用知识,是你迅速掌握目标检测的理想选择!

如果想了解 YOLOv5 和 YOLOv7 系列算法的训练和改进,可以关注专栏《YOLOv5/v7 改进实战》🌟。该专栏涵盖了丰富的YOLO实用教程,专门为改进YOLO的同学而设计。该专栏阅读量已经突破60w+🚀,被誉为全网最经典的教程!所有的改进方法都提供了详细的手把手教学!

《YOLOv5/v7 进阶实战》🏅专栏是在《YOLOv5/v7 改进实战》🌟专栏上进一步推出的更加有难度的专栏,除大量的最新最前沿改进外,还包含多种手把手的部署压缩教程,内容不仅可以用于小论文,也可用于大论文!

想了解 YOLOv8 系列算法教程的同学可以关注这个专栏《YOLOv8改进实战》🍀,这个专栏为博主精心设计的最新专栏,随 YOLOv8 官方项目实时更新,内容以最新最前沿的改进为主,专栏内容包含【检测】【分类】【分割】【关键点】任务!

手把手带你调参Yolo v5 (v5.0-v7.0)(一)

如果感觉有帮助的话请点赞支持下👍📖🌟 更新日志:2023/10/22 对部分章节做了更加详细的解释。 更新日志:2022/5/3 修改了4.2.12一处图片标注错误。 更新日志:2022/5/17 对部分图片添加水印。 更新日志:2022/8/27 修改了文章标题,v6.2的detect文件中并没有添加新的参数。 更新日志:2022/9/1 对agnostic-nms🍀进行了更加细致的解释。 更新日志:2023/1/22 对文章进行排版和细节补充。

文章目录 手把手带你调参Yolo v5 (v5.0-v7.0)(一)1. 代码获取方式🍀2. 准备项目环境✨3. YOLOv5命令行预测方式介绍💡4. detect.py文件解读🚀4.1 检测一下看看效果4.2 参数详解4.2.1 “weights”4.2.2 “source”4.2.3 “data”4.2.4 “imgsz, img, img-size”4.2.5 “conf-thres”4.2.6 “iou-thres”4.2.6.1 NMS介绍4.2.6.2 不同阈值例子 4.2.7 “max-det”4.2.8 “device”4.2.9 action='store_true' 说明💡4.2.10 “view-img”4.2.11 “save-txt”4.2.12 “save-conf”4.2.13 “save-crop”4.2.14 “nosave”4.2.15 “classes” 💡4.2.16 “agnostic-nms”🍀4.2.17 “augment”4.2.18 “visualize”4.2.19 “update”4.2.20 “project”4.2.21 “name”4.2.22 “exist-ok”4.2.23 “line-thickness”4.2.24 “hide-labels”4.2.25 “hide-conf”4.2.26 “half”4.2.27 “dnn” 参考文献;小彩蛋:🎉本人更多YOLOv5实战内容导航🍀🌟🚀

1. 代码获取方式🍀

项目地址:https://github.com/ultralytics/yolov5

进入仓库点击tags可以查看项目目前提供的版本。

git 指令下载方式:

git clone https://github.com/ultralytics/yolov5.git

在这里插入图片描述在这里插入图片描述

目前已更新到v7.0版本,参数作用和先前版本相同。

2. 准备项目环境✨

安装环境不做过多介绍,可以通过作者提供的requirements.txt文件进行快速安装。

即在终端中键入如下指令:

conda create -n yolov5_env python=3.8 conda activate yolov5_env pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

requirements.txt文件里面有一些包被注释掉了,这些包是做一些额外的操作时候用的,不安装并不会影响训练和测试;但是有些工具是将.pt文件转换成.onnx时必须安装的;以后会介绍.pt怎么转换成.onnx,这些用的时候安装就可以。

在这里插入图片描述

3. YOLOv5命令行预测方式介绍💡

这里介绍一下官方给提供的预测方式,我们平时都是在Pycharm中点击“运行”按钮去预测模型,其实还可以通过命令行的方式去预测,预测后的结果会自动保存到runs/detect/路径下;其实在这条指令后面还可以加上一些参数,具体怎么加后面会详细说明。

python detect.py --source 0 # webcam img.jpg # image vid.mp4 # video path/ # directory path/*.jpg # glob 'https://youtu.be/Zgi9g1ksQHc' # YouTube 'rtsp://example.com/media.mp4' # RTSP, RTMP, HTTP stream

这里说一下 path/*.jpg ,这个意思就是预测path文件夹下以.jpg结尾的文件。

4. detect.py文件解读🚀 4.1 检测一下看看效果

当我们安装好环境过后,我们可以直接运行detect.py文件试试效果,以此来检测我们的环境是否安装成功,运行后系统会把检测结果保存在runs\detect\路径下。

在这里插入图片描述

检测效果就是这样子的

在这里插入图片描述

在这里插入图片描述

这两张是项目自带的图片,我们也可以把自己想测试的图片或者视频放到这个路径下:

在这里插入图片描述

4.2 参数详解

打开detect.py直接看 217 217 217行,所有模型推理涉及到的超参数都在这里,下面我们一个一个讲解。

在这里插入图片描述

4.2.1 “weights”

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RPsJpVRR-1650769594842)(YOLOv5_v6.1调参.assets/image-20220423212827047.png)]

这个就是指定网络权重的路径,默认是yolov5s.pt,官方提供了很多的版本,我们要更换的时候直接按照模型的名字更换就可以了(当然,使用自己的也是完全没问题的);例如yolov5m.pt,yolov5l.pt,他会自动的下载对应的权重,不需要我们去Github手动下载。(如果下载太慢或者失败只能去官网下载了,下载好了直接放到根目录下就可以)

在这里插入图片描述

这里说一下default, default是默认的参数,即使我们在运行时不指定具体参数,那么系统也会执行默认的值。

4.2.2 “source”

在这里插入图片描述 这个参数就是指定网络输入的路径,默认指定的是文件夹,也可以指定具体的文件或者扩展名等。

在这里插入图片描述

4.2.3 “data”

在这里插入图片描述 这个就是配置文件的一个路径,配置文件里面包含了下载路径和一些数据集基本信息,在训练时如果不自己指定数据集,系统会自己下载coco128数据集。

在这里插入图片描述

数据集有三大功能: 训练、验证和测试 训练最好理解,是拟合模型的过程,模型会通过分析数据、调节内部参数从而得到最优的模型效果。 验证即验证模型效果,效果可以指导我们调整模型中的超参数(在开始训练之前设置参数,而不是通过训练得到参数),通常会使用少量未参与训练的数据对模型进行验证,在训练的间隙中进行。 测试的作用是检查模型是否具有泛化能力(泛化能力是指模型对训练集之外的数据集是否也有很好的拟合能力)。通常会在模型训练完毕之后,选用较多训练集以外的数据进行测试。

4.2.4 “imgsz, img, img-size”

在这里插入图片描述 这个意思就是模型在检测图片前会把图片resize成640 × 640的尺寸,然后再喂进网络里,并不是说会把们最终得到的结果resize成640 × 640大小。推理尺寸最好和我们训练时选择的尺寸对齐,这样才能有一个好的检测效果,并不一定是越大效果越好。

4.2.5 “conf-thres”

在这里插入图片描述 这个就是置信度的阈值,置信度这个概念我在我的博文“YOLOv1详细解读”里面详细介绍了一下,感兴趣的小伙伴可以看一下,通俗一点来说就是网络对检测目标相信的程度,如果这里设置 “ 0 0 0” 的话,那么网络只要认为这他预测的这个目标有一点点的概率是正确的目标,他都会给框出来,我们可以通过这几幅图对比一下。

我这里把conf-thres参数依次设置成“ 0 0 0 ”、 “ 0.25 0.25 0.25 ”、“ 0.8 0.8 0.8 ”

conf-thres = 0conf-thres = 0.25conf-thres = 0.8在这里插入图片描述在这里插入图片描述在这里插入图片描述

Q:这里参数到底设置成多少好呢?

A:没有固定的参数,都是根据你训练出来的模型检测效果动态调节的。

4.2.6 “iou-thres”

在这里插入图片描述 这个参数就是调节IoU的阈值,这里简单介绍一下NMS和IoU

4.2.6.1 NMS介绍

在执行目标检测任务时,算法可能对同一目标有多次检测。NMS 是一种让你确保算法只对每个对象得到一个检测框的方法。

请添加图片描述

在正式使用NMS之前,通常会有一个候选框预清理的工作(简单引入一个置信度阈值),如下图所示:

请添加图片描述

NMS 算法的大致过程:每轮选取置信度最大的 Bounding Box(简称 BBox) 接着关注所有剩下的 BBox 中与选取的 BBox 有着高重叠(IoU)的,它们将在这一轮被抑制。这一轮选取的 BBox 会被保留输出,且不会在下一轮出现。接着开始下一轮,重复上述过程:选取置信度最大 BBox ,抑制高 IoU BBox。(关于Bounding Box Regression 的详细介绍,我强力推荐我的另一篇博文)

IoU可以理解预测框和真实框的交并比

在这里插入图片描述

NMS步骤: 第一步:对 BBox 按置信度排序,选取置信度最高的 BBox(所以一开始置信度最高的 BBox 一定会被留下来); 第二步:对剩下的 BBox 和已经选取的 BBox 计算 IOU,淘汰(抑制) IOU 大于设定阈值的 BBox(在图例中这些淘汰的 BBox 的置信度被设定为 0 0 0); 第三步:重复上述两个步骤,直到所有的 BBox 都被处理完,这时候每一轮选取的 BBox 就是最后结果。

请添加图片描述

在上面这个例子中,NMS 只运行了两轮就选取出最终结果:第一轮选择了红色 BBox,淘汰了粉色 BBox;第二轮选择了黄色 BBox,淘汰了紫色 BBox 和青色 BBox。注意到这里设定的 IoU 阈值是 0.5 0.5 0.5,假设将阈值提高为 0.7 0.7 0.7,结果又是如何?

请添加图片描述

可以看到,NMS 用了更多轮次来确定最终结果,并且最终结果保留了更多的 BBox,但结果并不是我们想要的。因此,在使用 NMS 时,IoU 阈值的确定是比较重要的,但一开始我们可以选定 default 值(论文使用的值)进行尝试。

4.2.6.2 不同阈值例子

如果看不懂的话就直接通过例子来理解一下:

这里我iou-thres分别取 “ 0 0 0”,“ 0.45 0.45 0.45”,“ 0.9 0.9 0.9”,“ 1 1 1”

iou-thres = 0iou-thres = 0.45iou-thres = 0.9iou-thres = 1在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述 4.2.7 “max-det”

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IRbAz88K-1650769594846)(YOLOv5_v6.1调参.assets/image-20220423223544340.png)]

这个就是一张图像中的最大检测数量,默认是最多检测 1000 1000 1000 个目标:

我这里把max-det分别设置成 “ 0 0 0”, “ 1 1 1” ,“ 5 5 5”,“ 1000 1000 1000”,大家感受一下。

max-det 取值效果max-det = 0在这里插入图片描述max-det = 1在这里插入图片描述max-det = 5在这里插入图片描述max-det = 1000在这里插入图片描述 4.2.8 “device”

在这里插入图片描述 这个参数就是选择 GPU 用的,如果不指定的话,会自动检测,设备只有一个 GPU 时默认就是 0 。 在进行 CPU 推理时要将这个参数设置为 cpu。 使用多个 GPU 并行训练时设置 0, 1 等。

4.2.9 action=‘store_true’ 说明💡

在这里插入图片描述

这个类型的参数和之前的有很大区别,大家可以把他理解成一个“开关”,当我们运行程序的时候如果指定了带有action='store_true'类型的参数,那么就相当于启动这个参数所对应的功能,反之则不。我会拿下面的举个例子。

4.2.10 “view-img”

在这里插入图片描述

这个参数意思就是检测的时候是否实时的把检测结果显示出来,即我如果在终端中输入以下指令 :

python detect.py --view-img

那么意思就是我在检测的时候系统要把我检测的结果实时的显示出来,假如我文件夹有 5 5 5 张图片,如果指定了这个参数的话,那么模型每检测出一张就会显示出一张,直到所有图片检测完成。如果我不指定这个参数,那么模型就不会一张一张的显示出来。

4.2.11 “save-txt”

在这里插入图片描述

这个参数的意思就是是否把检测结果保存成一个.txt的格式,我们来看一下指定了这个参数的效果:

终端键入:

python detect.py --save-txt

可以看到输出结果多了一个labels文件夹。

在这里插入图片描述

打开这个文件夹我们就可以看到两个.txt文件。

在这里插入图片描述

这两个.txt文件里面保存了一些类别信息和边框的位置信息。

在这里插入图片描述

4.2.12 “save-conf”

在这里插入图片描述

这个参数的意思就是是否以.txt的格式保存目标的置信度。

如果单独指定这个命令是没有效果的;

python detect.py --save-conf #不报错,但没效果

必须和--save-txt配合使用,即:

python detect.py --save-txt --save-conf

在这里插入图片描述

如果指定了这个参数就可以发现,同样是保存txt格式的文件,这次多了红色框里面的置信度值。原来每行只有 5 5 5 个数字,现在有 6 6 6 个了。

4.2.13 “save-crop”

在这里插入图片描述

这个参数的意思就是是否把模型检测的物体裁剪下来,如果开启了这个参数会在crops文件夹下看到几个以类别命名的文件夹,里面保存的都是裁剪下来的图片。

在这里插入图片描述

这几张就是 person 和 handbag 文件夹下的图片。

请添加图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述 4.2.14 “nosave”

在这里插入图片描述

开启这个参数就是不保存预测的结果,但是还会生成exp文件夹,只不过是一个空的exp。

在这里插入图片描述

我觉得这个参数应该是和“--view-img”配合使用的。

4.2.15 “classes” 💡

在这里插入图片描述

在这里插入图片描述

这个参数的意思就是我们可以给变量指定多个赋值,也就是说我们可以把 “ 0 0 0” 赋值给“classes”,也可以把“ 0 0 0”,“ 2 2 2”,“ 4 4 4”,“ 6 6 6” 都赋值给 “classes”。

接下来说classes参数,这里看一下coco128.yaml的配置文件就明白了,比如说我这里给classes指定 “ 0 0 0”,那么意思就是只检测人这个类别。

在这里插入图片描述

例:键入如下指令:

python detect.py --classes 0

在这里插入图片描述

在这里插入图片描述

4.2.16 “agnostic-nms”🍀

在这里插入图片描述

agnostic-nms是跨类别nms,比如待检测图像中有一个长得很像排球的足球,pt文件的分类中有足球和排球两种,那在识别时这个足球可能会被同时框上2个框:一个是足球,一个是排球。开启agnostic-nms后,那只会框出一个框 (这里感谢知乎Ken Miller的补充)

通过一个例子对比一下:

在这里插入图片描述

启用后:

在这里插入图片描述

就这张图片而言并没有什么明显的区别。

4.2.17 “augment”

在这里插入图片描述

这个参数也是一种增强的方式。

启用前:

在这里插入图片描述

启用后:

在这里插入图片描述

4.2.18 “visualize”

在这里插入图片描述

这个参数的意思就是是否把特征图可视化出来,如果开启了这和参数可以看到exp文件夹下又多了一些文件,这里.npy格式的文件就是保存的模型文件,可以使用numpy读写,.png就是图片文件。

在这里插入图片描述

下面来看一下保存下来的特征图:

stage0:

在这里插入图片描述

stage3:

在这里插入图片描述

stage6:

在这里插入图片描述

stage23:

在这里插入图片描述

4.2.19 “update”

在这里插入图片描述

这个参数用于在模型训练的最后阶段去除优化器信息,以减小模型文件的大小,并将模型准备好用于推断或其他目的。

4.2.20 “project”

在这里插入图片描述

这个就是我们预测结果保存的路径。

在这里插入图片描述

4.2.21 “name”

在这里插入图片描述

这个就是预测结果保存的文件夹名字

在这里插入图片描述

4.2.22 “exist-ok”

在这里插入图片描述

这个参数的意思就是每次预测模型的结果是否保存在原来的文件夹,如果指定了这个参数的话,那么本次预测的结果还是保存在上一次保存的文件夹里;如果不指定就是每次预测结果保存一个新的文件夹下。

4.2.23 “line-thickness”

在这里插入图片描述

这个参数就是调节预测框线条粗细的,因为有的时候目标重叠太多会产生遮挡;

终端键入:

python detect.py --line-thickness 10

在这里插入图片描述

4.2.24 “hide-labels”

在这里插入图片描述

这个参数就是隐藏标签的。

终端键入:

python detect.py --hide-labels

在这里插入图片描述

4.2.25 “hide-conf”

在这里插入图片描述

这个参数就是隐藏标签的置信度用的。

终端键入:

python detect.py --hide-conf

在这里插入图片描述

4.2.26 “half”

在这里插入图片描述

这个参数的意思就是是否使用FP16半精度推理,简单介绍一下低精度技术:

低精度技术 (high speed reduced precision)。在training阶段,梯度的更新往往是很微小的,需要相对较高的精度,一般要用到FP32以上。在inference的时候,精度要求没有那么高,一般F16(半精度)就可以,甚至可以用INT8(8位整型),精度影响不会很大。同时低精度的模型占用空间更小了,有利于部署在嵌入式模型里面。

4.2.27 “dnn”

在这里插入图片描述

这个参数的意思就是是否使用 OpenCV DNN 进行 ONNX 推理

DNN 即 Deep Neural Networks

这个我并没有用过,感兴趣的小伙伴可以去opencv文档看一下 。

参考文献;

非极大值抑制算法

小彩蛋:🎉

Pycharm通过点击“运行”按钮生成exp文件夹的速度要比在终端里键入指令生成exp文件夹的速度快

本人更多YOLOv5实战内容导航🍀🌟🚀

手把手带你调参Yolo v5 (v6.2)(推理)🌟强烈推荐

手把手带你调参Yolo v5 (v6.2)(训练)🚀

手把手带你调参Yolo v5 (v6.2)(验证)

如何快速使用自己的数据集训练Yolov5模型

手把手带你Yolov5 (v6.2)添加注意力机制(一)(并附上30多种顶会Attention原理图)🌟强烈推荐🍀新增8种

手把手带你Yolov5 (v6.2)添加注意力机制(二)(在C3模块中加入注意力机制)

Yolov5如何更换激活函数?

Yolov5如何更换BiFPN?

Yolov5 (v6.2)数据增强方式解析

Yolov5更换上采样方式( 最近邻 / 双线性 / 双立方 / 三线性 / 转置卷积)

Yolov5如何更换EIOU / alpha IOU / SIoU?

Yolov5更换主干网络之《旷视轻量化卷积神经网络ShuffleNetv2》

YOLOv5应用轻量级通用上采样算子CARAFE

空间金字塔池化改进 SPP / SPPF / SimSPPF / ASPP / RFB / SPPCSPC / SPPFCSPC🚀

用于低分辨率图像和小物体的模块SPD-Conv

GSConv+Slim-neck 减轻模型的复杂度同时提升精度🍀

头部解耦 | 将YOLOX解耦头添加到YOLOv5 | 涨点杀器🍀

Stand-Alone Self-Attention | 搭建纯注意力FPN+PAN结构🍀

YOLOv5模型剪枝实战🚀

YOLOv5知识蒸馏实战🚀

YOLOv7知识蒸馏实战🚀

改进YOLOv5 | 引入密集连接卷积网络DenseNet思想 | 搭建密集连接模块🍀

有问题欢迎大家指正,如果感觉有帮助的话请点赞支持下👍📖🌟



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有