BumbleBee-BBStream / yolov7

Implementation of paper - YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors
GNU General Public License v3.0
0 stars 0 forks source link

How to adjust weights with non balance number of images in YOLOv7-tiny #35

Open Samuel-wei opened 7 months ago

Samuel-wei commented 7 months ago
  1. To look for YOLOv7 adjust weights method;
xwj8866 commented 6 months ago

set fl_gamma cls_pw in hyp.scratch.tiny.yaml

https://blog.csdn.net/Together_CZ/article/details/132466238

xwj8866 commented 6 months ago

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) ————————————————

                        版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/Together_CZ/article/details/132466238