nms函数实现
import numpy as np
def nms(boxes,threshold=0.5,mode = 'union'):
if len(boxes)==0:
return []
pick = []
x1,y1,x2,y2,score = [boxes[:,i] for i in range(5)]
area = (x2-x1+1.0)*(y2-y1+1.0)
id = np.argsort(score)
while len(id)>0:
last = len(id)-1
i = id[last]
pick.append(i)
minx2 = np.minimum(x2[i],x2[:last])
miny2 = np.minimum(y2[i],y2[:last])
maxx1 = np.maximum(x1[i],x1[:last])
maxy1 = np.maximum(y1[i],y1[:last])
w = np.maximum(0.0,minx2-maxx1+1.0)
h = np.maximum(0.0,miny2-maxy1+1.0)
inter = w*h
if mode == 'min':
overlop = inter/np.minimum(area[i],area[id[:last]])
elif mode=='union':
overlop = inter/[area[i]+area[id[:last]]-inter]
id = np.delete(id,np.concatenate([last],np.where(overlop>threshold)))
return pick