深度学习(17)YOLO训练中的超参数详解
- 包含yolov8 yolo11 yolo26
- 总结超参数使用及调参技巧
YOLO11
bash
复制代码
# Ultralytics 🚀 AGPL-3.0 许可证 - https://ultralytics.com/license
# 全局配置 YAML 文件,包含 YOLO 训练、验证、预测和导出的设置和超参数
task: detect # (str) YOLO 任务类型,可选:detect(检测), segment(分割), classify(分类), pose(姿态估计), obb(旋转目标检测)
mode: train # (str) YOLO 运行模式,可选:train(训练), val(验证), predict(预测), export(导出), track(追踪), benchmark(基准测试)
# 1. 训练设置 (Train settings) ---------------------------------------------------------------------------------------
model: # (str, 可选) 模型文件路径,例如 yolov11n.pt 或 yolov8n.yaml
data: # (str, 可选) 数据集配置文件路径,例如 coco8.yaml
epochs: 100 # (int) 训练的总轮数(Epoch)
time: # (float, 可选) 最大训练时长(小时);如果设置了此参数,将覆盖 epochs 的设定
patience: 100 # (int) 早停机制(Early Stopping)。如果在 N 轮内验证集性能没有提升,则提前结束训练
batch: 16 # (int) 批次大小(Batch Size);设置为 -1 将启动自动批次大小(AutoBatch)功能
imgsz: 640 # (int | list) 训练和验证的输入图像尺寸,如 640。预测或导出时可设为宽高列表 [h, w]
save: True # (bool) 是否保存训练的权重检查点和预测结果
save_period: -1 # (int) 每隔 N 轮保存一次检查点;如果小于 1 则禁用此功能(只保存最优和最后一轮)
cache: False # (bool | str) 是否将图像缓存到内存 (True/'ram') 或磁盘 ('disk') 以加速数据加载
device: # (int | str | list, 可选) 运行设备,例如 0, [0,1,2,3] (多卡CUDA), 'cpu'(CPU) 或 'mps'(Mac)
workers: 8 # (int) 数据加载的线程数(DataLoader线程数),每张卡对应的线程数
project: # (str, 可选) 项目名称,用于管理多次运行的保存路径
name: # (str, 可选) 实验运行的名称,保存在 project 文件夹内
exist_ok: False # (bool) 如果设为 True,当运行名称文件夹已存在时不会报错,而是直接覆盖或递增
pretrained: True # (bool, 可选) 是否使用预训练模型 (bool),或指定特定预训练权重的路径 (str)
optimizer: auto # (str) 优化器类型,可选:SGD, Adam, AdamW, RMSProp, NAdam, RAdam 或 auto(自动根据模型选择)
verbose: True # (bool) 是否在训练期间打印详细的输出日志和每一类的 mAP
seed: 0 # (int) 随机种子,用于复现实验结果
deterministic: True # (bool) 是否启用确定性模式,保证每次运行结果完全一致(会稍微降低计算速度)
single_cls: False # (bool) 是否将多类别数据集作为单类别(全设为类 0)来训练
rect: False # (bool) 是否在训练中使用矩形拼接/推理(Rectangular training),可减少填充提高速度
cos_lr: False # (bool) 是否使用余弦退火学习率调度策略(Cosine learning rate scheduler)
close_mosaic: 10 # (int) 在训练结束前最后 N 轮禁用 Mosaic 增强,有助于最终收敛
resume: False # (bool) 是否从上一次中断的检查点恢复训练
amp: True # (bool) 是否开启自动混合精度(Automatic Mixed Precision)训练,能大幅节省显存并提速
fraction: 1.0 # (float) 训练中使用的数据集比例(例如 0.1 表示只用 10% 的数据训练),用于快速测试
profile: False # (bool) 是否在训练期间利用 Profiler 分析网络各层的 ONNX/TensorRT 运行耗时
freeze: # (int | list, 可选) 冻结模型的前 N 层,或指定冻结的层索引列表,用于迁移学习
multi_scale: False # (bool) 是否在训练中开启多尺度训练(图像尺寸在 imgsz 的 +/- 50% 之间随机变动)
# 2. 验证/评估设置 (Val settings) ------------------------------------------------------------------------------------
val: True # (bool) 是否在训练期间/结束时进行验证
split: val # (str) 用于验证的数据集划分,可选:val, test 或 train
save_json: False # (bool) 是否将检测结果保存为 COCO 格式的 JSON 文件
save_hybrid: False # (bool) 是否保存标签的混合版本(将模型预测与真实标签结合评估)
conf: # (float, 可选) 验证/检测时的目标置信度阈值(默认值根据模式动态调节,如预测时默认 0.25,验证时默认 0.001)
iou: 0.7 # (float) 非极大值抑制 (NMS) 的 IoU 阈值
max_det: 300 # (int) 每张图像允许的最大检测框数量
half: False # (bool) 是否使用半精度 (FP16) 进行验证/推理
dnn: False # (bool) 是否在 OpenCV 推理中使用 OpenCV DNN 后端
# 3. 预测设置 (Predict settings) ---------------------------------------------------------------------------------
source: # (str, 可选) 预测的输入源,可以是图像路径、文件夹、视频路径、URL 或流媒体/摄像头
vid_stride: 1 # (int) 视频输入时的跳帧步长(1 表示处理每一帧,2 表示每隔一帧处理一次)
stream_buffer: False # (bool) 处理视频流时是否开启缓冲区(丢弃过期帧以保持实时性)
visualize: False # (bool) 是否可视化模型中间特征图
augment: False # (bool) 是否开启测试时增强(Test-Time Augmentation, TTA)
agnostic_nms: False # (bool) 是否开启类别无关的 NMS(不同类别的重叠框也会相互抑制)
classes: # (int | list, 可选) 只过滤显示指定 ID 的类别,例如 classes: [0, 2]
retina_masks: False # (bool) 实例分割任务中,是否使用高分辨率(原图尺寸)的 Retina 掩膜
embed: # (int | list, 可选) 提取指定层号的特征向量(Embedding),而不是返回预测框
# 4. 可视化/保存设置 (Visual settings) ------------------------------------------------------------------------------
show: False # (bool) 如果环境支持(如本地有屏幕),是否在预测时实时弹出窗口显示结果
save_frames: False # (bool) 在处理视频时,是否将每一帧都保存为独立的图像文件
save_txt: False # (bool) 是否将检测结果保存为文本文件 (.txt),格式为 YOLO 归一化标签格式
save_conf: False # (bool) 在保存的 .txt 文件中,是否包含目标的置信度得分
save_crop: False # (bool) 是否将剪裁后的目标抠图保存到独立文件夹中
show_labels: True # (bool) 在图上画框时是否显示类别名称
show_conf: True # (bool) 在图上画框时是否显示置信度数值
show_boxes: True # (bool) 是否在图上绘制边界框
line_width: # (int, 可选) 边界框画线的粗细像素,如果不设则自动根据图大小自适应
# 5. 超参数设置 (Hyperparameters) - 控制数据增强和损失权重 -----------------------------------------------------------------
lr0: 0.01 # (float) 初始学习率(Initial learning rate),对于 SGD 默认 0.01,Adam 默认 0.001
lrf: 0.01 # (float) 最终学习率(Final learning rate)占初始学习率的比例,即 (lr0 * lrf)
momentum: 0.937 # (float) 优化器的动量参数(SGD momentum 或 Adam beta1)
weight_decay: 0.0005 # (float) 权重衰减系数(L2 正则化项),用于防止过拟合
warmup_epochs: 3.0 # (float) 预热(Warmup)的轮数,在这几轮内学习率会从低逐渐升到 lr0
warmup_momentum: 0.8 # (float) 预热阶段的初始动量
warmup_bias_lr: 0.1 # (float) 预热阶段偏置(Bias)的学习率
box: 7.5 # (float) 边界框损失(Bounding Box Loss)的权重比例
cls: 0.5 # (float) 分类损失(Classification Loss)的权重比例
dfl: 1.5 # (float) 分布焦点损失(Distribution Focal Loss)的权重比例
pose: 12.0 # (float) 关键点姿态损失(Pose Loss)的权重比例(仅适用于 Pose 模型)
kobj: 1.0 # (float) 关键点可见性损失(Keypoint Objectness Loss)的权重比例
label_smoothing: 0.0 # (float) 标签平滑(Label Smoothing)系数,用于缓解过拟合
nbs: 64 # (int) 损失规范化的名义批次大小(Nominal Batch Size)
# 数据增强超参数 (Data Augmentation)
hsv_h: 0.015 # (float) HSV 颜色空间中的色调(Hue)随机增强比例 (+/-)
hsv_s: 0.7 # (float) HSV 颜色空间中的饱和度(Saturation)随机增强比例 (+/-)
hsv_v: 0.4 # (float) HSV 颜色空间中的亮度(Value/Brightness)随机增强比例 (+/-)
degrees: 0.0 # (float) 图像随机旋转角度范围 (+/- 度)
translate: 0.1 # (float) 图像随机平移幅度的比例 (+/-)
scale: 0.5 # (float) 图像随机缩放范围比例 (+/-,例如 0.5 表示在 50% 到 150% 之间变化)
shear: 0.0 # (float) 图像随机剪切角度范围 (+/- 度)
perspective: 0.0 # (float) 图像随机透视变换幅度的比例 (0-0.001 之间)
flipud: 0.0 # (float) 图像随机上下翻转的概率
fliplr: 0.5 # (float) 图像随机左右翻转的概率
bgr: 0.0 # (float) 图像通道随机从 RGB 转换为 BGR 的概率
mosaic: 1.0 # (float) 使用 Mosaic 数据增强(4张图拼接)的概率
mixup: 0.0 # (float) 使用 MixUp 数据增强(两张图重叠融合)的概率
cutmix: 0.0 # (float) 使用 CutMix 数据增强(将一幅图的一部分剪切粘贴到另一幅图上)的概率
copy_paste: 0.0 # (float) 实例分割任务中的复制-粘贴数据增强概率
copy_paste_mode: flip # (str) 复制-粘贴时策略:flip(翻转) 或 mixup(融合)
auto_augment: randaugment # (str) 分类任务的自动增强策略,可选:randaugment, autoaugment, augmix
erasing: 0.4 # (float) 分类任务中随机区域擦除(Random Erasing)的概率 (0-0.9之间)
# 6. 自定义配置 (Custom config) -----------------------------------------------------------------------------------
cfg: # (str, 可选) 另一个覆盖上述默认设置的自定义 config.yaml 路径
# 7. 追踪设置 (Tracker settings) ----------------------------------------------------------------------------------
tracker: botsort.yaml # (str) 目标追踪器配置文件,可选:botsort.yaml 或 bytetrack.yaml
YOLO26
bash
复制代码
# Ultralytics 🚀 AGPL-3.0 许可证 - https://ultralytics.com/license
# 全局配置 YAML 文件,包含 YOLO 训练、验证、预测和导出的设置和超参数
task: detect # (str) YOLO 任务类型,可选:detect(检测), segment(分割), classify(分类), pose(姿态估计), obb(旋转目标检测)
mode: train # (str) YOLO 运行模式,可选:train(训练), val(验证), predict(预测), export(导出), track(追踪), benchmark(基准测试)
# 1. 训练设置 (Train settings) ---------------------------------------------------------------------------------------
model: # (str, 可选) 模型文件路径,例如 yolov8n.pt 或 yolov8n.yaml
data: # (str, 可选) 数据集配置文件路径,例如 coco8.yaml
epochs: 100 # (int) 训练的总轮数(Epoch)
time: # (float, 可选) 最大训练时长(小时);如果设置了此参数,将覆盖 epochs 的设定
patience: 100 # (int) 早停机制(Early Stopping)。如果在 N 轮内验证集性能没有提升,则提前结束训练
batch: 16 # (int) 批次大小(Batch Size);设置为 -1 将启动自动批次大小(AutoBatch)功能
imgsz: 640 # (int | list) 训练和验证的输入图像尺寸,如 640。预测或导出时可设为宽高列表 [h, w]
save: True # (bool) 是否保存训练的权重检查点和预测结果
save_period: -1 # (int) 每隔 N 轮保存一次检查点;如果小于 1 则禁用此功能(只保存最优和最后一轮)
cache: False # (bool | str) 是否将图像缓存到内存 (True/'ram') 或磁盘 ('disk') 以加速数据加载
device: # (int | str | list, 可选) 运行设备,例如 0, [0,1,2,3] (多卡CUDA), 'cpu'(CPU) 或 'mps'(Mac)
workers: 8 # (int) 数据加载的线程数(DataLoader线程数),每张卡对应的线程数
project: # (str, 可选) 项目名称,用于管理多次运行的保存路径
name: # (str, 可选) 实验运行的名称,保存在 project 文件夹内
exist_ok: False # (bool) 如果设为 True,当运行名称文件夹已存在时不会报错,而是直接覆盖或递增
pretrained: True # (bool, 可选) 是否使用预训练模型 (bool),或指定特定预训练权重的路径 (str)
optimizer: auto # (str) 优化器类型,可选:SGD, Adam, AdamW, RMSProp, NAdam, RAdam 或 auto(自动根据模型选择)
verbose: True # (bool) 是否在训练期间打印详细的输出日志和每一类的 mAP
seed: 0 # (int) 随机种子,用于复现实验结果
deterministic: True # (bool) 是否启用确定性模式,保证每次运行结果完全一致(会稍微降低计算速度)
single_cls: False # (bool) 是否将多类别数据集作为单类别(全设为类 0)来训练
rect: False # (bool) 是否在训练中使用矩形拼接/推理(Rectangular training),可减少填充提高速度
cos_lr: False # (bool) 是否使用余弦退火学习率调度策略(Cosine learning rate scheduler)
close_mosaic: 10 # (int) 在训练结束前最后 N 轮禁用 Mosaic 增强,有助于最终收敛
resume: False # (bool) 是否从上一次中断的检查点恢复训练
amp: True # (bool) 是否开启自动混合精度(Automatic Mixed Precision)训练,能大幅节省显存并提速
fraction: 1.0 # (float) 训练中使用的数据集比例(例如 0.1 表示只用 10% 的数据训练),用于快速测试
profile: False # (bool) 是否在训练期间利用 Profiler 分析网络各层的 ONNX/TensorRT 运行耗时
freeze: # (int | list, 可选) 冻结模型的前 N 层,或指定冻结的层索引列表,用于迁移学习
multi_scale: False # (bool) 是否在训练中开启多尺度训练(图像尺寸在 imgsz 的 +/- 50% 之间随机变动)
# 2. 验证/评估设置 (Val settings) ------------------------------------------------------------------------------------
val: True # (bool) 是否在训练期间/结束时进行验证
split: val # (str) 用于验证的数据集划分,可选:val, test 或 train
save_json: False # (bool) 是否将检测结果保存为 COCO 格式的 JSON 文件
save_hybrid: False # (bool) 是否保存标签的混合版本(将模型预测与真实标签结合评估)
conf: # (float, 可选) 验证/检测时的目标置信度阈值(默认值根据模式动态调节,如预测时默认 0.25,验证时默认 0.001)
iou: 0.7 # (float) 非极大值抑制 (NMS) 的 IoU 阈值
max_det: 300 # (int) 每张图像允许的最大检测框数量
half: False # (bool) 是否使用半精度 (FP16) 进行验证/推理
dnn: False # (bool) 是否在 OpenCV 推理中使用 OpenCV DNN 后端
# 3. 预测设置 (Predict settings) ---------------------------------------------------------------------------------
source: # (str, 可选) 预测的输入源,可以是图像路径、文件夹、视频路径、URL 或流媒体/摄像头
vid_stride: 1 # (int) 视频输入时的跳帧步长(1 表示处理每一帧,2 表示每隔一帧处理一次)
stream_buffer: False # (bool) 处理视频流时是否开启缓冲区(丢弃过期帧以保持实时性)
visualize: False # (bool) 是否可视化模型中间特征图
augment: False # (bool) 是否开启测试时增强(Test-Time Augmentation, TTA)
agnostic_nms: False # (bool) 是否开启类别无关的 NMS(不同类别的重叠框也会相互抑制)
classes: # (int | list, 可选) 只过滤显示指定 ID 的类别,例如 classes: [0, 2]
retina_masks: False # (bool) 实例分割任务中,是否使用高分辨率(原图尺寸)的 Retina 掩膜
embed: # (int | list, 可选) 提取指定层号的特征向量(Embedding),而不是返回预测框
# 4. 可视化/保存设置 (Visual settings) ------------------------------------------------------------------------------
show: False # (bool) 如果环境支持(如本地有屏幕),是否在预测时实时弹出窗口显示结果
save_frames: False # (bool) 在处理视频时,是否将每一帧都保存为独立的图像文件
save_txt: False # (bool) 是否将检测结果保存为文本文件 (.txt),格式为 YOLO 归一化标签格式
save_conf: False # (bool) 在保存的 .txt 文件中,是否包含目标的置信度得分
save_crop: False # (bool) 是否将剪裁后的目标抠图保存到独立文件夹中
show_labels: True # (bool) 在图上画框时是否显示类别名称
show_conf: True # (bool) 在图上画框时是否显示置信度数值
show_boxes: True # (bool) 是否在图上绘制边界框
line_width: # (int, 可选) 边界框画线的粗细像素,如果不设则自动根据图大小自适应
# 5. 超参数设置 (Hyperparameters) - 控制数据增强和损失权重 -----------------------------------------------------------------
lr0: 0.01 # (float) 初始学习率(Initial learning rate),对于 SGD 默认 0.01,Adam 默认 0.001
lrf: 0.01 # (float) 最终学习率(Final learning rate)占初始学习率的比例,即 (lr0 * lrf)
momentum: 0.937 # (float) 优化器的动量参数(SGD momentum 或 Adam beta1)
weight_decay: 0.0005 # (float) 权重衰减系数(L2 正则化项),用于防止过拟合
warmup_epochs: 3.0 # (float) 预热(Warmup)的轮数,在这几轮内学习率会从低逐渐升到 lr0
warmup_momentum: 0.8 # (float) 预热阶段的初始动量
warmup_bias_lr: 0.1 # (float) 预热阶段偏置(Bias)的学习率
box: 7.5 # (float) 边界框损失(Bounding Box Loss)的权重比例
cls: 0.5 # (float) 分类损失(Classification Loss)的权重比例
dfl: 1.5 # (float) 分布焦点损失(Distribution Focal Loss)的权重比例
pose: 12.0 # (float) 关键点姿态损失(Pose Loss)的权重比例(仅适用于 Pose 模型)
kobj: 1.0 # (float) 关键点可见性损失(Keypoint Objectness Loss)的权重比例
label_smoothing: 0.0 # (float) 标签平滑(Label Smoothing)系数,用于缓解过拟合
nbs: 64 # (int) 损失规范化的名义批次大小(Nominal Batch Size)
# 数据增强超参数 (Data Augmentation)
hsv_h: 0.015 # (float) HSV 颜色空间中的色调(Hue)随机增强比例 (+/-)
hsv_s: 0.7 # (float) HSV 颜色空间中的饱和度(Saturation)随机增强比例 (+/-)
hsv_v: 0.4 # (float) HSV 颜色空间中的亮度(Value/Brightness)随机增强比例 (+/-)
degrees: 0.0 # (float) 图像随机旋转角度范围 (+/- 度)
translate: 0.1 # (float) 图像随机平移幅度的比例 (+/-)
scale: 0.5 # (float) 图像随机缩放范围比例 (+/-,例如 0.5 表示在 50% 到 150% 之间变化)
shear: 0.0 # (float) 图像随机剪切角度范围 (+/- 度)
perspective: 0.0 # (float) 图像随机透视变换幅度的比例 (0-0.001 之间)
flipud: 0.0 # (float) 图像随机上下翻转的概率
fliplr: 0.5 # (float) 图像随机左右翻转的概率
bgr: 0.0 # (float) 图像通道随机从 RGB 转换为 BGR 的概率
mosaic: 1.0 # (float) 使用 Mosaic 数据增强(4张图拼接)的概率
mixup: 0.0 # (float) 使用 MixUp 数据增强(两张图重叠融合)的概率
cutmix: 0.0 # (float) 使用 CutMix 数据增强(将一幅图的一部分剪切粘贴到另一幅图上)的概率
copy_paste: 0.0 # (float) 实例分割任务中的复制-粘贴数据增强概率
copy_paste_mode: flip # (str) 复制-粘贴时策略:flip(翻转) 或 mixup(融合)
auto_augment: randaugment # (str) 分类任务的自动增强策略,可选:randaugment, autoaugment, augmix
erasing: 0.4 # (float) 分类任务中随机区域擦除(Random Erasing)的概率 (0-0.9之间)
# 6. 自定义配置 (Custom config) -----------------------------------------------------------------------------------
cfg: # (str, 可选) 另一个覆盖上述默认设置的自定义 config.yaml 路径
# 7. 追踪设置 (Tracker settings) ----------------------------------------------------------------------------------
tracker: botsort.yaml # (str) 目标追踪器配置文件,可选:botsort.yaml 或 bytetrack.yaml