阅读笔记8——NMS

news2024/9/25 1:16:08

一、基本NMS

1. 处理过程

  为了保证物体检测的召回率,对于同一个真实物体往往会有多于1个的候选框输出。但是多余的候选框会影响检测精度,因此需要利用NMS过滤掉重叠的候选框,基本的NMS方法利用得分高的边框抑制得分低重叠程度高的边框。

  如图1-1所示,图片中存在3个候选框,但是候选框A与C对应的是同一个物体,由于C的得分比A要低,在计算召回率时,C候选框会被当做一个False Positive来看待,从而降低模型的精度。 R e c a l l = T N T N + F P Recall=\frac{TN}{TN+FP} Recall=TN+FPTN,当 F P FP FP增大时, R e c a l l Recall Recall减小)实际上,由于候选框A的质量要比C好,理想的输出是A而不是C,因此希望能够抑制掉候选框C。

在这里插入图片描述

图1-1 NMS处理过程示意图
2. 量化指标

  检测网络在最后会增加一个NMS(非极大值抑制),将重复冗余的候选框去掉。这个过程涉及以下两个量化指标:

  • 预测得分:NMS假设一个边框的预测得分越高,这个边框就要被优先考虑,其他与其重叠超过一定程度的边框都要被舍弃,非极大值即是指得分的非极大值。
  • IoU:用于评价两个边框的重合程度。如果两个边框的IoU超过一定阈值时,得分低的边框会被舍弃。阈值通常取0.5或者0.7。
3. 具体流程

  NMS的输入包含5个预测量,即所有候选框的得分、左上点坐标、右下点坐标,以及1个设定的IoU阈值。
  具体流程如下:

  • 按照得分,对所有边框进行降序排列,记录下排列的索引order,并新建一个列表keep,作为最终筛选后的边框索引结果。
  • 将排序后的第一个边框置为当前边框,并将其保留到keep中,再求当前边框与剩余所有框的IoU。
  • 在order中,仅仅保留IoU小于设定阈值的索引,重复第二步,直到order中仅仅剩余一个边框,则将其保留到keep中,退出循环,NMS结束。

二、Soft NMS

1. 漏检现象

  NMS对于分布密集的物体,容易出现漏检现象。即当两个真实物体靠的较近且得分不一致时,两个框的IoU较大,可能超过了阈值,此时NMS会筛掉得分较低的框。

  NMS的计算公式如式(2-1)所示:
