1. 程式人生 > >【論文筆記】人臉檢測視窗選擇辦法 NMS convnet

【論文筆記】人臉檢測視窗選擇辦法 NMS convnet

A brief introduction of NMS for object detection

NMS,即Non-maximum suppression,非極大值抑制,在object dection中應用非常廣泛,簡單地說,他就是對一些region proposals(物體的候選框)進行篩選,得到最佳的物體檢測位置。
這裡寫圖片描述
如上圖所示,在做人臉檢測時我們可能會得到多個人臉的候選框,但是其實這些框完全可以進行“合併”,得到一個人臉的框框。這個“合併”的策略就是NMS。NMS主要有兩個指標來進行合併:
1.score:對於每一個proposal,分類器會給出一個score來表示當前候選框的置信度,儘量保留置信度較高的候選框
2.IoU(Intersection-over Union):重疊面積,位置鄰近的候選框重疊面積大於一定閾值的話則進行合併

所以NMS的實現是:
1. NMS計算出每一個bounding box的面積,然後根據score進行排序。
2. 計算其餘bounding box與當前最大score的box的IoU,去除IoU大於設定的閾值的bounding box。
3. 重複上面的過程,直至候選bounding box為空。
需要注意的是:NMS一次處理一個類別,如果有N個類別,NMS就需要執行N次。

NMS的缺點:
NMS的合併策略是一種較貪婪的方法,在平衡精度和召回率時會有問題。例如出現兩個人臉靠得很近的情況,我們首先得到了許多紅色的region proposal,然後用NMS來篩選候選框。
這裡寫圖片描述
假設我們能設定一個合適的閾值,那麼兩個人臉可以被兩個框分別框住。
這裡寫圖片描述


如果我們將IoU閾值設定得高一些,也就是說合並相對困難,則會出現下圖(a)的篩選結果,說明非極大值抑制得不夠充分;那麼我們將IoU閾值設定得低一些,合併相對容易,就會得到下圖(b)的結果,也就是說多個ture positive被merge到了一起。
這裡寫圖片描述

Convnet for NMS

2.1 Overview

傳統的NMS在判決融合的時候,只利用到了2個資訊:Score 和 IOU ,即每個框的得分和框與框之間的重疊比例。
文章用神經網路去實現NMS,所利用的同樣也是這2個資訊。如下圖的整個流程圖:
這裡寫圖片描述

2.2 Score map的生成

假設我們的圖片是W*H的,在這裡我們以16*16大小的圖片為例,我們對他生成w*h大小的score map,其中w=W/4,h=H/4,也就是說score map上的一個點對應原圖中4*4的區域。然後假設我們得到了一個物體的bounding box,其置信度為0.8,我們將其中心點的位置記錄在score map中,因為他的中心點落在第(3,2)個score map區域中,因此該區域置信度為0.8;接著我們又得到一個新的bounding box,其置信度為0.9,且中心點也落在了(3,2)的區域,根據NMS保留大置信度的特點,我們對該區域的置信度進行更新,也就是說(3,2)這個區域的置信度變成了0.9。注意在更新置信度的時候,我們也保留了原始bounding box的原始位置資訊,以便最終的索引。
這裡寫圖片描述


到此,我們已經得到了w×h×1的score map.
文章提到,卷積神經網路的線性操作和relu無法模仿NMS中對score進行排序的操作, 因此,文章先用傳統的NMS處理一遍bounding boxes, 然後再生成一張同樣大小的score map,記作S(T),T為NMS的閾值。
最終,我們得到了w×h×2的score map. 記作S(1,T)

2.3 IoU layer

NMS的另一個重要概念是通過重疊面積來篩選候選框。這一步在convnet中是這麼做的:對於score map上的每個點,我們已經記錄了其是否包含bounding box以及該box的置信度。那麼我們以每個點為中心,選取其11*11的領域,計算這121個點儲存的bounding box與中心點的IoU,然後儲存成121維的向量用於描述該點的IoU特性。例如,以下圖這個15*15的score map為例,對於(7,7)這個點來說,我們取其11*11的鄰域,然後計算鄰域中每個點所包含的bounding box和(7,7)的bounding box的IoU,比如領域中左上角第一個點不包含bounding box,則特徵I(7,7,1)=0,第二個點包含了bounding box(圖中有顏色的小方格代表包含bounding box,白色的則沒有包含),則我們計算該點的bounding box和(7,7)的bounding box的IoU,並存入到I(7,7,2)中。以此類推,每個點都有121維的特徵,則整個score map輸出的特徵為15*15*121.
這裡寫圖片描述

2.4 網路解析

我們再來看一下網路結構,注意2點:

  • IOU層的kernel size 為1,stride也為1。

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

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

2.5 輸出及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 中有值的點。

Discuss

這篇文章最大的selling point在於它解決了NMS設定閾值難的問題。傳統的NMS是hard-pruning decision,而在NMS convnet中,作者通過學習的方法來獲得最佳的輸出。如果真能做到的話,以後NMS都替換成NMS convnet,那麼各種檢測問題的精度又可以上一個臺階了。