非極大值抑制的計算方式

2021-09-20 07:12:30 字數 2392 閱讀 7482

最近一直在研究目標檢測的演算法,其中有個很重要的概念叫做非極大值抑制(non-maximum suppression),其主要目的是為了消除多餘的框,找到最佳的物體檢測的位置。如定位乙個車輛,最後演算法就找出了一堆的方框,我們需要判別哪些矩形框是沒用的。非極大值抑制:先假設有6個矩形框,根據分類器類別分類概率做排序,從小到大分別屬於車輛的概率分別為a、b、c、d、e、f。

(1)從最大概率矩形框f開始,分別判斷a~e與f的重疊度iou是否大於某個設定的閾值;

(2)假設b、d與f的重疊度超過閾值,那麼就扔掉b、d;並標記第乙個矩形框f,是我們保留下來的。

(3)從剩下的矩形框a、c、e中,選擇概率最大的e,然後判斷e與a、c的重疊度,重疊度大於一定的閾值,那麼就扔掉;並標記e是我們保留下來的第二個矩形框。就這樣一直重複,找到所有被保留下來的矩形框。

給定boxes的座標(左上角,右下角)boxes = np.array([[1, 2, 3, 4], [1, 3, 3, 4], [1, 3, 4, 4], [1, 1, 4, 4], [1, 1, 3, 4]])

以及每個boxes的置信度scores = np.array([0.4, 0.5, 0.72, 0.9, 0.45], dtype=np.float32)

1、首先繪製圖形的座標如下所示意

選取置信度最大的0.9的邊框(1, 1, 4, 4)那麼我們可以得到他們的iou如下所示,此時剔除掉iou > 0.5的值即是boxes[4],此時先輸出第乙個邊框boxes[3]。剩下的邊框是boxes[0],boxes[1],boxes[2]

2、繪製剩下的boxes的座標

此時剩下的boxes中置信度最高的事boxes[2]的0.72,以此以框來計算iou,此時剔除掉iou > 0.5的值即是boxes[1],此時輸出第二個邊框boxes[2]。剩下的邊框是boxes[0],到此就結束了,如果有更多的邊框就依次計算下去。

回顧一下,通過非極大值抑制

boxes = np.array([[1, 2, 3, 4], [1, 3, 3, 4], [1, 3, 4, 4], [1, 1, 4, 4], [1, 1, 3, 4]])

scores = np.array([0.4, 0.5, 0.72, 0.9, 0.45], dtype=np.float32)

輸出最後的邊框的是boxes[3],boxes[2],boxes[0]

[[1 1 4 4],[1 3 4 4],[1 2 3 4]]

上面的方法其實實現起來也很簡單,只不過框架已經幫我們實現了,下面就是呼叫的例子

import tensorflow as tf

import numpy as np

boxes = np.array([[

1,2,

3,4]

,[1,

3,3,

4],[

1,3,

4,4]

,[1,

1,4,

4],[

1,1,

3,4]

])scores = np.array(

[0.4

,0.5

,0.72

,0.9

,0.45

], dtype=np.float32)

with tf.session(

)as sess:

nn = tf.image.non_max_suppression(boxes, scores, max_output_size=

10,iou_threshold=

0.5)

ss = sess.run(nn)

kk = tf.gather(boxes, ss)

sb = sess.run(kk)

print

('索引 = 'ss)

print

('座標 = 'sb)

#### 輸出:

#### 索引 = [3 2 0]

#### 座標 = [[1 1 4 4]

#### [1 3 4 4]

#### [1 2 3 4]]

非極大值抑制 非極大值抑制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 取出分數從大到小排列的索引...

非極大值抑制

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

非極大值抑制

參考 思想 1.將每乙個檢測框的得分值排序,得到得分值最大的檢測框,將該檢測框記錄下來 2.然後其他計算所有的檢測框與該框的iou,將iou大於閾值的檢測框去除,iou小於閾值的認為是不同的目標,則保留 3.對剩下的檢測框繼續做上述的處理 import numpy as np def py cpu ...