Skip to content

Ultralytics YOLO 超参数调优 指南

介绍

超参数调优不仅仅是一次性的设置,而是一个旨在优化机器学习模型性能指标(如准确率、精确率和召回率)的迭代过程。在Ultralytics YOLO的背景下,这些超参数可以从学习率到架构细节(如层数或使用的激活函数类型)不等。

什么是超参数?

超参数是算法的高级、结构化设置。它们在训练阶段之前设置,并在训练过程中保持不变。以下是Ultralytics YOLO中一些常见的调优超参数:

  • 学习率 lr0:确定在每次迭代中向损失函数最小值移动时的步长。
  • 批量大小 batch:在一次前向传递中同时处理的图像数量。
  • 轮次 epochs:一个轮次是所有训练样本的一次完整前向和后向传递。
  • 架构细节:如通道数、层数、激活函数类型等。

超参数调优视觉

有关YOLO11中使用的完整数据增强超参数列表,请参阅配置页面

遗传进化与突变

Ultralytics YOLO使用遗传算法来优化超参数。遗传算法受到自然选择和遗传机制的启发。

  • 突变:在Ultralytics YOLO的背景下,突变通过在现有超参数上应用小的随机变化来局部搜索超参数空间,生成新的候选参数进行评估。
  • 交叉:尽管交叉是一种流行的遗传算法技术,但它目前并未用于Ultralytics YOLO的超参数调优。主要关注突变以生成新的超参数集。

准备超参数调优

在开始调优过程之前,重要的是:

  1. 确定指标:确定您将用于评估模型性能的指标。这可以是AP50、F1分数或其他指标。
  2. 设定调优预算:定义您愿意分配多少计算资源。超参数调优可能计算密集。

涉及的步骤

初始化超参数

从一组合理的初始超参数开始。这可以是Ultralytics YOLO设置的默认超参数,或者是基于您的领域知识或先前实验的结果。

突变超参数

使用_mutate方法基于现有超参数集生成一组新的超参数。

训练模型

使用突变的超参数集进行训练。然后评估训练性能。

评估模型

使用AP50、F1分数或自定义指标来评估模型的性能。

记录结果

记录性能指标和相应的超参数以供将来参考至关重要。

重复

重复此过程,直到达到设定的迭代次数或性能指标令人满意为止。

使用示例

以下是如何使用model.tune()方法来利用Tuner类对YOLO11n在COCO8上进行30轮次超参数调优,使用AdamW优化器,并跳过绘图、检查点和验证(最后一轮次除外)以加快调优速度。

示例

from ultralytics import YOLO

# 初始化YOLO模型
model = YOLO("yolo11n.pt")

# 在COCO8上进行30轮次超参数调优
model.tune(data="coco8.yaml", epochs=30, iterations=300, optimizer="AdamW", plots=False, save=False, val=False)

结果

在您成功完成超参数调优过程后,您将获得几个文件和目录,这些文件和目录封装了调优的结果。以下描述了每个文件:

文件结构

以下是结果目录结构的示意图。训练目录如 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 文件包含调优过程中发现的性能最佳的超参数。您可以使用此文件以这些优化设置初始化未来的训练。

  • 格式: YAML
  • 用途: 超参数结果
  • 示例:

    # 558/900 次迭代完成 ✅ (45536.81s)
    # 结果保存至 /usr/src/ultralytics/runs/detect/tune
    # 最佳适应度=0.64297 在第 498 次迭代时观察到
    # 最佳适应度指标为 {'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}
    # 最佳适应度模型位于 /usr/src/ultralytics/runs/detect/train498
    # 最佳适应度超参数如下所示。
    
    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 这样的性能指标)与迭代次数关系的图表。它帮助您可视化遗传算法随时间的表现情况。

  • 格式: PNG
  • 用途: 性能可视化

超参数调优适应度 vs 迭代次数

tune_results.csv

一个 CSV 文件,包含调优过程中每次迭代的详细结果。文件中的每一行代表一次迭代,并包括适应度分数、精确度召回率以及使用的超参数。

  • 格式: CSV
  • 用途: 每次迭代结果跟踪
  • 示例:
      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 的超参数将不会被调优,例如下面的 degreesshear

  • 格式: PNG
  • 用途: 探索性数据分析

