当前位置: 首页 > news >正文

YOLOv1 技术详解:NMS(非极大值抑制)的工作原理与实现细节

🧠 YOLOv1 技术详解:NMS(非极大值抑制)的工作原理与实现细节

一、前言

在目标检测任务中,模型往往会输出多个边界框(bounding box),其中很多是针对同一物体的重复预测。为了提高检测结果的准确性和简洁性,我们需要使用一种后处理技术来去除这些冗余的预测框 —— 这就是 NMS(Non-Maximum Suppression,非极大值抑制)

本文将围绕 YOLOv1 中的 NMS 实现机制展开,详细介绍:

  • NMS 的基本思想
  • YOLOv1 中如何应用 NMS
  • NMS 的具体步骤与伪代码
  • 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(classobject)×confidence
2. 对每个类别,收集所有该类别的预测框;
3. 对该类别的框进行 NMS,步骤如下:
• 选出得分最高的框作为保留框;
• 删除与该框 IOU 超过阈值(如 0.5 或 0.45)的其他框;
• 重复直到所有框处理完。

二、什么是 NMS?

✅ 定义:

NMS 是一种用于目标检测后处理的技术,其核心思想是:保留置信度最高的预测框,并移除与其高度重叠(IoU 较大)的其他预测框

🎯 目标:

  • 消除重复检测
  • 提高检测结果的清晰度和准确性

三、YOLOv1 中的预测输出回顾

在正式介绍 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 数据集下的类别数量;

📌 预测流程简述:

  1. 图像输入网络,得到 7×7×30 的输出张量;
  2. 每个 grid cell 的两个 bounding box 都有对应的 confidence 分数;
  3. 结合 class probability 得到最终的检测分数;
  4. 对所有 bounding box 执行 NMS 去除冗余预测。

四、YOLOv1 中的 NMS 实现步骤详解

🧩 核心思路:

对每一类分别执行 NMS,即:

  • 先筛选出某一类别的所有预测框;
  • 按照置信度排序;
  • 依次选择最高置信度的框,并删除与其 IoU 超过阈值的其他框;
  • 重复此过程直到所有框处理完毕。

🧪 具体步骤如下:

Step 1: 筛选特定类别

对于每个类别 c ∈ [ 1 , C ] c \in [1, C] c[1,C]

class_boxes = [box for box in all_boxes if box.class_id == c]
Step 2: 按置信度排序
class_boxes.sort(key=lambda x: x.confidence_score, reverse=True)
Step 3: 初始化保留框列表
keep_boxes = []
Step 4: 依次选取最大置信度的框并删除重叠框
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_boxesif iou(box, highest_conf_box) < iou_threshold]

📌 其中 iou_threshold 通常设为 0.5。


五、NMS 的可视化示意图(文字版)

假设我们有一个类别的多个预测框:

[Box1(conf=0.9), Box2(conf=0.85), Box3(conf=0.7), Box4(conf=0.6)]

执行 NMS 的过程如下:

  1. 选出置信度最高的 Box1;
  2. 删除与 Box1 IoU > 0.5 的其他框(如 Box2 和 Box3);
  3. 剩下 Box4,继续判断是否保留;
  4. 最终保留 Box1 和 Box4(若 IoU ≤ 0.5);
  5. 输出最终检测结果。

六、YOLOv1 中 NMS 的注意事项

注意点说明
类别敏感YOLOv1 的 NMS 是按类别进行的,不同类别的框不会相互干扰
置信度来源使用的是 bounding box 的 confidence score,而不是 class probability × confidence
性能影响在 CPU 上运行时可能会成为性能瓶颈,但 GPU 实现效率较高
多目标问题若两个真实目标靠得很近,可能只保留一个预测框

七、YOLOv1 中 NMS 的优缺点分析

✅ 优点:

  • 简单高效,易于实现;
  • 有效减少重复检测;
  • 提升检测结果的可读性和精度;

❌ 缺点:

  • 无法处理密集目标场景:多个真实目标靠近时,容易漏检;
  • 依赖置信度排序:如果第一个框预测错误,后续正确框可能被误删;
  • 不支持软阈值机制:相比 Soft-NMS,硬删除方式不够灵活;

八、YOLO 后续版本中的改进(拓展阅读)

虽然 YOLOv1 中的 NMS 实现简单有效,但在后续版本中得到了进一步优化:

版本改进点
YOLOv2引入 Anchor Boxes,提升召回率
YOLOv3多尺度预测,增强小物体检测能力
YOLOX引入 SimOTA 正样本匹配策略,替代传统 NMS
YOLOv5+支持 Soft-NMS、DIoU-NMS 等更先进的后处理方法

九、总结

模块内容
NMS 的作用去除重复预测框,提高检测结果的准确性和清晰度
YOLOv1 的 NMS 实现按类别进行,保留置信度最高的框,删除与其高度重叠的其他框
实现步骤筛选类别 → 排序置信度 → 依次保留并剔除重叠框
注意点类别敏感、置信度计算方式、多目标问题

十、结语

NMS 是现代目标检测系统中不可或缺的一部分。尽管 YOLOv1 的 NMS 实现较为基础,但它奠定了后续版本乃至整个检测领域的后处理标准流程。


📌 欢迎点赞 + 收藏 + 关注我,我会持续更新更多关于计算机视觉、目标检测、深度学习、YOLO系列等内容!

相关文章:

  • Python+TensorFlow:30分钟快速入门AI开发
  • LaViDa:基于扩散模型的多模态大模型,速度超越next-token范式
  • 魔百和网络机顶盒CM211-1硬件解析
  • linux驱动开发(6)-内核虚拟空间管理
  • IGBT开通时间、关断时间、死区时间
  • java复习 09
  • UE5场景漫游——鼠标控制旋转与第一人称漫游
  • 5.4.1树的存储结构
  • 获取Unity节点路径
  • 前端八股文 - JavaScript 篇
  • 【Create my OS】从零编写一个操作系统
  • mesh转solid freecad
  • docker compose的变量使用说明
  • Spring常见面试题
  • PCB比对--CAM Brd文件比对
  • 中文分词总结:历程、问题、发展
  • 【笔记】Blockchain
  • 黑龙江亿林网络启盛裸金属服务器评测:24 核 32G + 联通千兆共享,高负载业务的新利器
  • 68元开启智能硬件新纪元——明远智睿SSD2351开发板引领创新浪潮
  • Guava 在大数据计算场景下的使用指南
  • 小熊代刷推广网站/百度总部地址
  • 免费创一个网站/推广普通话活动方案
  • ic外贸网站建设/一个新产品的营销方案
  • 门户网站制作需要多少钱/蚁坊软件舆情监测系统
  • 长春企业网站建设/正版seo搜索引擎
  • 如何建设网站/萝卜建站