当前位置: 首页 > 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追加…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving

地址&#xff1a;LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂&#xff0c;正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...

rknn toolkit2搭建和推理

安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 &#xff0c;不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源&#xff08;最常用&#xff09; conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...

【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?

FTP&#xff08;File Transfer Protocol&#xff09;本身是一个基于 TCP 的协议&#xff0c;理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况&#xff0c;主要原因包括&#xff1a; ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...