【AI面试】NMS 与 Soft NMS 的辨析

news2024/11/19 13:13:33

往期文章:

  • AI/CV面试,直达目录汇总
  • 【AI面试】L1 loss、L2 loss和Smooth L1 Loss,L1正则化和L2正则化

一、NMS

非极大值抑制Non-Maximum Suppression,NMS),并不是深度学习时期,目标检测的产物。在传统的图像处理领域,就已经引入了NMS算法。所以,他是老算法的新使用。

  • 目的: 为了消除多余的框,找到最佳的物体检测的位置
  • 思想:选取那些邻域里分数最高的窗口,同时抑制那些分数低的窗口
  • 本质:搜索局部极大值,抑制非极大值元素

NMS算法的步骤:

  1. 按某个数值从高到低进行排序(高低的可以是置信度)
  2. 低的依次与最高的进行IOU的对比,超过指定阈值的,将会被踢除(分数又低,还跟高的长的相近,活该被删除),否则,就先暂时留着
  3. 留下来的,重复步骤1和2,直到不再发生改变为止

Canny边缘检测、霍夫变换圆形检测里面,也都会用到NMS对多余的点、圆心进行去除。那此事排序用到的值就不再是置信度了,是梯度的值、圆心点的投票数了。

这两个更多细节的,可以参考这里:

  • 图像处理笔记3-Canny边缘检测算法与原理
  • 图像处理笔记4-霍夫变换直线检测、圆检测

问一个面试官常快问快答的问题:

是阈值低,最后留下的多,还是阈值高,最后留下的多?

答案是:阈值高,留下的多

因为你的目的是要把次的、不重要的给剔除掉。那么你设定的重复阈值高,自然重复的就少,删除的也就少,最后留下来的自然就变多了。

在这里插入图片描述

二、Soft NMS

Soft NMSNMS 的一种变种,改进版本。从名字我们就大概能猜出来一些:没有NMS那么的硬(hard),比较的软(soft)。

绝大部分目标检测方法,最后都要用到 NMS-非极大值抑制进行后处理。 通常的做法是将检测框按得分排序,然后保留得分最高的框,同时删除与该框重叠面积大于一定比例的其它框。那为什么还要改进,推出一个Soft NMS

NMS 的这种贪心式方法存在如下图所示的问题:

红色框绿色框是当前的检测结果,二者的得分分别是0.950.80。如果按照传统的NMS进行处理,首先选中得分最高的红色框,然后绿色框就会因为与之重叠面积过大而被删掉。

另一方面,NMS的阈值也不太容易确定,设小了会出现绿色框因为和红色框重叠面积较大而被删掉,设置过高又容易增大误检。

nms我两个都要,那该给个什么思路呢?不要粗鲁地删除所有IOU大于阈值的框,而是降低其置信度。

Soft NMS思路和做法如下:

  • 相邻区域内(IOU超过阈值)的检测框的分数进行调整,而非彻底的抑制,从而提高了高检索率的情况下的准确率;
  • 在低检索率时,仍能对物体检测性能有明显提升。

三、NMS和SoftNMS的对比学习

原来的NMS可以描述为:IOU大于阈值的窗口的得分全部置为0。公式如下:
nms
用人话解释下NMS的公式,就是:

  • 分数低的框与分数高的框的iou小于阈值的,不变
  • 分数低的框与分数高的框的iou大于或等于于阈值的,置信度直接置为0,也就是被踢出了

而SoftNMS可以描述为:将IOU大于阈值的窗口的得分进行改写,iou越大,(1-iou)就越小。线性加权的公式如下:
softnms
对比NMS,用人话解释下softNMS的公式,就是:

  • 分数低的框与分数高的框的iou小于阈值的,不变,与NMS处理一样
  • 分数低的框与分数高的框的iou大于或等于于阈值的,置信度不再置为0,而是通过置信分数*(1-iou),得到新的分数,进行替换.

对比总结:

  • 在NMS的算法里面,对于IOU超于阈值的检测框,直接剔除;
  • 而Soft NMS,对于IOU超过阈值的检测框,不是直接删除,而是改变该检测框的置信度,踢出的工作留给了置信度阈值来做。

