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算法实现

YOLOv5%E4%B8%AD%E7%9A%84NMS-toc" style="margin-left:80px;">🚀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为空。


YOLOv5%E4%B8%AD%E7%9A%84NMS">🚀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.niftyadmin.cn/n/4946907.html

相关文章

【Perfetto】Perfetto 零基础入门

前因:视频卡顿问题,为了排除是cpu占用性能问题还是音视频编解码问题,接触到了Perfetto,感觉很好玩,学习一下。突然感觉公司挺好的,给新人很多成长空间,一边解bug,一边碰新技术&#…

HoudiniVex笔记_P24_ForceBasics力基础

原视频:https://www.youtube.com/playlist?listPLzRzqTjuGIDhiXsP0hN3qBxAZ6lkVfGDI Bili:Houdini最强VEX算法教程 - VEX for Algorithmic Design_哔哩哔哩_bilibili Houdini版本:19.5 1、什么是Force 本章主要讲重力、弹力、速度与质量、…

用栈解决有效的括号匹配问题

//用数组实现栈 typedef char DataType; typedef struct stack {DataType* a;//动态数组int top;//栈顶int capacity; //容量 }ST;void STInit(ST*pst);//初始化void STDestroy(ST* pst);//销毁所有空间void STPush(ST* pst, DataType x);//插入数据到栈中void STPop(ST* pst);…

DAY4,ARM(用c语言点亮LED灯,封装库代码,软件编程控制硬件)

---gpio.h头文件--- #ifndef __LED_H__ #define __LED_H__//1RCC_MP_AHB4ENSETR寄存器封装 #define RCC_MP_AHB4ENSETR (*(volatile unsigned int*)0x50000a28)//2GPIO封装结构体 typedef struct {volatile unsigned int MODER;volatile unsigned int OTYPER;volatile unsigne…

这6个免费设计素材网站,设计师都在用,马住

新手设计师不知道去哪里找素材,那就看看这几个设计师都在用的网站吧,免费、付费、商用素材都有,可根据需求选择,赶紧收藏~ 菜鸟图库 https://www.sucai999.com/?vNTYxMjky 菜鸟图库是一个非常大的素材库,站内包含设…

VUE iView框架Table及Render用法

Render用法 iView官网table用法: https://www.iviewui.com/view-ui-plus/component/form/table Render用法详解: https://blog.csdn.net/qq_43524744/article/details/107959098

前端面试的游览器部分(7)每天10个小知识点

目录 系列文章目录前端面试的游览器部分(1)每天10个小知识点前端面试的游览器部分(2)每天10个小知识点前端面试的游览器部分(3)每天10个小知识点前端面试的游览器部分(4)每天10个小知…

猿辅导与中街1946联手推出“冷知识冰棍”,带来学习新体验

为了给孩子们的暑假学习加点“料”,猿辅导近日脑洞大开,和中街1946携手推出了“冷知识冰棍”,以数学、英语、语文、科学4个科目为外包装,分别对应草莓山楂、青提菠萝、茉莉蓝莓和蜜桃乌龙等4种口味,为孩子们开启了夏日…