详解YOLO目标检测核心参数与输出

0 阅读5分钟

1. 数据输入与增强参数

这类参数控制着图像在进入网络前的样子,直接影响模型的泛化能力和鲁棒性。

2200fd7e-6962-4212-80ad-ba0bfe63ae52.png

2. 模型结构超参数

这类参数定义了神经网络的长相和容量,通常在模型设计阶段就决定了(如 depth_multiple 和 width_multiple)。

2.1 深度因子

2.2 宽度因子

2.3 锚框

008f2afb-5302-4c78-8113-2c2c9d282ab2.png

3. 训练过程超参数

这类参数控制着模型如何从数据中学习,是调参的重中之重。

b3d31a08-5eae-4d87-897f-bba3c433db7a.png

4. 推理与后处理参数

4.1 学习率

4.2 动量

4.3 权重衰减

4.4 优化器

4.5 conf(置信度阈值)—— “信多少?”

通俗理解

  • 模型每画一个框,都会附上一个自信程度(0~1之间)。
  • conf 就是告诉模型:“自信度低于这个数的候选框,全部去掉”。

例子

  • 设 conf = 0.5 → 模型必须“50%以上确定”这里有某个类别的物体,才输出这个框。
  • 设 conf = 0.1 → 哪怕模型只有“10%的把握”,也把候选框画出来。

效果

  • 调高 conf → 候选框变少,但基本都是准的(高精确率,速度快)。
  • 调低 conf → 候选框变多,可能找出隐蔽目标,但也混进大量误检(高召回率,计算量变大)。

4.6 iou(交并比阈值)—— “留多少?”

通俗理解

  • 模型经常对着同一个物体画出好几个重叠的框
  • iou 就是你告诉模型:“两个框重叠面积超过这个比例,就视为同一物体,只留那个最自信的”。

例子

  • 设 iou = 0.7 → 两个候选框重叠70%以上才合并,要求很严苛,框会留得多(可能多个框围着同一个物体)。
  • 设 iou = 0.3 → 两个候选框重叠30%以上就合并,要求很宽松,框会留得很少(密集目标可能被错误合并)。

效果

  • 调高 iou → 去重力度小,候选框更冗余(适合跟踪、需保留边缘框的场景)。
  • 调低 iou → 去重力度大,候选框更精简(适合密集小目标、需分离粘连物体的场景)。

6e7633eb-ae19-451d-88e3-9ab9cc8dce1f.png

42058c1e-b94e-44f4-a0fa-c79928e23679.png

除了 conf 和 iou,推理时还有两个重要参数。

56f5f048-89dc-4e96-9755-0f4abb791aca.png

5. 性能评估参数

这类参数用于评价模型,在验证集上计算。

41d8aca0-9680-44dc-b687-a1f69ffe4c72.png

总结

  • 刚入门:重点关注训练 (lr, batch)  和评估 (mAP)  参数,先把模型跑通、看懂指标。
  • 进阶调参:尝试调整数据增强参数来提升泛化能力,优化后处理参数来适配你的特定场景(如密集、小目标)。
  • 高级玩家:才会深入到修改模型结构参数 (depthwidth),或者设计新的模块。

6. 模型最终输出

6.1 张量(Tensor)

模型最终输出的是一堆原始的、未经筛选的预测结果,它们通常是一个巨大的张量(Tensor)。以之前提到的YOLOv8s为例,假设输入一张 640x640 的图片,它的原始输出形状大致是  [1, 84, 8400]

这个张量可以拆解为三个维度来理解:

  • 1批次大小。指一次输入了几张图片,这里为1。

  • 84每个预测框的“特征向量” 。它描述了每个潜在目标的信息。这84维包含了:

    • 4:边界框坐标。通常是 [x_center, y_center, width, height] 的相对坐标(值在0到1之间)。
    • 80:类别概率。因为YOLOv8s是在COCO数据集上预训练的,有80个类别,这里就是模型认为该框属于每个类别的概率值。
  • 8400候选目标的数量。这8400个“候选人”是在不同特征图尺度(如80x80, 40x40, 20x20)上的每个网格点生成的初始预测框

6.2 从原始输出到最终看到的框

检测结果图片上干净、准确的框,是经过了复杂后处理的。模型输出的 [1, 84, 8400] 只是一个起点,它包含大量冗余和低质量的框。

所以,完整的流程是:

  1. 模型前向推理:输入图片 --> 输出原始张量 ([1, 84, 8400]),包含了8400个候选框的原始信息。

  2. 解码坐标:将相对坐标转换为相对于原图的实际像素坐标。

  3. 置信度过滤:这就是你之前问的 conf 参数。遍历所有8400个候选框,将每个框最大的类别概率作为它的置信度得分。丢掉所有得分 < conf 的框。这一步通常能过滤掉90%以上的候选框。

  4. 非极大值抑制(NMS) :这就是你之前问的 iou 参数。对剩下的框,如果它们属于同一类,且相互重叠的面积(IoU) > iou阈值,则认为它们是在检测同一个物体,只保留其中得分最高的那个。

  5. 最终输出:经过上述层层筛选,得到最终的可视化结果。在代码中(如 results[0].boxes.data),你会看到一个形状为 [N, 6] 的张量,其中 N 是最终检测到的目标数量(远小于8400)。这6列通常是:

    • [x1, y1, x2, y2, confidence, class]
    • x1, y1, x2, y2: 边界框的左上角和右下角坐标(像素值)。
    • confidence: 这个框最终的置信度分数。
    • class: 检测到的目标所属的类别ID。

总结

可以把这个过程想象成一次海选:

  • 原始输出 ([1, 84, 8400]) :就像8400个拿着报名表的“候选人”,每个表上填了他们的位置和80项特长评分。
  • conf 过滤:是一个严格的HR,要求“特长分”必须达到一定水平,否则直接淘汰。
  • iou 去重(NMS) :是一个管理团队,发现几个人简历和位置都太像了,判断他们是同一个人冒充的,只留一个最优秀的。