论文展示结果又回到前面两匹马的问题上来。假设框1的置信度是0.95框2的置信度是0.8,还有一个框3的置信度是0.7。我们最终的目的是将框1和框2保留下来,将框3进行剔除掉。

  • 假设使用的是NMS,那么框2和3都会被剔除掉,因为他们与框1的iou都比较高,很大可能性是高于阈值的,都被提除掉了。
  • 那假设使用的是softNMS,框2和3的置信度就会被重新改写。2和1的iou较小,改写之后的置信度是0.4;3和1的iou较大,置信度会更低,大概是0.2。那假设筛选阈值正好是0.3,就恰好把2留下,把3踢出了。
  • 但是,这里也有一个问题就是置信度的阈值如何选择?作者在这里依然使用手工设置的值,依然存在很大的局限性,所以该算法依然存在改进的空间。

最后
针对这个问题,我也帮你们提前问了chatGPT,也给出了一个较为总结性的回答,如下所示。你们觉得它回答的如何呢?

1
2
3
4
在这里插入图片描述
4

  • Soft-NMS – Improving Object Detection With One Line of Code
  • IOU-Net , Acquisition of Localization Confidence for Accurate Object Detection
  • Matrix NMS,SOLOv2: Dynamic and Fast Instance Segmentation

通过对chatGPT的询问,我们又知道了两个NMS,分别是IoU NMS Matrix NMS,这是我们新的收获。后面我们会继续补充这块内容

在这里插入图片描述

上图是IoU-Net论文的测试结果,展示了 IoU和召回率的关系,No-NMS是召回率的上界,可以看到IoU-NMS的召回率更高,且在更高的IoU下,IoU-NMS与上界的差距越小。

参考链接:

  • NMS和soft-nms算法
  • 哔哩哔哩视频

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

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

相关文章

VS项目配置常用的配置

背景随着学习使用VS的深入在项目配置使用一些相对路径是必不可少的,使用绝对路径是最简单的,但是加入你换了电脑或者别人拉取你的代码,就会发现通常会编译不过.因为项目配置使用了绝对路径.所以使用相对路径的好处就会体现.在VS项目配置有自己的一套配置,简单记录一下我使用到的…

mysql一主键uuid和自增的选择

文章目录 1.自增ID的优缺点1.1 优点1.2 缺点1.3 不适合以自增ID主键作为主键的情况2.UUID作为主键2.1 介绍2.2 优点2.3 缺点3.有序UUID作为主键3.1 介绍3.2 演示使用3.2.1 前提知识3.2.1.1 数据类型 - binary3.2.1.2 函数 - hex()3.2.1.3 函数 - unhex()3.2.2 数据库层3.2.3 JA…

蓝桥杯第十四届校内赛(第三期) C/C++ B组

一、填空题 (一)最小的十六进制 问题描述   请找到一个大于 2022 的最小数,这个数转换成十六进制之后,所有的数位(不含前导 0)都为字母(A 到 F)。   请将这个数的十进制形式作…

提升Mac使用性能的5大方法,CleanMyMacX 2023非常的好用哦~

近些年伴随着苹果生态的蓬勃发展,越来越多的用户开始尝试接触Mac电脑。然而很多人上手Mac后会发现,它的使用逻辑与Windows存在很多不同,而且随着使用时间的增加,一些奇奇怪怪的文件也会占据有限的磁盘空间,进而影响使用…

sql数据库常用操作指令

一、操作库-- 创建库create database db1;-- 创建库是否存在,不存在则创建create database if not exists db1;-- 查看所有数据库show databases;-- 查看某个数据库的定义信息 show create database db1; -- 修改数据库字符信息alter database db1 character set ut…

Istio Sidecar启动顺序 - 导致的应用容器网络不通

目录一、问题二、Istio 1.7及其之后版本的解决方案2.1 方式1:安装Istio时全局设置2.2 方式2:在应用Deployment通过annotation设置2.3 holdApplicationUntilProxyStarts启用效果三、Istio 1.7之前的解决方案一、问题 线上应用集成了Spring Cloud K8S Con…

HCIP实验1

实验要求 1 R6为isp, 接口IP地址均为公有地址;该设备只能配置IP地址,之后不能冉对其进行其他任何配置; 2 R1-R5为局域网,私有IP地址192.168.1.0/24, 请合理分配; 3 R1, R2, R4,各有两个环回地址; R5; R6各有一个环回地址;所有路由器上环回均…

2 GateWay工作流程+GateWay搭建

GateWay工作流程GateWay搭建 核心流程图如下: 核心概念: 客户端向 Spring Cloud Gateway 发出请求。如果Gateway Handler Mapping确定请求与路由匹配,则将其发送到Gateway Web Handler 处理程序。此处理程序通过特定于请求的Fliter链运行请求…

