一維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演算法,而是用於在目標檢測中用於提取分數最高的視窗的。例如在行人檢測中,滑動視窗經提取特徵,經分類器分類識別後...