YOLOv5目标检测模型训练超参数总结记录

news2024/11/20 7:02:53

整个YOLO系列的模型除了v1和v2比较古老没有实际项目应用过以外,从v3-v8或多或少都有实践,其中以v5使用频度最高,最早期刚接触YOLO的时候也是一通原理详解学习各种结构可视化,后面实际项目开发越来越多,对于前面的记忆就不多了,正好一个实际问题的需要,这里找时间梳理总结记录一下关于YOLOv5模型超参数相关的内容,梳理备忘,也希望帮到有需要的人。

下载官方YOLOv5项目后,在项目目录data/hyps/下存储着模型训练所需要的超参数配置文件,如下所示:

 其中,一般性的模型开发使用hyp.scratch-low.yaml居多。

接下来来看下具体的超参数详情内容:

 为了清晰直观地进行对比,我将low、med和high放在一张对比图上面,这样便于看到三者之间的区别,可以看到:三份配置文件也仅仅是在个别超参数的设定上面有区分而已,这样就清晰了,接下来就以low为例来详细看下对应超参数的含义。

# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
# Hyperparameters for low-augmentation COCO training from scratch
# python train.py --batch 64 --cfg yolov5n6.yaml --weights '' --data coco.yaml --img 640 --epochs 300 --linear
# See tutorials for hyperparameter evolution https://github.com/ultralytics/yolov5#tutorials


