非極大值抑制

2021-09-29 02:00:11 字數 1856 閱讀 6782

參考

思想:1.將每乙個檢測框的得分值排序,得到得分值最大的檢測框,將該檢測框記錄下來

2.然後其他計算所有的檢測框與該框的iou,將iou大於閾值的檢測框去除,iou小於閾值的認為是不同的目標,則保留

3.對剩下的檢測框繼續做上述的處理

import numpy as np

def py_cpu_nms(dets, thresh):

"""pure python nms baseline."""

#x1、y1、x2、y2、以及score賦值,其中x1,y1是所有的**邊框的左上角座標,x2,y2是所有的**邊框的右下角座標。其中dets[:, 4]是所有的**邊框的得分值(該**框包含該類別目標的概率)

x1 = dets[:, 0]

y1 = dets[:, 1]

x2 = dets[:, 2]

y2 = dets[:, 3]

scores = dets[:, 4]

#得到每乙個**框的面積

areas = (x2 - x1 + 1) * (y2 - y1 + 1)

order = scores.argsort()[::-1]#按照scores的值的大小排序後,各個值在scores中的索引,具體下面會給解釋

keep =

while order.size > 0:

i = order[0]#order[0]是得分最高的邊界框在scores中的索引

xx1 = np.maximum(x1[i], x1[order[1:]])#將x1[order[1:]的每個值分別與x1[i]比較後,返回兩者之中較大的值,並構成列表,下面會有解釋

yy1 = np.maximum(y1[i], y1[order[1:]])

xx2 = np.minimum(x2[i], x2[order[1:]])

yy2 = np.minimum(y2[i], y2[order[1:]])

#依次計算每乙個邊界框與得分最高的邊界框的iou,將iou大於閾值的邊界框去掉

w = np.maximum(0.0, xx2 - xx1 + 1)#0表示沒有交集

h = np.maximum(0.0, yy2 - yy1 + 1)

inter = w * h #計算相交的面積,不重疊時面積為0

#計算iou:重疊面積 /(面積1+面積2-重疊面積)

ovr = inter / (areas[i] + areas[order[1:]] - inter)#計算iou,兩者的並集大小為(面積1+面積2-重疊面積)

inds = np.where(ovr <= thresh)[0]#只有iou小於閾值的被保留下來。np.where返回滿足條件的索引

order = order[inds + 1]#iou小於閾值的被保留下來

return keep

對於乙個類別的非極大值抑制的**:

argsort:

import numpy as np

score = [2,3,5,3,1,10,7,2]

order = np.array(score).argsort()

返回為:array([4, 0, 7, 1, 3, 2, 6, 5])

np.maximum(5,[10,4,3,9,8])

返回為:array([10,  5,  5,  9,  8])

np.where:

ovr=[3,4,5,6,1,2,9,7,6]

np.where(np.array(ovr)<5)

out[16]: (array([0, 1, 4, 5]),)

np.array(ovr)[index[0]]

out[22]: array([3, 4, 1, 2])

非極大值抑制

nms non maximum suppression 中文名非極大值抑制,在很多計算機視覺任務中都有廣泛應用,如 邊緣檢測 目標檢測等。這裡主要以人臉檢測中的應用為例,來說明nms,並給出matlab和c 示例程式。人臉檢測的一些概念 1 絕大部分人臉檢測器的核心是分類器,即給定乙個尺寸固定,分類...

非極大值抑制

在進行目標檢測的時候,當多個方框都 到同乙個目標的時候,我們需要去除iou小的方框,原始碼如下 def nms boxes,threshold,method union param boxes n,9 x1,y1,x2,y2,score,offset x1,offset y1,offset x2,o...

非極大值抑制 非極大值抑制NMS的python實現

首先資料賦值和計算對應矩形框的面積 arr的資料格式是arr xmin,ymin,xmax,ymax,scores x1 arr 0 y1 arr 1 x2 arr 2 y2 arr 3 score arr 4 所有矩形框的面積 areas x2 x1 1 y2 y1 1 取出分數從大到小排列的索引...