官方介绍:官方解释
对官方介绍的补充
主要包含常用的参数,需要搭配使用的参数
- 实验名称组合
project
: 项目名称。这个参数用于标识当前训练任务所属的项目,方便管理和组织多个训练任务。name
: 实验名称。该参数为当前训练任务指定一个名称,以便于标识和区分不同的实验。exist_ok
: 是否覆盖现有的实验。如果设置为 True,当实验名称已经存在时,将会覆盖现有实验。默认为 False。- 最终实验数据会创建在project/name下,看似这没什么用,但是当大量实验时,你就知道有多香了。
- 矩形尺寸训练
imgsz
: 输入图像的尺寸。这个参数确定了输入图像的大小。可以指定一个整数值表示图像的边长,也可以指定宽度和高度的组合。例如640表示图像的宽度和高度均为640像素或者[64,640]结合rect。rect
: 使用矩形训练,每个批次进行最小填充。设置为 True 后,训练过程中使用矩形形状的图像批次,并进行最小化填充。- 最终可以实现对宽≠高的尺寸下进行训练和验证,当然训练过程中使用宽=高,后续也可以转为宽≠高的模型部署,其中的差异还需要在数据上验证,官方说宽≠高训练可能会影响精度。
- 优化器和lr的一些必须知道的内容※※
lr0
: 初始学习率。学习率是控制模型参数更新步幅的超参数,初始学习率确定了训练开始时的参数更新速度。lrf
: 最终学习率。最终学习率=lr0*lrf
cos_lr
: 使用余弦学习率调度器。如果设置为 True,将使用余弦函数调整学习率的变化情况。default=False
optimizer: auto
(非常重要):如果迭代次数iterations>10000初始优化器和学习率为'SGD'
和0.01
- 如果是从头开始训练自己的任务
auto
是默认值同时也是很好的选择。 - 如果是finetune自己的数据,那么只要你iterations超过10000你设置的
lr0
将失效代码如下 name, lr, momentum = ("SGD", 0.01, 0.9) if iterations > 10000 else ("AdamW", lr_fit, 0.9)
- 所以微调一定要将
auto
更换为指定的优化器,通过官方issue给出的参考是adam
和lr0=1e-4
or1e-5
- 如果是从头开始训练自己的任务
- 损失函数
box
: 边界框损失权重。用于调整边界框损失的权重,以控制其在总损失中的贡献程度cls
: 类别损失权重。用于调整类别损失的权重,以控制其在总损失中的贡献程度(按像素进行缩放)dfl
: DFL(Distribution Focal Loss)损失权重。用于调整 DFL 损失的权重,以控制其在总损失中的贡献程度。pose
: 姿态损失权重(仅姿态)。用于调整姿态损失的权重,以控制其在总损失中的贡献程度(仅应用于姿态相关任务)。kobj
: 关键点目标损失权重(仅姿态)。用于调整关键点目标损失的权重,以控制其在总损失中的贡献程度(仅应用于姿态相关任务)。- 最终目的:我的经验是让每一项损失的贡献尽量接近,太大和太小都不好,尤其对高精度的指标有一定影响。
- 预训练与早停
epochs
: 训练的轮数。这个参数确定了模型将会被训练多少次,每一轮都遍历整个训练数据集。训练的轮数越多,模型对数据的学习就越充分,但也增加了训练时间。patience
: 早停的等待轮数。在训练过程中,如果在一定的轮数内没有观察到模型性能的明显提升,就会停止训练。这个参数确定了等待的轮数,如果超过该轮数仍没有改进,则停止训练。default=100resume
: 从最后一个检查点恢复训练。如果设置为 True,将从最后一个检查点的状态继续训练。default=false
- 数据增强
- 太多了,说几个重要的,这里是官方
hsv_h hsv_s hsv_v
:光照、饱和度、亮度mosaic
:将四个训练图像合并为一个,模拟不同的场景组成和物体交互。对于复杂场景的理解非常有效。0.0-1.0label_smoothing
: 标签平滑(label smoothing)。标签平滑是一种正则化技术,用于减少模型对训练数据的过拟合程度讲解,官方定义为训练参数,我认为也可以算是数据的一种处理,default=0
- 后处理指标(Predict Settings)
iou
:非最大抑制(NMS)的IoU (Intersection Over Union)阈值。较低的值通过消除重叠框导致较少的检测,有助于减少重复。default=0.7conf
:设置检测的最小置信度阈值。以低于此阈值的置信度检测到的对象将被忽略。调整这个值可以帮助减少误报。default=0.25
小结
yolo的参数还有很多,同时也可以加入自己的参数进行训练,参数可以在ultralytics/cfg/default.yaml中看到名称和默认值。