非极大值抑制(NMS)及其变体详解
创作时间:
作者:
@小白创作中心
非极大值抑制(NMS)及其变体详解
引用
CSDN
1.
https://blog.csdn.net/2401_89898861/article/details/145911797
非极大值抑制(NMS)是目标检测算法中的关键步骤,用于去除冗余预测框并保留高置信度的预测结果。本文将详细介绍NMS的基本原理、步骤以及具体实现方法。
非极大值抑制(NMS)及其变体
非极大值抑制(Non-Maximum Suppression, NMS)是目标检测算法中一个非常关键的步骤,常用于去除冗余的预测框,并且保留具有最高置信度的预测框。它通过抑制那些与其他框重叠度较高的低置信度框,来确保最终输出的框是最优的。
1. NMS(Non-Maximum Suppression)的定义
NMS 的基本思想是:对于每个目标类别的所有预测框,首先根据置信度对预测框进行排序,然后选出置信度最高的框,接着去掉与这个框重叠度(IoU)较高的框,最后继续选出下一个置信度最高的框,重复此过程,直到所有预测框都处理完。
NMS 的步骤
- 排序:根据框的置信度对预测框进行排序,从置信度最高的框开始。
- 选择:选择排序后的第一个框作为最终结果。
- 计算 IOU(Intersection over Union):计算当前框与所有其他框的 IOU 值。
- 抑制:如果当前框与其他框的 IOU 大于预设的阈值,则抑制该框(即删除)。
- 重复:重复上述步骤,直到所有框都被处理完。
NMS 算法公式
IoU (Intersection over Union):用于衡量两个矩形框的重叠度。公式如下:
其中:
- Area of Intersection:两个框交集区域的面积。
- Area of Union:两个框并集区域的面积。
- 置信度:每个框都有一个置信度分数,代表该框是目标的可能性。
标准 NMS 伪代码
def nms(boxes, scores, iou_threshold):
"""
:param boxes: 一个形状为 [N, 4] 的 numpy 数组,表示 N 个边界框 [x1, y1, x2, y2]。
:param scores: 一个形状为 [N] 的 numpy 数组,表示每个框的置信度。
:param iou_threshold: IoU 阈值,决定是否去除一个框。
:return: 保留的边界框索引。
"""
# 对预测框按置信度排序
idxs = np.argsort(scores)[::-1] # 降序排序,返回索引
selected_boxes = []
while len(idxs) > 0:
# 选择置信度最高的框
current_idx = idxs[0]
selected_boxes.append(current_idx)
# 计算剩余框与当前框的 IoU
ious = compute_iou(boxes[current_idx], boxes[idxs[1:]])
# 去除与当前框 IoU 大于阈值的框
remaining_idx = np.where(ious <= iou_threshold)[0]
# 更新索引
idxs = idxs[remaining_idx + 1]
return selected_boxes
def compute_iou(box1, boxes):
"""
计算单个框与多个框的 IoU
:param box1: 单个框 [x1, y1, x2, y2]
:param boxes: 多个框的列表 [[x1, y1, x2, y2], ...]
:return: IoU 数组
"""
x1 = np.maximum(box1[0], boxes[:, 0])
y1 = np.maximum(box1[1], boxes[:, 1])
x2 = np.minimum(box1[2], boxes[:, 2])
y2 = np.minimum(box1[3], boxes[:, 3])
inter_area = np.maximum(0, x2 - x1) * np.maximum(0, y2 - y1)
box1_area = (box1[2] - box1[0]) * (box1[3] - box1[1])
boxes_area = (boxes[:, 2] - boxes[:, 0]) * (boxes[:, 3] - boxes[:, 1])
union_area = box1_area + boxes_area - inter_area
iou = inter_area / union_area
return iou
代码说明
nms:该函数实现了标准的非极大值抑制算法。它接收预测框boxes、对应的置信度scores以及 IoU 阈值iou_threshold。最终返回保留的框的索引。compute_iou:计算一个框与多个框之间的 IoU。
热门推荐
营养师姚小谦教你7个科学减脂小技巧
台儿庄古城:必打卡美食+住宿攻略
心脏室性早搏的危害
五种鲤鱼做法大比拼,总有一款适合你
秋冬养生新宠:鲤鱼的营养大揭秘
双十一买鲤鱼?这些挑选技巧你必须知道!
顺德美食大揭秘:清蒸排骨&焖鹅的做法分享!
顺德美食文化节:从“世界美食之都”到“网红打卡圣地”
火车站、机场“丝滑转场” “空铁联运” 如何实现飞机火车无缝衔接?
你的家庭存款规划,真的科学吗?
2025年存款新趋势:大额存单让你的钱生钱
2025年冬季靴子穿搭指南:如何把裤子扎进靴子里
酒驾酿成家庭悲剧,我们该如何避免?
元宇宙里的心理疗愈新趋势:VR技术大显身手
震撼与感动!一同走进江西非遗里的世界
肺纤维灶≠肺纤维化,不是网上所说的不是肺癌的肺癌
武汉今迎小雨降温,出行注意安全!
上海迪士尼实施实名制购票:打击黄牛,优化游客体验
乐福鞋搭配袜子指南:从船袜到中筒袜,经典搭配方式探索!
VR技术革新呼吸训练体验
《自然》子刊:家中常见化合物正在毒害下一代
清华AI突破:虚拟学生华智冰惊艳亮相,实现人脸识别与弹唱表演双重技能
15首经典校园歌曲推荐,哪一首唱出了你的青春?
外焦里嫩😍自制广式蜜汁叉烧
肉食爱好者的福音,深扒秘制叉烧的下饭做法,改善贫血,滋补解馋
日式叉烧|拉面叉烧肉在家自己做!新手也会的日式叉烧做法大公开!
高考考生如何用心理学技巧调整作息?
舒筋活血片的副作用和危害
更年期失眠怎么办?试试中医“绿色”疗法
生态修复、治沙治水成效显著 青海湖更大了更美了