我已按照以下方式实施NMS并遇到了运行时问题。该算法在最坏情况下的时间复杂度为O(N^2)
。
有没有办法更快地做到这一点?我有100,000-200,000
个呼叫的数据帧
def NMS(df,K=0.6):
all_boxes = []
for _,row in df.iterrows():
all_boxes.append(Box(row.x1,row.y1,row.x2,row.y2,row.probability))
all_boxes.sort(key=lambda x: x.prob, reverse=True)
N=len(all_boxes)
B=[i for i in range(N)]
D=[]
while len(B)>0:
highest_box_idx = B.pop(0)
highest_box = all_boxes[highest_box_idx]
D.append(highest_box_idx)
for b_idx in B:
other_box = all_boxes[b_idx]
if highest_box.IoU(other_box)>K:
B.remove(b_idx)
return df.iloc[D,:]
答案 0 :(得分:0)