目標檢測:nms原始碼解析
原理:選定乙個閾值,例如為0.3,然後將所有3個視窗(bounding box)按照得分由高到低排序。選中得分最高的視窗,遍歷計算剩餘的2視窗與該視窗的iou,如果iou大於閾值0.3,則視窗刪除(保留得分高的視窗),再從剩餘的視窗中選得分最高的,重複該過程,直到所有視窗都被計算過。
1iou的閾值:threshold= 0.7import
cv22
import
numpy as np
3import
random
4def
nms(dets, thresh):
5print
(dets)
6 x1 =dets[:, 0]
7 y1 = dets[:, 1]
8 x2 = dets[:, 2]
9 y2 = dets[:, 3]
10 score = dets[:, 4]11#
x1=3,x2=5,習慣上計算x方向長度就12#
是x=3、4、5這三個畫素,即5-3+1=3,而不是5-3=2,所以需要加1
13 areas = (x2 - x1 + 1) * (y2 - y1 + 1) #
所有box面積
14 order = score.argsort()[::-1] #
得到score降序排列的座標索引
15print("
order
",order)
16 keep =
17while order.size >0:
18 i = order[0] #
最大得分box的座標索引
1920 xx1 = np.maximum(x1[i], x1[order[1:]])
21 yy1 = np.maximum(y1[i], y1[order[1:]])
22 xx2 = np.minimum(x2[i], x2[order[1:]])
23 yy2 = np.minimum(y2[i], y2[order[1:]])24#
最高得分的boax與其他box的公共部分(交集)
25 w = np.maximum(0.0, xx2 - xx1 + 1)
26 h = np.maximum(0.0, yy2 - yy1 + 1) #
求高和寬,並使數值合法化
27 inter = w * h #
其他所有box的面積
28 ovr = inter / (areas[i] + areas[order[1:]] - inter) #
iou:交並比29#
ovr小表示兩個box交集少,可能是另乙個物體的框,故需要保留
30 inds = np.where(ovr <=thresh)[0]
31 order = order[inds + 1] #
iou小於閾值的框
設定thread為0.3
39 rtn_box=nms(dets,0.3) #
0.3為faster-rcnn中配置檔案的預設值
40 cls_dets=dets[rtn_box, :]
41print("
nms box:
", cls_dets)
42 img_cp1=img.copy()
43for box in
cls_dets.tolist():
44 x1,y1,x2,y2,score=int(box[0]),int(box[1]),int(box[2]),int(box[3]),box[-1]
45 y_text=int(random.uniform(y1, y2))
46 cv2.rectangle(img_cp1, (x1,y1), (x2, y2), (0, 255, 255), 2)
47 cv2.puttext(img_cp1, "
car:
"+str(score), (x1,y1), 2,1, (255, 0, 255))
48 cv2.imshow("
nms_img
",img_cp1)49#
cv2.destroyallwindows()#消除所有顯示的圖框
iou的閾值:threshold= 0.3
目標檢測之非極大值抑制
基本思路 從待檢測目標中先按照分類置信度,找乙個最可信的框。然後判斷其他框和它的交並比 iou 如果大於閾值th,說明相似,抑制掉就好了。演算法 按照置信度排序 判斷其他框和得分最高的框的iou,大於閾值則剔除得分較小的建議框 從沒有處理的框中繼續選擇乙個得分最高的,重複上述過程。遍歷所有的建議框,...
目標檢測 非極大值抑制理解
參考 非極大值抑制作用 在目標檢測中,滑動視窗經提取特徵,經分類器分類識別後,每個視窗都會得到乙個分數,但是滑動視窗會導致很多視窗與其他視窗存在包含或者大部分交叉的情況。這時就需要用到非極大值抑制來選取那些鄰域裡分數最高,並且抑制那些分數低的視窗。例如3個框都檢測到同乙個人,只取置信度最高的那個檢測...
目標檢測面試問題非極大值抑制
目標檢查會涉及到檢查效能,所以有的面試官喜歡問一下演算法的問題。非極大值抑制 以目標檢測為例,目標檢測的過程中在同一目標的位置上會產生大量的候選框,這些候選框相互之間可能會有重疊,此時我們需要利用非極大值抑制找到最佳的目標邊界框,消除冗餘的邊界框。如何使用非極大值抑制 前提 目標邊界框列表及其對應的...