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

2021-10-06 18:35:15 字數 1843 閱讀 8081

在得到目標檢測的候選框後,需要對其及進行後處理操作,用來去掉冗餘的候選框,得到最具代表性的候選框結果,從而加快目標檢測的效率,通常採用的方法是非極大值抑制(nms)的方法。

nms的演算法過程。

首先需要對候選框的同乙個類別的概率做排序:a < b < c < d < e < f

1.首先標記出現的最大概率矩形框f。

2.從最大概率矩形框f開始,分別判斷a~e與f的重疊度iou(兩框的交並比)是否大於某個設定的閾值,假設b、d與f的重疊度超過閾值,那麼就扔掉b、d;

3.從剩下的矩形框a、c、e中,選擇概率最大的e,標記為要保留下來的,然後判斷e與a、c的重疊度,扔掉重疊度超過設定閾值的矩形框。

就這樣一直重複下去,直到剩下的矩形框沒有了,標記完所有要保留下來的矩形框。

# python3

import numpy as np

def py_nms(dets, thresh):

"""pure python nms baseline."""

#x1、y1、x2、y2、以及score賦值

x1 = dets[:, 0]

y1 = dets[:, 1]

x2 = dets[:, 2]

y2 = dets[:, 3]

scores = dets[:, 4]

#每乙個候選框的面積

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

#order是按照score降序排序的

order = scores.argsort()[::-1]

keep =

while order.size > 0:

i = order[0]

#計算當前概率最大矩形框與其他矩形框的相交框的座標,會用到numpy的broadcast機制,得到的是向量

xx1 = np.maximum(x1[i], x1[order[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:]])

#計算相交框的面積,注意矩形框不相交時w或h算出來會是負數,用0代替

w = np.maximum(0.0, xx2 - xx1 + 1)

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

inter = w * h

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

ovr = inter / (areas[i] + areas[order[1:]] - inter)

#找到重疊度不高於閾值的矩形框索引

inds = np.where(ovr <= thresh)[0]

#將order序列更新,由於前面得到的矩形框索引要比矩形框在原order序列中的索引小1,所以要把這個1加回來

order = order[inds + 1]

return keep

# test

if __name__ == "__main__":

dets = np.array([[30, 20, 230, 200, 1],

[50, 50, 260, 220, 0.9],

[210, 30, 420, 5, 0.8],

[430, 280, 460, 360, 0.7]])

thresh = 0.35

keep_dets = py_nms(dets, thresh)

print(keep_dets)

print(dets[keep_dets])

非極大值抑制(NMS)

非極大值抑制 nms 非極大值抑制顧名思義就是抑制不是極大值的元素,搜尋區域性的極大值。這個區域性代表的是乙個鄰域,鄰域有兩個引數可變,一是鄰域的維數,二是鄰域的大小。這裡不討論通用的nms演算法,而是用於在目標檢測中用於提取分數最高的視窗的。例如在行人檢測中,滑動視窗經提取特徵,經分類器分類識別後...

NMS非極大值抑制

非極大值抑制演算法 non maximum suppression for object detection in python 非極大值抑制演算法 nms 非極大值抑制 矩形框融合 nms 卷積網路改進實現 筆記 人臉檢測視窗選擇辦法 nms convnet 開源 如何用soft nms實現目標檢...

非極大值抑制(NMS)

非極大值抑制 nms 非極大值抑制顧名思義就是抑制不是極大值的元素,搜尋區域性的極大值。這個區域性代表的是乙個鄰域,鄰域有兩個引數可變,一是鄰域的維數,二是鄰域的大小。這裡不討論通用的nms演算法,而是用於在目標檢測中用於提取分數最高的視窗的。例如在行人檢測中,滑動視窗經提取特徵,經分類器分類識別後...