NMS 系列:soft,softer,weighted,iou-guided, Diou, Adaptive

系列文章目录

IOU 系列:IOU,GIOU,DIOU,CIOU

文章目录

  • 系列文章目录
  • 一、NMS简介
    • (一)为什么要使用NMS
    • (二)NMS的算法流程
    • (三)NMS的置信度重置函数
    • (四)NMS的局限性
    • (五)改进思路
  • 二、Soft-NMS概述
    • (一)Soft-NMS的思想
    • (二)Soft-NMS的置信度重置函数
  • 三、softer NMS
    • (一)提出背景
    • (二)softer NMS的核心思想
    • (三)softer NMS的算法流程
      • 1、先验假设
      • 2、KL 损失
      • 3、网络架构
      • 4、算法步骤
  • 四、Weighted-NMS
    • (一)提出背景
    • (二)Weighted-NMs思想
  • 五、IOU-Guided NMS
    • (一)lOU-Guided NMs的思路
    • (二)lOU-Guided NMs的算法流程
  • 六、DIOU-NMS
  • 七、 Adaptive NMS
    • (一)Adaptive NMS的提出背景
    • (二)Adaptive-NMS的思想
    • (三)Adaptive-NMS的算法流程
    • (四)Adaptive-NMS的网络结构
  • 八、NMS系列总结
    • (一)根据是否需要训练分类
    • (二)根据改进策略进行分类


一、NMS简介

(一)为什么要使用NMS

非极大抑制的功能:筛选出一定区域内属于同一种类得分最大的框

大多数目标检测算法(稠密预测)在得到最终的预测结果时,特征图的每个位置都会输出多个检测结果,整个特征图上会出很多个重叠的框。例如要检测一辆车,可能会有多个bbox都把这辆车给框了出来,因此需要从这些bbox中选出框得最好的,删除掉其它的。要定义框得好与不好,就得看bbox的预测置信度;为了删掉重叠的多余的框,就得利用IoU来检查重叠程度。
在这里插入图片描述

(二)NMS的算法流程

每轮选取置信度最大的 Bounding Box ,接着关注所有剩下的 BBox 中与选取的 BBox 有着高重叠(IoU)的,它们将在这一轮被抑制。这一轮选取的 BBox 会被保留输出,且不会在下一轮出现。接着开始下一轮,重复上述过程:选取置信度最大 BBox ,抑制高 IoU BBox。
在这里插入图片描述

(三)NMS的置信度重置函数

对于IOU>阈值的两个相邻的检测框,NMS将其得分暴力置零,相当于直接舍弃。
在这里插入图片描述

(四)NMS的局限性

  • 循环步骤,GPU难以并行处理,运算效率低
  • 以分类置信度为优先衡量指标分类置信度高的定位不一定最准,降低了模型的定位准确度
  • 直接提高阈值暴力去除bbox 将得分较低的边框强制性地去掉,如果物体出现较为密集时,本身属于两个物体的边框,其中得分较低的框就很有可能被抑制掉,从而降低了模型的召回率,且阈值设定完全依赖自身经验。

(五)改进思路

  1. 根据手动设置阈值的缺陷,通过自适应的方法在目标系数时使用小阈值,目标稠密时使用大阈值。例如Adaptive NMS。

  2. 将低于阈值的直接置为0的做法太hard,通过将其根据IoU大小来进行惩罚衰减,则变得更加soft。例如Soft NMS,Softer NMS。

  3. 只能在CPU上运行,速度太慢的改进思路有三个,一个是设计在GPU上的NMS,如CUDA NMS,一个是设计更快的NMS,如Fast NMS,最后一个是掀桌子,设计一个神经网络来实现NMS,如ConvNMS。

  4. IoU的做法存在一定缺陷,改进思路是将目标尺度、距离引进IoU的考虑中。如DIoU。

二、Soft-NMS概述

nms的局限性:对于IOU>阈值的两个相邻的检测框,传统的NMS的做法是将其得分暴力置零相当于直接舍弃。这样的做法很有可能造成漏检,尤其在遮挡的场景下。

(一)Soft-NMS的思想

对于与最高分框的IOU大于阈值的框M,我们不把他直接去掉,而是将他的置信度降低(添加惩罚项来抑制,I0U越大,抑制的程度也越大),这样的方法可以使多一些框被保留下来,从而一定程度上避免遮挡的情况出现。

在这里插入图片描述

(二)Soft-NMS的置信度重置函数

如果只是把置信度降低,那么是不是原来周围的多个表示同一个物体的框也没办法去掉了? Soft-NMS这样来解决这个问题,同一个物体周围的框有很多,每次选择分数最高的框,抑制其周围的框,与分数最高的框的loU越大,抑制的程度越大,一般来说,表示同一个物体的框(比如都是前面的马)的loU是会比另一个物体的框(比如后面的马)的loU大,因此,这样就会将其他物体的框保留下来,而同一个物体的框被去掉。

Soft-NMS算法的置信度重置函数有两种方式:

  • 一种采用线性加权:
    在这里插入图片描述

  • 另一种采用高斯加权:
    在这里插入图片描述

三、softer NMS

(一)提出背景

NMS 默认置信度分数较高的框,定位更精确,由于分类和回归任务没有直接相关性,因此这个条件并不总是成立。

  • 图(a)中两个边界框位置都不够精确;
  • 图(b)中置信度较高的边界框的左边界精确度较低。
    在这里插入图片描述

(二)softer NMS的核心思想

  • 针对图(a)中的问题一:提出一种方法根据IoU置信度加权合并多个框优化最终生成框
  • 针对图(b)中的问题二:构建一种IoU的置信度,来建模有多大把握认为当前框和GT是重合的

基于上述观察,softer NMS算法设计了一个新的网络结构来对检测框的位置概率分布进行建模,对所有框不仅预测位置坐标,还预测位置方差。对于重叠的检测框,根据重叠程度和位置不确定性进行投票,重叠程度高,位置分布方差小的检测框权重大,从而获得更精确的检测框。该文还提出了一种新的包围框回归的损失函数(KL Loss),用来同时学习包围框变换和定位置信度。

softer NMS的特点:

  • 边界框参数化(预测一个分布替代唯一的定位);
  • 训练时边框回归时采取KL损失;
  • 一个新的NMS方法提高定位准确性。

(三)softer NMS的算法流程

1、先验假设

Softer NMS 论文中有两个先验假设:( x x x表示偏移前的预测框, x e x_e xe表示偏移后的预测框, x g x_g xg表示GT框)

  • Bounding box的是高斯分布: P θ ( x ) = 1 2 π σ 2 e ( x − x e ) 2 2 σ 2 P_\theta(x)=\frac{1}{2\pi\sigma^2}e^{\frac{(x-x_e)^2}{2\sigma^2}} Pθ(x)=2πσ21e2σ2(xxe)2
  • ground truth bounding box是狄拉克delta分布(即标准方差为0的高斯分布极限): P D ( z ) = δ ( x − x g ) P_D(z)=\delta(x-x_g) PD(z)=δ(xxg)

2、KL 损失

然后,考虑到KL散度常用于衡量两个分布之间的差异,作者将最小化包围框预测的高斯分布和ground truth的狄拉克delta分布的KL散度作为文章的KL Loss。直观上解释,KL Loss使得包围框预测呈高斯分布,且与ground truth相近。而将包围框预测的标准差看作置信度。
在这里插入图片描述
最终推导后损失函数:
在这里插入图片描述

3、网络架构

softer NMS的网络结构图如下,上面是原始fasterRCNN的结构,下面是softer-nms结构,多加了一个sigma预测,也就是box std,而Box的预测其实就是上面公式中的 x e x_e xe。由图中可知,标准差估计与包围框定位都包含在损失函数Lreg中。
在这里插入图片描述

4、算法步骤

下图所示为Softer-NMS的实现过程,其实很简单,预测的四个顶点坐标,分别对IoU>Nt的预测加权平均计算,得到新的4个坐标点:

  • 蓝色部分是soft-nms,只是降低了S的权值
  • 绿色部分表示拿出所有与B的IoU大于Nt的框(用idx表示),然后将所有这些框做一个加权,B[idx]/C[idx]其实是B[idx] * 1/C[idx],后者是置信度,并使用sum做了归一化。
    在这里插入图片描述

四、Weighted-NMS

(一)提出背景

