NMS(非极大值抑制)

在物体检测中NMS(Non-maximum suppression)非极大抑制应用十分广泛,其目的是为了消除多余的框,找到最佳的物体检测的位置。

在RCNN系列算法中,会从一张图片中找出很多个候选框(可能包含物体的矩形边框),然后为每个矩形框为做类别分类概率

技术分享

就像上面的图片一样,定位一个车辆,最后算法就找出了一堆的方框,我们需要判别哪些矩形框是没用的。

非极大值抑制:先假设有6个候选框,根据分类器类别分类概率做排序,从小到大分别属于车辆的概率分别为A、B、C、D、E、F。

1、从最大概率矩形框F开始,分别判断A~E与F的重叠度IOU是否大于某个设定的阈值;

2、假设B、D与F的重叠度超过阈值,那么就扔掉B、D;并标记第一个矩形框F,是我们保留下来的。

3、从剩下的矩形框A、C、E中,选择概率最大的E,然后判断E与A、C的重叠度,重叠度大于一定的阈值,那么就扔掉;并标记E是我们保留下来的第二个矩形框。

4、一直重复这个过程,找到所有曾经被保留下来的矩形框。

 

 

非极大值抑制(NMS)非极大值抑制顾名思义就是抑制不是极大值的元素,搜索局部的极大值。例如在对象检测中,滑动窗口经提取特征,经分类器分类识别后,每个窗口都会得到一个分类及分数。但是滑动窗口会导致很多窗口与其他窗口存在包含或者大部分交叉的情况。这时就需要用到NMS来选取那些邻域里分数最高(是某类对象的概率最大),并且抑制那些分数低的窗口。

