《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代碼,給出訓練階段算法流程圖,如下所示:




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



我們要求的目標是<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倍左右,這種算法思想果斷是目標檢測以後的一大趨勢了!
發佈了42 篇原創文章 · 獲贊 193 · 訪問量 50萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章