天天看點

《BING: Binarized Normed Gradients for Objectness Estimation at 300fps》讀後感~

夜深人靜了,就想寫點什麼,早在去年,BING剛一出現就對其進行了關注,CVPR2014的文章,作者提供了詳細的源代碼,得到了普遍的認可,本文談談對BING的一些個人了解,歡迎批評指正!

1. 算法思想

與之前介紹的edge boxes有異曲同工之妙,也是考慮了我們人類觀察事物的習慣:先粗看,再細看。BING就是提供一種”粗略檢測“的方法,先将目标大概的位置提取出來,主要目的是為了提速,與edge boxes不同,BING是基于學習的,換句話說,我們如果将檢測人體,就可以用大量的人體樣本訓練BING,使得BING專注于人體的檢測,這是BING的一大優勢所在!下面我們的描述都是基于人體檢測。

BING的算法共分為兩個階段,并且兩個階段都是基于SVM的,第一個階段,用SVM進行二分類,一類是人體,一類是非人體。第二階段,由于檢測出來的BING框框的大小不一,有的大小,比如說高10個像素,寬200個像素,是人體的可能性明顯較低,作者采用了對各個框框權重重的方式,對框框内包含人體的可能性進行了排序。兩個階段都基于SVM,幹脆直接稱呼為cascade SVM。

2. 算法流程

根據BING代碼,給出訓練階段算法流程圖,如下所示:

《BING: Binarized Normed Gradients for Objectness Estimation at 300fps》讀後感~

其中,SVM共分為兩個階段,這裡說一說第二階段的SVM,這個時候的訓練樣本其實就是proposal的得分,得分一定是标量,于是人體的proposal是正例,非人體的proposal就是負例,每個尺寸對應所有的訓練樣本得分,也就是說其實每個size都要進行一次SVM,公式如下所示:

《BING: Binarized Normed Gradients for Objectness Estimation at 300fps》讀後感~

我們要求的目标是<vi, ti>,隻要做一個簡單的變形<sl, 1>,我們就可以直接利用linear SVM求解了,作者提供了詳細的源碼, SVM用的是三方庫liblinear中的函數。

在測試階段,先用事先定好大小的各類掃描框掃描圖像,得到各個尺度下的訓練樣本,這個時候再計算各自的得分s,然後利用非最大抑制(NMS)方法進行篩選,最後再利用上面的公式進行計算最終的得分。

重點說說作者在代碼裡面的一個大招,在第一階段,正樣本是proposal真值,負樣本是随機提取的非目标proposal,根據這兩類樣本得到的濾波器w,在第二階段,作者沒有沿用第一階段得到的正負樣本,而是又重新基于w過濾了每一幅圖像,得到了一堆proposal(經過NMS處理過的),注意這個時候的proposal完全不知道類标哈,那怎麼确定類标呢?方法是拿這些新proposal和第一階段的真值propoals比較(重疊面積),然後将這些新proposal進行分類,以及計算各自對應的尺度和得分s,進一步,每個尺度都計算<v, t>。

我的疑問是:第二階段為什麼要重新生成proposal,直接利用第一階段弄好的proposal不行嗎?不行嗎?不行嗎?重要的問題要問三遍。

作者是否有什麼不可告人的秘密,不可告人的秘密,不可告人的秘密。。。。。

大家都長點心想想吧!!!

再者就是NMS方面的處理,一般我們在人臉檢測中使用NMS,都是基于重疊面積選擇最大的那個框作為檢測框(可以将一個目标的所有檢測框看成一個局部區域),但是在BING第二階段訓練中是對每一個像素都要計算濾波器的得分,此處作者在代碼中采用的方式較為簡單,其直接定義一個鄰域(NSS寬度),現将所有像素的代價值從大到小排序,然後将每個鄰域内最高得分值的像素保留,剩餘的全部去除。按照正常的流程來說,應該在領域内計算1到次高得分所對應的視窗與最高得分視窗之間的重疊面積,滿足門檻值的視窗就要保留,否則抑制掉,這意味着可能在一個鄰域内可能會存在多個視窗得以“幸存”。作者可能是考慮到這麼做比較耗時,是以未采用傳統方式。

3. 結論

BING提供了一種基于學習的目标檢測方法,準确率算好的了,進一步可以基于BING框(proposal)進行細緻的目标檢測,相比較于滑窗方式而言,速度成倍的提高(我采用了評分最高的100個),正檢率比滑窗方式低了一些,誤檢率沒有明顯提高,速度提高了3倍左右,這種算法思想果斷是目标檢測以後的一大趨勢了!

繼續閱讀