非极大值抑制:
- 首先将所有框按照置信度进行排序(bboxs集合);
- 选取bboxs集合中置信度最高的框m,放入集合M中;
- 计算bboxs里所有框和m的IOU,如果IOU大于阈值,则视为重复框,将之除去;
- 重复2、3步。
import numpy as np
def get_IOU(gt, bboxs):
Xmin = np.maximum(gt[0], bboxs[:, 0])
Ymin = np.maximum(gt[1], bboxs[:, 1])
Xmax = np.minimum(gt[2], bboxs[:, 2])
Ymax = np.minimum(gt[3], bboxs[:, 3])
h = np.maximum(0, Xmax-Xmin+1)
w = np.maximum(0, Ymax-Ymin+1)
inters = h*w
uni = (gt[2]-gt[0]+1)*(gt[3]-gt[1]+1)+(bboxs[:, 2]-bboxs[:, 0]+1)*(bboxs[:, 3]-bboxs[:, 1]+1)-inters
iou = inters/uni
return iou
def NMS(bboxs, thresh=0.9):
sorted_ind = np.argsort(-bboxs[:, 4])
bboxs = bboxs[sorted_ind, :] #根据置信度排序
M = np.zeros([1, 5])
l = bboxs.shape[0]
i = 0
while(i<l)