CNN的各种知识点(四): 非极大值抑制(Non-Maximum Suppression, NMS)
非极大值抑制(Non-Maximum Suppression, NMS)
- 1. 非极大值抑制(Non-Maximum Suppression, NMS)
- 概念:
- 算法步骤:
- 具体例子:
- PyTorch实现:
- 总结:
1. 非极大值抑制(Non-Maximum Suppression, NMS)
概念:
非极大值抑制是目标检测中用于消除冗余检测框的后处理算法。当多个检测框重叠检测到同一物体时,NMS通过保留置信度最高的框,抑制与其高度重叠的其他框来获得最终结果。
算法步骤:
- 将所有检测框按置信度降序排序
- 选取最高置信度的框加入最终结果集
- 计算该框与剩余所有框的IoU(交并比)
- 删除IoU超过阈值的框
- 重复步骤2-4直到所有框处理完毕
具体例子:
假设检测到3个框:
- Box1: (x1,y1,x2,y2)=(10,10,50,50), score=0.9
- Box2: (15,15,55,55), score=0.8
- Box3: (100,100,150,150), score=0.7
设置IoU阈值=0.5:
- 选择Box1(最高分0.9)
- 计算Box1与Box2的IoU≈0.62 > 0.5,删除Box2
- 计算Box1与Box3的IoU=0,保留Box3
最终保留Box1和Box3
PyTorch实现:
import torch
from torchvision.ops import nms
# 输入格式:boxes格式为(x1,y1,x2,y2)
boxes = torch.tensor([[10,10,50,50],
[15,15,55,55],
[100,100,150,150]], dtype=torch.float32)
scores = torch.tensor([0.9, 0.8, 0.7])
# 执行NMS
keep_idx = nms(boxes=boxes,
scores=scores,
iou_threshold=0.5)
print("保留的索引:", keep_idx) # 输出 tensor([0, 2])
总结:
NMS是目标检测中关键的后处理步骤。实际应用中需要注意:
- NMS的IoU阈值需要根据具体任务调整