1. NMS原理深度解析
非极大值抑制(Non-Maximum Suppression,简称NMS)是计算机视觉目标检测中的核心后处理算法。它的核心使命很简单:从一堆重叠的候选框中筛选出最可能代表真实目标的少数几个框。想象你在玩抓娃娃机,爪子每次下落后可能抓到多个位置相近的娃娃,NMS就是帮你选出最有价值的那个。
1.1 交并比(IoU)的数学本质
IoU(Intersection over Union)是NMS判断框重叠程度的黄金标准。计算公式为两个框的交集面积除以并集面积。假设框A和框B的坐标分别为(x1,y1,x2,y2)和(x3,y3,x4,y4),则:
python复制def calculate_iou(boxA, boxB):
# 确定相交区域的坐标
xA = max(boxA[0], boxB[0])
yA = max(boxA[1], boxB[1])
xB = min(boxA[2], boxB[2])
yB = min(boxA[3], boxB[3])
# 计算相交区域面积
interArea = max(0, xB - xA + 1) * max(0, yB - yA + 1)
# 计算各自面积
boxAArea = (boxA[2] - boxA[0] + 1) * (boxA[3] - boxA[1] + 1)
boxBArea = (boxB[2] - boxB[0] + 1) * (boxB[3] - boxB[1] + 1)
# 计算并集面积
unionArea = boxAArea + boxBArea - interArea
# 计算IoU
iou = interArea / unionArea
return iou
注意:+1操作是为了处理像素级别的坐标计算,确保边界情况下的准确性。实际应用中根据坐标表示方式(中心点+宽高或对角坐标)可能需要调整。
1.2 NMS的算法流程拆解
标准NMS的工作流程就像一场淘汰赛:
- 置信度排序:将所有检测框按置信度从高到低排序。置信度代表模型认为框内存在目标的可信程度。
