本次笔记主要探讨上分技巧。
1.训练的案例
数据增强。
2.模型预测的相关参数
下面这一行代码表示的是目标检测任务在imagesize=512的情况下,输入图像,得到结果。到了这一步修改,也就是我们所说的调参。
result=model.predict(img,conf=0.05,imgsz=512,verbose=False)
(1)conf值
在实战中我们会发现,在CV中检测的框架会出现很多的框,这可能是因为容错的范围比较大,造成只要高于某一个置信度的内容就都会输入进去,造成检测的目标过多,从而导致随机性比较大。
而随机性大的一个很大的毛病便是检测出来的框架可能会很离谱(比如说超过边界)。也就是说,我们想让结果输出的内容更加规范,因此,适当提高一些门槛,让模型输出的随机性的内容变少一些。
(2)imgsz。
通常YOLO不经过任何图像尺寸上的变化所拥有的信息是最全的,因此直接按照题目要求将输入的图像的尺寸填入即可。
(3)iou交并比
非最大值抑制(NMS)的交并比(IoU)阈值。较低的值通过消除重叠的边界框来减少检测数量,有助于减少重复项,为此应当尽可能减少IoU的值。
(4)vid_stride和half
这两个都是为了加快速度,不过加快速度的方式不同。vid_stride是直接跳过一些帧进行处理,而half则是通过加快硬件资源的速度。
(5)Augmented
数据增强,可以提升模型的泛化能力,不过需要牺牲模型的推理速度。
3.模型训练的相关参数。
以下三个是对模型的基本架构以及检查机制:
imgsz: 训练时的目标图像尺寸,所有图像在此尺寸下缩放。
save_period: 保存模型检查点的频率(周期数),-1 表示禁用。
device: 用于训练的计算设备,可以是单个或多个 GPU,CPU 或苹果硅的 MPS。
正则化是一种防止过拟合的有效的形式:
weight_decay: L2 正则化项。
预学习可以先提前找到某一个合适的点,在这个合适的点之后开始梯度下降,可以达到更好的训练效果。
warmup_epochs: 学习率预热的周期数。
warmup_momentum: 预热阶段的初始动量。
warmup_bias_lr: 预热阶段偏置参数的学习率。
如果需要梯度下降
optimizer: 训练中使用的优化器,如 SGD、Adam 等,或 'auto' 以根据模型配置自动选择。
momentum作为深度学习的梯度下降中对抗鞍点的方法,优化方法则成为梯度下降所需要的实现工具,分为SGD和Adam两种优化器。
momentum: SGD 的动量因子或 Adam 优化器的 beta1。
SGD:随机梯度下降,每次只随机使用一个样本(或一小批样本)用来计算梯度,减少优化计算上所占用的内存空间。
Adam;可以调整学习率的使用动量作为参数更新的方向。是Pytorch中最为常用的优化方法。
至于模型训练的如何,则是通过以下三个参数来判断:
box: 边界框损失在损失函数中的权重。
cls: 分类损失在总损失函数中的权重。
dfl: 分布焦点损失的权重。
一般来说,模型训练就在于减少上述三者的值,通过上述值的变化可以判断是否存在梯度消失或者梯度爆炸的情况。