YOLO 训练结果
2025年10月19日大约 6 分钟
YOLO 训练结果
我们来详细解释 YOLO (特别是 YOLOv5/v7/v8 等常见版本) 训练日志中这些关键列的含义:
epoch:- 含义: 当前训练的轮次(Epoch)。一个 Epoch 表示模型已经完整地遍历了整个训练数据集一次。
- 用途: 跟踪训练进度,观察指标随训练轮次的变化趋势。
train/box_loss:- 含义: 训练集上的边界框回归损失 (Bounding Box Loss)。
- 计算: 衡量模型预测的边界框 (x, y, w, h) 与真实标注框 (Ground Truth) 之间的差异。通常使用 CIOU Loss、DIOU Loss 或 GIOU Loss 等改进的 IoU 损失函数。
- 目标: 这个值越低越好。表示模型预测的框位置和大小越准确。
- 关注点: 下降趋势是否平稳?是否收敛?
train/obj_loss:- 含义: 训练集上的目标存在性损失 (Objectness Loss)。
- 计算: 衡量模型预测的“该网格/锚框内存在目标物体”的置信度(通常是 0 到 1 之间的概率)与真实情况(1 表示有目标,0 表示无目标)之间的差异。通常使用二元交叉熵损失 (Binary Cross-Entropy Loss)。
- 目标: 这个值越低越好。表示模型能更准确地判断哪些位置有物体(减少漏检和误检)。
- 关注点: 与
box_loss一起观察,理解模型定位和检测置信度的学习情况。
train/cls_loss:- 含义: 训练集上的分类损失 (Classification Loss)。
- 计算: 衡量模型对检测到的目标物体预测的类别概率分布与真实类别标签之间的差异。通常使用交叉熵损失 (Cross-Entropy Loss)。
- 目标: 这个值越低越好。表示模型能更准确地区分不同的物体类别。
- 关注点: 如果分类任务困难或类别不平衡,这个损失可能相对较高。
metrics/precision:- 含义: 验证集上的精确率。
- 计算:
Precision = TP / (TP + FP)。在所有模型预测为正例(检测到物体)的样本中,有多少是真正的正例(确实是物体且类别正确)。 - 目标: 越高越好 (接近 1)。高 Precision 意味着模型检测到的物体中,误检(False Positives/FP,把背景或错误类别当成目标)的比例低。
- 关注点: 模型预测结果的“纯净度”。
metrics/recall:- 含义: 验证集上的召回率(也称为查全率)。
- 计算:
Recall = TP / (TP + FN)。在所有真实存在的正例(标注的物体)中,有多少被模型成功检测出来(预测为正例且类别正确)。 - 目标: 越高越好 (接近 1)。高 Recall 意味着模型漏检(False Negatives/FN,真实物体没检测到)的比例低。
- 关注点: 模型检测物体的“覆盖率”。
metrics/mAP_0.5:- 含义: 验证集上,在 IoU 阈值为 0.5 时计算的平均精度均值 (mean Average Precision)。
- 计算: 这是目标检测最核心的综合评价指标之一。它首先计算每个类别的 AP (Average Precision),即在不同置信度阈值下,Precision-Recall 曲线下的面积。然后将所有类别的 AP 求平均得到 mAP。这里的 IoU 阈值固定为 0.5(即预测框与真实框的重叠面积占并集面积 >=50% 才认为检测正确)。
- 目标: 越高越好 (范围 0~1)。这是衡量模型整体检测性能的关键指标。mAP@0.5 是相对宽松的标准,关注物体是否被大致框出来。
- 关注点: 训练过程中最重要的监控指标之一,综合反映了检测的准确性和召回率。
metrics/mAP_0.5:0.95(有时简写为mAP或mAP@[.5:.95]):- 含义: 验证集上,在 IoU 阈值从 0.5 到 0.95,步长 0.05 (即 0.5, 0.55, 0.6, ..., 0.95) 的多个阈值下计算的平均精度均值的再平均。
- 计算: 对每个 IoU 阈值(0.5 到 0.95,步长 0.05,共 10 个阈值)都计算一次 mAP,然后将这 10 个 mAP 值求平均。
- 目标: 越高越好 (范围 0~1)。这是衡量模型定位精度的更严格、更全面的核心指标。它要求预测框与真实框有更高的重叠度(从 50% 到 95%),能更好地反映模型预测框的精确性。
- 关注点: 训练过程中另一个极其重要的监控指标,尤其关注定位精度。通常比
mAP_0.5低很多。
val/box_loss:- 含义: 验证集上的边界框回归损失。
- 目标/关注点: 与
train/box_loss类似,但反映的是模型在未参与训练的验证数据上的定位能力。理想情况下应与train/box_loss趋势一致且接近。如果val/box_loss远高于train/box_loss,可能出现过拟合。
val/obj_loss:- 含义: 验证集上的目标存在性损失。
- 目标/关注点: 与
train/obj_loss类似,反映模型在验证集上判断有无目标的能力。同样需关注与训练损失的差距。
val/cls_loss:- 含义: 验证集上的分类损失。
- 目标/关注点: 与
train/cls_loss类似,反映模型在验证集上的分类能力。关注与训练损失的差距。
x/lr0,x/lr1,x/lr2:- 含义: 当前 epoch 使用的学习率 (Learning Rate)。在 YOLOv5/v7/v8 中,模型通常被分为不同的参数组(Parameter Groups),每组可以应用不同的学习率。这是优化器(如 SGD, Adam)的关键超参数。
- 常见分组 (以 YOLOv5 为例):
lr0(或pg0): 通常对应卷积层权重 (Conv Weights) 的学习率。这是最主要的学习率。lr1(或pg1): 通常对应批归一化层权重和偏置 (BatchNorm Weights & Biases) 的学习率。这个学习率通常设置为lr0的一个倍数 (例如,在 YOLOv5 中默认是lr0 * hyp['obj_lr'],obj_lr默认为 1.0,即通常与lr0相同)。lr2(或pg2): 通常对应其他所有参数(如偏置项 Bias,通常不包括在 pg1 中的 BN 参数)的学习率。这个学习率也通常设置为lr0的一个倍数 (例如,在 YOLOv5 中默认是lr0 * hyp['bias_lr'],bias_lr默认为 1.0,即通常也与lr0相同)。
- 用途: 监控学习率调度器(如 Cosine, Step, Linear)的工作情况。你会看到学习率随着 epoch 增加而下降(如果是衰减策略)。确保学习率按预期变化对于训练成功至关重要。如果使用自定义的超参数 (
hyp.yaml),这里的值会反映你的设置。
总结与监控要点:
- 核心监控指标:
metrics/mAP_0.5和metrics/mAP_0.5:0.95是最重要的,直接反映模型在验证集上的最终性能。目标是它们随着训练持续上升并趋于稳定。 - 损失函数:
train/*_loss和val/*_loss反映训练过程。期望看到它们逐渐下降并收敛。val_loss显著高于train_loss可能是过拟合的信号。 - Precision/Recall 权衡: 观察
metrics/precision和metrics/recall。高 Precision 低 Recall 意味着检测框准但漏检多;低 Precision 高 Recall 意味着检测框多但误检也多。根据应用需求调整置信度阈值可以在这两者之间取得平衡(训练日志反映的是默认阈值,通常是 0.001 或 0.25 的结果)。 - 学习率: 检查
x/lr0,x/lr1,x/lr2是否按预期调度(如逐渐衰减)。不恰当的学习率是训练失败最常见的原因之一。 - 收敛判断: 当
mAP指标在连续多个 epoch 内不再显著提升(甚至开始轻微下降),且训练/验证损失趋于稳定时,通常意味着模型已经收敛,可以考虑停止训练或调整学习率策略。
理解这些指标的含义对于分析 YOLO 模型的训练过程、诊断问题(如欠拟合、过拟合)以及比较不同模型或超参数配置的性能至关重要。