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

【有啥问啥】复习一下什么是NMS(非极大值抑制)?

NMS

复习一下什么是NMS(非极大值抑制)?

什么是NMS?

NMS(Non-Maximum Suppression)即非极大值抑制,是一种在计算机视觉领域,尤其是目标检测任务中广泛应用的后处理算法。其核心思想是抑制重叠的、冗余的候选框,只保留最有可能包含目标的框。这一步骤对于提高目标检测的准确性和效率至关重要。

为什么需要NMS?

在目标检测任务中,检测算法通常会生成大量的候选框(Bounding Boxes),每个框都有一个表示其包含目标置信度的分数。这些候选框之间往往存在大量的重叠,特别是在目标密集或检测算法对目标边界敏感时。NMS的作用就是从中挑选出最佳的候选框,使得每个目标只被一个框准确表示。

NMS的工作原理

NMS的工作流程可以概括为以下几个步骤:

  1. 排序:首先,根据所有候选框的置信度分数进行排序,从高到低。这是为了确保首先处理的是最可能包含目标的框。

  2. 选择最大值:选取当前置信度最高的候选框作为当前最大值(即最佳候选框)。

  3. IoU计算:计算当前最大值与其他所有候选框的交并比(Intersection over Union,IoU)。IoU是一个衡量两个框重叠程度的指标,其值介于0到1之间,值越大表示重叠程度越高。

    • 传送门链接: 目标检测中的IOU(Intersection over Union)算法是什么?
  4. 抑制重叠框:设定一个IoU阈值。如果某个候选框与当前最大值的IoU大于该阈值,则认为该候选框与当前最大值重叠度过高,应被抑制(即从候选框列表中删除或将其置信度分数置为0)。

  5. 迭代:重复步骤2到4,直到处理完所有的候选框。最终,保留下的候选框即为NMS的输出结果。

NMS的代码实现(Python,使用Numpy)

下面是一个使用Numpy库实现的NMS算法示例:

import numpy as npdef nms(boxes, scores, overlap_thresh):"""Apply non-maximum suppression at test time.Args:boxes: (numpy array) ndarray of shape (N, 4).Each row represents a bounding box (x1, y1, x2, y2).scores: (numpy array) ndarray of shape (N,).Confidence scores for each box.overlap_thresh: (float) Overlap threshold (IoU).Return:keep: (numpy array) Indices of the selected boxes."""# if there are no boxes, return an empty listif len(boxes) == 0:return []# grab the coordinates of the bounding boxesx1 = boxes[:, 0]y1 = boxes[:, 1]x2 = boxes[:, 2]y2 = boxes[:, 3]# compute the area of the bounding boxes and sort the bounding boxes# by the confidence scorearea = (x2 - x1 + 1) * (y2 - y1 + 1)idxs = np.argsort(scores)[::-1]# keep track of the picked indexespick = []# keep looping while some indexes still remain in the indexes listwhile len(idxs) > 0:# grab the last index in the indexes list and add the# index value to the list of picked indexesi = idxs[0]pick.append(i)# calculate IoU for the remaining boxesxx1 = np.maximum(x1[i], x1[idxs[1:]])yy1 = np.maximum(y1[i], y1[idxs[1:]])xx2 = np.minimum(x2[i], x2[idxs[1:]])yy2 = np.minimum(y2[i], y2[idxs[1:]])# compute the width and height of the intersectionw = np.maximum(0, xx2 - xx1 + 1)h = np.maximum(0, yy2 - yy1 + 1)# compute the ratio of overlap (IoU)overlap = (w * h) / (area[i] + area[idxs[1:]] - w * h)# delete all indexes from the index list that have# overlap greater than the threshold. The 'np.concatenate' is used to add the 0 index to the result of np.whereidxs = np.delete(idxs, np.concatenate(([0], np.where(overlap > overlap_thresh)[0] + 1)))return np.array(pick)

NMS的改进与优化

