跳至内容

Ultralytics YOLO 超参数调整指南

导言

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

什么是超参数?

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

  • 学习率 lr0:确定每次迭代的步长,同时使损失函数达到最小值。
  • 批量大小 batch:前向传递中同时处理的图像数量。
  • 纪元数 epochs:一个历元是所有训练实例的一次完整的正向和反向传递。
  • 具体架构:如通道数、层数、激活函数类型等。

超参数调整可视化

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

基因进化与突变

Ultralytics YOLO 使用遗传算法优化超参数。遗传算法的灵感来源于自然选择和遗传学机制。

  • 突变:在Ultralytics YOLO 的情况下,突变有助于局部搜索超参数空间,方法是对现有超参数进行微小的随机改变,产生新的候选参数供评估。
  • 交叉:虽然交叉是一种流行的遗传算法技术,但目前在Ultralytics YOLO 中并未用于超参数调整。重点主要放在产生新超参数集的突变上。

准备超参数调整

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

  1. 确定指标:确定用于评估模型性能的指标。这可以是 AP50、F1 分数或其他指标。
  2. 设置调整预算:确定愿意分配多少计算资源。超参数调整需要大量计算资源。

相关步骤

初始化超参数

从一组合理的初始超参数开始。这既可以是Ultralytics YOLO 设置的默认超参数,也可以是基于你的领域知识或之前实验的参数。

变异超参数

使用 _mutate 方法,在现有超参数集的基础上生成一组新的超参数。

火车模型

使用变异的超参数集进行训练。然后对训练效果进行评估。

评估模型

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

日志结果

关键是要记录性能指标和相应的超参数,以备将来参考。

重复

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

使用示例

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

示例

from ultralytics import YOLO

# Initialize the YOLO model
model = YOLO("yolov8n.pt")

# Tune hyperparameters on COCO8 for 30 epochs
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 文件包含调整过程中发现的性能最佳的超参数。您可以使用该文件,用这些优化设置来初始化未来的训练。

  • 格式: YAMLYAML
  • 使用方法超参数结果
  • 示例

    # 558/900 iterations complete ✅ (45536.81s)
    # Results saved to /usr/src/ultralytics/runs/detect/tune
    # Best fitness=0.64297 observed at iteration 498
    # Best fitness metrics are {'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}
    # Best fitness model is /usr/src/ultralytics/runs/detect/train498
    # Best fitness hyperparameters are printed below.
    
    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 这样的性能指标)与迭代次数的对比图。它可以帮助你直观地了解遗传算法在一段时间内的表现。

  • 格式:PNGPNG
  • 使用方法性能可视化

超参数调整适合度与迭代

tune_results.csv

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

  • 格式: CSVCSV
  • 使用方法每次迭代结果跟踪
  • 示例:
      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 下图

  • 格式:PNGPNG
  • 使用方法探索性数据分析

超参数调整散点图

权重/

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

  • last.pt:last.pt是上一个训练周期的权重。
  • best.pt:获得最佳适应度得分的迭代的 best.pt 权重。

利用这些结果,您可以为今后的模型培训和分析做出更明智的决定。请随时查阅这些成果,以了解您的模型表现如何,以及如何进一步改进。

结论

Ultralytics YOLO 中的超参数调整过程既简单又强大,这要归功于其基于遗传算法的突变方法。按照本指南中概述的步骤进行操作,将有助于您系统地调整模型,以获得更好的性能。

更多阅读

  1. 维基百科中的超参数优化
  2. YOLOv5 超参数演化指南
  3. 利用 Ray Tune 和YOLOv8

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

常见问题

在超参数调整过程中,如何优化Ultralytics YOLO 的学习率?

要优化Ultralytics YOLO 的学习率,首先使用 lr0 参数。常用值范围为 0.0010.01.在超参数调整过程中,该值会发生变化,以找到最佳设置。您可以利用 model.tune() 方法来自动完成这一过程。例如

示例

from ultralytics import YOLO

# Initialize the YOLO model
model = YOLO("yolov8n.pt")

# Tune hyperparameters on COCO8 for 30 epochs
model.tune(data="coco8.yaml", epochs=30, iterations=300, optimizer="AdamW", plots=False, save=False, val=False)

详情请查看Ultralytics YOLO 配置页面

在YOLOv8 中使用遗传算法调整超参数有什么好处?

Ultralytics YOLOv8 中的遗传算法为探索超参数空间提供了一种稳健的方法,从而实现高度优化的模型性能。主要优点包括

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

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

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

使用Ultralytics YOLO 进行超参数调整所需的时间在很大程度上取决于多个因素,如数据集的大小、模型架构的复杂程度、迭代次数以及可用的计算资源。例如,在 COCO8 这样的数据集上对YOLOv8n 进行 30 次迭代调整可能需要几个小时到几天的时间,具体取决于硬件。

为有效管理调整时间,请事先定义明确的调整预算(内部章节链接)。这有助于平衡资源分配和优化目标。

在YOLO 中进行超参数调整时,应使用哪些指标来评估模型性能?

在YOLO 中进行超参数调整时,可以使用几个关键指标来评估模型性能:

  • AP50:IoU 临界值为 0.50 时的平均精度。
  • F1 分数:精确度和召回率的调和平均值。
  • 精确度和召回率:显示模型识别真阳性与假阳性和假阴性的准确性的单个指标。

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

我能否使用Ultralytics HUB 对YOLO 模型进行超参数调整?

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

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



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

评论