非極大值抑制 NMS

2021-10-03 15:05:23 字數 2016 閱讀 2053

一維nms**幫助理解

# 非極大值抑制

"""3鄰域內,如果是最大的就輸出索引 且跳轉到i+2

如果不是則繼續向前爬動,直到當前的大於下乙個(且不超出列表長度)

"""a =[1

,2,2

,3,2

,1,1

,4,5

,6,6

,3,5

]len_a =

len(a)

i =1

# 開始點

maxidx =

while i < len_a -1:

if a[i]

> a[i +1]

:if a[i]

>= a[i -1]

:else

:# a[i] < a[i+1]

i +=

1# 先跳乙個格試探一下 不加也沒關係

while i < len_a -

1and a[i]

<= a[i +1]

:# 向前爬 條件位置不能互換

i +=

1if i < len_a:

# 這時候 a[i] > a[i+1] && a[i] < a[i+1]

i +=

2# 跳兩格

print

(maxidx)

給出處理結果:

可見,非極大值資料被設定為0

iou準則的nms應用 yolo場景

簡單來講,對於bbox的nms,只是把每個bbox對應的類別置信度排序後,放到上面的列表裡面去,根據置信度大小,計算相對iou,進行一維nms.如果與區域性極大置信度所對應的bbox求iou>0.5,就捨棄這個bbox,作為結果,其置信度被設定為0,否則保留當前bbox對應的類別置信度.

參考乙個ppt[3]

(1)將所有的bbox對應的類別置信度進行排序.因為yolo裡面乙個邊框對應乙個唯一的類別置信度,可以一對一對映.如下如

(2)執行nms,每次執行都有兩種情況.

a. 與被比較的區域性極大值對應的bbox iou>0.5 (這個0.5是超引數,可以調節)

b. 與被比較的區域性極大值對應的bbox iou<0.5

對於情況a,反過來把當前置信度設定為0

對於情況b,保持當前置信度不變.

下圖可見,置信度排名第二的非零bbox與排名第一的bbox之間iou>0.5,此時反過來把這個置信度設定為0.此處要強調非零或者小於某乙個閾值,是為了減少iou計算量.如果**器本來就認為這裡沒有什麼東西,那就不需要計算iou了,置信度保持為0不變.

下圖表明把這個置信度設定為0

還是在這個鄰域裡面,下圖表明iou小於設定閾值的情況,置信度不變

(4)如果置信度大於零,就繪製bbox,否則跳過這乙個bbox!

參考[1]

[2] 影象中的nms

[3]2020.0713更新

本節給出了淺顯易懂的nms**實現,並通過yolo nms案例理解在目標檢測bbox過濾中的應用.

非極大值抑制(NMS)

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

NMS非極大值抑制

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

非極大值抑制(NMS)

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