Ultralytics YOLO 超参数调整指南
导言
超参数调整并非一次性设置,而是一个迭代过程,旨在优化机器学习模型的性能指标,如准确率、精确度和召回率。在Ultralytics YOLO 的情况下,这些超参数的范围可以从学习率到架构细节,如使用的层数或激活函数类型。
什么是超参数?
超参数是算法的高级结构设置。它们在训练阶段之前设定,并在训练阶段保持不变。以下是Ultralytics YOLO 中一些常用的超参数:
- 学习率
lr0
:确定每次迭代的步长,同时向最小值移动。 损失函数. - 批量大小
batch
:前向传递中同时处理的图像数量。 - 纪元数
epochs
:一个历元是对所有训练实例的一次完整的前向和后向传递。 - 具体架构:如通道数、层数、激活函数类型等。
有关YOLO11 中使用的增强超参数的完整列表,请参阅配置页面。
基因进化与突变
Ultralytics YOLO 使用遗传算法优化超参数。遗传算法的灵感来源于自然选择和遗传学机制。
- 突变:在Ultralytics YOLO 的情况下,突变有助于局部搜索超参数空间,方法是对现有超参数进行微小的随机改变,产生新的候选参数供评估。
- 交叉:虽然交叉是一种流行的遗传算法技术,但目前在Ultralytics YOLO 中并未用于超参数调整。重点主要放在产生新超参数集的突变上。
准备超参数调整
在开始调整过程之前,重要的是:
- 确定指标:确定用于评估模型性能的指标。这可以是 AP50、F1 分数或其他指标。
- 设置调整预算:确定愿意分配多少计算资源。超参数调整需要大量计算资源。
相关步骤
初始化超参数
从一组合理的初始超参数开始。这既可以是Ultralytics YOLO 设置的默认超参数,也可以是基于你的领域知识或之前实验的参数。
变异超参数
使用 _mutate
方法,在现有超参数集的基础上生成一组新的超参数。
火车模型
使用变异的超参数集进行训练。然后对训练效果进行评估。
评估模型
使用 AP50、F1 分数或自定义指标来评估模型的性能。
日志结果
关键是要记录性能指标和相应的超参数,以备将来参考。
重复
重复这一过程,直到达到设定的迭代次数或性能指标令人满意为止。
使用示例
以下是如何使用 model.tune()
方法来利用 Tuner
在 COCO8 上使用 AdamW 优化器对 YOLO11n 的超参数进行 30 个历元的调整,并跳过绘图、检查点和验证(最后一个历元除外),以加快调整速度。
示例
成果
成功完成超参数调整过程后,您将获得多个文件和目录,其中包含调整结果。下面将逐一介绍:
文件结构
以下是结果的目录结构。培训目录如 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 云培训文档。