NMS—卷積神經網絡


1-傳統的NMS

NMS,非極大值抑制,在很多計算機視覺問題中有着重要應用,尤其是目標檢測領域。

以人臉檢測為例,通常的流程為3步:

(1)通過滑動窗口或者其它的object proposals方法產生大量的候選窗口;

(2)用訓練好的分類器對候選窗口進行分類,該過程可以看做是一個打分的過程;

(3)使用NMS對上面的檢測結果進行融合(因為一個目標可能被檢測出多個窗口,而我們只希望保留一個)。

如下圖是(2)分類檢測之后的結果: 

以此圖為例,傳統的NMS,首先選定一個IOU閾值,例如為0.25。然后將所有4個窗口(bounding box)按照得分由高到低排序。然后選中得分最高的窗口,遍歷計算剩余的3個窗口與該窗口的重疊面積比例(IOU),如果IOU大於閾值0.25,則將窗口刪除。然后,再從剩余的窗口中選中一個得分最高的,重復上述過程。直至所有窗口都被處理。

假如0.25是一個不錯的閾值,那么我們可以得到比較好的結果,如下圖:

如果,我們的IOU閾值設定的特別小,比如說0.1。那么2個人的窗口會被歸為一個人而被融合。得到下面的錯誤結果:

如果,我們的IOU閾值設定的特別大,比如說0.6。那么又可能得到下面的錯誤結果: 
 

由上可知,對於傳統的NMS算法選擇一個好的閾值是多么重要的一件事,但又是一件很困難的事。傳統的NMS是一種硬判決,是一種貪心算法。因此在文章中,作者稱傳統的NMS算法為:GreedyNMS

2-NMS-ConvNet

再提及一下,傳統的NMS在判決融合的時候,只利用到了2個信息:Score 和 IOU ,即每個框的得分和框與框之間的重疊比例。

文章用神經網絡去實現NMS,所利用的同樣也是這2個信息。如下圖的整個流程圖: 

 

由網絡結構圖中的紅色框可以得到,輸入data層有2個,一個是Score map,一個是 Iou layer.下面我們講述一下,如何由最初的bounding box去得到這兩個data層。

2-1 映射——制作score map

假定原圖像尺寸為W×H,那么我們要制作的score map大小為w×h,其中w=W/4, h=H/4,則score map上的一個點對應着原圖的4×4的區域: 

對於一個bounding box ,我們計算其中心然后判斷其屬於哪個區域,然后將該box的score填入score map對應的位置。如下圖: 

如果有多個bounding box的中心落入同一區域,則只記錄最高得分。

到此,我們已經得到了w×h×1的score map.

文章提到,傳統的NMS需要排序,但在卷積神經網絡中,很難用各種線性組合和非線性激活去模擬排序。因此,文章先用傳統的NMS處理一遍bounding boxes, 然后再生成一張同樣大小的score map,記作S(T),T為NMS的閾值。

最終,我們得到了w×h×2的score map. 記作S(1,T)

2-2 制作IOU層

IOU,intersection-over-union。因此IOU層描述的也就是bounding box之間的相交關系。

IOU層大小為w×h×121,其中121=11×11,即描述的是相應中心點11×11范圍內存在的box的相交關系。 
如下圖所舉出的例子,左側的圖是score map S(1),粉色表明有值,則每個粉色處也對應着一個bounding box。以紅色為中心划一個11×11的范圍,則可以依次計算每一個位置對應的box與中心點對應box的IOU,其值記作I,如右側所示。 同理,易知 I(7,8,i)一定為0。

2-3 網絡解析

我們再來看一下網絡結構: 

注意2點:

(1): IOU層的kernel size 為1,stride也為1。 
Score map層的kernel size 為11×11,這是為了呼應IOU層;stride 為1 ,pad 為5,這是為了獲得和輸入同樣尺寸的輸出:

(2): Layer 2將之前的2個輸出拼接,之后所有的卷積都是1×1。最終的輸出仍然是一個尺寸一致的score map .

2-4 輸出及Loss

理想的輸出是一個同輸入尺寸完全一致的score map 圖,在該圖中,每一個目標只擁有一個score,相應地也只對應了一個bounding box。

因此訓練的目標就是保留一個,抑制其它。如下圖: 

(1)上圖a的score map 是我們的輸入,由圖易知,這里面一共有5個有效的score,則也對應着5個bounding box。

(2) 假設5個bounding box都是同一個目標的檢測結果。則我們的訓練目的則是保留最好的一個,抑制其余4個。 
為此,我們首先分配標簽:5個bounding box 中滿足與ground truth 的IOU大於0.5且得分最高的box作為正樣本,其余均為負樣本,如上圖b所示。

(3)顯然正負樣本的數量嚴重不均衡,因此計算loss之前,我們要分配一下權重用於權衡這種失衡。權重的分配很簡單,如圖c所示,正樣本的權重總和與負樣本的權重總和相等。

(4)上右側的圖為理想的輸出。綜上,我們的Loss Function就可以很容易得出了(類似於pixel級別的分類): 

其中,p屬於G,表示score map 中有值的點。

 

文章轉自: https://blog.csdn.net/shuzfan/article/details/50371990


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM