NMS

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
最后編輯于
?著作權(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ù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容