跳至内容

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
  • 使用方法超参数结果
  • Example:

    # 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 的超参数将不会被调整,例如 degrees 和 shear 下图

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

超参数调整散点图

权重/

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

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

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

结论

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

更多阅读

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

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



Created 2023-11-12, Updated 2024-06-10
Authors: glenn-jocher (10)

评论