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