非极大值抑制python代码
时间: 2024-06-11 15:03:14 浏览: 108
非极大值抑制(NMS)在Python中通常用于对象检测(如行人检测、物体识别)中,以减少重复检测。这里是一个简单的实现示例[^1]:
```python
def non_max_suppression(boxes, scores, threshold):
"""
boxes: 检测框的坐标,通常是边界框的左上角和右下角坐标,形状为(N, 4)
scores: 对应每个检测框的置信度分数
threshold: 抑制阈值
"""
indices = scores.argsort()[::-1] # 按得分降序排列
suppressed = set() # 已经抑制的框的索引
result = []
for i in indices:
if i not in suppressed: # 如果当前框未被抑制
result.append((boxes[i], scores[i])) # 添加到结果
for j in range(i+1, len(indices)): # 遍历后续框
if IoU(boxes[i], boxes[j]) > threshold: # 计算IoU(交并比)
suppressed.add(j) # 如果IoU大于阈值,抑制后续框
return result
# 假设IoU函数已定义
def IoU(box1, box2):
# 计算两个矩形的IoU
pass
```
在这个代码中,`IoU`函数用于计算两个矩形的交并比(Intersection over Union),这是NMS的核心部分。如果一个框与另一个框的IoU大于给定的阈值,那么后者就被认为是非极大值,会被抑制。
阅读全文