什么?就是算法面试(5)------NMS(非极大值抑制)原理 Soft-NMS、DIoU-NMS

news/2025/9/26 22:06:28/文章来源:https://www.cnblogs.com/slgkaifa/p/19114361

什么?就是算法面试(5)------NMS(非极大值抑制)原理 Soft-NMS、DIoU-NMS

  • 操作系统:ubuntu22.04
  • IDE:Visual Studio Code
  • 编程语言:C++11

这是一个目标检测领域的核心后处理问题,也是面试高频考点。我们从基础 NMS 原理 → 缺陷 → 改进版(Soft-NMS、DIoU-NMS) 三层递进,彻底讲透!

一、NMS(Non-Maximum Suppression,非极大值抑制)原理

✅ 核心思想:

“只保留置信度最高的框,抑制与其高度重叠的其他框。”

为什么需要 NMS?

目标检测模型(如 YOLO、Faster R-CNN)会在多个位置、多个尺度预测同一个目标,产生大量冗余框。NMS 用于去重,保留最优框。

NMS 算法步骤(经典 Greedy-NMS):

假设你有一组检测框:boxes = [box1, box2, …, boxN],每个框有 (x1, y1, x2, y2, score, class)

  • 按类别分组 → 对每个类别单独做 NMS
  • 按置信度排序 → 从高到低:score[0] > score[1] > …
  • 循环选择:
    • 选当前最高分框 box_i,加入最终结果
    • 计算 box_i 与剩余所有框的 IoU(交并比)
    • 删除所有与 box_i 的 IoU > threshold(如 0.5)的框
  • 重复步骤 3,直到无框可选

⚙️ IoU 计算公式:

IoU = Area(Intersection) / Area(Union)

️ 举个栗子 :

你检测到 5 个“狗”的框,置信度分别为:0.95, 0.9, 0.8, 0.7, 0.6

  • 选 0.95 的框 → 计算它和剩下 4 个框的 IoU
  • 假设 0.9 和 0.8 的框 IoU > 0.5 → 删除
  • 剩下 0.7 和 0.6 → 选 0.7 → 计算 IoU → 删除 0.6(如果重叠)
  • 最终保留:0.95 和 0.7 的框

二、经典 NMS 的缺陷

  • “一刀切”抑制:

    • 只要 IoU > 阈值,不管置信度多高,一律删除 → 可能误删正确框
    • 两个挨着的同类物体(如两匹并排的马),高分框可能抑制另一个高分框!
  • 只考虑重叠,不考虑位置质量:

    • 两个框 IoU 高,但一个定位准,一个定位偏 → 应该保留更准的,但 NMS 只看分数
  • 阈值敏感:

    • 阈值高 → 漏删(冗余框多)
    • 阈值低 → 误删(漏检)

三、改进版 1:Soft-NMS(2017)

论文:Improving Object Detection With One Line of Code

✅ 核心思想:

不直接删除重叠框,而是“降低其置信度”,让它们在后续排序中自然被淘汰。

算法步骤:

# 线性衰减(原始论文)
if IoU > threshold:
score_bi = score_bi * (1 - IoU)
# 高斯衰减(更常用)
score_bi = score_bi * exp(-IoU² / sigma)
  • 重新按新分数排序,重复

✅ 优势:

  • 保留更多可能正确的框(尤其密集目标)
  • 减少“高分框误删高分框”的问题
  • 只需改一行代码!

缺点:

  • 不能完全解决定位不准的问题
  • 衰减策略需调参(sigma)

四、改进版 2:DIoU-NMS(2020)

论文:Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression

✅ 核心思想:

在 NMS 阶段,不仅看 IoU,还看两个框“中心点距离” —— 定位更准的框应该被保留!

DIoU 公式回顾:

DIoU = IoU - (ρ² / c²)
其中:
- ρ² = 中心点欧式距离的平方
- c² = 包围两个框的最小闭包矩形的对角线长度平方

→ DIoU 越大,表示两个框重叠高 + 中心点越近 → 越相似

DIoU-NMS 做法:

在 NMS 的抑制判断中,用 DIoU 替代 IoU:

if DIoU(box_i, box_j) > threshold:
delete box_j

或者更常见的是:

用 DIoU 作为排序或加权依据,结合置信度

例如 YOLOv5/v7 中的 DIoU-NMS:

# 用 DIoU 加权分数,再排序
score_j = score_j * (1 - DIoU(box_i, box_j)) # DIoU越大,惩罚越大

✅ 优势:

  • 抑制时考虑定位质量(中心点距离)
  • 对遮挡、密集目标更友好
  • 与 DIoU Loss 配套使用,端到端优化

五、三种 NMS 对比表

方法核心机制优点缺点适用场景
NMSIoU > 阈值 → 直接删除简单高效误删高分框,密集目标差通用,实时系统
Soft-NMSIoU > 阈值 → 衰减分数保留更多正确框,密集目标好需调参,计算略增医疗、遥感、密集检测
DIoU-NMS用 DIoU 衡量相似度 → 抑制考虑定位质量,更合理依赖 DIoU 计算高精度检测(YOLOv5/v7 默认)

YOLOv8 默认使用 CIoU-NMS(类似 DIoU,增加长宽比约束),进一步优化定位。

六、面试加分回答(STAR 法则)

“在我们的密集人流检测项目中,使用传统 NMS 导致相邻行人框被误删,漏检率达 12%。改用 Soft-NMS
后,通过高斯衰减保留重叠高分框,漏检率降至 5%。后续升级 YOLOv7 后,采用
DIoU-NMS,综合考虑重叠度和中心点距离,漏检率进一步降至 2%,且无额外调参。”

✅ 总结一句话:

NMS 用 IoU 去重,Soft-NMS 用“衰减分数”更温柔,DIoU-NMS 用“距离惩罚”更聪明 ——
三者演进的核心是从“暴力删除”到“智能筛选”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/918822.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS值

作为前端开发者,CSS 是我们每天都要打交道的技术。但你真的了解 CSS 中各种值和单位的奥秘吗?本文将带你全面掌握 CSS 值与单位的使用技巧,提升你的样式编写能力! 一、颜色值:不只是十六进制那么简单 在 CSS 中定…

昆明网站如何制作wordpress 新建数据表

一、介绍 工厂方法模式(Factory Pattern),是创建型设计模式之一。工厂方法模式是一种结构简单的模式,其在我们平时开发中应用很广泛,也许你并不知道,但是你已经使用了无数次该模式了,如Android…

顺德高端网站django网站开发教程