ARM uboot 的移植1-从三星官方 uboot 开始移植

一、移植初体验 1、直接编译三星移植版 uboot 尝试运行 (1) 复制到 linux 的源生目录下,然后解压开。 (2) 检查 Makefile 中的交叉编译工具链。 (3) 配置时使用:make smdkv210single_config,对应 include/configs/smdkv210single.h 头文件。…

力扣(LeetCode)430. 扁平化多级双向链表(2023.03.04)

你会得到一个双链表,其中包含的节点有一个下一个指针、一个前一个指针和一个额外的 子指针 。这个子指针可能指向一个单独的双向链表,也包含这些特殊的节点。这些子列表可以有一个或多个自己的子列表,以此类推,以生成如下面的示例…

javaWeb核心01-HTTPTomcatServlet

文章目录HTTP&Tomcat&Servlet1,Web概述1.1 Web和JavaWeb的概念1.2 JavaWeb技术栈1.2.1 B/S架构1.2.2 静态资源1.2.3 动态资源1.2.4 数据库1.2.5 HTTP协议1.2.6 Web服务器1.3 Web核心课程安排2, HTTP2.1 简介2.2 请求数据格式2.2.1 格式介绍2.2.2 实例演示2.…

区块链学习

hash函数 一种算法任意长度的二进制数据映射为固定长度的二进制数据 hash函数的特点 确定性------对同一个输入数据每次都能得到相同的结果单向性------对一个数据可以很容易计算出hash值,但是对于一个hash值非常难反推出数据隐秘性------没有可行的方法算出hash…

OpenCV入门(三)快速学会OpenCV2图像处理基础

OpenCV入门(三)快速学会OpenCV2图像处理基础 1.颜色变换cvtColor imgproc的模块名称是由image(图像)和process(处理)两个单词的缩写组合而成的,是重要的图像处理模块,主要包括图像…

VSCode问题记录

20230304 - 0. 引言 这几年的编程方式还真是各种变化,从一开始直接VIM,到后面使用jupyter进行机器学习相关,然后再过渡到vim的形式并加以tmux批量化,最后去年使用了vscode作为IDE。随着工具的变化,那么很多习惯也都随…

PyQGIS自定义应用程序打包

路径准备ps:打包时需要根据自己的安装路径进行相应修改QGIS3.22.16的安装路径:D:\QGIS3.22.16QGIS3.22.16中python-qgis.bat的路径:D:\QGIS3.22.16\bin\python-qgis-ltr.bat准备打包的工程所在目录:E:\Crater_DamageEstimation0303安装pyinst…

Python基础—文件操作

Python基础—文件操作 文件操作 文件是指为了重复使用或长期使用的目的,以文本或二进制形式存放于外部存储器(硬盘、U盘、光盘等)中的数据保存形式,文件是信息交换的重要途径,也是利用程序解决实际问题的重要媒介。 …

网络编程面试相关内容

1.什么是网络编程网络编程的本质是多台计算机之间的数据交换。数据传递本身没有多大的难度,不就是把一个设备中的数据发送给其他设备,然后接受另外一个设备反馈的数据。现在的网络编程基本上都是基于请求/响应方式的,也就是一个设备发送请求数…

RPC框架笔记

文章目录RPC概述一次RPC的完整过程RPC的优缺点分层设计编解码层——数据格式协议层——概念网络通信层——网络库RPC框架的关键指标稳定性易用性扩展性观测性高性能Kitex框架解读整体框架自研网络库——Netpoll扩展性设计性能优化——网络库优化性能优化——编解码优化合并部署…

【Flutter入门到进阶】Flutter基础篇---组件生命周期与状态

1 Android界面渲染流程UI树与FlutterUI树的设计思路对比 1.1 android渲染流程中的树的组织 1.1.1 XML加载与解析 1.1.2 ViewRootImpl组织树结构 1.1.3 编舞者掌控调用时机 1.1.4 View负责UI渲染 1.1.5 底层surfacefiling负责沟通硬件 1.2 flutter组件设计思路&#xff0c…

Canal实时监控案例

Canal实时监控案例 文章目录Canal实时监控案例0. 写在前面1. TCP 模式测试1.1 IDEA创建项目canal-module1.2 通用监视类——CanalClient1.2.1 Canal 封装的数据结构1.2.2 在 canal-module 模块下创建 cn.canal 包,并在该包下创建 CanalClient.java文件2. Kafka 模式…