s i = { s i , i o u ( M , b i ) < N t 0 , i o u ( M , b i ) ⩾ N t (2-1) s_{i}=\left\{\begin{matrix} s_{i}, & iou(M,b_{i})< N_{t}& \\ 0, & iou(M,b_{i})\geqslant N_{t}& \end{matrix}\right.\tag{2-1} si={si,0,iou(M,bi)<Ntiou(M,bi)Nt(2-1)

  公式中 S i S_{i} Si代表了每个框的得分, M M M为当前得分最高的框, b i b_{i} bi为剩余框的某一个, N t N_{t} Nt为设定的阈值,可以看到当IoU大于 N t N_{t} Nt时,该边框的得分直接置0,相当于被舍弃了,从而有可能造成边框的漏检。

2. Soft NMS

  Soft NMS对于IoU大于阈值的边框,没有将其得分直接置0,而是降低该边框的得分。

  Soft NMS的计算公式如式(2-2)所示:

s i = { s i , i o u ( M , b i ) < N t s i ( 1 − i o u ( M , b i ) ) , i o u ( M , b i ) ⩾ N t (2-2) s_{i}=\left\{\begin{matrix} s_{i}, & iou(M,b_{i})< N_{t}& \\ s_{i}(1-iou(M,b_{i})), & iou(M,b_{i})\geqslant N_{t}& \end{matrix}\right.\tag{2-2} si={si,si(1iou(M,bi)),iou(M,bi)<Ntiou(M,bi)Nt(2-2)

  从公式中可以看出,利用边框的得分与IoU来确定新的边框得分,如果当前边框与边框 M M M的IoU超过设定阈值 N t N_{t} Nt时,边框的得分呈线性的衰减。

  但是,式(2-2)不是一个连续函数,当一个边框与 M M M的重叠IoU超过阈值 N t N_{t} Nt时,其得分会发生跳变,这种跳变会对检测结果产生较大的波动,因此还需要寻找一个更为稳定、连续的得分重置函数,最终Soft NMS给出了式(2-3)所示的重置函数。

s i = s i e − i o u ( M , b i ) 2 σ , ∀ b i ∉ D (2-3) s_{i}=s_{i}e^-{\frac{iou(M,b_{i})^{2}}{\sigma }}, \forall b_{i}\notin D \tag{2-3} si=sieσiou(M,bi)2,bi/D(2-3)

  采用这种得分衰减的方式,对于那些得分很高的边框来说,在后续的计算中还有可能被作为正确的检测款框,从而提高模型的召回率。

三、Softer NMS

1. 定位置信度

  NMS和Soft NMS都使用了预测分类置信度作为衡量指标,即假定分类置信度越高的边框,其位置也越准确。

  但位置置信度与分类置信度并不是强相关的关系,基于此,Softer NMS新增加了一个定位置信度的预测,使得高分类置信度的边框位置变得更加准确,从而有效提升了检测的性能。

2. 分布假设

  为了更全面地描述边框预测,Softer NMS方法对预测边框与真实物体做了两个分布假设:

  • 真实物体的分布是狄拉克delta分布,即标准差为0的高斯分布的极限。

δ ( x ) = { + ∞ , x = 0 0 , x = o t h e r w i s e \delta (x)=\left\{\begin{matrix} +\infty , & x=0 & \\ 0 , & x=otherwise & \end{matrix}\right. δ(x)={+,0,x=0x=otherwise

  • 预测边框的分布满足高斯分布。

X ∼ N ( μ , σ 2 ) X\sim N(\mu ,\sigma ^{2}) XN(μ,σ2)

  基于以上两个假设,Softer NMS提出了一种基于KL(Kullback-Leibler)散度的边框回归损失函数KL Loss。 K L 散度是用来精确计算当把一个分布近似为另一个分布时,损失了多少信息 KL散度是用来精确计算当把一个分布近似为另一个分布时,损失了多少信息 KL散度是用来精确计算当把一个分布近似为另一个分布时,损失了多少信息这里的KL Loss是最小化预测边框的高斯分布与真实物体的狄克拉分布之间的KL散度。即预测边框分布越接近于真实物体分布,损失越小。

3. 网络结构

在这里插入图片描述

图3-1 Softer NMS网络结构图

  Softer NMS在计算回归损失时,增加了一个标准差预测分支,从而形成边框的高斯分布,与边框的预测一起求得KL损失。

  边框的标准差可以被看做边框的位置置信度,因此Softer NMS利用该标准差也改善了NMS过程。

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

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

相关文章

追梦之旅【数据结构篇】——详解C语言实现链栈

详解C语言实现链栈~&#x1f60e;前言&#x1f64c;整体实现内容分析&#x1f49e;1.头文件编码实现&#x1f64c;2.功能文件编码实现&#x1f64c;3.测试函数功能代码&#x1f64c;总结撒花&#x1f49e;&#x1f60e;博客昵称&#xff1a;博客小梦 &#x1f60a;最喜欢的座右…

再获最佳推荐,华为高端存储凭什么征服DCIG?

近日&#xff0c;全球著名技术分析机构DCIG发布《DCIG 2023-24高端存储阵列TOP5》报告&#xff0c;华为OceanStor Dorado 18000凭借可靠性、易用性和安全性等诸多优势&#xff0c;在DELL EMC、IBM、HPE、PureStorage等一众国际厂商中脱颖而出&#xff0c;荣获最佳推荐榜首。一直…

Linux——进程概念(进程状态)

目录 进程状态 三态模型 五态模型 七态模型 Example eg1:阻塞态&#xff1a;等待某种资源的过程 eg2:挂起态 Linux内核源代码 Linux进程状态查看 Linux运行状态 R运行状态&#xff08;running&#xff09;: S睡眠状态&#xff08;sleeping)&#xff1a; D磁盘休眠状…

Android Json 数据解析优化

文章目录基于 Gson 的 Json 数据解析库1. 背景2. 使用2.1 在模块下的 build.gradle 文件中加入远程依赖2.2 常规使用2.3 其它 API2.3 Retrofit 替换 Gson3. Json 数据解析库 UML 类图与时序图3.1 json-parse 类图3.2 json-parse 时序图4. Json 工具类&#xff08;JsonUtils&…

运动控制器PSO视觉飞拍与精准输出的C++开发(一):单轴PSO

本文主要介绍正运动技术EtherCAT控制器在VS平台采用C语言实现的各种PSO功能。正运动提供多种PSO模式供用户搭配不同的场景使用。 本节主要讲解采用TABLE寄存器存储的数据表触发比较&#xff0c;更多周期比较模式、二维三维比较模式参见下一节说明。 一、硬件介绍 ZMC408CE是…

STM32 CubeMX按键点灯

本文代码使用 HAL 库。 文章目录前言一、按键原理图二、CubeMX 创建工程三、代码讲解&#xff1a;1. GPIO的输入HAL库函数&#xff1a;2. 消抖&#xff1a;3. 详细代码四&#xff0c;实验现象&#xff1a;总结前言 我们继续讲解 stm32 f103&#xff0c;这篇文章将详细 为大家讲…

MATLAB | 如何用MATLAB绘制花里胡哨的山脊图

本期推送教大家如何绘制各种样式的山脊图&#xff0c;这里做了一个工具函数用来实现好看的山脊图的绘制&#xff0c;编写不易请多多点赞&#xff0c;大体绘制效果如下&#xff1a; 依旧工具函数放在文末。 教程部分 0 数据准备 数据为多个一维向量放在元胞数组中&#xff0c;…

oracle数据库常用操作

1.连接登录切换用户su - oracle以管理员模式登录到sqlplus&#xff1a;sqlplus / as sysdba oracle登录身份有三种&#xff1a;1.1Normal 普通身份&#xff1b;1.2.sysdba 系统管理员身份&#xff1b;若以 ‘sysdba’ 方式认证&#xff0c;登录用户为 ‘SYS’&#xff0c;为 Or…

spring事务管理器原理?mybatis如何集成spring事务管理器?

目录 1. spring事务管理器开启事务做了些什么事情&#xff1a; 1.1 创建mysql数据库连接&#xff1a; 1.2 开启mysql事务 1.3 将当前事务所使用的连接绑定到ThreadLocal中,供后续执行sql命令使用。 2. mybatis如何集成spring事务管理器&#xff1f; 3. mysql相关命令 4. …

Java常用框架(三)

三、SpringBoot 1.Spring及其优缺点&#xff1f; 1.1 概念 重量级企业开发框架EJB的替代品&#xff0c;通过依赖注入、面向切面编程&#xff0c;使用简单Java对象POJO为企业Java开发提供了相对简单的方法。 1.2 优缺点 1.2.1 优点 组件代码轻量级 1.2.1 缺点 配置重量级…

Spring Batch 高级篇-多线程步骤

目录 引言 概念 案例 转视频版 引言 接着上篇&#xff1a;Spring Batch ItemWriter组件&#xff0c;了解Spring Batch ItemWriter处理组件后&#xff0c;接下来一起学习一下Spring Batch 高级功能-多线程步骤 概念 默认的情况下&#xff0c;步骤基本上在单线程中执行&…

springBoot使用ShardingJDBC实现分表

ShardingSphere的介绍 ShardingSphere是一款起源于当当网内部的应用框架。2015年在当当网内部诞 生&#xff0c;最初就叫ShardingJDBC。2016年的时候&#xff0c;由其中一个主要的开发人员张亮&#xff0c; 带入到京东数科&#xff0c;组件团队继续开发。在国内历经了当当网、…

链动2+1系统|购买三单就能迅速回本,链动2+1模式到底有多暴利?

链动21模式号称起步创业无泡沫&#xff0c;半个月就能盈利上百万&#xff0c;用户裂变速度更是让人瞠目结舌。那么&#xff0c;链动21模式到底有多暴利&#xff1f;其实链动21模式最关键的&#xff0c;是合理的利润分配和奖励机制&#xff0c;让消费者在购物的同时&#xff0c;…

【解决报错】‘jupyter‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件

在当前路径下使用cmd打开后&#xff0c;输入jupyter notebook出现如下错误&#xff1a; 通常可能出现的问题有两种&#xff1a; &#xff08;1&#xff09;你本身就没安装jupyter&#xff0c;如果你配置了anaconda&#xff0c;就自带jupyter&#xff0c;直接跳到问题2。如果确…

Confluence主页面更新记录停留在去年,搜索也只能搜索去年之前的数据问题解决方案

问题描述 Confluence主页最近更新页面不更新了&#xff0c;停留在之前的时间段。其次搜索也只能搜索出来停留在这个时间段之前的数据。 核心原因 索引出现问题了&#xff0c;重建索引即可。 解决办法 直接重启Confluence。 重启Confluence的姿势 描述一下我解决思路&…

28-vuex

vuex 一、vuex 专门在vue中实现集中式状态&#xff08;数据&#xff09;管理的一个Vue插件&#xff0c;对Vue应用中多个组件的共享状态进行集中式的管理&#xff08;读/写&#xff09;&#xff0c;也是一种组件间通信的方式&#xff0c;且适用于任意组件间通信。 使用场景&a…

Java 【数据结构OJ题十道】—— 二叉树篇1

文章目录一、 检查两棵二叉树是否相同二、 另一棵二叉树的子树三、 二叉树的构建及遍历四、序列化二叉树和反序列化二叉树(难)五、二叉树创建字符串六、 二叉树前序非递归遍历实现七、 二叉树中序非递归遍历实现八、 二叉树后序非递归遍历实现九、二叉搜索树中找到两个结点的最…

如何将电脑文件备份到百度网盘

如何将电脑文件备份到百度网盘&#xff1f;说到文件备份&#xff0c;很多小伙伴会将电脑文件备份到移动硬盘或者U盘里&#xff0c;移动硬盘和U盘是比较常见的存储介质&#xff0c;使用和携带起来也是非常方便&#xff0c;因此深受大家的喜欢。除此之外&#xff0c;大家可能还忽…

2023年,IT互联网还有发展前景吗?

不得不说&#xff0c;互联网在整个社会经济发展中扮演着不可或缺的角色&#xff1b;不仅自身的技术具有前沿性&#xff0c;也推动着其他行业进入数字化经济时代&#xff0c;让我们的工作生活变得更加便捷。 在“互联网”时代&#xff0c;每个服务行业都会利用大数据&#xff0…

将自带记事本替换为Notepad2【中文版,带替换文件】

Notepad2是我在寻找一个合适的代码浏览工具的时候发现的&#xff0c;当需要一个用来浏览代码的文本编辑器时候&#xff0c;需要体积小&#xff0c;速度快&#xff0c;语法高亮&#xff0c;解释度高&#xff0c;VsCode作为生产环境已经不适合作为浏览工具了。了解到Notepad2&…