利用 Ray Tune 和YOLOv8
超参数调整对于通过发现一组最佳的超参数来实现最高的模型性能至关重要。这需要使用不同的超参数进行试验,并评估每次试验的性能。
利用Ultralytics YOLOv8 和 Ray Tune 加快调音速度
Ultralytics YOLOv8结合了用于超参数调整的 Ray Tune,简化了YOLOv8 模型超参数的优化过程。利用 Ray Tune,您可以利用高级搜索策略、并行性和早期停止来加快调整过程。
雷-图恩
Ray Tune是一个超参数调整库,旨在提高效率和灵活性。它支持各种搜索策略、并行性和早期停止策略,并与流行的机器学习框架无缝集成,包括Ultralytics YOLOv8 。
与Weights & Biases
YOLOv8 还可选择与 Weights & Biases来监控调整过程。
安装
要安装所需的软件包,请运行
安装
使用方法
使用方法
tune()
方法参数
"(《世界人权宣言》) tune()
YOLOv8 方法为使用 Ray Tune 进行超参数调整提供了一个易于使用的界面。它接受多个参数,允许您自定义调整过程。下面是每个参数的详细说明:
参数 | 类型 | 说明 | 默认值 |
---|---|---|---|
data |
str |
运行调谐器的数据集配置文件(YAML 格式)。该文件应指定训练和验证数据路径,以及其他特定于数据集的设置。 | |
space |
dict, optional |
定义 Ray Tune 超参数搜索空间的字典。每个键对应一个超参数名称,而值则指定在调整过程中要搜索的值范围。如果没有提供,YOLOv8 会使用一个包含各种超参数的默认搜索空间。 | |
grace_period |
int, optional |
Ray Tune 中ASHA 调度器的宽限期(以历元为单位)。调度程序不会在此历时数之前终止任何试验,从而让模型在决定是否提前停止之前有一些最低限度的训练。 | 10 |
gpu_per_trial |
int, optional |
调整期间每次试验分配的 GPU 数量。这有助于管理 GPU 的使用,尤其是在多 GPU 环境中。如果不提供,调谐器将使用所有可用的 GPU。 | 无 |
iterations |
int, optional |
调整过程中运行的最大试验次数。该参数有助于控制测试的超参数组合总数,确保调整过程不会无限期运行。 | 10 |
**train_args |
dict, optional |
传递给 train() 方法的参数。这些参数可以包括训练历元数、批量大小和其他训练特定配置等设置。 |
{} |
通过自定义这些参数,您可以对超参数优化过程进行微调,以满足您的特定需求和可用计算资源。
默认搜索空间 说明
下表列出了在YOLOv8 中使用 Ray Tune 进行超参数调整的默认搜索空间参数。每个参数的具体取值范围由 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 和YOLOv8 自定义搜索空间进行超参数调整。通过提供自定义搜索空间,可以将调整过程集中在感兴趣的特定超参数上。
使用方法
在上面的代码片段中,我们用 "yolov8n.pt" 预先训练的权重创建了一个YOLO 模型。然后,我们调用 tune()
方法,用 "coco8.yaml "指定数据集配置。我们为初始学习率提供了一个自定义搜索空间 lr0
使用键为 "lr0"、值为 tune.uniform(1e-5, 1e-1)
.最后,我们将额外的训练参数,如历时次数,直接传递给调整方法,如下所示 epochs=50
.
处理射线调整结果
使用 Ray 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 result in 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 的 "分析结果"文档页面进行进一步探索,以充分利用超参数调整实验。