NMS方法在一组候选框中选择分数最大的框作为最终的目标框。然而,非极大的检测结果保存了特征的最大值,因此忽略非极大的检测检测结果是不合适的。
在这里插入图片描述

(二)Weighted-NMs思想

soft NMS是通过抑制机制来改善剔除结果(降低超阈值的得分策略),Weighted NMS(W-NMS)则是从极大值这个方面进行改进。W-NMS认为Traditional NMS每次迭代所选出的最大得分框未必是精确定位的,冗余框也有可能是定位良好的。因此,W-NMS通过分类置信度与IOU来对同类物体所有的边框坐标进行加权平均,并归一化。 其中,加权平均的对象包括M自身以及IoU≥NMS阈值的相邻框。
在这里插入图片描述

五、IOU-Guided NMS

(一)lOU-Guided NMs的思路

在一般检测的框架中,增加了一个额外的分支用来预测每个框的定位置信度(该框与GT的loU,下图),然后用预测的loU代替分类置信度作为NMS排序的关键,消除误导性分类置信度引起的抑制失效。
在这里插入图片描述

(二)lOU-Guided NMs的算法流程

lOU-Guided NMs的伪代码如下图所示。具体来说,就是使用 定位置信度 作为 NMS 的筛选依据,每次迭代挑选出最大定位置信度的框 M ,然后将loU>=NMS 阈值的相邻框剔除,但把 冗余框及其自身的最大分类得分 直接赋子 M 。因此,最终输出的框必定是 同时具有最大分类得分与最大定位置信度的框。
在这里插入图片描述

六、DIOU-NMS

DIOU-NMS在nms过程中采用DloU的计算方式替换了loU,由于DloU的计算考虑到了两框中心点位置的信息,故使用DloU进行评判的nms效果更符合实际,效果更优。
在这里插入图片描述

七、 Adaptive NMS

(一)Adaptive NMS的提出背景

使用单一阈值的NMS会面临这种困境:较低的阈值会导致丢失高度重叠的对象(图中蓝框是未检测出来的目标),而较高的阈值会导致更多的误报(红框是检测错误的目标)。这在密集场景下,如行人检测中,会导致较低的准确率。
在这里插入图片描述

(二)Adaptive-NMS的思想

Adaptive NMS应用了动态抑制策略,其中阈值随着目标聚集和相互遮挡(密度)而上升,并在目标单独出现时衰减。并设了一个自网络用于学习密度的分数。

  • 对于远离M的检测框,它们被误报的可能性较小,因此应该保留它们。
  • 对于高度重叠的相邻检测,抑制策略不仅取决于与M的重叠,还取决于M是否位于拥挤区域。如果M位于拥挤的区域,其高度重叠的相邻框很可能是真正的正例,应该分配较轻的惩罚或保留。但是对于稀疏区域中的实例,惩罚应该更高以修剪误报。

(三)Adaptive-NMS的算法流程

对于每个目标的密度,定义如下:
在这里插入图片描述

依据这个定义,更新策略为:(其中 N M N_M NM表示 M M M的Adaptive NMS 阈值, d M dM dM 是目标 M M M覆盖的密度。)
在这里插入图片描述

可以看出,这个抑制措施具有三个属性:

  • 当相邻box远离 M M M时,即 loU ⁡ ( M , b i ) < N t \operatorname{loU}(\mathrm{M}, \mathrm{bi})<N_t loU(M,bi)<Nt时,他们的分值仍为 s i s_i si
  • 如果M位于拥挤区域, 即 d M > N t \mathrm{dM}>\mathrm{Nt} dM>Nt, 则NMS的阈值为 M M M的密度 d M dM dM。因此,相邻的边框被保留,既然它们非常可能定位到M周围的其他目标;
  • 如果目标在稀疏区域,即 d M < = N t \mathrm{dM}<=\mathrm{Nt} dM<=Nt,则NMS的阈值为 N t Nt Nt

(四)Adaptive-NMS的网络结构

文中将密度估计看作一个回归问题,使用如下的三层的卷积子网络进行预测,采用Smooth L1 损失。
在这里插入图片描述
Adaptive NMS的伪代码,与基本NMS算法相比仅替换了阈值。
在这里插入图片描述

八、NMS系列总结