<think>好的,用户现在问的是NMS非极大值抑制,需要我来详细解释一下。首先,我需要回想一下NMS的基本概念和作用。NMS全称是Non-Maximum Suppression,中文是非极大值抑制,主要用于目标检测中处理重叠的候选框,保留最合适的那个。用户之前已经问过深度学习中的CNN、RNN和GAN,可能现在在学习目标检测相关的内容,所以需要了解后处理技术中的NMS。 接下来,我得确定用户的背景和需求。用户可能是学生、研究者,或者刚入门深度学习的爱好者。他们可能已经了解目标检测的基本模型,比如YOLO或Faster R-CNN,但在实际应用中遇到了重复框的问题,所以想了解如何解决这个问题。这时候,NMS就是关键步骤之一。 需要解释NMS的原理,分步骤说明其流程。首先,目标检测模型会生成很多候选框,每个框都有置信度分数。这些框之间可能有大量重叠,尤其是当检测同一个物体时。NMS的作用就是筛选出最有可能正确的框,抑制掉其他重叠的框。 接下来要详细描述NMS的具体步骤。通常的步骤包括:根据置信度排序候选框,选择最高分的框,然后计算其他框与这个框的重叠程度(如IoU),如果超过设定的阈值,就抑制这些框。重复这个过程直到所有框都被处理。需要给出IoU的计算公式,以及NMS的伪代码或流程说明,这样用户能更直观地理解。 还要注意可能存在的问题,比如当两个物体靠得很近时,NMS可能会错误地抑制掉正确的框。这时候可能需要改进方法,比如Soft-NMS或其他的变体,可以简要提及这些改进,但不需要深入,因为用户可能只需要基础的理解。 另外,用户可能需要知道NMS的应用场景,比如在YOLO、Faster R-CNN等模型中的具体应用,这能帮助用户联系实际。同时,给出一个例子,比如检测图像中的多个物体时,NMS如何工作,会有助于理解。 需要检查是否需要使用LaTeX格式,用户之前的对话中有系统级指令,要求数学表达式用$...$,独立公式用$$...$$,所以IoU公式和NMS步骤中的计算需要用正确的格式。比如IoU的计算公式应该用$$包围,变量用斜体。 最后,确保回答结构清晰,分步骤说明,帮助用户逐步理解。可能的结构包括概述、原理、步骤、问题与改进、应用场景。同时,使用中文口语化的表达,避免过于学术化的术语,但保持准确性。 现在需要组织这些内容,先定义NMS,然后讲为什么需要它,接着详细步骤,可能的问题,改进方法,应用场景,最后总结。确保每个部分简洁明了,重点突出,符合用户的需求。同时,注意使用例子和公式来增强解释的清晰度。</think>以下是关于非极大值抑制NMS)的逐步解释: --- ### **1. NMS的作用** **非极大值抑制(Non-Maximum Suppression, NMS)** 是目标检测中的关键后处理技术,用于**消除冗余的检测框**。 - **问题背景**:目标检测模型(如YOLO、Faster R-CNN)会针对同一物体生成多个重叠的候选框(Bounding Box),需筛选出最准确的框。 - **核心目标**:保留置信度最高的框,抑制与其高度重叠的低置信度框。 --- ### **2. NMS的原理** #### **输入与输出** - **输入**:一组候选框及其置信度得分,例如: $$ \text{Boxes} = \{B_1, B_2, \dots, B_N\}, \quad \text{Scores} = \{s_1, s_2, \dots, s_N\} $$ - **输出**:筛选后无冗余的候选框集合。 #### **关键指标:IoU(交并比)** IoU(Intersection over Union)衡量两个框的重叠程度,计算公式为: $$ \text{IoU}(B_i, B_j) = \frac{\text{Area}(B_i \cap B_j)}{\text{Area}(B_i \cup B_j)} $$ 若IoU超过阈值(如0.5),则认为两框检测了同一物体。 --- ### **3. NMS的步骤** 1. **按置信度排序**:将所有候选框按置信度从高到低排序。 2. **迭代筛选**: - 选取当前最高得分的框,加入最终结果集。 - 计算该框与剩余所有框的IoU,**删除IoU超过阈值**的框。 3. **重复**:对剩余框重复步骤2,直至无候选框剩余。 #### **伪代码示例** ```python def NMS(boxes, scores, threshold): sorted_indices = sorted(range(len(scores)), key=lambda k: scores[k], reverse=True) selected = [] while sorted_indices: current = sorted_indices.pop(0) selected.append(current) # 计算当前框与剩余框的IoU to_remove = [] for idx in sorted_indices: if IoU(boxes[current], boxes[idx]) > threshold: to_remove.append(idx) # 删除重叠框 sorted_indices = [i for i in sorted_indices if i not in to_remove] return selected ``` --- ### **4. NMS的局限性及改进** #### **局限性** - **密集物体漏检**:若两个物体距离过近,IoU超过阈值时,正确框可能被误删。 - **阈值敏感**:阈值设置依赖经验,过高导致漏检,过低导致冗余。 #### **改进方法** - **Soft-NMS**:不直接删除重叠框,而是根据IoU降低其置信度。 - **DIoU-NMS**:考虑框中心点距离,优化IoU计算方式。 - **自适应阈值**:根据场景动态调整阈值。 --- ### **5. 应用场景** - **目标检测**:YOLO系列、Faster R-CNN等模型均依赖NMS后处理。 - **实例分割**:过滤重叠的掩膜区域。 - **关键点检测**:消除重复的关键点预测。 --- ### **示例说明** 假设检测到同一物体的三个框,置信度分别为0.9、0.8、0.7,IoU阈值设为0.5: 1. 保留0.9的框,删除与它IoU>0.5的框(假设0.8的框被删除)。 2. 剩余0.7的框若与0.9的框IoU≤0.5,则保留。 最终输出:**置信度0.9的框**和可能的**0.7的框**(若IoU未超阈值)。 --- ### **总结** NMS通过**抑制冗余检测框**,提升目标检测的精度与效率,但其性能受阈值和场景影响。改进算法(如Soft-NMS)可缓解密集场景的漏检问题,是实际工程中的重要优化方向。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值