論文《A Convolutional Neural Network Cascade for Face Detection》筆記

論文:A Convolutional Neural Network Cascade for Face Detection.pdf

實現:https://github.com/anson0910/CNN_face_detection

該論文發表於2015年CVPR上,作者提出了一種級連的CNN網絡結構用於人臉識別,論文的主要貢獻有以下四點:

  • 提出了一種級連的CNN網絡結構用於高速的人臉檢測。
  • 設計了一種邊界校訂網絡用於更好的定位人臉位置。
  • 提出了一種多分辨率的CNN網絡結構,有着比單網絡結構更強的識別能力,和一個微小的額外開銷。
  • 在FDDB上達到了當時最高的分數。

其實論文的主體框架依然是基於V-J的瀑布流思想,不同以往的是級連了CNN網絡(由於論文閱讀量有限,不知是否已有前人做出了此類貢獻),整個網絡的處理流程如下圖所示:


可以看出,整個處理流程裏包含了六個網絡和三次NMS,六個網絡按順序分別是12-net,12-calibration-net,24-net,24-calibration-net,48-net,48-calibration-net。

包含三個二分類網絡用於分類其是否爲人臉,另外三個calibration網絡用於矯正人臉框邊界。

其中12-net,24-net和48-net的網絡結構如下圖所示:


這三個網絡的結構大致相同,不同之處在於其讀入的圖片分辨率和網絡的複雜度,其是逐級遞增的,瞭解V-J框架不難理解其實現原理,前面的簡單網絡拒絕絕大部分非人臉區域,將難以分辨的交由下一級更復雜的網絡以獲得更準確的結果,這裏着重講其多分辨率的圖片讀入方式。

要想在CNN結構下實現V-J瀑布級連結構,就要保證瀑布的前端足夠簡單並有較高的召回率且能夠拒絕大部分非人臉區域,將圖片縮放可以滿足需求,比例爲12/F,24/F,48/F,F爲檢測人臉的最小尺寸,這樣對於一張800*600的圖片,檢測尺寸爲40*40的人臉,窗口移動步伐爲4個像素,那麼會產生((800*12/40-12)/4+1)*((600*12/40-12)/4+1)=2494個窗口。不僅使得窗口數量變少而且窗口的縮放也使前期的CNN結構更加簡單,實現了級連的思想。

另外在24-net和48-net的全連接層還會連接該圖像縮放後在前一層網絡的全連接輸出,這麼做的目的是爲了檢測更小的人臉,雖然會帶來額外開銷,但總體來說,該開銷可忽略不計,但是其可以較明顯的提高識別率。

12-calibration-net,24-calibration-net,48-calibration-net的結構如下圖所示:


這三個網絡用於矯正人臉檢測框的邊界,往往得分最高的邊界框並非最佳結果,經過校準後其能更好的定位人臉,其矯正原理其實很簡單,就是對原圖做45次變換,然後每個變換後的邊界框都有一個得分,對於得分高於某個設定的閾值時,將其累加進原邊界,最後結果取平均,就是最佳邊界框,關於45次變換,有如下得來:


xn,yn是其座標移動比例,sn是其尺寸縮放比例

變換方式如下:


筆者說R-CNN並不適合於人臉檢測,從論文中效果來看,不管是思想還是其實現,這種方法的確比R-CNN簡便不少。

最後說說該論文對我的啓發:

該論文最具開創性的兩點:

一是其多分辨率的網絡級連方法,這讓我領略了V-J框架在CNN上效果優異的一次演繹。

在pico裏圖片一直保持着相同的尺寸,不同的是每一層樹的數量不斷增加,層數不斷增多,從而保證複雜度的增高,其實也可以嘗試這種多分辨率的策略,在前幾層,讀的圖片可以分辨率低一些,這樣,就可以少檢測一些窗口,從而提升效率,但是不同於CNN,這麼做也許會導致前面幾層的召回率和準確率大大降低而得不償失。

二是其邊界校訂網絡,相比於R-CNN,該網絡可稱之爲大巧不工的典範。

其實在pico中,也有類似邊界校訂網絡這種離散式的加權平均校訂方式,但是它只在最後一步做NMS時才做處理,那麼如果將該方法加入每個層之後,或許可以在不影響其準確率的前提下顯著減少下一層所需處理的樣本,獲得效率上的進一步提升。

發佈了46 篇原創文章 · 獲贊 19 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章