YOLOv5基础知识入门(7)— NMS(非极大值抑制)原理解析

前言:Hello大家好,我是小哥谈。NMS是指非极大值抑制(non maximum suppression),它是一种常用于物体检测任务的算法。在物体检测中,通常会有多个预测框(bounding box)被提议出来,并且这些框可能存在重叠或者重复的情况。NMS的目的就是通过抑制非极大值的方式,来选择出最具代表性的框。本节课就给大家介绍一下非极大值抑制的概念、原理及其算法实现。🌈 

 前期回顾:

           YOLOv5基础知识入门(1)— YOLO算法的发展历程

           YOLOv5基础知识入门(2)— YOLOv5核心基础知识讲解

           YOLOv5基础知识入门(3)— 目标检测相关知识点

           YOLOv5基础知识入门(4)— 神经网络的基本概念与原理 

           YOLOv5基础知识入门(5)— 损失函数(IoU、GIoU、DIoU、CIoU和EIoU)

           YOLOv5基础知识入门(6)— 激活函数(Mish、Sigmoid、Tanh、ReLU、Softmax、SiLU等)

           目录

🚀1.NMS概念

🚀2.目标检测中的NMS

🚀3.NMS算法实现

🚀4.YOLOv5中的NMS

🚀1.NMS概念

非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素,可以理解为局部最大搜索。这个局部代表的是一个邻域,邻域有两个参数可变,一是邻域的维数,二是邻域的大小。这里不讨论通用的NMS算法(参考论文《Efficient Non-Maximum Suppression》对1维和2维数据的NMS实现),而是用于目标检测中提取分数最高的窗口的。🌳

举例:在人脸检测中,滑动窗口经提取特征,经分类器分类识别后,每个窗口都会得到一个分数,但是滑动窗口会导致很多窗口与其他窗口存在包含或者大部分交叉的情况。这时就需要用到NMS来选取那些邻域里分数最高,并且抑制那些分数低的窗口。🍁


🚀2.目标检测中的NMS

目标检测一般分为两个过程:训练过程+检测(推理)过程。🌻

训练过程中,目标检测算法会根据给定的ground truth调整深度学习网络参数来拟合数据集的目标特征,训练完成后,神经网络的参数固定,因而能够直接对新的图像进行目标预测。 然而,在实际的目标预测中,一般的目标检测算法(R-CNN、YOLO等等)都会产生非常多的目标框,其中有很多重复的框定位到同一个目标,NMS作为目标检测的最后一步,用来去除这些重复的框,获得真正的目标框。🍄

两阶段目标检测算法中,以Faster-RCNN为例,有两处使用NMS,第一处是在训练的时候,利用 ProposalCreator 来生成 proposal 的时候,因为只需要一部分 proposal,所以利用NMS进行筛选。第二处使用是在预测的时候,当得到300个分类与坐标偏移结果的时候,需要对每个类别逐一进行非极大值抑制。那为什么对于每个类别不直接取置信度最高的那一个作为最终的预测呢?因为一张图中某个类别可能不止一个,例如一张图中有多个人,直接取最高置信度的只能预测其中的一个人,而通过NMS理想情况下可以使得每个人(每类中的每个个体)都会有且仅有一个 bounding box 框。🌺

一阶段目标检测算法中,以YOLOv5为例,输入一张640*640的图像,NMS之前会产生(80*80+40*40+20*20)*3=25200个目标框,这些框都有相应的分类置信度,当置信度满足正样本条件时(比如100个框,这些框密集的分布在目标周围),被送入NMS,NMS后会产生个数位个目标框(比如7个),如下图所示。👇

目标检测中应用NMS算法的主要目的是消除多余(交叉重复)的窗口,找到最佳物体检测位置。由于目标在图像中的形状和大小可能是各种各样的,所以为了能够较好地在图像中检测这些目标,通常会设计生成数量众多、长宽各异的候选边界框。但是对于一个目标检测任务来说,理想的情况是一个,所以目标只需输出一个最准确的边界框即可。💞


🚀3.NMS算法实现

为了从多个候选边界框中选择一个最佳边界框,通常会使用非极大值抑制(NMS)算法,这种算法用于“抑制”置信度低的边界框并只保留置信度最高的边界框。🌿

算法的实现过程为:

输入: 候选边界框集合B(每个候选框都有一个置信度)、IoU阈值N

输出: 最终的边界框集合D(初始为空集合)

1. 对集合B根据置信度进行降序排序;

2. 从集合B中选择第一个候选框(置信度最高),把它放入集合D中并从集合B中删除;

3. 遍历集合B中的每个候选框,计算它们与D集合中这个候选框的IoU值。如果IoU值大于阈值N, 则把它从集合B中删除;

4. 重复步骤2~3直到集合B为空。


🚀4.YOLOv5中的NMS

YOLOv5的通用工具类中有一段核心代码是处理后处理的NMS(非极大值抑制)部分。NMS是一种用于去除重叠较多的边界框的算法,以筛选出最准确的目标框。🐳

下面就对YOLOv5的NMS进行详解。🍎 🍏  🍒

