Ultralytics YOLO Hyperparameter Tuning Guide
导言
Hyperparameter tuning is not just a one-time set-up but an iterative process aimed at optimizing the machine learning model's performance metrics, such as accuracy, precision, and recall. In the context of Ultralytics YOLO, these hyperparameters could range from learning rate to architectural details, such as the number of layers or types of activation functions used.
什么是超参数?
超参数是算法的高级结构设置。它们在训练阶段之前设定,并在训练阶段保持不变。以下是Ultralytics YOLO 中一些常用的超参数:
- 学习率
lr0
: Determines the step size at each iteration while moving towards a minimum in the loss function. - 批量大小
batch
:前向传递中同时处理的图像数量。 - Number of Epochs
epochs
:一个历元是所有训练实例的一次完整的正向和反向传递。 - 具体架构:如通道数、层数、激活函数类型等。
For a full list of augmentation hyperparameters used in YOLO11 please refer to the configurations page.
基因进化与突变
Ultralytics YOLO 使用遗传算法优化超参数。遗传算法的灵感来源于自然选择和遗传学机制。
- 突变:在Ultralytics YOLO 的情况下,突变有助于局部搜索超参数空间,方法是对现有超参数进行微小的随机改变,产生新的候选参数供评估。
- 交叉:虽然交叉是一种流行的遗传算法技术,但目前在Ultralytics YOLO 中并未用于超参数调整。重点主要放在产生新超参数集的突变上。
准备超参数调整
在开始调整过程之前,重要的是:
- 确定指标:确定用于评估模型性能的指标。这可以是 AP50、F1 分数或其他指标。
- 设置调整预算:确定愿意分配多少计算资源。超参数调整需要大量计算资源。
相关步骤
初始化超参数
从一组合理的初始超参数开始。这既可以是Ultralytics YOLO 设置的默认超参数,也可以是基于你的领域知识或之前实验的参数。
变异超参数
使用 _mutate
方法,在现有超参数集的基础上生成一组新的超参数。
火车模型
使用变异的超参数集进行训练。然后对训练效果进行评估。
评估模型
使用 AP50、F1 分数或自定义指标来评估模型的性能。
日志结果
关键是要记录性能指标和相应的超参数,以备将来参考。
重复
重复这一过程,直到达到设定的迭代次数或性能指标令人满意为止。
使用示例
以下是如何使用 model.tune()
方法来利用 Tuner
class for hyperparameter tuning of YOLO11n on COCO8 for 30 epochs with an AdamW optimizer and skipping plotting, checkpointing and validation other than on final epoch for faster Tuning.
示例
成果
成功完成超参数调整过程后,您将获得多个文件和目录,其中包含调整结果。下面将逐一介绍:
文件结构
以下是结果的目录结构。培训目录如 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
A CSV file containing detailed results of each iteration during the tuning. Each row in the file represents one iteration, and it includes metrics like fitness score, precision, recall, as well as the hyperparameters used.
- 格式: 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
- 使用方法探索性数据分析
权重/
This directory contains the saved PyTorch models for the last and the best iterations during the hyperparameter tuning process.
last.pt
:last.pt是上一个训练周期的权重。best.pt
:获得最佳适应度得分的迭代的 best.pt 权重。
利用这些结果,您可以为今后的模型培训和分析做出更明智的决定。请随时查阅这些成果,以了解您的模型表现如何,以及如何进一步改进。
结论
Ultralytics YOLO 中的超参数调整过程既简单又强大,这要归功于其基于遗传算法的突变方法。按照本指南中概述的步骤进行操作,将有助于您系统地调整模型,以获得更好的性能。
更多阅读
如需更深入的了解,您可以探索 Tuner
类源代码和随附文档。如果您有任何问题、功能请求或需要进一步帮助,请随时通过以下方式联系我们 GitHub 或 纪和声.
常见问题
How do I optimize the learning rate for Ultralytics YOLO during hyperparameter tuning?
要优化Ultralytics YOLO 的学习率,首先使用 lr0
参数。常用值范围为 0.001
至 0.01
.在超参数调整过程中,该值会发生变化,以找到最佳设置。您可以利用 model.tune()
方法来自动完成这一过程。例如
示例
详情请查看Ultralytics YOLO 配置页面。
What are the benefits of using genetic algorithms for hyperparameter tuning in YOLO11?
Genetic algorithms in Ultralytics YOLO11 provide a robust method for exploring the hyperparameter space, leading to highly optimized model performance. Key benefits include:
- 高效搜索:遗传算法(如突变)可快速探索大量超参数集。
- 避免局部最小值:通过引入随机性,它们有助于避免局部最小值,确保更好的全局优化。
- 性能指标:它们根据 AP50 和 F1 分数等性能指标进行调整。
要了解遗传算法如何优化超参数,请查看超参数进化指南。
Ultralytics YOLO 的超参数调整过程需要多长时间?
The time required for hyperparameter tuning with Ultralytics YOLO largely depends on several factors such as the size of the dataset, the complexity of the model architecture, the number of iterations, and the computational resources available. For instance, tuning YOLO11n on a dataset like COCO8 for 30 epochs might take several hours to days, depending on the hardware.
为有效管理调整时间,请事先定义明确的调整预算(内部章节链接)。这有助于平衡资源分配和优化目标。
在YOLO 中进行超参数调整时,应使用哪些指标来评估模型性能?
在YOLO 中进行超参数调整时,可以使用几个关键指标来评估模型性能:
- AP50:IoU 临界值为 0.50 时的平均精度。
- F1 分数:精确度和召回率的调和平均值。
- Precision and Recall: Individual metrics indicating the model's accuracy in identifying true positives versus false positives and false negatives.
这些指标可帮助您了解模型性能的不同方面。有关全面概述,请参阅Ultralytics YOLO 性能指标指南。
我能否使用Ultralytics HUB 对YOLO 模型进行超参数调整?
是的,您可以使用Ultralytics HUB 对YOLO 模型进行超参数调整。HUB 提供了一个无代码平台,可轻松上传数据集、训练模型并高效执行超参数调整。它可对调整进度和结果进行实时跟踪和可视化。
有关使用Ultralytics HUB 进行超参数调整的更多信息,请参阅Ultralytics HUB 云培训文档。