超参数调优散点图

weights/

此目录包含超参数调优过程中最后和最佳迭代的保存的 PyTorch 模型。

  • last.pt: last.pt 是训练最后一个 epoch 的权重。
  • best.pt: best.pt 是达到最佳适应度分数的迭代的权重。

使用这些结果,您可以为未来的模型训练和分析做出更明智的决策。请随意查阅这些工件,以了解您的模型表现如何以及如何进一步改进。

结论

Ultralytics YOLO 中的超参数调优过程简化了但功能强大,这得益于其基于遗传算法的方法,专注于变异。遵循本指南中概述的步骤将帮助您系统地调优模型以实现更好的性能。

进一步阅读

  1. 维基百科上的超参数优化
  2. YOLOv5 超参数进化指南
  3. 使用 Ray Tune 和 YOLO11 进行高效的超参数调优

如需更深入的了解,您可以探索 Tuner 类的源代码和相关文档。如有任何问题、功能请求或需要进一步帮助,请随时通过 GitHubDiscord 联系我们。

常见问题

如何在超参数调优期间优化 Ultralytics YOLO 的学习率?

要优化 Ultralytics YOLO 的学习率,首先使用 lr0 参数设置初始学习率。常见值范围从 0.0010.01。在超参数调优过程中,此值将被变异以找到最佳设置。您可以使用 model.tune() 方法来自动化此过程。例如:

Example

from ultralytics import YOLO

# 初始化 YOLO 模型
model = YOLO("yolo11n.pt")

# 在 COCO8 数据集上进行 30 个 epoch 的超参数调优
model.tune(data="coco8.yaml", epochs=30, iterations=300, optimizer="AdamW", plots=False, save=False, val=False)

更多详情,请查看 Ultralytics YOLO 配置页面

在 YOLO11 中使用遗传算法进行超参数调优的好处是什么?

Ultralytics YOLO11 中的遗传算法提供了一种强大的方法来探索超参数空间,从而实现高度优化的模型性能。主要好处包括:

  • 高效搜索:遗传算法如变异可以快速探索大量的超参数组合。
  • 避免局部最小值:通过引入随机性,它们有助于避免局部最小值,确保更好的全局优化。
  • 性能指标:它们根据 AP50 和 F1-score 等性能指标进行适应。

要了解遗传算法如何优化超参数,请查看 超参数进化指南

Ultralytics YOLO 的超参数调优过程需要多长时间?

Ultralytics YOLO 的超参数调优所需时间主要取决于几个因素,如数据集的大小、模型架构的复杂性、迭代次数和可用的计算资源。例如,在 COCO8 数据集上对 YOLO11n 进行 30 个 epoch 的调优可能需要几个小时到几天,具体取决于硬件。

为了有效管理调优时间,建议在调优前明确调优预算(内部章节链接)。这有助于平衡资源分配和优化目标。

在 YOLO 的超参数调优期间,我应该使用哪些指标来评估模型性能?

在 YOLO 的超参数调优期间评估模型性能时,您可以使用几个关键指标:

  • AP50:在 IoU 阈值为 0.50 时的平均精度。
  • F1-Score:精确率和召回率的调和平均值。
  • 精确率和召回率:分别表示模型在识别真阳性与假阳性和假阴性方面的准确性

这些指标帮助您了解模型性能的不同方面。请参阅 Ultralytics YOLO 性能指标指南以获取全面的概述。

我可以使用 Ultralytics HUB 进行 YOLO 模型的超参数调优吗?

是的,您可以使用 Ultralytics HUB 进行 YOLO 模型的超参数调优。HUB 提供了一个无代码平台,可以轻松上传数据集、训练模型并高效地进行超参数调优。它提供调优进度和结果的实时跟踪和可视化。

更多关于使用 Ultralytics HUB 进行超参数调优的信息,请参阅 Ultralytics HUB 云训练文档。


📅 Created 11 months ago ✏️ Updated 13 days ago

Comments