import numpy as np
def nms(predicts, threshold):
for name, bbox in predicts.items():#對每一個類別分別進行NMS;一次讀取一對鍵值(即某個類別的所有框)
bbox_array = np.array(bbox, dtype=np.float)
#下面分別獲取框的左上角坐標(biāo)(x1,y1),右下角坐標(biāo)(x2,y2)及此框的置信度;這里需要注意的是圖像左上角可以看做坐標(biāo)點(0,0),右下角可以看做坐標(biāo)點(1,1),也就是說從左往右x值增大,從上往下y值增大
x1 = bbox_array[:, 0]
y1 = bbox_array[:, 1]
x2 = bbox_array[:, 2]
y2 = bbox_array[:, 3]
scores = bbox_array[:, 4]
order = scores.argsort()[::-1]#argsort函數(shù)返回的是數(shù)組值從小到大的索引值,[::-1]表示取反。即這里返回的是數(shù)組值從大到小的索引值
areas = (x2 - x1 + 1) * (y2 - y1 + 1)#當(dāng)前類所有框的面積(python會自動使用廣播機制,相當(dāng)于MATLAB中的.*即兩矩陣對應(yīng)元素相乘);x1=3,x2=5,習(xí)慣上計算x方向長度就是x=3、4、5這三個像素,即5-3+1=3,而不是5-3=2,所以需要加1
keep = []
#按confidence從高到低遍歷bbx,移除所有與該矩形框的IoU值大于threshold的矩形框
while order.size > 0:
i = order[0]
keep.append(i)#保留當(dāng)前最大confidence對應(yīng)的bbx索引
#獲取所有與當(dāng)前bbx的交集對應(yīng)的左上角和右下角坐標(biāo),并計算IoU(注意這里是同時計算一個bbx與其他所有bbx的IoU)
xx1 = np.maximum(x1[i], x1[order[1:]])#最大置信度的左上角坐標(biāo)分別與剩余所有的框的左上角坐標(biāo)進行比較,分別保存較大值;因此這里的xx1的維數(shù)應(yīng)該是當(dāng)前類的框的個數(shù)減1
yy1 = np.maximum(y1[i], y1[order[1:]])
xx2 = np.minimum(x2[i], x2[order[1:]])
yy2 = np.minimum(y2[i], y2[order[1:]])
inter = np.maximum(0.0, xx2-xx1+1) * np.maximum(0.0, yy2-yy1+1)
iou = inter / (areas[i] + areas[order[1:]] - inter)#注意這里都是采用廣播機制,同時計算了置信度最高的框與其余框的IoU
inds = np.where(iou <= threshold)[0]#保留iou小于等于闕值的框的索引值
order = order[inds + 1]#將order中的第inds+1處的值重新賦值給order;即更新保留下來的索引,加1是因為因為沒有計算與自身的IOU,所以索引相差1,需要加上
bbox = bbox_array[keep]
predicts_dict[object_name] = bbox.tolist()
#predicts_dict = predicts_dict
return predicts_dict
NMS
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- NMS是one-stage和two-stage目標(biāo)檢測任務(wù)中常用的一種后處理方法,用來過濾無效重疊的檢測框。 NM...
- 1.概述 2.線程 3.程序計數(shù)器 介紹image.png內(nèi)存.png每個線程都有各自私有的pc,存儲當(dāng)前方法jv...
- 代碼鏈接[https://github.com/msracver/Relation-Networks-for-Ob...
- 非極大值抑制(NMS)的幾種實現(xiàn) [https://www.cnblogs.com/king-lps/p/9031...