(一)根据是否需要训练分类

  • 不需要训练的NMS方法(NMS、Soft-NMS、Weighted-NMS、Cluster-NMS)
  • 需要训练的NMS(softerNMS、ConvNMS、PureNMS、 IOU-GuidedNMS、AdaptiveNMS)

(二)根据改进策略进行分类

  • 带权重的NMS(Soft NMS, Softer NMS,Weighted NMS)
  • 考虑定位的NMS(IOU-Guided NMS)
  • 阈值自适应的NMS(Adaptive NMS)
  • 并行的NMS(Fast NMS, Cluster NMS)

参考:
NMS系列(NMS,Soft-NMS,Weighted-NMS,IOU-Guided NMS,Softer-NMS,Adaptive NMS,DIOU NMS,Cluster NMS)
NMS方法总结(不需要训练的NMS方法&&需要训练的NMS方法)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【研究】光场相机测速技术中景深方向不确定性的改进方法

本项研究详细介绍了一种基于光场相机的粒子追踪测速&#xff08;PTV&#xff09;算法&#xff0c;旨在对三维速度场的三分量进行精细化测量。算法核心在于利用相机视角的多样性&#xff0c;辅以三角化测量和粒子追踪技术&#xff0c;有效优化了光场粒子图像测速&#xff08;PIV…

Linux——线程控制

目录 前言 一、线程创建 1.创建线程 2.线程传递结构体 3.创建多线程 4.收到信号的线程 二、线程终止 三、线程等待 四、线程分离 五、取消线程 六、线程库管理的原理 七、站在语言角度理解pthread库 八、线程的局部存储 前言 前面我们学习了线程概念和线程创建&…

异地文件如何共享访问?

异地文件共享访问是一种让不同地区的用户能够快速、安全地共享文件的解决方案。人们越来越需要在不同地点之间共享文件和数据。由于复杂的网络环境和安全性的问题&#xff0c;实现异地文件共享一直是一个挑战。 为了解决这个问题&#xff0c;许多公司和组织研发了各种异地文件共…

Spring Boot接收从前端传过来的数据常用方式以及处理的技巧

一、params 传参 参数是会拼接到url后面的请求 场景规范:url后面的key值<=3个参数的时候,使用params 传参 支持的请求方式:get(正规的是get方式)、post 都行 例如: http://localhost:8080/simpleParam?name=Tom&age=10 在postman里面的体现为 后端接收的接口…

20240402,<<,>>,控制流:while语句 ,for语句

……学很少&#xff0c;学很慢还是比不学强点是吧&#xff0c;救命 昨天不是很懂<<,>> 输入输出 iostream, 输入流 istream 输出流ostream&#xff0c;COUT,CIN,CERR,CLOG #include <iostream> int main() {std::cout << "enter two numbers:&…

成员变量、局部变量

变量分类 定义位置不同 成员变量定义在类中&#xff0c;成员方法之外 局部变量定义在局部范围内&#xff0c;如方法参数&#xff0c;方法内部&#xff0c;循环结构中等 作用范围不同&#xff08;空间&#xff09; 成员变量在整个类内有效&#xff0c;与声明位置无关 局部变…

图神经网络实战(7)——图卷积网络(Graph Convolutional Network, GCN)详解与实现

图神经网络实战&#xff08;7&#xff09;——图卷积网络详解与实现 前言1. 图卷积层2. 比较 GCN 和 GNN2.1 数据集分析2.2 实现 GCN 架构 小结系列链接 前言 图卷积网络 (Graph Convolutional Network, GCN) 架构由 Kipf 和 Welling 于 2017 年提出&#xff0c;其理念是创建一…

未来画卷:当AI短片撼动视界,虚拟与现实的界限模糊

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

IDEA中连接SQLserver数据库(DataGrip相同连接)

IDEA中连接SQLserver数据库(DataGrip相同连接) 1. 打开IDEA-database组件 2. 新建SQL server连接 3. 填写信息进行连接 填写连接名称&#xff0c;连接主机IP&#xff0c;端口&#xff0c;默认端口1433&#xff0c;数据库用户名密码&#xff0c;默认数据库用户名是sa 第一次连接…

Spark 部署与应用程序交互简单使用说明

