基本思路:從待檢測目標中先按照分類置信度,找乙個最可信的框。然後判斷其他框和它的交並比(iou),如果大於閾值th,說明相似,抑制掉就好了。
演算法:1.按照置信度排序 2.判斷其他框和得分最高的框的iou,大於閾值則剔除得分較小的建議框 3.從沒有處理的框中繼續選擇乙個得分最高的,重複上述過程。 4.遍歷所有的建議框,即所有物體種類都做一遍非極大值抑制。
注意在faster rcnn中有兩個閾值0.7,第一次是判斷正負樣本的時候,大於0.7標為正樣本,小於0.3為負樣本(背景),中間的樣本捨棄。 第二個是在nms中,用來判斷和得分最高框的相似度,剔除相似樣本。
1.區域性最大搜尋
目標檢測問題的老大難問題之一就是如何提高召回率(所有標註的真實邊界框有多少被**出來了)。
這就導致最後輸出的邊界框數量往往遠大於實際數量,而這些模型的輸出邊界框往往是堆疊在一起的。因此,我們需要nms從堆疊的邊框中挑出最好的那個。
2.何時使用nms? when nms?
回顧我在r-cnn中提到的流程:
提議區域(選擇性搜尋)
提取特徵
目標分類
回歸邊框
nms使用在4. 回歸邊框之後,即所有的框已經被分類且精修了位置。且所有區域提議的**結果已經由置信度與閾值初步篩選之後。
一維簡單例子
由於重點是二維(目標檢測)的實現,因此一維只放出偽**便於理解。
判斷一維陣列i[w]的元素i[i](2<=i<=w-1)是否為區域性極大值,即大於其左鄰元素i[i-1]和右鄰元素i[i+1]
演算法流程如下圖所示:
演算法流程3-5行判斷當前元素是否大於其左鄰與右鄰元素,如符合條件,該元素即為極大值點。對於極大值點i[i],已知i[i]>i[i+1],故無需對i+1位置元素做進一步處理,直接跳至i+2位置,對應演算法流程第12行。
若元素i[i]不滿足演算法流程第3行判斷條件,將其右鄰i[i+1]作為極大值候選,對應演算法流程第7行。採用單調遞增的方式向右查詢,直至找到滿足i[i]>i[i+1]的元素,若i<=w-1,該點即為極大值點,對應演算法流程第10-11行。
推廣至目標檢測
首先,根據之前分析確認nms的前提,輸入與輸出。
使用前提
目標檢測模型已經完成了整個前向計算,並給出所有可能的邊界框(位置已精修)。
演算法輸入
演算法對一幅圖產生的所有的候選框,每個框有座標與對應的打分(置信度)。
如一組5維陣列:
注意:每次輸入的不是一張圖所有的邊框,而是一張圖中屬於某個類的所有邊框(因此極端情況下,若所有框的都被判斷為背景類,則nms不執行;反之若存在物體類邊框,那麼有多少類物體則分別執行多少次nms)。
除此之外還有乙個自行設定的引數:閾值 th。
演算法輸出
輸入的乙個子集,同樣是一組5維陣列,表示篩選後的邊界框。
演算法流程
**實現及參考:
目標檢測 非極大值抑制理解
參考 非極大值抑制作用 在目標檢測中,滑動視窗經提取特徵,經分類器分類識別後,每個視窗都會得到乙個分數,但是滑動視窗會導致很多視窗與其他視窗存在包含或者大部分交叉的情況。這時就需要用到非極大值抑制來選取那些鄰域裡分數最高,並且抑制那些分數低的視窗。例如3個框都檢測到同乙個人,只取置信度最高的那個檢測...
目標檢測面試問題非極大值抑制
目標檢查會涉及到檢查效能,所以有的面試官喜歡問一下演算法的問題。非極大值抑制 以目標檢測為例,目標檢測的過程中在同一目標的位置上會產生大量的候選框,這些候選框相互之間可能會有重疊,此時我們需要利用非極大值抑制找到最佳的目標邊界框,消除冗餘的邊界框。如何使用非極大值抑制 前提 目標邊界框列表及其對應的...
非極大值抑制
nms non maximum suppression 中文名非極大值抑制,在很多計算機視覺任務中都有廣泛應用,如 邊緣檢測 目標檢測等。這裡主要以人臉檢測中的應用為例,來說明nms,並給出matlab和c 示例程式。人臉檢測的一些概念 1 絕大部分人臉檢測器的核心是分類器,即給定乙個尺寸固定,分類...