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