尽管NMS在目标检测中取得了显著的效果,但仍然存在一些局限性,如对于密集目标或重叠目标的处理不够理想。因此,研究者们提出了多种NMS的改进和优化方法:

  1. Soft-NMS:传统的NMS采用硬抑制策略,即一旦IoU超过阈值,就将候选框的置信度分数置为0。而Soft-NMS则采用软抑制策略,对IoU较大的候选框进行惩罚(如降低其置信度分数),而不是直接抑制。这种方法有助于更好地处理密集目标。

  2. 基于分类信息的NMS:在目标检测任务中,除了位置信息外,候选框的分类信息也是非常重要的。因此,可以结合候选框的分类信息来进行NMS。例如,对于同一类别的候选框,可以采用更严格的IoU阈值进行抑制;而对于不同类别的候选框,则可以放宽抑制条件。

  3. 基于位置信息的NMS:考虑到候选框的位置信息,可以对NMS进行进一步的优化。例如,可以根据候选框的坐标信息来动态调整IoU阈值;或者结合目标的大小、形状等特征来改进NMS算法。

  4. 自适应NMS:自适应NMS方法可以根据候选框的分布情况动态调整IoU阈值。例如,在目标密集区域,可以适当降低IoU阈值以减少抑制;而在目标稀疏区域,则可以提高IoU阈值以保留更多的候选框。

  5. 基于学习的NMS:近年来,随着深度学习技术的发展,研究者们开始尝试将NMS算法与深度学习模型相结合。例如,可以设计一个神经网络来预测每个候选框的抑制概率;或者将NMS算法嵌入到深度学习模型中,实现端到端的目标检测。

总结

NMS作为目标检测算法中的重要后处理步骤,对于提高检测准确性和效率具有重要意义。通过深入理解NMS的工作原理和代码实现,我们可以更好地掌握目标检测算法的整个流程。同时,了解NMS的改进和优化方法,也有助于我们进一步提升目标检测模型的性能。在未来的研究中,我们可以继续探索NMS的新方法和新技术,以推动目标检测领域的发展。

相关文章:

【有啥问啥】复习一下什么是NMS(非极大值抑制)?

复习一下什么是NMS(非极大值抑制)? 什么是NMS? NMS(Non-Maximum Suppression)即非极大值抑制,是一种在计算机视觉领域,尤其是目标检测任务中广泛应用的后处理算法。其核心思想是抑…...

Java-异步方法@Async+自定义分布式锁注解Redission

如果你在使用 @Async 注解的异步方法中,使用了自定义的分布式锁注解(例如 @DistributedLock),并且锁到期后第二个请求并没有执行,这可能是由于以下几个原因导致的: 锁的超时时间设置不当:锁的超时时间可能设置得太短,导致锁在业务逻辑执行完成之前就已经自 动释放。…...

基本定时器---内/外部时钟中断

一、定时器的概念 定时器(TIM),可以对输入的时钟信号进行计数,并在计数值达到设定值的时候触发中断。 STM32的定时器系统有一个最为重要的结构是时基单元,它由一个16位计数器,预分频器,和自动重…...

实现了两种不同的图像处理和物体检测方法

这段代码实现了两种不同的图像处理和物体检测方法:一种是基于Canny边缘检测与轮廓分析的方法,另一种是使用TensorFlow加载预训练SSD(Single Shot Multibox Detector)模型进行物体检测。 1. Canny边缘检测与轮廓分析: …...

如何在MindMaster思维导图中制作PPT课件?

思维导图是一种利用色彩、图画、线条等图文并茂的形式,来帮助人们增强知识或者事件的记忆。因此,思维导图也被常用于教育领域,比如:教学课件、读书笔记、时间管理等等。那么,在MindMaster免费思维导图软件中&#xff0…...

ORIN NX 16G安装中文输入法

刷机版本为jetpack5.14.刷机之后预装了cuda、cudnn、opencv、tensorrt等,但是发现没有中文输入,所以记录一下安装流程。 jetson NX是arm64架构的,sougoupinyin只支持adm架构的,所以要选择安装Google pinyin 首先打开终端&#x…...

【金融风控项目-07】:业务规则挖掘案例

文章目录 1.规则挖掘简介2 规则挖掘案例2.1 案例背景2.2 规则挖掘流程2.3 特征衍生2.4 训练决策树模型2.5 利用结果划分分组 1.规则挖掘简介 两种常见的风险规避手段: AI模型规则 如何使用规则进行风控 **使用一系列逻辑判断(以往从职人员的经验)**对客户群体进行区…...

退款成功订阅消息点击后提示订单不存在

