NMS實現方法

2021-10-08 17:34:15 字數 2502 閱讀 6141

想要做nms的優化所以·了解一下nms**。原理不說了太簡單直接講**。

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

"""created on mon may 7 21:45:37 2018

@author: lps

"""import numpy as np

boxes=np.array([[

100,

100,

210,

210,

0.72],

[250

,250

,420

,420

,0.8],

[220

,220

,320

,330

,0.92],

[100

,100

,210

,210

,0.72],

[230

,240

,325

,330

,0.81],

[220

,230

,315

,340

,0.9]]

)#【文字框樣本,格式:【x1,y1,x2,y2,scoer】】

defpy_cpu_nms

(dets, thresh)

:# dets:(m,5) thresh:scaler

x1 = dets[:,

0]y1 = dets[:,

1]x2 = dets[:,

2]y2 = dets[:,

3]#取出座標

areas =

(y2-y1+1)

*(x2-x1+1)

#計算面積

scores = dets[:,

4]#取出分數

keep =

index = scores.argsort()[

::-1

]#.argsort()是從小到大排列,這整體為取出最大分數的座標

while index.size >0:

i = index[0]

# 取出最大的,加到keep裡

x11 = np.maximum(x1[i]

, x1[index[1:

]])# 計算有多少點是重複的為計算重合率做準備, np.maximum為取比較大的。所以可以算出重合的。

y11 = np.maximum(y1[i]

, y1[index[1:

]]) x22 = np.minimum(x2[i]

, x2[index[1:

]]) y22 = np.minimum(y2[i]

, y2[index[1:

]])

w = np.maximum(

0, x22-x11+1)

# 最大和最小座標相減,是重合部分的寬

h = np.maximum(

0, y22-y11+1)

# 最大和最小座標相減,是重合部分的長

overlaps = w*h#重疊部分面積

ious = overlaps /

(areas[i]

+areas[index[1:

]]- overlaps)

#計算iou

idx = np.where(ious<=thresh)[0

]## np.where(condition)輸出符合條件的thresh應該是閾值

index = index[idx+1]

# because index start from 1

return keep

import matplotlib.pyplot as plt

defplot_bbox

(dets, c=

'k')

:

x1 = dets[:,

0]y1 = dets[:,

1]x2 = dets[:,

2]y2 = dets[:,

3]plt.plot(

[x1,x2]

,[y1,y1]

, c)

plt.plot(

[x1,x1]

,[y1,y2]

, c)

plt.plot(

[x1,x2]

,[y2,y2]

, c)

plt.plot(

[x2,x2]

,[y1,y2]

, c)

plt.title(

"after nms")

plot_bbox(boxes,

'k')

# before nms

keep = py_cpu_nms(boxes, thresh=

0.7)

plot_bbox(boxes[keep]

,'r'

)# after nms

實現NMS演算法

python3 import numpy as np defpy 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 ...

NMS演算法實現

nms演算法 非極大值抑制 是目標檢測演算法中經典的後處理步驟,其本質是搜尋區域性最大值,抑制非極大值元素。主要利用目標檢測框以及對應的置信度分數,設定一定的閾值來刪除重疊較大的邊界框。其演算法流程如下 根據置信度得分進行排序 選擇置信度最高的目標檢測框新增到輸出列表中,將其從檢測框列表中刪除 計算...

NMS 卷積網路改進實現

未完待續 nms,非極大值抑制,在很多計算機視覺問題中有著重要應用,尤其是目標檢測領域。以人臉檢測為例,通常的流程為3步 1 通過滑動視窗或者其它的object proposals方法產生大量的候選視窗 2 用訓練好的分類器對候選視窗進行分類,該過程可以看做是乙個打分的過程 3 使用nms對上面的檢...