文章目录 前言步骤一&#xff1a;下载安装包Spark的目录和文件 步骤二&#xff1a;使用Scala或PySpark Shell本地 shell 运行 步骤3:理解Spark应用中的概念Spark Application and SparkSessionSpark JobsSpark StagesSpark Tasks 转换、立即执行操作和延迟求值窄变换和宽变换 S…

Redis高可用与持久化

一、Redis高可用 在web服务器中&#xff0c;高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务&#xff08;99.9%、99.99%、99.999%等等&#xff09;。 但是在Redis语境中&#xff0c;高可用的含义似乎要宽泛一些&#xff0c;除了保证…

智能视频翻译和配音处理工具:Pyvideotrans

pyVideoTrans&#xff1a;一键字幕识别翻译配音带新语言字幕和配音的视频 - 精选真开源&#xff0c;释放新价值。 概览 Pyvideotrans是一款卓著的智能化视频处理系统&#xff0c;专精于视频翻译与配音艺术&#xff0c;以其卓越的技术实力实现对原始视频中音频信息的精准捕捉、…

笔记本电脑win7 Wireless-AC 7265连不上wifi6

1.背景介绍 旧路由器连接人数有限&#xff0c;老旧&#xff0c;信号不稳定更换了新路由器&#xff0c;如 TL-XDR5430易展版用户电脑连不上新的WIFI网络了&#xff0c;比较着急 核心问题&#xff1a;有效解决笔记本连接wifi上网问题&#xff0c;方法不限 2.环境信息 Windows…

4.2总结(快速幂 || 抽象方法,抽象类,接口)

JAVA学习小结 一.抽象方法和抽象类 抽象类不一定有抽象方法&#xff0c;但有抽象方法的一定是抽象类 格式&#xff1a;public abstract 返回值类型 方法名&#xff08;参数列表&#xff09; public abstract class 类名 {} 抽象类和抽象方法的意义&#xff1a;统一子类具有相…

Android 的网络加载

发起网络请求的过程 当用户在应用程序中输入网址或关键字时&#xff0c;应用程序会发起网络请求。这个过程大致如下&#xff1a; 应用程序将请求发送到服务器&#xff0c;服务器返回响应数据。应用程序接收到响应数据后&#xff0c;将其转换为应用程序可识别的数据格式。应用…

单片机中的RAM vs ROM

其实&#xff0c;单片机就是个小计算机。大计算机少不了的数据存储系统&#xff0c;单片机一样有&#xff0c;而且往往和CPU集成在一起&#xff0c;显得更加小巧灵活。 直到90年代初&#xff0c;国内容易得到的单片机是8031&#xff1a;不带存储器的芯片&#xff0c;要想工作&a…

Spark 的结构化 APIs——RDD,DataFrame, Dataset, SparkSQL 使用和原理总结

前言 在本文中&#xff0c;我们将探索 Spark 的结构化 APIs&#xff08;DataFrames and Datasets)。我们还将看下 Spark SQL 引擎是如何支撑高级的结构化 APIs 的。当Spark SQL在早期的Spark 1.x 中首次引入时, 随后是DataFrames 继承了Spark 1.3中 SchemaRDDs &#xff0c;此…

就业班 第二阶段 2401--4.1 day10 shell之“三剑客”+Expect

十一、shell 编程-grep egrep 支持正则表达式的拓展元字符 &#xff08;或grep -E&#xff09; #egrep [0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3} file1.txt [rootnewrain ~]# num11 1、运用正则&#xff0c;判断需要[[ ]] [rootnewrain ~]# [[ $num1 ~ ^[0-9]$ ]] &a…

STM32 | 通用同步/异步串行接收/发送器USART带蓝牙(第六天原理解析)

STM32 第六天 一、 USART 1、USART概念 USART:(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步/异步串行接收/发送器 USART是一个全双工通用同步/异步串行收发模块,该接口是一个高度灵活的串行通信设备 处理器与外部设备通信的两种方式: u并行通信(…

在c# 7.3中不可用,请使用9.0或更高的语言版本

参考连接&#xff1a;在c# 7.3中不可用,请使用8.0或更高的语言版本_功能“可为 null 的引用类型”在 c# 7.3 中不可用。请使用 8.0 或更高的语言版本-CSDN博客https://blog.csdn.net/liangyely/article/details/106163660 [踩坑记录] 某功能在C#7.3中不可用,请使用 8.0 或更高的…