问题表现: 退款成功发送的小程序订阅消息点击进入后提示订单不存在。 修复方法: 1.打开文件app/services/message/notice/RoutineTemplateListService.php 2.找到方法sendOrderRefundSuccess 3.修改图中红圈内的链接地址 完整方法代码如下 /*** 订…...

实验一 顺序结构程序设计

《大学计算机﹣C语言版》实验报告 实验名称 实验一 顺序结构程序设计 实验目的 (1)掌握C语言中常量和变量的概念。 (2)掌握C语言中常见的数据类型。 (3)掌握C语言中变量的定义和赋值方法。 …...

Elasticsearch搜索流程及原理详解

Elasticsearch搜索流程及原理详解 1. Elasticsearch概述1.1 简介1.2 核心特性1.3 应用场景2. Elasticsearch搜索流程2.1 搜索请求的发起2.2 查询的执行2.3 结果的聚合与返回3. Elasticsearch原理详解3.1 倒排索引3.2 分布式架构3.3 写入流程3.4 读取流程4. 技术细节与操作流程4…...

芯片之殇——“零日漏洞”(文后附高通64款存在漏洞的芯片型号)

芯片之殇——“零日漏洞”(文后附高通64款存在漏洞的芯片型号) 本期是平台君和您分享的第113期内容 前一段时间,高通公司(Qualcomm)发布安全警告称,提供的60多款芯片潜在严重的“零日漏洞”,芯片安全再一次暴露在大众视野。 那什么是“零日漏洞”?平台君从网上找了一段…...

【gitlab】gitlabrunner部署

1、下载镜像 docker pull gitlab/gitlab-runner:latest 2、启动gitrunner容器 docker run -d --name gitlab-runner --restart always \ -v /root/gitrunner/config:/etc/gitlab-runner \ ///gitlab-runner的配置目录,挂载在宿主机上方便修改,里面有config.…...

Flink监控checkpoint

Flink的web界面提供了一个选项卡来监控作业的检查点。这些统计信息在任务终止后也可用。有四个选项卡可以显示关于检查点的信息:概述(Overview)、历史(History)、摘要(Summary)和配置(Configuration)。下面依次来看这几个选项。 Overview Tab Overview选项卡列出了以…...

Ribbon 入门实战指南

Ribbon 是 Netflix 开发的一个开源项目,用于实现客户端负载均衡功能。它在微服务架构中广泛使用,并且是 Spring Cloud 生态中的重要组成部分。本文将带你从基础入门,逐步掌握如何在 Spring Cloud 项目中使用 Ribbon 实现客户端负载均衡。 1 负…...

uniapp: 微信小程序包体积超过2M的优化方法(主包从2.7M优化到1.5M以内)

一、问题描述 在使用uniapp进行微信小程序开发时,经常会遇到包体积超过2M而无法上传: 二、解决方案 目前关于微信小程序分包大小有以下限制: 整个小程序所有分包大小不超过 30M(服务商代开发的小程序不超过 20M) 单个…...

【百日算法计划】:每日一题,见证成长(026)

题目 给定一个包含正整数、加()、减(-)、乘(*)、除(/)的算数表达式(括号除外),计算其结果。 表达式仅包含非负整数,, - ,,/ 四种运算符和空格 。 整数除法仅保留整数部分。 * * 示例 1: 输入: “32X2” 输出: 7 import…...

【大模型】prompt实践总结

文章目录 怎么才算是好的prompt设计准则基本原则精炼原则(奥卡姆剃刀准则)具体原则真实操作技巧指定角色增加fewshots列表化代码化强调需求真实迭代大模型优化情形任务的定义和评估标准似乎可以再明确一下出现了一些之前没有考虑过的特殊情况,可以重新组织语言优化Prompt来处…...

在Qt(以及C++)中, 和 * 是两个至关重要的符号--【雨露均沾】

在Qt(以及C)中,& 和 * 是两个至关重要的符号,它们用于处理引用和指针。我们将逐个解释这两个符号,并提供简单示例来说明它们的用法。 1. 引用(&) 定义: 引用是一种别名,它不…...

本地部署Apache Answer搭建高效的知识型社区并一键发布到公网流程

文章目录 前言1. 本地安装Docker2. 本地部署Apache Answer2.1 设置语言选择简体中文2.2 配置数据库2.3 创建配置文件2.4 填写基本信息 3. 如何使用Apache Answer3.1 后台管理3.2 提问与回答3.3 查看主页回答情况 4. 公网远程访问本地 Apache Answer4.1 内网穿透工具安装4.2 创建…...

Ubuntu常见命令

关于export LD_LIBRARY_PATHcmake默认地址CMakelists.txt知识扩充/home:挂载新磁盘到 /home 子目录 关于export LD_LIBRARY_PATH 程序运行时默认的依赖库的位置包括lib, /usr/lib ,/usr/local/lib 通过命令export LD_LIBRARY_PATHdesired_path:$LD_LIBRARY_PATH追加…...

自动化生产管理平台(Automatic)

1&#xff0c;自动化生产管理平台(Automatic) 1.1&#xff0c;重新定义Window样式 添加WindowChrome元素进行自定义定义 <Window x:Class"lzg.Automatic.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"…...

开源技术如何驱动物联网创新:从硬件到软件的平民化革命

1. 物联网与开源&#xff1a;一场全民工程的序章十年前&#xff0c;如果有人告诉我&#xff0c;一个没有任何电子工程背景的艺术家&#xff0c;能自己动手做一个能联网、能自动浇花、还能在社交媒体上发照片的智能花盆&#xff0c;我大概会觉得他在讲科幻故事。但今天&#xff…...

从泰鼎高管离职事件看半导体公司治理与技术战略平衡

1. 事件背景与核心脉络梳理2011年初&#xff0c;半导体行业发生了一起在当时颇具话题性的高层人事地震。主角是当时在数字电视和多媒体处理器领域颇有建树的泰鼎微系统&#xff08;Trident Microsystems, Inc.&#xff09;。事件的核心是&#xff0c;公司的首席执行官&#xff…...

[具身智能-670]:ROS2 Node内部的工作原理:rclpy.init()、node = MyNode() 、rclpy.spin(node)

一、三个函数的一句话功能rclpy.init()初始化 ROS2 全局系统&#xff08;上下文、信号处理、DDS&#xff09;。node MyNode()创建节点对象&#xff0c;注册名字&#xff0c;分配通信句柄&#xff0c;不创建线程。rclpy.spin(node)进入主线程死循环&#xff0c;不断检查消息 / …...

Go语言构建高效命令行工具集:从设计到工程化实践

1. 项目概述&#xff1a;一个“好用的”开源工具集最近在GitHub上闲逛&#xff0c;发现了一个挺有意思的仓库&#xff0c;叫ImGoodBai/goodable。光看这个名字&#xff0c;就透着一股子“实用主义”的气息——“好用的”。作为一名常年混迹于开源社区&#xff0c;喜欢折腾各种工…...

FinFET与FD-SOI工艺下的IC可靠性验证关键技术

1. 集成电路可靠性验证的挑战与演进在28nm工艺节点之前&#xff0c;芯片设计工程师面临的选择相对简单——只需沿着摩尔定律的轨迹向下一个工艺节点迁移。但随着FinFET和FD-SOI等新型晶体管结构的出现&#xff0c;以及台积电、三星等代工厂推出的多样化工艺节点选项&#xff0c…...

图解人工智能(11)让人惊讶的AI

人工智能已经融入到我们的生活之中&#xff0c;如便捷的刷脸支付&#xff0c;帮我们扫地的机器人。想一想&#xff0c;你身边还有哪些有趣的人工智能设备&#xff1f;以一种设备为例&#xff0c;搜索它的相关信息&#xff0c;看它为我们的生活带来了哪些便利。开放讨论题&#…...

技术奇点之后,人类程序员的历史角色

当人工智能越过技术奇点&#xff0c;代码生成、测试用例设计乃至系统运维都将发生质变。本文从软件测试从业者的视角出发&#xff0c;系统探讨人类程序员在奇点之后可能扮演的六种核心角色&#xff1a;系统守护者、需求翻译官、质量伦理法官、人机交互设计师、持续学习组织者与…...

2026.5.12:三台服务器,一台fastapi的websocket服务接口,一台代理fastapi服务的nginx,一台代理上一个nginx,能穿透websocket吗?

三台服务器,一台fastapi的websocket服务接口,一台代理fastapi服务的nginx,一台代理上一个nginx,能穿透websocket吗? 环境: - 三台服务器 1. 一台fastapi中有websocket接口的服务器:43.226.44.50 2. 一台代理上面1里面的fastapi服务的nginx:43.226.44.184 3. 一台代…...

别再死记硬背了!用Python和C语言手把手带你理解CRC32查表法的实现原理

从数学到代码&#xff1a;用Python和C语言彻底搞懂CRC32查表法的实现 在数据传输和存储过程中&#xff0c;错误检测是确保数据完整性的关键环节。CRC32作为一种广泛应用的校验算法&#xff0c;从网络协议到压缩工具&#xff0c;再到文件系统&#xff0c;几乎无处不在。但很多开…...