本文是基於《 A convolutional neural network cascade for face detection》的解讀,因此時間線是2015年。數組
人臉檢測是CV社區中一直研究的問題,如今大多的人臉檢測器均可以很容易的檢測正臉或者接近正臉。因此人們開始關心如何解決在無約束條件下的人臉檢測問題。而無約束條件下的人臉包含:姿態變化,誇張的表情和極端的光照變化,而這些也會引發人臉外觀的變化,因此就很容易致使人臉檢測器都不夠魯棒。網絡
人臉檢測的問題主要來自兩方面:測試
- 在嘈雜背景下的人臉的視覺變化;
- 人臉位置和人臉大小致使的超大搜索空間。
前者須要人臉檢測器加速處理一個二分類問題;然後者須要處理時間複雜度問題。並且不一樣於通用的目標檢測任務,無約束人臉檢測使得其沒法直接使用RCNN這種方法去實現,主要是由於圖片中,有些人臉十分小,並且有複雜的外觀變化。
前人在級聯人臉檢測上的工做較爲成功的是用haar作特徵,用前面的模型過濾大量的背景位置,從而減小搜索空間。後人的工做可能是如何提取更有效的特徵來提高準確度,且由於採用了更復雜的特徵每一層模型消耗時間增長了,但是級聯的層數也少了。因此相對的,整體時間反而比最初直接haar的多級聯模型時間更少了。這也給做者啓示,用如今大熱的CNN來做爲特徵的提取方式。用級聯cnn的方式,spa
- 先在開始的低分辨率階段,快速的拒絕大量的假陽性窗口;
- 而後在後面的高分辨率階段,當心的驗證檢測結果。
在cpu上達到了14FPS;gpu上100FPS。
本文貢獻有:設計
- 提出CNN級聯來快速的作人臉檢測;
- 引入一個窗口校訂階段用於幫助加速CNN級聯而後得到高質量的定位。
- 提出一個多分辨率CNN結構,比單分辨率CNN有更好的辨別性;
- 提高了FDDB數據集上的最好結果記錄。
如圖1所示,就是經過不斷的級聯來減小候選區域
blog
- 12-net掃描整個圖片:基於不一樣尺度的圖片快速掃描,並拒絕90%的檢測框;(此時網絡輸入爲12×12,檢測框大小爲12x12)
- 剩下的框先裁剪出來,而後resize成12x12以適應12-calibration-net的輸入,獲取其校訂變量,來校訂檢測框大小。經過調整大小和定位來接近潛在的人臉區域;(此時網絡輸入爲12x12,檢測框大小被該網絡調整,假定爲AxB)
- 用NMS去消除一些高度重複的檢測框;
- 剩下的檢測窗口被裁剪出來,而後resize成24x24大小的做爲24-net的輸入,並拒絕90%的檢測窗口;(此時網絡輸入爲24x24,檢測框大小爲AxB)
- 如以前的流程,剩下的檢測窗口被24-calibration-net所調整,而後用NMS消除高度重複的框;(此時網絡輸入爲24x24,檢測框大小被該網絡調整,檢測框大小爲CxD)
- 最後的48-net接收48x48大小的框並評估這些檢測窗口。NMS用一個大於以前閾值的IOU比例去消除重複的檢測窗口;
- 最後用48-calibration-net去校訂剩下的框,而後做爲結果輸出。(最後輸出的檢測框大小爲ExF)
如圖2所示,12-net是一個十分淺的網絡,其能快速的掃描整個測試圖片。假設一個圖片的輸入爲\(W\times H\),以4個像素爲間隔,那麼一共有\((\left \lfloor (W-12)/4 \right \rfloor + 1)\times (\left \lfloor (H-12)/4 \right \rfloor +1)\)個\(12\times12\)大小的劃框,這麼多劃框能夠組成一個置信得分map,其中每一個點就是對應的一個劃框的評估值。
在實際實現中,若是最小人臉大小爲\(F\times F\)。首先將測試圖片以圖片金字塔進行構建,每一層的縮放因子爲\(\frac{12}{F}\),將這些做爲12-net的輸入。假設圖片大小爲\(800\times 800\),最小接受人臉爲\(40x40\),間隔爲4個像素,那麼首先進行一次縮放,爲\(240\times 180\),將該圖片輸入到12-net中,可獲得2494個劃框。圖片
如圖4所示,12-calibration-net是接在12-net後面的,用於後選框的校訂。該網絡也是一個較爲淺的網絡。先預約義N個校對模式,該N個校準模式被預約義爲一組3維尺度變化和偏移矢量\({\left [ s_n,x_n,y_n \right ]}^N_{n=1}\)。假定一個檢測框爲\((x,y,w,h)\),表示爲左上角座標\((x,y)\),寬高爲\((w,h)\),那麼調整該窗口的校對模式爲:
\[(x-\frac{x_nw}{s_n}, y-\frac{y_nh}{s_n}, \frac{w}{s_n}, \frac{h}{s_n})\]
本文中,\(N=45\),即從下面的參數組合而來:
it
24-net是一箇中間的二分類CNN,用來進一步減小檢測框的數量,將12-calibration-net輸出的檢測框裁剪出來,而後resize成24x24,並用24-net進行評估。這裏有一個多分辨率網絡結構設計,如圖2所示,這些裁剪出來的檢測框還會進一步resize成12x12,而後用12-net進行評估,將其全鏈接層拼接到24-net的全鏈接層,而後再進行最後的分類,增長12-net的輸入是爲了檢測那些小尺寸人臉,使得總的CNN結構更具備分辨性,且12-net的網絡計算量也並不大。如圖3,這裏作了有和沒有多分辨率網結構的24-net,能夠看到在相同的召回率上,有多分辨率設計的結構能夠獲得更少的假檢測窗口。在更高的召回率上,差距就更明顯了
io
相似12-calibration-net,實驗中,24-net和24-calibration-net能夠拒絕86.2%的檢測框,而且在通過24-calibration-net的修正以後,還能保持89.0%的召回率。社區
相似24-net,如圖2,增長了一個多分辨率結構設計,其中的子網絡結構就是24-net。
如圖4,採用了45個校對模式,這裏只是用一層池化層來保證更多精確的校訂。
在12-calibration-net和24-calibration-net後面,基於相同的尺度檢測框下進行NMS,以免召回率的降低;而在48-net以後,是針對全部檢測框進行NMS,以保證在正確的尺度上可以避免較多的冗餘。
如圖5。置信度最高的檢測框可能並不可以很好地框住人臉,而若是沒有校對這一過程,那麼在級聯的下一層就須要評估更多地區域來維持一個較高的召回率。總的檢測時間就會上升。
參考文獻: