非极大值抑制算法(NMS)及python实现

article/2025/11/6 17:26:40

在目标检测中,常会利用非极大值抑制算法(NMS)对生成的大量候选框进行后处理,去除冗余的候选框,得到最具代表性的结果,以加快目标检测的效率。即如下图所示,消除多余的候选框,找到最佳的bbox。
这里写图片描述

NMS算法过程

根据候选框的类别分类概率做排序: A &lt; B &lt; C &lt; D &lt; E &lt; F A&lt;B&lt;C&lt;D&lt;E&lt;F A<B<C<D<E<F

  1. 先标记最大概率矩形框F是我们要保留下来的;
  2. 从最大概率矩形框F开始,分别判断A~E与F的重叠度IOU(两框的交并比)是否大于某个设定的阈值,假设B、D与F的重叠度超过阈值,那么就扔掉B、D;
  3. 从剩下的矩形框A、C、E中,选择概率最大的E,标记为要保留下来的,然后判读E与A、C的重叠度,扔掉重叠度超过设定阈值的矩形框

就这样一直重复下去,直到剩下的矩形框没有了,标记完所有要保留下来的矩形框

NMS算法的python实现

# python3
import numpy as npdef py_nms(dets, thresh):"""Pure Python NMS baseline."""#x1、y1、x2、y2、以及score赋值x1 = dets[:, 0]y1 = dets[:, 1]x2 = dets[:, 2]y2 = dets[:, 3]scores = dets[:, 4]#每一个候选框的面积areas = (x2 - x1 + 1) * (y2 - y1 + 1)#order是按照score降序排序的order = scores.argsort()[::-1]keep = []while order.size > 0:i = order[0]keep.append(i)#计算当前概率最大矩形框与其他矩形框的相交框的坐标,会用到numpy的broadcast机制,得到的是向量xx1 = np.maximum(x1[i], x1[order[1:]])yy1 = np.maximum(y1[i], y1[order[1:]])xx2 = np.minimum(x2[i], x2[order[1:]])yy2 = np.minimum(y2[i], y2[order[1:]])#计算相交框的面积,注意矩形框不相交时w或h算出来会是负数,用0代替w = np.maximum(0.0, xx2 - xx1 + 1)h = np.maximum(0.0, yy2 - yy1 + 1)inter = w * h#计算重叠度IOU:重叠面积/(面积1+面积2-重叠面积)ovr = inter / (areas[i] + areas[order[1:]] - inter)#找到重叠度不高于阈值的矩形框索引inds = np.where(ovr <= thresh)[0]#将order序列更新,由于前面得到的矩形框索引要比矩形框在原order序列中的索引小1,所以要把这个1加回来order = order[inds + 1]return keep# test
if __name__ == "__main__":dets = np.array([[30, 20, 230, 200, 1], [50, 50, 260, 220, 0.9],[210, 30, 420, 5, 0.8],[430, 280, 460, 360, 0.7]])thresh = 0.35keep_dets = py_nms(dets, thresh)print(keep_dets)print(dets[keep_dets])

测试结果:
在这里插入图片描述
只有第2个框与第1个框的IoU(0.38)超过了阈值,从结果看其被成功滤除掉了。NMS的大致原理和代码实现大致就是这样~

参考资料:

  1. 目标检测的几个名词
  2. faster rcnn 源码解读

http://chatgpt.dhexx.cn/article/t20Mgtad.shtml

相关文章

ADI Blackfin DSP处理器-BF533的开发详解24:触摸屏的实现和应用(含源代码)

硬件准备** ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 使用到硬件模块原理图 功能介绍 四线电阻式触摸屏&#xff0c;拿笔和指甲划拉的&#xff0c;不是现在的容性触摸屏。 ADSP-EDU-BF53x 板卡的 …

ADI Blackfin DSP处理器-BF533的开发详解8:Timer定时器的驱动和应用(含源代码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 接口功能介绍 ADSP-BF53x 上有 3 个通用定时器&#xff0c;每个定时器有三种模式&#xff1a; 脉冲宽度调制模式&#xff08;PWM_OUT&#xff0…

【信号处理】CFO估计技术(Matlab代码实现)

目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 针对存在未知载波频偏&#xff08;CFO&#xff09;的线性调制分类&#xff0c;提出一种混合似似然比检测&#xff08;qHLRT&#xff09;分类器。并且通过使用多天线接收机来进一步增强分类性能。一种基于盲源分…

基于STM32F469 discovery kit 开发板的开发2

目录 基于STM32F469 discovery kit 开发板的开发2开发环境搭建keil安装F4的固件库keil配置st-link调试工具例程测试 基于STM32F469 discovery kit 开发板的开发2 开发环境搭建 在嵌入式开发中&#xff0c;常用的集成开发环境&#xff08;IDE&#xff09;常用的有keil或IAR&am…

ADI Blackfin DSP处理器-BF533的开发详解16:KEY按键的实现(含源代码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 硬件设计原理图 实现原理 ADSP-EDU-BF53x 开发板上的按键连接到了 CPLD&#xff0c;通过 CPLD 将按键信号与 EBIU 总线和中断管脚 PF0 连接&…

matlab进行傅里叶分析

license需求&#xff1a;需要使用到simulink工具包simscape 1.在matlab的command window中输入power_fftscope命令,并按回车键&#xff0c;该操作会打开FFT分析的窗口 2.加载用于FFT分析的数据到matlab worksapce,该数据需要按照一定的格式显示才能被FFT分析窗口自动识别到。 …

ADI Blackfin DSP处理器-BF533的开发详解18:用触摸屏的例程来理解中断(含源码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 硬件设计原理图 硬件实现原理 ADSP-EDU-BF533 开发板上的中断资源连接到了 CPLD&#xff0c;并通过 CPLD 将中断信号连接到 PF0 触发&#xff0c…

【正点原子FPGA连载】第十三章QSPI Flash读写测试实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第十三章QSPI Fl…

ADI Blackfin DSP处理器-BF533的开发详解3:GPIO(含源代码)

我们从最基础的GPIO开始&#xff0c;先讲外设&#xff0c;这玩意不管是单片机&#xff0c;还是ARM&#xff0c;又或是FPGA&#xff0c;甚至SOC的芯片&#xff0c;都有GPIO&#xff0c;有共性&#xff0c;就好理解&#xff0c;让我们看看在ADI的DSP里头&#xff0c;GPIO是怎么一…

Protobuf 简介

protobuf (protocol buffer) 是谷歌内部的混合语言数据标准。通过将结构化的数据进行序列化(串行化)&#xff0c;用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。通常说的protobuf包括以下三点&#xff1a; 是一种二进制数据交换格式。支持不…

【prony】基于prony算法的参数辨识matlab仿真

1.软件版本 matlab2013b 2.系统概述 建立如下被测信号: 被测信号中包含四个振荡模态,在数据窗宽度同样为10s的前提下,利用不同的采样频率做普罗尼计算。结果如表1所示。根据公式的基本表达式: 所以最后,进行估计得到的参数为:

ADI Blackfin DSP处理器-BF533的开发详解54:CVBS输出-DSP和CH7024的应用详解(含源码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 CVBS OUT 视频输出 硬件实现原理 CVBS_OUT 子卡板连接在 ADSP-EDU-BF53x 开发板的扩展端口 PORT3 和 PORT4 上&#xff0c;板卡插入时&#xff0…

【AI+】Martin Fowler: 基于 AI 辅助的测试驱动开发的技术 | An example of LLM prompting for programming

Martin Fowler: 基于 AI 辅助的测试驱动开发的技术 | An example of LLM prompting for programming 目录 Martin Fowler: 基于

iPhone 13分辨率,屏幕尺寸,PPI 详细数据对比 iPhone 13 Pro、iPhone 13 Pro Max、iPhone 13 mini

点击图片放大查看 iPhone 14分辨率,屏幕尺寸,PPI 详细数据对比 iPhone 14 Plus、iPhone 14 Pro、iPhone 14 Pro Max​​​​​​​

android 主流分辨率是多少,android 屏幕分辨率问题

iPhone的icon设计就这么简单&#xff0c;iPhone的屏幕只有320480像素&#xff0c;所以程序没有适配性问题。 Android 在研究Android的icon设计之前&#xff0c;有必要先了解Android的界面是如何适配多样化屏幕的。 适配性 由于同一个UI元素(如100100像素的图片)在高精度的屏幕上…

iPhone手机屏幕大小及分辨率

以前一直找,现在自己保存起来

IPHONE屏幕大小,分辨率解析

相关概念 // 竖屏时,返回的是不带有状态栏的Rect.横屏时,返回整个屏幕Rect [UIScreen mainScreen].applicationFrame);//The natural scale factor associated with the screen(自然比例因子) [UIScreen mainScreen].scale);//The native scale factor for the physical scree…

iPhone 各屏幕尺寸及解析

一.iPhone 各屏幕尺寸表 手机型号屏幕尺寸(inch)像素密度&#xff08;PPI&#xff09;逻辑分辨率 &#xff08;point&#xff09;物理分辨率&#xff08;屏幕分辨率&#xff09;&#xff08;pixel&#xff09;缩放因子&#xff08;scale factor&#xff09;宽高比&#xff08;…