YOLOv8训练参数详解
YOLOv8训练参数详解
YOLOv8是当前最流行的实时目标检测模型之一,其训练过程涉及众多参数的设置。本文将详细介绍YOLOv8训练过程中的各个参数及其作用,帮助读者更好地理解和使用YOLOv8模型。
1. model
参数说明: 模型文件的路径。这个参数指定了所使用的模型文件的位置,例如 yolov8n.pt 或 yolov8n.yaml。
使用建议: 若选择 yolov8n.pt 这种 .pt 类型的文件,其中包含了模型的结构和训练好的参数,可以直接使用,具有检测 COCO 数据集 80 个类别的能力。但如果你需要检测的类别不在其中,例如口罩检测,那么就需要重新训练。训练自己的数据集时,一般采用 yolov8n.yaml 这种 .yaml 文件的形式,在文件中指定类别以及一些其他参数。
2. data
参数说明: 数据文件的路径。该参数指定了数据集文件的位置,例如 coco128.yaml。数据集文件包含了训练和验证所需的图像、标签。
3. epochs
参数说明: 训练的轮数。这个参数确定了模型将会被训练多少次,每一轮都遍历整个训练数据集。训练的轮数越多,模型对数据的学习就越充分,但也增加了训练时间。
使用建议: 默认是 100 轮数。但一般对于新数据集,我们还不知道这个数据集学习的难易程度,可以加大轮数,例如 300,来找到更佳性能。
4. patience
参数说明: 早停的等待轮数。在训练过程中,如果在一定的轮数内没有观察到模型性能的明显提升,就会停止训练。这个参数确定了等待的轮数,如果超过该轮数仍没有改进,则停止训练。
使用建议: 早停能减少过拟合。过拟合(overfitting)指的是只能拟合训练数据,但不能很好地拟合不包含在训练数据中的其他数据的状态。
5. batch
参数说明: 每个批次中的图像数量。在训练过程中,数据被分成多个批次进行处理,每个批次包含一定数量的图像。这个参数确定了每个批次中包含的图像数量。特殊的是,如果设置为 -1,则会自动调整批次大小,至你的显卡能容纳的最多图像数量。
使用建议: 一般认为 batch 越大越好。因为我们的 batch 越大我们选择的这个 batch 中的图片更有可能代表整个数据集的分布,从而帮助模型学习。但 batch 越大占用的显卡显存空间越多,所以还是有上限的。
6. imgsz
参数说明: 输入图像的尺寸。这个参数确定了输入图像的大小。可以指定一个整数值表示图像的边长,也可以指定宽度和高度的组合。例如 640 表示图像的宽度和高度均为 640 像素。
使用建议: 如果数据集中存在大量小对象,增大输入图像的尺寸 imgsz 可以使得这些小对象从高分辨率中受益,更好的被检测出。从官网放出的性能表也可以看出。
7. save、save_period
参数说明: save:是否保存训练的检查点和预测结果。当训练过程中保存检查点时,模型的权重和训练状态会被保存下来,以便在需要时进行恢复或继续训练。预测结果也可以被保存下来以供后续分析和评估。
save_period:保存检查点的间隔。这个参数确定了保存检查点的频率,例如设置为 10 表示每隔 10 个训练轮数保存一次检查点。如果设置为负数(如 -1),则禁用保存检查点功能。
使用建议: 和 resume 配合可以在训练不稳定中断后再进行接着训练。例如大家白嫖 Colab 这个平台训练网络时,一般是有时间限制,会出现时间到了我们还没训练完的情况。通过 save 然后再 resume 重新启动可以进行接着训练。
8. cache
参数说明: 数据加载时是否使用缓存。这个参数控制是否将数据加载到缓存中,以加快训练过程中的数据读取速度。可以选择在 RAM 内存中缓存数据(True/ram)、在磁盘上缓存数据(disk)或不使用缓存(False)。
9. device
参数说明: 训练运行的设备。该参数指定了模型训练所使用的设备,例如使用 GPU 运行可以指定为 cuda device=0,或者使用多个 GPU 运行可以指定为 device=0,1,2,3,如果没有可用的 GPU,可以指定为 device=cpu 使用 CPU 进行训练。
使用建议: 注意别选择错了。
10. workers
参数说明: 数据加载时的工作线程数。在数据加载过程中,可以使用多个线程并行地加载数据,以提高数据读取速度。这个参数确定了加载数据时使用的线程数,具体的最佳值取决于硬件和数据集的大小。
11. project
参数说明: 项目名称。这个参数用于标识当前训练任务所属的项目,方便管理和组织多个训练任务。
12. name
参数说明: 实验名称。该参数为当前训练任务指定一个名称,以便于标识和区分不同的实验。
13. exist_ok
参数说明: 是否覆盖现有的实验。如果设置为 True,当实验名称已经存在时,将会覆盖现有实验。如果设置为 False,当实验名称已经存在时,将会报错。
14. pretrained
参数说明: 是否使用预训练模型。如果设置为 True,将加载预训练的模型权重进行训练,这有助于加快训练过程和提高模型性能。
15. optimizer
参数说明: 选择要使用的优化器。优化器是深度学习中用于调整模型参数以最小化损失函数的算法。可以选择不同的优化器,如 ‘SGD’、‘Adam’、‘AdamW’、‘RMSProp’,根据任务需求选择适合的优化器。
16. verbose
参数说明: 是否打印详细输出。如果设置为 True,训练过程中会输出更详细的信息和日志。如果设置为 False,只会输出关键信息和结果。
17. seed
参数说明: 随机种子,用于实现可重复性。通过设置相同的随机种子,可以使得每次运行时的随机过程保持一致,以便于结果的复现。
18. deterministic
参数说明: 是否启用确定性模式。启用确定性模式后,保证在相同的输入下,每次运行的结果是确定的,不会受到随机性的影响。
19. single_cls
参数说明: 将多类数据训练为单类。如果设置为 True,将会将多类数据视为单一类别进行训练。
20. rect
参数说明: 使用矩形训练,每个批次进行最小填充。设置为 True 后,训练过程中使用矩形形状的图像批次,并进行最小化填充。
21. cos_lr
参数说明: 使用余弦学习率调度器。如果设置为 True,将使用余弦函数调整学习率的变化情况。
22. close_mosaic
参数说明: 禁用 mosaic 增强的最后第几个轮次。可以指定一个整数值,表示在训练的最后第几个轮次中禁用 mosaic 增强。
mosaic是什么: Mosaic 数据增强方法是 YOLOV4 论文中提出来的,主要思想是将四张图片进行随机裁剪,再拼接到一张图上作为训练数据。这样做的好处是丰富了图片的背景,并且四张图片拼接在一起变相地提高了 batch_size,在进行 batch normalization 的时候也会计算四张图片,所以对本身 batch_size不是很依赖,单块GPU就可以训练YOLOV4。
23. resume
参数说明: 从最后一个检查点恢复训练。如果设置为 True,将从最后一个检查点的状态继续训练。
24. amp
参数说明: 是否使用自动混合精度(Automatic Mixed Precision,AMP)训练。AMP 是一种深度学习训练技术,利用半精度浮点数加速训练过程,可以减少显存占用。
25. lr0
参数说明: 初始学习率。学习率是控制模型参数更新步幅的超参数,初始学习率确定了训练开始时的参数更新速度。
26. lrf
参数说明: 最终学习率。最终学习率是通过初始学习率乘以一个比例系数得到的,用于控制训练过程中学习率的衰减。
注意: lrf 其实是系数,最终学习率相较于初始学习率的系数。
27. momentum
参数说明: SGD 优化器的动量/Adam 优化器的 beta1。动量是一种加速梯度下降过程的技术,用于增加参数更新的稳定性。
28. weight_decay
参数说明: 优化器的权重衰减(weight decay)。权重衰减是一种正则化技术,用于减小模型复杂度,防止过拟合。
29. warmup_epochs
参数说明: 热身阶段的轮数。热身阶段是训练过程中初始阶段的一部分,在此阶段内,学习率和动量等参数逐渐增加,以帮助模型更好地适应训练数据。
30. warmup_momentum
参数说明: 热身阶段的初始动量。在热身阶段开始时,动量的初始值。
31. warmup_bias_lr
参数说明: 热身阶段的初始偏置学习率。在热身阶段开始时,偏置学习率的初始值。
32. box、cls
参数说明: box:边界框损失权重。用于调整边界框损失的权重,以控制其在总损失中的贡献程度。
cls:类别损失权重。用于调整类别损失的权重,以控制其在总损失中的贡献程度(按像素进行缩放)。
调整策略: 如果你想更强调一些分类也就是更精准的类别判断你可以增加 cls 的值;如果你想更强调一些边界框的定位你可以增加 box 的值。这个两个权重我认为也可以根据你目前训练输出的边界框损失数值和分类损失数值来判断。
33. dfl
参数说明: DFL(Dynamic Freezing Loss)损失权重。用于调整 DFL 损失的权重,以控制其在总损失中的贡献程度。
dfl定义: 参考这里的定义双焦点损失 (DFL)双焦点损失(DFL)缓解了分类和语义分割中的类不平衡问题。此损失函数的灵感来自焦点损失 (FL)函数的特性,该函数加剧了数据点的损失,在预测输出和实际输出之间产生较大差异。因此,如果由于类不平衡或其他一些原因,数据点难以分类,FL 使神经网络更多地关注该数据点以及类似的数据点。DFL采用了这一思路,并通过增强梯度条件提高了FL的性能。
通俗解释: DFL 损失函数在训练神经网络时考虑了类别不平衡的问题。当某些类别出现频率过高,而另一些类别出现频率较低时,就会出现类别不平衡的情况。例如,在街景图像中,假设有 100 张照片,其中有 200 辆汽车和只有 10 辆自行车。我们希望同时检测汽车和自行车。这就是类别不平衡的情况,在训练神经网络时,由于汽车数量较多,网络会学习准确地定位汽车,而自行车数量较少,网络可能无法正确地定位自行车。通过使用 DFL 损失函数,每当神经网络试图对自行车进行分类时,损失会增加。因此,现在神经网络会更加重视出现频率较低的类别。更多信息,可以参考有关 Focal Loss 和 DFL 的论文。
34. pose
参数说明: 姿态损失权重(仅姿态)。用于调整姿态损失的权重,以控制其在总损失中的贡献程度(仅应用于姿态相关任务)。
35. kobj
参数说明: 关键点目标损失权重(仅姿态)。用于调整关键点目标损失的权重,以控制其在总损失中的贡献程度(仅应用于姿态相关任务)。
36. label_smoothing
参数说明: 标签平滑(label smoothing)。标签平滑是一种正则化技术,用于减少模型对训练数据的过拟合程度。
标签平滑: label smoothing 就是把原来的 one-hot 表示的标签,在每一维上都添加了一个随机噪音。
37. nbs
参数说明: 标准批次大小(nominal batch size)。指定训练过程中每个批次的大小。
38. overlap_mask
参数说明: 训练时是否要求蒙版重叠(仅用于分割训练)。如果设置为 True,要求训练过程中的蒙版(mask)重叠。
39. mask_ratio
参数说明: 蒙版下采样比例(仅用于分割训练)。用于控制蒙版下采样的比例。
40. dropout
参数说明: 是否使用丢弃正则化(dropout regularization)(仅用于分类训练)。如果设置为非零值,则在训练过程中使用丢弃正则化来减少模型的过拟合。
41. val
参数说明: 是否在训练过程中进行验证/测试。如果设置为 True,将在训练过程中进行验证或测试,以评估模型的性能。