在目标检测任务中,模型往往会输出多个边界框(bounding box),其中很多是针对同一物体的重复预测。为了提高检测结果的准确性和简洁性,我们需要使用一种后处理技术来去除这些冗余的预测框 —— 这就是 NMS(Non-Maximum Suppression,非极大值抑制)。
本文将围绕 YOLOv1 中的 NMS 实现机制展开,详细介绍:
YOLOv1 使用了 NMS(非极大值抑制,Non-Maximum Suppression),但它不是训练的一部分,而是后处理步骤,用于从多个预测框中选出最优结果。
✅ YOLOv1 中的 NMS 用途
在预测阶段,YOLOv1 会:
• 为每个 S × S S \times S S×S 网格预测 B B B 个边界框(每个含置信度和类别概率);
• 因此最终会得到非常多的候选框(如 7 × 7 × 2 = 98 7 \times 7 \times 2 = 98 7×7×2=98 个);
• 很多框可能高度重叠或重复检测同一目标。
为了解决这个问题,YOLOv1 会在每个类别上分别进行 NMS,抑制重叠度高(IOU 高)的低置信度框。
YOLOv1 后处理步骤(含 NMS)
1. 对每个边界框,计算:
class confidence score = Pr ( class ∣ object ) × confidence \text{class confidence score} = \Pr(\text{class} \mid \text{object}) \times \text{confidence} class confidence score=Pr(class∣object)×confidence
2. 对每个类别,收集所有该类别的预测框;
3. 对该类别的框进行 NMS,步骤如下:
• 选出得分最高的框作为保留框;
• 删除与该框 IOU 超过阈值(如 0.5 或 0.45)的其他框;
• 重复直到所有框处理完。
NMS 是一种用于目标检测后处理的技术,其核心思想是:保留置信度最高的预测框,并移除与其高度重叠(IoU 较大)的其他预测框。
在正式介绍 NMS 之前,我们先回顾一下 YOLOv1 的输出结构:
S × S × (B×5 + C)
其中:
S = 7
:图像被划分为 7×7 的网格单元;B = 2
:每个网格单元预测 2 个 bounding box;5
:每个 bounding box 包含 (x, y, w, h, confidence)
;C = 20
:PASCAL VOC 数据集下的类别数量;对每一类分别执行 NMS,即:
对于每个类别 c ∈ [ 1 , C ] c \in [1, C] c∈[1,C]:
class_boxes = [box for box in all_boxes if box.class_id == c]
class_boxes.sort(key=lambda x: x.confidence_score, reverse=True)
keep_boxes = []
while len(class_boxes) > 0:
# 取出当前置信度最高的框
highest_conf_box = class_boxes.pop(0)
keep_boxes.append(highest_conf_box)
# 删除与该框 IoU 大于阈值的其他框
class_boxes = [
box for box in class_boxes
if iou(box, highest_conf_box) < iou_threshold
]
其中
iou_threshold
通常设为 0.5。
假设我们有一个类别的多个预测框:
[Box1(conf=0.9), Box2(conf=0.85), Box3(conf=0.7), Box4(conf=0.6)]
执行 NMS 的过程如下:
注意点 | 说明 |
---|---|
类别敏感 | YOLOv1 的 NMS 是按类别进行的,不同类别的框不会相互干扰 |
置信度来源 | 使用的是 bounding box 的 confidence score,而不是 class probability × confidence |
性能影响 | 在 CPU 上运行时可能会成为性能瓶颈,但 GPU 实现效率较高 |
多目标问题 | 若两个真实目标靠得很近,可能只保留一个预测框 |
虽然 YOLOv1 中的 NMS 实现简单有效,但在后续版本中得到了进一步优化:
版本 | 改进点 |
---|---|
YOLOv2 | 引入 Anchor Boxes,提升召回率 |
YOLOv3 | 多尺度预测,增强小物体检测能力 |
YOLOX | 引入 SimOTA 正样本匹配策略,替代传统 NMS |
YOLOv5+ | 支持 Soft-NMS、DIoU-NMS 等更先进的后处理方法 |
模块 | 内容 |
---|---|
NMS 的作用 | 去除重复预测框,提高检测结果的准确性和清晰度 |
YOLOv1 的 NMS 实现 | 按类别进行,保留置信度最高的框,删除与其高度重叠的其他框 |
实现步骤 | 筛选类别 → 排序置信度 → 依次保留并剔除重叠框 |
注意点 | 类别敏感、置信度计算方式、多目标问题 |
NMS 是现代目标检测系统中不可或缺的一部分。尽管 YOLOv1 的 NMS 实现较为基础,但它奠定了后续版本乃至整个检测领域的后处理标准流程。
欢迎点赞 + 收藏 + 关注我,我会持续更新更多关于计算机视觉、目标检测、深度学习、YOLO系列等内容!