"""
最初的学习率
学习率的初始值,通常使用SGD时为0.01,使用Adam时为0.001
"""
lr0: 0.01  # initial learning rate (SGD=1E-2, Adam=1E-3)
"""
最终学习率,或者可以说是最小的学习率【一般学习率调度器会随着epoch增加衰减的】
OneCycleLR 学习率调度器中的最终学习率(lr0 * lrf)
"""
lrf: 0.01  # final OneCycleLR learning rate (lr0 * lrf)
"""
Momentum是为解决SGD中出现的曲折摆动问题,如图所示,“之”字形的上下摆动,降低了损失函数到达最低点的速度。
此情况下,若想减少摆动浮动,只能采用比较小的learning rate,这同样将导致寻优的速度较低。而Momentum就是为解决此问题而来。
动量可以理解为参数更新的惯性,类似于小球滚动的惯性。它通过维护一个动量向量,记录之前梯度方向的加权平均值,
并将其用于参数更新,可以加快训练速度,提高模型稳定性。
较小的动量可以使更新方向更加平稳
较大的动量可以加速参数更新。
"""
momentum: 0.937  # SGD momentum/Adam beta1
"""
权重衰减(weight decay)是一种常用的应对过拟合的方法,其等价于L2范数正则化(regularization)。
正则化通过为模型损失函数添加惩罚项使得学出的模型参数较小,通常接近于0。
权重衰减旨在减少模型的复杂性,防止过拟合。值越大,正则化强度越大,模型泛化能力会更好。但是太大会导致模型欠拟合。
"""
weight_decay: 0.0005  # optimizer weight decay 5e-4
"""
热身,让模型先热热身,熟悉熟悉数据,学习率要小,相当于只是去看看,还没正式训练呢,学习率太高说不定就学跑偏了。
在训练深度学习模型时,有时候需要先使用一个较小的学习率来进行预热,以避免在初始阶段出现不稳定的梯度或损失的情况。
warmup_epochs就是控制预热的epoch数,也就是在训练的前几个epoch使用较小的学习率,使得模型能够更快地收敛到稳定的状态。
在预热阶段结束后,学习率会逐渐增加到初始设定的学习率,然后继续按照设定的学习率进行训练。
"""
warmup_epochs: 3.0  # warmup epochs (fractions ok)
"""
与warmup_epochs相对应设定的参数,简单来说,就是热身训练那几个epochs的动量设置
"""
warmup_momentum: 0.8  # warmup initial momentum
"""
与warmup_epochs相对应设定的参数,指在学习率warm-up期间,偏置(bias)的学习率所使用的初始学习率。
在训练深度神经网络时,通常采用较小的学习率进行初始化,以便网络能够逐渐适应数据集的特征。
当学习率较小时,偏置的学习率通常要比权重的学习率更高,以保证网络在早期学习阶段能够更快地适应数据集的偏置。
"""
warmup_bias_lr: 0.1  # warmup initial bias lr
"""
box   cls   obj 这三者是YOLOv5中的三大损失
目标框损失权重
box通常指的是bounding box,即目标的边框。在yolov5中,是一个超参数,控制bounding box loss的权重。
它影响了网络如何调整检测边界框的位置和大小,以更好地匹配目标。
较大的box值将使网络更注重优化边界框。
较小的值将使其更加注重类别分类。
"""
box: 0.05  # box loss gain
"""
分类损失权重
在目标检测中,cls 通常表示分类损失。YoloV5中使用的是交叉熵损失,它度量的是目标属于每个类别的概率分布与实际分布之间的差异。
这个损失用于调整网络的权重,使网络能够更准确地预测目标的类别。
cls值越大,表示越注重分类损失的影响。
"""
cls: 0.5  # cls loss gain
"""
置信度损失权重
YOLOv5 模型的 obj 指代对象的存在损失权重,用于指定正负样本的权重。
这个权重被用来平衡正负样本对于训练的贡献,避免模型偏向于训练样本数较多的类别,从而提高模型的性能。
当该参数值较大时,模型对对象的存在的关注程度就会更高。
"""
obj: 1.0  # obj loss gain (scale with pixels)
"""
cls_pw、obj_pw 是主要用于调控正样本权重的超参数
分类损失的二元交叉熵BCE损失中正样本的权重
cls_pw就是用于控制分类损失函数中正样本权重的参数。
在某些情况下,数据集中的正负样本不平衡,导致分类损失函数中的负样本权重占比较大,这可能会导致模型对正样本的预测能力下降。
可以通过增加正样本的权重来平衡分类损失函数,从而提高模型对正样本的预测能力。
默认为1.0,表示正样本权重和负样本权重相等。
值设置的越大,则正样本权重越大。
"""
cls_pw: 1.0  # cls BCELoss positive_weight
"""
置信度损失的二元交叉熵BCE损失中正样本的权重
如果正样本数量较少,YOLOv5会增加正样本的权重,以便更多地关注正样本,提高检测准确率。
如果正样本数量较多,YOLOv5会减小正样本的权重,以便更多地关注负样本,减少误检率。
"""
obj_pw: 1.0  # obj BCELoss positive_weight
"""
Iou阈值,用于预测框和真实框之间的匹配。
IoU 是指检测框(预测框)和真实框之间的交并比。当预测框和真实框之间的 IoU 大于 iou_t 时,视为检测正确,否则视为检测错误。
比如,iuo_t设置为0.5,只有预测框和真实框之间的Iou大于0.5才会视为正确检测。
"""
iou_t: 0.20  # IoU training threshold
"""
在进行不同类型目标检测的时候可以适当调整这个参数,对于模型精准匹配和收敛会有帮助
比如:检测车辆对象就可以设置大点,检测安全帽、无人机这类对象就可以设置小点
anchor的阈值,用于筛选anchor。跟iou_t道理一样
这个参数就是控制哪些anchor boxes会被用来匹配目标。anchor_t越小,则越容易匹配更小的目标,anchor_t越大,则越容易匹配更大的目标
对于一些小的目标,因为它们的大小与anchor的大小差别较大,需要使用比较小的anchor box进行匹配,此时设置一个小的anchor_t可以让这些小目标更容易被匹配上。
而对于一些大目标,它们的大小与anchor大小的差别较小,可以使用相对较大的anchor进行匹配,此时设置一个大的anchor_t可以使得大目标更容易被匹配。
"""
anchor_t: 4.0  # anchor-multiple threshold
# anchors: 3  # anchors per output layer (0 to ignore)
"""
主要用于focalloss,fl_gamma 是 Focal Loss 中的一个参数,用于调整损失函数的加权。
fl_gamma 就是控制难以分类样本权重的参数,其值越大,模型对难以分类样本的关注程度越高,对易于分类的样本关注程度越低。
"""
fl_gamma: 0.0  # focal loss gamma (efficientDet default gamma=1.5)
"""
表示图像HSV颜色空间的增强参数。
hsv_h表示色调,取值范围都是[0, 1],可以尝试不同的取值来进行比较。值越大,强度越大
"""
hsv_h: 0.015  # image HSV-Hue augmentation (fraction)
"""
表示图像HSV颜色空间的增强参数。
hsv_s表示饱和度,取值范围都是[0, 1],可以尝试不同的取值来进行比较。值越大,强度越大
"""
hsv_s: 0.7  # image HSV-Saturation augmentation (fraction)
"""
表示图像HSV颜色空间的增强参数。
hsv_v表示明度,取值范围都是[0, 1],可以尝试不同的取值来进行比较。值越大,强度越大
"""
hsv_v: 0.4  # image HSV-Value augmentation (fraction)
"""
用于控制图像旋转的增强参数
数据增强的程度越大,可以提高模型的泛化能力,但也会增加训练时间和计算资源的消耗。
"""
degrees: 0.0  # image rotation (+/- deg)
"""
用于控制图像平移的增强参数
数据增强的程度越大,可以提高模型的泛化能力,但也会增加训练时间和计算资源的消耗。
"""
translate: 0.1  # image translation (+/- fraction)
"""
用于控制图像缩放的增强参数
数据增强的程度越大,可以提高模型的泛化能力,但也会增加训练时间和计算资源的消耗。
"""
scale: 0.5  # image scale (+/- gain)
"""
用于控制图像扭曲的增强参数
数据增强的程度越大,可以提高模型的泛化能力,但也会增加训练时间和计算资源的消耗。
"""
shear: 0.0  # image shear (+/- deg)
"""
是数据增强中的一种,它会对图像进行透视变换,使得图像看起来像是从不同的角度拍摄的。
透视变换可以改变图像中物体的形状和位置,因此能够增加模型的鲁棒性和泛化能力。
参数的值表示透视变换的程度,取值范围是0到0.001。
当值为0时,表示不进行透视变换。当值为0.001时,表示进行最大程度的透视变换。
通常情况下,可以将其设置为一个比较小的值,例如0.0005,以增加模型的泛化能力,同时不会对图像造成过大的扭曲。
"""
perspective: 0.0  # image perspective (+/- fraction), range 0-0.001
"""
用于控制图像上下翻转的增强概率
它们的取值范围是从 0 到 1,表示翻转的概率
flipud设置为 0.5 表示有 50% 的概率对图像进行上下翻转,设置为 0 表示不进行翻转,设置为 1 表示始终进行上下翻转
"""
flipud: 0.0  # image flip up-down (probability)
"""
用于控制图像左右翻转的增强概率
它们的取值范围是从 0 到 1,表示翻转的概率
fliplr设置为 0.5 表示有 50% 的概率对图像进行左右翻转,设置为 0 表示不进行翻转,设置为 1 表示始终进行左右翻转
"""
fliplr: 0.5  # image flip left-right (probability)
"""
用于控制数据增强的方式,可以用来增强训练集的多样性,从而提高模型的泛化性能。
以一定的概率将四张图片拼接成一张,增强了模型对多物体的感知能力和位置估计能力,取值一般在0.1~1.0之间
"""
mosaic: 1.0  # image mosaic (probability)
"""
用于控制数据增强的方式,可以用来增强训练集的多样性,从而提高模型的泛化性能。
mixup: 以一定的概率对两张图片进行线性混合,增强了模型对物体形状和纹理的学习能力,取值一般在0.0~0.5之间
"""
mixup: 0.0  # image mixup (probability)
"""
用于控制数据增强的方式,可以用来增强训练集的多样性,从而提高模型的泛化性能。
copy_paste: 以一定的概率将一张图片的一部分复制到另一张图片上,增强了模型对物体的位置和尺度变化的鲁棒性。
取值一般在0.0~0.5之间.这些取值表示概率,比如mosaic参数值为1,表示使用mosaic数据增强概率为100%,值为0.5则表示概率为50%
"""
copy_paste: 0.0  # segment copy-paste (probability)
 

