Ultralytics YOLO 超参数调整指南
导言
超参数调整并非一次性设置,而是一个迭代过程,旨在优化机器学习模型的性能指标,如准确率、精确度和召回率。在Ultralytics YOLO 的情况下,这些超参数的范围可以从学习率到架构细节,如使用的层数或激活函数类型。
观看: 如何调整超参数以提高模型性能 🚀
什么是超参数?
超参数是算法的高级结构设置。它们在训练阶段之前设定,并在训练阶段保持不变。以下是Ultralytics YOLO 中一些常用的超参数:
- 学习率
lr0
:确定每次迭代的步长,同时向最小值移动。 损失函数. - 批量大小
batch
:前向传递中同时处理的图像数量。 - 纪元数
epochs
:一个历元是对所有训练实例的一次完整的前向和后向传递。 - 具体架构:如通道数、层数、激活函数类型等。
有关YOLO11 中使用的增强超参数的完整列表,请参阅配置页面。
基因进化与突变
Ultralytics YOLO 使用遗传算法优化超参数。遗传算法的灵感来源于自然选择和遗传学机制。
- 突变:在Ultralytics YOLO 的情况下,突变有助于局部搜索超参数空间,方法是对现有超参数进行微小的随机改变,产生新的候选参数供评估。
- 交叉:虽然交叉是一种流行的遗传算法技术,但目前在Ultralytics YOLO 中并未用于超参数调整。重点主要放在产生新超参数集的突变上。
准备超参数调整
在开始调整过程之前,重要的是:
- 确定指标:确定用于评估模型性能的指标。这可以是 AP50、F1 分数或其他指标。
- 设置调整预算:确定愿意分配多少计算资源。超参数调整需要大量计算资源。
相关步骤
初始化超参数
从一组合理的初始超参数开始。这既可以是Ultralytics YOLO 设置的默认超参数,也可以是基于你的领域知识或之前实验的参数。
变异超参数
使用 _mutate
方法,在现有超参数集的基础上生成一组新的超参数。
火车模型
使用变异的超参数集进行训练。然后对训练效果进行评估。
评估模型
使用 AP50、F1 分数或自定义指标来评估模型的性能。
日志结果
关键是要记录性能指标和相应的超参数,以备将来参考。
重复
重复这一过程,直到达到设定的迭代次数或性能指标令人满意为止。
默认搜索空间 说明
下表列出了YOLO11 中用于超参数调整的默认搜索空间参数。每个参数都有一个特定的取值范围,由一个元组 (min, max)
.
参数 | 类型 | 数值范围 | 说明 |
---|---|---|---|
lr0 |
float |
(1e-5, 1e-1) |
训练开始时的初始学习率。数值越小,训练越稳定,但收敛速度越慢 |
lrf |
float |
(0.01, 1.0) |
最终学习率因子,即 lr0 的分数。控制学习率在训练过程中的下降幅度 |
momentum |
float |
(0.6, 0.98) |
SGD 动量系数。较高的数值有助于保持梯度方向一致,并能加快收敛速度 |
weight_decay |
float |
(0.0, 0.001) |
L2 正则化因子,用于防止过度拟合。数值越大,正则化越强 |
warmup_epochs |
float |
(0.0, 5.0) |
线性学习速率预热的历元数。有助于防止早期训练不稳定 |
warmup_momentum |
float |
(0.0, 0.95) |
热身阶段的初始动量。逐渐增加到最终动量值 |
box |
float |
(0.02, 0.2) |
总损失函数中的边框损失权重。平衡方框回归与分类 |
cls |
float |
(0.2, 4.0) |
总损失函数中的分类损失权重。较高的权重强调正确的类别预测 |
hsv_h |
float |
(0.0, 0.1) |
HSV 色彩空间中的随机色调增强范围。有助于模型在不同色彩变化中的通用性 |
hsv_s |
float |
(0.0, 0.9) |
HSV 空间中的随机饱和度增强范围。模拟不同的照明条件 |
hsv_v |
float |
(0.0, 0.9) |
随机值(亮度)增强范围。帮助模型处理不同的曝光水平 |
degrees |
float |
(0.0, 45.0) |
以度为单位的最大旋转增量。帮助模型不受物体方向的影响 |
translate |
float |
(0.0, 0.9) |
以图像大小的一部分来实现最大的平移增量。提高对物体位置的稳健性 |
scale |
float |
(0.0, 0.9) |
随机缩放增强范围。帮助模型检测不同大小的物体 |
shear |
float |
(0.0, 10.0) |
以度为单位的最大剪切增强。为训练图像添加类似透视的变形 |
perspective |
float |
(0.0, 0.001) |
随机透视增强范围模拟不同的视角 |
flipud |
float |
(0.0, 1.0) |
训练过程中垂直图像翻转的概率。适用于高空/空中图像 |
fliplr |
float |
(0.0, 1.0) |
水平图像翻转的概率。帮助模型不受物体方向的影响 |
mosaic |
float |
(0.0, 1.0) |
使用马赛克增强的概率,即结合 4 幅图像。特别适用于小物体检测 |
mixup |
float |
(0.0, 1.0) |
使用混合增强的概率,即混合两幅图像的概率。可提高模型的鲁棒性 |
copy_paste |
float |
(0.0, 1.0) |
使用复制粘贴增强的概率。有助于提高实例分割性能 |
自定义搜索空间示例
下面介绍如何定义搜索空间并使用 model.tune()
方法来利用 Tuner
在 COCO8 上使用 AdamW 优化器对 YOLO11n 的超参数进行 30 个历元的调整,并跳过绘图、检查点和验证(最后一个历元除外),以加快调整速度。
示例
from ultralytics import YOLO
# Initialize the YOLO model
model = YOLO("yolo11n.pt")
# Define search space
search_space = {
"lr0": (1e-5, 1e-1),
"degrees": (0.0, 45.0),
}
# Tune hyperparameters on COCO8 for 30 epochs
model.tune(
data="coco8.yaml",
epochs=30,
iterations=300,
optimizer="AdamW",
space=search_space,
plots=False,
save=False,
val=False,
)
成果
成功完成超参数调整过程后,您将获得多个文件和目录,其中包含调整结果。下面将逐一介绍:
文件结构
以下是结果的目录结构。培训目录如 train1/
包含单独的调整迭代,即用一组超参数训练一个模型。超参数 tune/
目录中包含所有单个模型训练的调整结果:
runs/
└── detect/
├── train1/
├── train2/
├── ...
└── tune/
├── best_hyperparameters.yaml
├── best_fitness.png
├── tune_results.csv
├── tune_scatter_plots.png
└── weights/
├── last.pt
└── best.pt
文件说明
best_hyperparameters.yaml
该 YAML 文件包含调整过程中发现的性能最佳的超参数。您可以使用该文件,用这些优化设置来初始化未来的训练。
- 格式: YAMLYAML
- 使用方法超参数结果
-
例如
# 558/900 iterations complete ✅ (45536.81s) # Results saved to /usr/src/ultralytics/runs/detect/tune # Best fitness=0.64297 observed at iteration 498 # Best fitness metrics are {'metrics/precision(B)': 0.87247, 'metrics/recall(B)': 0.71387, 'metrics/mAP50(B)': 0.79106, 'metrics/mAP50-95(B)': 0.62651, 'val/box_loss': 2.79884, 'val/cls_loss': 2.72386, 'val/dfl_loss': 0.68503, 'fitness': 0.64297} # Best fitness model is /usr/src/ultralytics/runs/detect/train498 # Best fitness hyperparameters are printed below. lr0: 0.00269 lrf: 0.00288 momentum: 0.73375 weight_decay: 0.00015 warmup_epochs: 1.22935 warmup_momentum: 0.1525 box: 18.27875 cls: 1.32899 dfl: 0.56016 hsv_h: 0.01148 hsv_s: 0.53554 hsv_v: 0.13636 degrees: 0.0 translate: 0.12431 scale: 0.07643 shear: 0.0 perspective: 0.0 flipud: 0.0 fliplr: 0.08631 mosaic: 0.42551 mixup: 0.0 copy_paste: 0.0
best_fitness.png
这是一幅显示适应度(通常是 AP50 这样的性能指标)与迭代次数的对比图。它可以帮助你直观地了解遗传算法在一段时间内的表现。
- 格式:PNGPNG
- 使用方法性能可视化
tune_results.csv
CSV 文件,包含调整过程中每次迭代的详细结果。文件中的每一行代表一次迭代,包括适配度得分、精确度、召回率等指标,以及使用的超参数。
- 格式: CSVCSV
- 使用方法每次迭代结果跟踪
- 示例:
fitness,lr0,lrf,momentum,weight_decay,warmup_epochs,warmup_momentum,box,cls,dfl,hsv_h,hsv_s,hsv_v,degrees,translate,scale,shear,perspective,flipud,fliplr,mosaic,mixup,copy_paste 0.05021,0.01,0.01,0.937,0.0005,3.0,0.8,7.5,0.5,1.5,0.015,0.7,0.4,0.0,0.1,0.5,0.0,0.0,0.0,0.5,1.0,0.0,0.0 0.07217,0.01003,0.00967,0.93897,0.00049,2.79757,0.81075,7.5,0.50746,1.44826,0.01503,0.72948,0.40658,0.0,0.0987,0.4922,0.0,0.0,0.0,0.49729,1.0,0.0,0.0 0.06584,0.01003,0.00855,0.91009,0.00073,3.42176,0.95,8.64301,0.54594,1.72261,0.01503,0.59179,0.40658,0.0,0.0987,0.46955,0.0,0.0,0.0,0.49729,0.80187,0.0,0.0
tune_scatter_plots.png
该文件包含由 tune_results.csv
帮助你直观地了解不同超参数和性能指标之间的关系。请注意,初始化为 0 的超参数将不会被调整,例如 degrees
和 shear
下图
- 格式:PNGPNG
- 使用方法探索性数据分析
权重/
该目录包含在超参数调整过程中保存的 PyTorch超参数调整过程中最后和最佳迭代的模型。
last.pt
:last.pt:最后一次训练的权重。best.pt
:获得最佳适应度得分的迭代的 best.pt 权重。
利用这些结果,您可以为今后的模型培训和分析做出更明智的决定。请随时查阅这些成果,以了解您的模型表现如何,以及如何进一步改进。
结论
Ultralytics YOLO 中的超参数调整过程既简单又强大,这要归功于其基于遗传算法的突变方法。按照本指南中概述的步骤进行操作,将有助于您系统地调整模型,以获得更好的性能。
更多阅读
如需更深入的了解,您可以探索 Tuner
类源代码和随附文档。如果您有任何问题、功能请求或需要进一步帮助,请随时通过以下方式联系我们 GitHub 或 纪和声.
常见问题
在超参数调整过程中,如何优化Ultralytics YOLO 的学习率?
要优化Ultralytics YOLO 的学习率,首先使用 lr0
参数。常用值范围为 0.001
至 0.01
.在超参数调整过程中,该值会发生变化,以找到最佳设置。您可以利用 model.tune()
方法来自动完成这一过程。例如
示例
详情请查看Ultralytics YOLO 配置页面。
在YOLO11 中使用遗传算法调整超参数有什么好处?
Ultralytics YOLO11 中的遗传算法为探索超参数空间提供了一种稳健的方法,从而实现高度优化的模型性能。主要优点包括
- 高效搜索:遗传算法(如突变)可快速探索大量超参数集。
- 避免局部最小值:通过引入随机性,它们有助于避免局部最小值,确保更好的全局优化。
- 性能指标:它们根据 AP50 和 F1 分数等性能指标进行调整。
要了解遗传算法如何优化超参数,请查看超参数进化指南。
Ultralytics YOLO 的超参数调整过程需要多长时间?
使用Ultralytics YOLO 进行超参数调整所需的时间在很大程度上取决于多个因素,如数据集的大小、模型架构的复杂程度、迭代次数以及可用的计算资源。例如,在 COCO8 这样的数据集上对 YOLO11n 进行 30 次迭代调整可能需要几个小时到几天的时间,具体取决于硬件。
为有效管理调整时间,请事先定义明确的调整预算(内部章节链接)。这有助于平衡资源分配和优化目标。
在YOLO 中进行超参数调整时,应使用哪些指标来评估模型性能?
在YOLO 的超参数调整过程中评估模型性能时,可以使用几个关键指标:
- AP50:IoU 临界值为 0.50 时的平均精度。
- F1 分数:精确度和召回率的调和平均值。
- 精确度和召回率:显示模型识别真阳性与假阳性和假阴性的准确性的单个指标。
这些指标可帮助您了解模型性能的不同方面。有关全面概述,请参阅Ultralytics YOLO 性能指标指南。
我能否使用Ultralytics HUB 对YOLO 模型进行超参数调整?
是的,您可以使用Ultralytics HUB 对YOLO 模型进行超参数调整。HUB 提供了一个无代码平台,可轻松上传数据集、训练模型并高效执行超参数调整。它可对调整进度和结果进行实时跟踪和可视化。
有关使用Ultralytics HUB 进行超参数调整的更多信息,请参阅Ultralytics HUB 云培训文档。