Thread的主要数据成员为_Thr 里面存储的是线程句柄和线程ID 先看看赋值运算符的移动构造 最开始判断线程的ID是否不为0 _STD就是使用std的域 如果线程ID不为0,那么就抛出异常 这里_New_val使用了完美转发,交换_Val和_New_val的值 _Thr _STD exchange(_…

2025_Polar秋季赛_web全解

简单写写,陇剑杯,强网杯,ISCC都得整,复盘备赛啥的Polar秋季赛-web white-简考点: rceBase编码绕过倒是正常 关键认识到一个新的读文件的函数rev,逆向输出文件内容给出一个终端进行命令执行一些字符,关键字被过滤…

QT:如何初始化窗体尺寸大小

QT5:如何初始化窗体尺寸大小?qt: 在构造函数中直接调用他设置大小就可以。如: this->resize( QSize( 800, 600 )); 例子:#include "mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWind…

网站建设陆金手指下拉贰拾论坛网站建设视频教程

"code-runner.executorMap": {"python": "set PYTHONIOENCODINGutf8 && python $fullFileName"}

制作一个网站的基本步骤园林景观设计公司管理制度及流程

文章目录 寄存器(CPU工作原理)1. 通用寄存器2. 字在寄存器中的存储3. 几条汇编指令4. 物理地址5. 16位结构的CPU6. 8086CPU给出物理地址的方法7. 段的概念8. 段寄存器9 . CS和IP10. 修改CS、IP的指令11. 代码段 寄存器(CPU工作原理) 一个典型的CPU由运算器、控制器、寄存器等器…

网站怎么访问自己做的网页中国建设银行官方网站

在正常情况上,这是由于没的在AndroidManifest.xml中进行注册引起的。转载于:https://www.cnblogs.com/zhaojianwei/p/3971238.html

温州做网站公司哪家好企业qq官网首页

抖音在国内是比较知名的短视频运营商,也有很大的流量市场。这块优化好了,不管是对于用户还是企业来说,在品牌宣传上来说,作用还是蛮大的。抖音优化和电脑端优化,还是有所区别的,这里参考的是点赞数、评论以…

网站开发语言用什么好淘宝客网站用什么软件做

作为从事CAD设计的我,已经深深的了解到了CAD设计行业的辛苦。dwg格式的文件作为CAD文件格式常见的专业格式,它能够很好的帮助我们保存好绘制好的CAD图纸。现在几乎在很多领域都可以见到,有的时候会根据需要对CAD图纸进行格式转换。很多的网友…

网站开发工程师工资hangq重庆做网站哪家公司好

导读 按照现在流行的互联网分层架构模型,最简单的架构当属Web响应层DB存储层的架构。从最开始的单机混合部署Web和DB,到后来将二者拆分到不同物理机以避免共享机器硬件带来的性能瓶颈,再随着流量的增长,Web应用变为集群部署模式&…

如何给网站做右侧悬浮电话三网合一网站建设是指什么

目录 前言引用unplugin-auto-import插件的优缺点优点缺点 unplugin-auto-import插件引入安装插件配置vite配置更新TypeScript配置使用代码位置 总结 前言 是否添加unplugin-auto-import取决于项目需求和团队习惯。如果项目中频繁使用Vue相关API,并且团队成员都熟悉这…

9月23日(日记里有)

今天早上参加实训课程,本周我上的是数控加工,我们学习了有关操作车床最基本的安全的知识,然后我们按照老师的指导完成了老师布置的任务,然后体验了如何制作一个简单的小零件。

微信小程序实现流式传输(打字机效果)

微信小程序实现流式传输(打字机效果)Posted on 2025-09-26 21:23 且行且思 阅读(0) 评论(0) 收藏 举报最近公司在做一款小程序,其中最主要业务的体现方式就是“与AI对话”,那一定是绕不过有着打字机效果的流式…

9月25日(日记里有)

今天上的体育是篮球,今天的基础训练让我重新记起来了部分的篮球的技巧,手感也回来了部分/

建设银行网站维修图片虚拟主机代理商的网站打不开了怎么办

随着互联网的发展,Web1.0、Web2.0 和 Web3.0 成为了人们口中津津乐道的话题。那么,这三种网络时代究竟有什么区别呢? Web1.0 是一个只读的时代,那个时候,用户只能浏览网页,无法进行互动和创作。Web2.0 则是…

Git 提交代码前,一定要做的两件事

作为团队开发的一员,Git 的使用习惯直接影响大家的协作效率。分享两个我每次提交代码前必做的事,虽然简单,但能避免很多不必要的麻烦。​ 第一件事是 拉取最新代码,也就是 git pull。很多时候我们本地开发了半天,…

本地调试接口时遇到的跨域问题,十分钟解决

昨天在本地调试前端项目时,调用后端接口突然报了跨域错误,浏览器控制台清一色的 Access-Control-Allow-Origin 提示,一开始以为是后端配置的问题,折腾半天发现其实前端自己就能解决,分享下我的排查和解决过程。​…

从0开始使用LabVIEW处理数据采集卡-概述和新建新建工程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …