使用Ray Tune和YOLO11进行高效超参数调优
超参数调优对于通过发现最佳的超参数集来实现模型性能的峰值至关重要。这涉及使用不同的超参数运行试验并评估每个试验的性能。
使用Ultralytics YOLO11和Ray Tune加速调优
Ultralytics YOLO11 集成了Ray Tune进行超参数调优,简化了YOLO11模型超参数的优化。通过Ray Tune,您可以利用高级搜索策略、并行性和提前停止来加速调优过程。
Ray Tune
Ray Tune 是一个高效且灵活的超参数调优库。它支持各种搜索策略、并行性和提前停止策略,并能无缝集成到包括Ultralytics YOLO11在内的流行机器学习框架中。
与Weights & Biases的集成
YOLO11还允许可选地与Weights & Biases集成,以监控调优过程。
安装
要安装所需的包,请运行:
安装
使用方法
使用方法
tune()
方法参数
YOLO11中的tune()
方法提供了一个易于使用的接口,用于使用Ray Tune进行超参数调优。它接受多个参数,允许您自定义调优过程。以下是每个参数的详细说明:
参数 | 类型 | 描述 | 默认值 |
---|---|---|---|
data |
str |
要运行的数据集配置文件(YAML格式)。该文件应指定训练和验证数据路径,以及其他数据集特定的设置。 | |
space |
dict, optional |
定义Ray Tune的超参数搜索空间的字典。每个键对应一个超参数名称,值指定调优期间要探索的值范围。如果未提供,YOLO11使用包含各种超参数的默认搜索空间。 | |
grace_period |
int, optional |
Ray Tune中ASHA调度器的epoch宽限期。调度器在达到此epoch数之前不会终止任何试验,允许模型在做出提前停止决策之前进行一些最小训练。 | 10 |
gpu_per_trial |
int, optional |
调优期间每个试验分配的GPU数量。这有助于管理GPU使用,特别是在多GPU环境中。如果未提供,调优器将使用所有可用的GPU。 | None |
iterations |
int, optional |
在调优过程中运行的最大试验次数。此参数有助于控制测试的超参数组合总数,确保调优过程不会无限期运行。 | 10 |
**train_args |
dict, optional |
在调优过程中传递给 train() 方法的额外参数。这些参数可以包括训练轮数、批量大小等训练特定配置。 |
{} |
通过自定义这些参数,您可以微调超参数优化过程,以适应您的特定需求和可用的计算资源。
默认搜索空间描述
下表列出了使用 Ray Tune 进行 YOLO11 超参数调优的默认搜索空间参数。每个参数都有一个由 tune.uniform()
定义的特定值范围。
参数 | 值范围 | 描述 |
---|---|---|
lr0 |
tune.uniform(1e-5, 1e-1) |
初始学习率 |
lrf |
tune.uniform(0.01, 1.0) |
最终学习率因子 |
momentum |
tune.uniform(0.6, 0.98) |
动量 |
weight_decay |
tune.uniform(0.0, 0.001) |
权重衰减 |
warmup_epochs |
tune.uniform(0.0, 5.0) |
预热轮数 |
warmup_momentum |
tune.uniform(0.0, 0.95) |
预热动量 |
box |
tune.uniform(0.02, 0.2) |
边界框损失权重 |
cls |
tune.uniform(0.2, 4.0) |
类别损失权重 |
hsv_h |
tune.uniform(0.0, 0.1) |
色调增强范围 |
hsv_s |
tune.uniform(0.0, 0.9) |
饱和度增强范围 |
hsv_v |
tune.uniform(0.0, 0.9) |
亮度增强范围 |
degrees |
tune.uniform(0.0, 45.0) |
旋转增强范围(度数) |
translate |
tune.uniform(0.0, 0.9) |
平移增强范围 |
scale |
tune.uniform(0.0, 0.9) |
缩放增强范围 |
shear |
tune.uniform(0.0, 10.0) |
剪切增强范围(度数) |
perspective |
tune.uniform(0.0, 0.001) |
透视增强范围 |
flipud |
tune.uniform(0.0, 1.0) |
垂直翻转增强概率 |
fliplr |
tune.uniform(0.0, 1.0) |
水平翻转增强概率 |
mosaic |
tune.uniform(0.0, 1.0) |
马赛克增强概率 |
mixup |
tune.uniform(0.0, 1.0) |
混合增强概率 |
copy_paste |
tune.uniform(0.0, 1.0) |
复制粘贴增强概率 |
自定义搜索空间示例
在此示例中,我们演示了如何使用自定义搜索空间进行 Ray Tune 和 YOLO11 的超参数调优。通过提供自定义搜索空间,您可以将调优过程集中在感兴趣的特定超参数上。
用法
在上面的代码片段中,我们使用预训练权重 "yolo11n.pt" 创建了一个 YOLO 模型。然后,我们调用 tune()
方法,指定数据集配置为 "coco8.yaml"。我们使用一个字典为初始学习率 lr0
提供了一个自定义搜索空间,字典的键为 "lr0",值为 tune.uniform(1e-5, 1e-1)
。最后,我们将额外的训练参数(如 epoch 数量)直接传递给 tune 方法,例如 epochs=50
。
处理 Ray Tune 结果
在使用 Ray Tune 运行超参数调优实验后,您可能希望对获得的结果进行各种分析。本指南将带您了解处理和分析这些结果的常见工作流程。
从目录加载 Tune 实验结果
在运行 tuner.fit()
进行调优实验后,您可以从目录中加载结果。这在初始训练脚本退出后进行分析时特别有用。
experiment_path = f"{storage_path}/{exp_name}"
print(f"Loading results from {experiment_path}...")
restored_tuner = tune.Tuner.restore(experiment_path, trainable=train_mnist)
result_grid = restored_tuner.get_results()
基本实验级分析
获取试验表现的概览。您可以快速检查试验过程中是否有任何错误。
基本试验级分析
访问单个试验的超参数配置和最后报告的指标。
for i, result in enumerate(result_grid):
print(f"Trial #{i}: Configuration: {result.config}, Last Reported Metrics: {result.metrics}")
绘制试验报告指标的完整历史记录
您可以绘制每个试验报告指标的历史记录,以查看指标随时间的变化情况。
import matplotlib.pyplot as plt
for i, result in enumerate(result_grid):
plt.plot(
result.metrics_dataframe["training_iteration"],
result.metrics_dataframe["mean_accuracy"],
label=f"Trial {i}",
)
plt.xlabel("Training Iterations")
plt.ylabel("Mean Accuracy")
plt.legend()
plt.show()
总结
在本文档中,我们介绍了使用 Ultralytics 和 Ray Tune 分析实验结果的常见工作流程。关键步骤包括从目录加载实验结果、进行基本实验级和试验级分析以及绘制指标。
进一步探索 Ray Tune 的 分析结果 文档页面,以充分利用您的超参数调优实验。
常见问题
如何使用 Ray Tune 调优我的 YOLO11 模型的超参数?
要使用 Ray Tune 调优 Ultralytics YOLO11 模型的超参数,请按照以下步骤操作:
-
安装所需包:
-
加载您的 YOLO11 模型并开始调优:
这利用了 Ray Tune 的高级搜索策略和并行性,以高效优化模型的超参数。更多信息,请查看 Ray Tune 文档。
使用 Ray Tune 调优 YOLO11 的默认超参数是什么?
Ultralytics YOLO11 使用以下默认超参数进行 Ray Tune 调优:
参数 | 值范围 | 描述 |
---|---|---|
lr0 |
tune.uniform(1e-5, 1e-1) |
初始学习率 |
lrf |
tune.uniform(0.01, 1.0) |
最终学习率因子 |
momentum |
tune.uniform(0.6, 0.98) |
动量 |
weight_decay |
tune.uniform(0.0, 0.001) |
权重衰减 |
warmup_epochs |
tune.uniform(0.0, 5.0) |
预热周期 |
box |
tune.uniform(0.02, 0.2) |
边界框损失权重 |
cls |
tune.uniform(0.2, 4.0) |
类别损失权重 |
hsv_h |
tune.uniform(0.0, 0.1) |
色调增强范围 |
translate |
tune.uniform(0.0, 0.9) |
平移增强范围 |
这些超参数可以根据您的具体需求进行自定义。有关完整列表和更多详细信息,请参阅 超参数调优 指南。
如何将 Weights & Biases 与我的 YOLO11 模型调优集成?
要将 Weights & Biases (W&B) 与您的 Ultralytics YOLO11 调优过程集成:
-
安装 W&B:
bash
pip install wandb ``` -
修改你的调优脚本:
此设置将允许你监控调优过程,跟踪超参数配置,并在W&B中可视化结果。
为什么我应该使用Ray Tune进行YOLO11的超参数优化?
Ray Tune为超参数优化提供了诸多优势:
- 高级搜索策略: 使用贝叶斯优化和HyperOpt等算法进行高效的参数搜索。
- 并行性: 支持多个试验的并行执行,显著加快调优过程。
- 早期停止: 采用ASHA等策略提前终止表现不佳的试验,节省计算资源。
Ray Tune与Ultralytics YOLO11无缝集成,提供了一个易于使用的界面,有效调优超参数。要开始使用,请查看使用Ray Tune和YOLO11进行高效超参数调优指南。
如何为YOLO11超参数调优定义自定义搜索空间?
要使用Ray Tune为YOLO11超参数调优定义自定义搜索空间:
from ray import tune
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
search_space = {"lr0": tune.uniform(1e-5, 1e-1), "momentum": tune.uniform(0.6, 0.98)}
result_grid = model.tune(data="coco8.yaml", space=search_space, use_ray=True)
这将自定义初始学习率和动量等超参数的范围,以便在调优过程中进行探索。对于高级配置,请参阅自定义搜索空间示例部分。