总结记录一下!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/955384.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一、Mycat2介绍与下载安装

第一章 入门概述 1.1 是什么 Mycat 是数据库中间件。 1、数据库中间件 中间件:是一类连接软件组件和应用的计算机软件,以便于软件各部件之间的沟 通。 例子:Tomcat,web中间件。 数据库中间件:连接java应用程序和数据库…

解压后的文件丢失怎么恢复?解压文件丢失4种恢复方法

您是否出现过解压文件丢失的情况呢?解压文件通俗易懂地讲就是把压缩好了的文件解开。而有些小伙伴在解压文件以后发现丢失了,这些丢失的文件或许是您重要的img解压文件/rar文件解压/zip解压文件,为了正确解决解压文件丢失问题,下面…

在Visual Studio 2017上配置并使用OpenGL

1 在Visual Studio 2017上配置并使用OpenGL 在GLUT - The OpenGL Utility Toolkit:GLUT - The OpenGL Utility Toolkit中点击“GLUT for Microsoft Windows 95 & NT users”,选择“If you want just the GLUT header file, the .LIB, and .DLL file…

Win7系统电脑开机总出现硬盘自检的简单解决方法

你是不是经常会遇到电脑开机进行硬盘自检,而且每次开机都检查很久不能跳过;怎么才能跳过这一步骤呢?下面教大家如何让Win7系统电脑在开机的时候跳过硬盘自检这一步骤,加快开机时间。 解决步骤: 1、按下“Win R”快捷键…

冠达管理:美联储或已达加息终点,但反弹面临诸多不确定性

本周以来,多项数据显现美国经济正在降温,联邦基金利率期货显现,美联储本轮加息周期或已结束。 于美股而言,正处于高位的货币基金是未来继续上涨的潜在动力。不过,与此前反弹行情的推进力比较,当时的不确定…

SAP:IDCNGRIR_GNB报表展示物料描述与采购订单不一致

1、问题描述: 目前在项目中发现执行SAP的IDCNGRIR_GNB报表的时候,出现了物料编码和订单的物料编码不一致的情况: 2、问题展示: 采购订单上物料及编码显示 IDCNGRIR_GNB报表执行结果显示 3、问题原因: 调试程序发现…

