跳至内容

利用 Ray Tune 和YOLOv8

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

利用Ultralytics YOLOv8 和 Ray Tune 加快调音速度

Ultralytics YOLOv8结合了用于超参数调整的 Ray Tune,简化了YOLOv8 模型超参数的优化过程。利用 Ray Tune,您可以利用高级搜索策略、并行性和早期停止来加快调整过程。

雷-图恩

雷-图恩概述

Ray Tune是一个超参数调整库,旨在提高效率和灵活性。它支持各种搜索策略、并行性和早期停止策略,并与流行的机器学习框架无缝集成,包括Ultralytics YOLOv8 。

与Weights & Biases

YOLOv8 还可选择与 Weights & Biases来监控调整过程。

安装

要安装所需的软件包,请运行

安装

# Install and update Ultralytics and Ray Tune packages
pip install -U ultralytics "ray[tune]"

# Optionally install W&B for logging
pip install wandb

使用方法

使用方法

from ultralytics import YOLO

# Load a YOLOv8n model
model = YOLO("yolov8n.pt")

# Start tuning hyperparameters for YOLOv8n training on the COCO8 dataset
result_grid = model.tune(data="coco8.yaml", use_ray=True)

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

使用方法

from ultralytics import YOLO

# Define a YOLO model
model = YOLO("yolov8n.pt")

# Run Ray Tune on the model
result_grid = model.tune(
    data="coco8.yaml",
    space={"lr0": tune.uniform(1e-5, 1e-1)},
    epochs=50,
    use_ray=True,
)

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

实验层面的基本分析

全面了解试验执行情况。您可以快速检查试验过程中是否有任何错误。

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 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 的 分析结果 文档页面进行进一步探索,以充分利用超参数优化实验。

常见问题

如何使用 Ray Tune 调整YOLOv8 模型的超参数?

要使用 Ray Tune 调整Ultralytics YOLOv8 模型的超参数,请按照以下步骤操作:

  1. 安装所需的软件包:

    pip install -U ultralytics "ray[tune]"
    pip install wandb  # optional for logging
    
  2. 加载YOLOv8 模型并开始调整:

    from ultralytics import YOLO
    
    # Load a YOLOv8 model
    model = YOLO("yolov8n.pt")
    
    # Start tuning with the COCO8 dataset
    result_grid = model.tune(data="coco8.yaml", use_ray=True)
    

它利用 Ray Tune 的高级搜索策略和并行性来高效优化模型的超参数。更多信息,请查看Ray Tune 文档

YOLOv8 使用 Ray Tune 进行调整时的默认超参数是什么?

Ultralytics YOLOv8 在使用 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 与YOLOv8 模型调整相结合?

将Weights & Biases (W&B) 与您的Ultralytics YOLOv8 调整程序整合:

  1. 安装 W&B:

    pip install wandb
    
  2. 修改调整脚本:

    import wandb
    
    from ultralytics import YOLO
    
    wandb.init(project="YOLO-Tuning", entity="your-entity")
    
    # Load YOLO model
    model = YOLO("yolov8n.pt")
    
    # Tune hyperparameters
    result_grid = model.tune(data="coco8.yaml", use_ray=True)
    

通过这种设置,您可以在 W&B 中监控调整过程、跟踪超参数配置并可视化结果。

为什么要使用 Ray Tune 对YOLOv8 进行超参数优化?

Ray Tune 为超参数优化提供了众多优势:

  • 高级搜索策略:利用贝叶斯优化和 HyperOpt 等算法进行高效参数搜索。
  • 并行性:支持并行执行多个试验,大大加快了调整过程。
  • 提前终止:采用 ASHA 等策略提前终止表现不佳的试验,从而节省计算资源。

Ray Tune 与Ultralytics YOLOv8 无缝集成,为有效调整超参数提供了一个易于使用的界面。要开始使用,请查看《使用 Ray Tune 和YOLOv8 高效调整超参数》指南。

如何为YOLOv8 超参数调整定义自定义搜索空间?

使用 Ray Tune 为YOLOv8 超参数调整定义自定义搜索空间:

from ray import tune

from ultralytics import YOLO

model = YOLO("yolov8n.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)

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



创建于 2023-11-12,更新于 2024-07-05
作者:glenn-jocher(10)

评论