Skip to content

使用Ray Tune和YOLO11进行高效超参数调优

超参数调优对于通过发现最佳的超参数集来实现模型性能的峰值至关重要。这涉及使用不同的超参数运行试验并评估每个试验的性能。

使用Ultralytics YOLO11和Ray Tune加速调优

Ultralytics YOLO11 集成了Ray Tune进行超参数调优,简化了YOLO11模型超参数的优化。通过Ray Tune,您可以利用高级搜索策略、并行性和提前停止来加速调优过程。

Ray Tune

Ray Tune概述

Ray Tune 是一个高效且灵活的超参数调优库。它支持各种搜索策略、并行性和提前停止策略,并能无缝集成到包括Ultralytics YOLO11在内的流行机器学习框架中。

与Weights & Biases的集成

YOLO11还允许可选地与Weights & Biases集成,以监控调优过程。

安装

要安装所需的包,请运行:

安装

# 安装并更新Ultralytics和Ray Tune包
pip install -U ultralytics "ray[tune]"

# 可选地安装W&B以进行日志记录
pip install wandb

使用方法

使用方法

from ultralytics import YOLO

# 加载一个YOLO11n模型
model = YOLO("yolo11n.pt")

# 开始对COCO8数据集上的YOLO11n训练进行超参数调优
result_grid = model.tune(data="coco8.yaml", use_ray=True)

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 的超参数调优。通过提供自定义搜索空间,您可以将调优过程集中在感兴趣的特定超参数上。

用法

from ultralytics import YOLO

# 定义一个 YOLO 模型
model = YOLO("yolo11n.pt")

# 在模型上运行 Ray Tune
result_grid = model.tune(
    data="coco8.yaml",
    space={"lr0": tune.uniform(1e-5, 1e-1)},
    epochs=50,
    use_ray=True,
)

在上面的代码片段中,我们使用预训练权重 "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()

基本实验级分析

获取试验表现的概览。您可以快速检查试验过程中是否有任何错误。

if result_grid.errors:
    print("One or more trials failed!")
else:
    print("No errors!")

基本试验级分析

访问单个试验的超参数配置和最后报告的指标。

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 模型的超参数,请按照以下步骤操作:

  1. 安装所需包:

    pip install -U ultralytics "ray[tune]"
    pip install wandb  # 可选,用于日志记录
    
  2. 加载您的 YOLO11 模型并开始调优:

    from ultralytics import YOLO
    
    # 加载一个 YOLO11 模型
    model = YOLO("yolo11n.pt")
    
    # 使用 COCO8 数据集开始调优
    result_grid = model.tune(data="coco8.yaml", use_ray=True)
    

这利用了 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 调优过程集成:

  1. 安装 W&B:

    bash pip install wandb ```

  2. 修改你的调优脚本:

    import wandb
    
    from ultralytics import YOLO
    
    wandb.init(project="YOLO-Tuning", entity="your-entity")
    
    # 加载YOLO模型
    model = YOLO("yolo11n.pt")
    
    # 调优超参数
    result_grid = model.tune(data="coco8.yaml", use_ray=True)
    

此设置将允许你监控调优过程,跟踪超参数配置,并在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)

这将自定义初始学习率和动量等超参数的范围,以便在调优过程中进行探索。对于高级配置,请参阅自定义搜索空间示例部分。


📅 Created 11 months ago ✏️ Updated 13 days ago

Comments