NMS的主要思路是通过计算目标框之间的重叠度(即IOU,交并比),并选择IOU较低的目标框保留下来。YOLOv5的NMS代码使用了一个循环来遍历所有的预测框,并进行判断和筛选。🌴

首先,通过设定置信度阈值IOU阈值,将预测框中置信度低于阈值的框过滤掉,只保留置信度高的框。

接着,对剩下的框按照置信度进行降序排序,确保置信度高的框排在前面。

然后,从置信度最高的框开始,与其余框逐一计算IOU。如果某个框的IOU高于设定的IOU阈值,则将其删除,否则保留。

最后,重复上述步骤,直到遍历完所有的预测框,并得到最终筛选出来的目标框。

以上就是YOLOv5的NMS的主要讲解。这段代码的作用是在目标检测过程中,根据置信度和IOU阈值对预测框进行筛选,以得到准确的目标框。📚

名词解释:

置信度:置信度是介于0-1(或100%)之间的数字,它描述模型认为此预测边界框包含某类别目标的概率。

IoU(Intersection over Union,IoU):即两个边界框相交面积与相并面积的比值,边界框的准确度可以用IoU进行表示;一般约定,在检测中,IOU>0.5,则认为检测正确,一般阈值设为0.5。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据培训前景怎么样?企业需求量大吗

大数据行业对大家来说并不陌生,大数据行业市场人才需求量大,越早入行越有优势,发展机会和上升空间等大。不少人通过大数据培训来提升自己的经验和自身技术能力,以此来获得更好的就业机会。 2023大数据培训就业前景怎么样呢?企业需…

Web和云开发,Rust会起飞?

Web和云开发,Rust会起飞? 一、前言 二、大厂偏爱,Rust的未来 三、Rust做Web的雄心 四、有必要换Rust做Web? 1.效率和性能 2.可靠性和可维护性 五、Rust先苦后甜 六、用Rust前的几个问题 七、开发界的强者 一、前言 去年…

面试之快速学习STL-无序关联式容器

和关联式容器一样,无序容器也使用键值对(pair 类型)的方式存储数据。不过,本教程将二者分开进行讲解,因为它们有本质上的不同: 关联式容器的底层实现采用的树存储结构,更确切的说是红黑树结构&a…

【eNSP】交换机(vlan和vlan间通信)

【eNSP】交换机(vlan和vlan间通信) 原理术语过程 实验根据图片连接模块配置设备名称和IP地址配置交换机交换机链路指定sw1配置sw2配置 设置网关交换机互联实验设置查看设置结果 ospf配置 原理 HUB集线器:它的作用可以简单的理解为将一些机器…

Tomcat 部署及优化

Tomcat概述 Tomcat 是 Java 语言开发的,Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,是 Apache 软件基金会的 Jakarta 项目中的一个核心项目,由 Apache、Sun 和其他一些公司及个人共同开发而成。在中小型系统和并发访问用户不是很…

Spring Boot 知识集锦之actuator监控端点详解

文章目录 0.前言1.参考文档2.基础介绍默认支持的端点 3.步骤3.1. 引入依赖3.2. 配置文件3.3. 核心源码 4.示例项目5.总结 0.前言 背景: 一直零散的使用着Spring Boot 的各种组件和特性,从未系统性的学习和总结,本次借着这个机会搞一波。共同学…

ai写真制作让你的照片焕发异彩

最近,越来越多的人开始使用ai写真应用程序来美化他们的照片。这些应用程序使用人工智能技术来将人们的照片变成更有艺术感的写真照,是人们的照片看起来更加生动、自然。今天,我将通过几幅生动的ai写真照片,来带你深入探索ai写真ap…

【数据结构OJ题】相交链表

原题链接:https://leetcode.cn/problems/intersection-of-two-linked-lists/description/ 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 看到这道题,很容易想到的方法就是暴力求解,就是将一个链表的每个结点的地址…

elasticsearch 基础

ES 搜索技术历史 今天看的是《Elasticsearch实战与原理解析》 第一章 搜索技术发展史 1、搜索技术发展史 宏观而言,搜索引擎的发展经历了五个尖端和两大分类。五个阶段分别是ftp文件检索阶段、分类目录阶段、文本相关性检索阶段、网页链接分析阶段和用户意图识别…

809协议nodejs编写笔记(还在更新)

一、总体流程 数据首先通过receiver接受层接收,去掉标识头和标识尾;再进入depacker解包层进行解包,把标识头分解出来并解析;之后发给handler处理层根据不同的消息id选择使用不同的业务逻辑;如果有应答,则通…

js 构造函数

js 构造函数 new Pig() ---- 创建新的空对象 this 指向新对象 this.name name --------修改this,添加新的属性。 最后返回新的对象

蓝牙、语音合二为一,启英泰伦CI231系列AI语音BLE芯片

随着智能家居的快速发展和人们对个性化体验的追求,近期启英泰伦推出了令人振奋的创新产品——CI231系列AI语音BLE芯片。这一系列芯片将语音与BLE技术巧妙融合,为用户提供了更丰富的设备连接选项和更个性化的语音交互体验。 CI231系列芯片实物图 CI231系…