本文使用 Zhihu On VSCode 创作并发布
1 NMS
非极大值抑制(Non-Maximum Suppression, NMS)基本思想是搜索局部极大值,对非极大值进行抑制。在目标检测中,在同一位置上可能产生大量的候选框,这些候选框之间可能会有重叠,这时需要利用NMS找到最佳的边界框,对其他的边界框进行抑制。
1.1 算法流程
输入:候选框列表,置信度得分列表,IoU阈值
输出:置信度为极大值的候选框
- 按照置信度对所有候选框进行排序
- 将置信度最高的候选框添加到输出候选框列表中,并将其从输入候选框中删除
- 计算挑选出的候选框与当前所有输入候选框之间的IoU
- 删除IoU大于阈值的输入候选框
- 重复第2-4步,直到输入候选框列表为空
1.2 NMS的缺点
- NMS将IoU高于阈值的候选框的分数置0,如果真实物体在重叠区域出现,那么使用NMS可能会漏检
- 需要手动设置阈值
- 这时一个后处理过程,使用CPU计算,会比较慢
1.3 Python实现
import numpy as np
def nms(dets, threshold):
res_dets = []
if not dets
return res_dets
# 获取边界框和分数
x1 = dets[:, 0]
y1 = dets[:, 1]
x2 = dets[:, 2]
y