尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

目标检测后处理核心:NMS非极大值抑制详解

发布时间:2026/9/3 16:39:51

资讯中心
01
ARTICLE

目标检测后处理核心:NMS非极大值抑制详解

目标检测后处理核心:NMS非极大值抑制详解
文章目录核心概念数值计算过程示例步骤1按置信度排序步骤2迭代选择第1轮步骤3计算IoU重叠度步骤4抑制冗余候选框步骤5重复迭代第2轮步骤6重复迭代第3轮多类别目标如何处理完整的执行流程代码参考实践中的补充说明在目标检测算法中模型输出的原始预测框往往数量庞大且高度重叠。为了得到清晰、准确的最终检测结果NMS非极大值抑制是必不可少的关键步骤。摘要NMS非极大值抑制是目标检测后处理中的关键步骤用于从大量高度重叠的候选框中筛选出清晰、准确的最终检测结果。本文先介绍 NMS 的核心思想再通过一个包含 4 个候选框的完整数值示例逐步演示“按置信度排序 → 迭代选择 → 计算 IoU → 抑制冗余框”的全过程并解释多类别目标为何要按类别分组执行 NMS最后给出完整的执行流程与 Python 伪代码参考。核心概念NMS的核心思想非常直观面对大量可能指向同一目标的候选框我们只需要保留最佳的那一个并抑制掉其他冗余的框。但需要纠正一个常见的误解NMS的最终结果并不一定是只保留一个候选框。它保留的数量取决于图像中实际存在的独立目标数量。如果图中存在多个互不重叠的目标算法会为每个目标各保留一个最佳候选框。数值计算过程示例假设在图像中的同一个目标上算法生成了4个候选框同时我们对另一个远处目标也生成了一个框预设IoU阈值0.5判定框与框之间是否“高度重叠”的标准输入检测框框置信度坐标格式 [x1, y1, x2, y2]A0.95[0, 0, 100, 100]B0.90[10, 10, 90, 90]C0.85[20, 20, 80, 80]D0.80[200, 200, 300, 300]步骤1按置信度排序将所有候选框按照置信度从高到低排序A(0.95) B(0.90) C(0.85) D(0.80)步骤2迭代选择第1轮取出当前置信度最高的框A并直接将其加入到最终结果集中。最终结果集[A]剩余待处理框B, C, D步骤3计算IoU重叠度IoU即“交并比”计算公式为IoU 交集面积 / 并集面积。框 A 与其余各框的IoU计算A与B的IoU框B完全被框A包含交集面积就是B的面积80 × 80 6400并集面积 框A面积 框B面积 - 交集面积 10000 6400 - 6400 10000IoU 6400 / 10000 0.64A与C的IoU过计算可得交集面积为3600并集面积为14400IoU 3600 / 14400 0.36A与D的IoU两个框距离较远没有交集IoU 0步骤4抑制冗余候选框将计算得到的IoU值与预设阈值0.5进行比较对比项IoU值结论A与B0.64 0.5判定为重复框将B移除抑制A与C0.36 0.5重叠度不高保留CA与D0.00 0.5完全不同的目标保留D经过本轮处理剩余待处理框为C, D步骤5重复迭代第2轮从剩余框中取出置信度最高的C加入最终结果集。最终结果集[A, C]剩余待处理框D计算C与D的IoU由于两个框相距很远IoU 00 0.5因此保留D。剩余待处理框D步骤6重复迭代第3轮取出剩余框中最后的D加入最终结果集。最终结果集[A, C, D]剩余待处理框无最终结论本次NMS操作保留了3个候选框A、C、D。框B由于与最高置信度的框A高度重叠而被成功抑制而框D因为代表不同的目标被正确保留了下来。多类别目标如何处理在实际的目标检测应用中图像中往往包含多个类别的目标。此时的处理方式是在每个类别内部单独循环执行NMS。具体流程为按类别分组将所有候选框根据其预测的类别标签进行分组例如所有“猫”的框在一组所有“狗”的框在另一组。组内执行NMS依次对每个类别组独立执行上述的NMS数值计算过程。合并结果将每个类别组最终保留的框汇总起来作为整体的检测输出。这样做的原因是为了避免跨类别的误抑制。例如一只猫和一只狗紧紧挨着两个框高度重叠。如果不区分类别地全局执行NMS算法会误认为这是同一个目标的重复框从而强行移除其中一个导致漏检。按类别分开处理就可确保高置信度的“猫”框永远不会去抑制属于“狗”类的候选框。完整的执行流程整个目标检测后处理NMS过程的完整流程如下1. 按类别对所有候选框进行分组 2. 对每个类别依次执行 a. 按置信度排序 b. 选择分数最高的框加入结果集 c. 计算该框与其他所有框的IoU d. 移除所有IoU大于预设阈值如0.5的框 e. 重复步骤b-d直至候选框为空 3. 合并所有类别结果输出最终检测结果代码参考NMS的Python伪代码实现如下defnms(bboxes,scores,iou_threshold0.5):# bboxes: 候选框坐标列表形式为[[x1,y1,x2,y2],...]# scores: 对应的置信度列表形式为[score1, score2,...]# 1. 按置信度从大到小排序ordersorted(range(len(scores)),keylambdai:scores[i],reverseTrue)keep[]whileorder:# 2. 取出当前最高分的索引iorder[0]keep.append(i)# 3. 计算当前框与其余所有框的IoUious[compute_iou(bboxes[i],bboxes[j])forjinorder[1:]]# 4. 保留IoU 阈值的框移除IoU 阈值的框order[order[j1]forj,iouinenumerate(ious)ifiouiou_threshold]returnkeep实践中的补充说明IoU阈值通常设为0.4~0.6之间值过高会导致重叠框残留较多值过低则容易误删邻近的不同目标。置信度阈值通常先过滤掉打分过低的候选框如小于0.5减少NMS的计算量。跨类别NMS特定场景下若不同类别在语义上互斥可全局应用NMS以获得更好的性能。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。