2023年信息安全管理与评估赛项参考答案-模块1任务一

根据网络拓扑图所示,按照IP 地址规划表,对防火墙的名称、各接口IP 地址进行配置。共8 分,每错1 处(行)扣1 分,扣完为止。地址、安全域、接口(状态为UP)、名称都正确。 2.根据网络拓扑…

一文读懂融资融券交易技巧!在上海开融资融券账户交易利率一般是多少?

融资融券交易技巧包括以下几点: 熟悉股票市场:了解市场走势、公司基本面等信息,根据趋势选择合适的股票进行交易。 做好风险管理:对买卖的风险进行合理评估,设定止损价位,防止损失过大。 控制杠杆比例&am…

java代码设计方案

一、代码重复问题处理 1、利用工厂模式 模板方法模式,消除 if…else 和重复代码 场景: 假设要开发一个购物车下单的功能,针对不同用户进行不同处理: 普通用户需要收取运费,运费是商品价格的 10%,无商品折…

three.js渲染带动画的glb文件

1. 准备工作 将下列文件在three.js的包中找到,注意的是我这里使用的是模块化版本的,这里不知道模块化的,可以先去看一下es6的模块化。 控制器: OrbitControls.js 加载器:GLTFLoader.js 材质: RoomEnvironm…

学习JAVA打卡第四十八天

Math类 在编写程序时可能需要计算一个数的平方根、绝对值或获取一个随机数等。 Math类的常用方法 BigInteger类 程序如果需要处理特别大的整数就可以用Java.math包中的BigInteger类的对象。 可以构造public BigInteger(string val)构造一个十进制的B…

Flink+Paimon多流拼接性能优化实战

目录 (零)本文简介 (一)背景 (二)探索梳理过程 (三)源码改造 (四)修改效果 1、JOB状态 2、Level5的dataFile总大小 3、数据延迟 (五&…

【zookeeper】zookeeper介绍

分布式协调技术 在学习ZooKeeper之前需要先了解一种技术——分布式协调技术。那么什么是分布式协调技术?其实分布式协调技术主要用来解决分布式环境当中多个进程之间的同步控制,让他们有序的去访问某种临界资源,防止造成"脏数据"的…

Joint contrast enhancement and exposure fusion for real-world image dehazing、近红外去雾、(近)红外和可见光数据集

今天给大家分享一篇发表在IEEE TMM上的去雾文章Joint Contrast Enhancement and Exposure Fusion for Real-World Image Dehazing 作者从对比度增强和曝光融合的视角来解决图像去雾问题,在真实场景上取得了较好的去雾效果。此外,作者将所提出的方法应用…

mqtt集群搭建并使用nginx做负载均衡_亲测得结论

mqtt集群搭建 RabbitMQ集群搭建和测试总结_亲测 搭建好RabbitMQ集群,并开启mqtt插件功能,mqtt集群也就搭建好了 nginx配置mqtt负载均衡 #修改rabbitmq1节点ip为1.19的nginx配置 vim /etc/nginx/nginx.confhttp { } #在http外添加如下配置 stream {upstream rabbitmqtt {ser…

OpenCV(十二):图像透视变换

目录 1.透视变换介绍 2.计算透视变换矩阵getPerspectiveTransform() 3.透视变换函数warpPerspective() 4.demo 1.透视变换介绍 透视变换是一种将原始图像映射到目标图像平面上的投影变换,又称为四点变换。 透视变换矩阵的一般形式如下所示&#xff…

城市内涝积水监测预警系统 yolov8

城市内涝积水监测预警系统通过yolov8网络深度学习框架,算法一旦识别到道路出现积水,城市内涝积水监测预警系统会立即发出预警信号。并及时通知相关人员。YOLO检测速度非常快。标准版本的YOLO可以每秒处理 45 张图像;YOLO的极速版本每秒可以处…

具有 70V 总线故障保护功能的ISO1042BQDWVRQ1、ISO1042BQDWVQ1、ISO1042QDWVRQ1汽车类隔离式 CAN 收发器

一、目标应用 • 起动机/发电机 • 电池管理系统 (BMS) • 直流/直流转换器 • 车载充电器 (OBC) 和无线充电器 • 逆变器和电机控制 二、器件规格 1、ISO1042BQDWVRQ1 完全版 收发器,隔离式 1/1 CANbus 8-SOIC 类型:收发器,隔离式 协议&a…

day30 日期转换

一:Date Date类: 这个类是java.util.Date getTime() : 获取内部维护的long值 Date date new Date(); long time date.getTime(); setTime():按照指定的long值(表示的时间)设置Date表示的时间 time 60*60*24*1000;…

项目实践:类平面抓取点计算(占位,后面补充)

文章目录 文章目录:3D视觉个人学习目录微信:dhlddxB站: Non-Stop_