咱們將整我的臉檢測算法分爲3個階段,分別是早期算法,AdaBoost框架,以及深度學習時代,在接下來將分這幾部分進行介紹。git
早期的人臉檢測算法使用了模板匹配技術,即用一我的臉模板圖像與被檢測圖像中的各個位置進行匹配,肯定這個位置處是否有人臉;此後機器學習算法被用於該問題,包括神經網絡,支持向量機等。以上都是針對圖像中某個區域進行人臉-非人臉二分類的判別。算法
早期有表明性的成果是Rowley等人提出的方法[1][2]。他們用神經網絡進行人臉檢測,用20x20的人臉和非人臉圖像訓練了一個多層感知器模型。api
文獻[1]的方法用於解決近似正面的人臉檢測問題網絡
文獻[2]的方法解決多角度人臉檢測問題,整個系統由兩個神經網絡構成,第一個網絡用於估計人臉的角度,第二個用於判斷是否爲人臉。角度估計器輸出一個旋轉角度,而後用整個角度對檢測窗進行旋轉,而後用第二個網絡對旋轉後的圖像進行判斷,肯定是否爲人臉。併發
AdaBoost框架app
接下來介紹AdaBoost框架以後的方法,boost算法是基於PAC學習理論(probably approximately correct)而創建的一套集成學習算法(ensemble learning)。其根本思想在於經過多個簡單的弱分類器,構建出準確率很高的強分類器,PAC學習理論證明了這一方法的可行性。框架
在2001年Viola和Jones設計了一種人臉檢測算法[10]。它使用簡單的Haar-like特徵和級聯的AdaBoost分類器構造檢測器,檢測速度較以前的方法有2個數量級的提升,而且保持了很好的精度,咱們稱這種方法爲VJ框架。VJ框架是人臉檢測歷史上第一個最具備里程碑意義的一個成果,奠基了基於AdaBoost目標檢測框架的基礎,因此做爲重點和你們嘮嘮。less
在VJ算法問世以後,較好的解決了近似正面人臉的檢測問題。此後出現了大量改進方案,在深度學習技術出現以前,一直是人臉檢測算法的主流框架。這些方案的改進主要在如下幾個方面:機器學習
新的特徵,包括擴展的Haar特徵[4],ACF特徵[15]等,它們比標準的Haar-like特徵有更強的描述能力,同時計算成本也很低。函數
使用其餘類型的AdaBoost分類器。VJ框架中採用的是離散型的AdaBoost算法,除此以外,還有實數型,Logit型,Gentle型等各類方案。實數型、Logit型和Gentle型AdaBoost算法不只能輸出分類標籤值,還能給出置信度,有更高的精度。
ACF[15](Aggregate ChannelFeatures for Multi-view Face Detection)是一種爲分類提供足夠多的特徵選擇的方法。在對原圖進行處理後,獲得多通道的圖像,這些通道能夠是RGB的通道,能夠是平滑濾波獲得的,能夠是x方向y方向的梯度圖等等。將這些通道合起來,在此基礎上提取特徵向量後續採用Soft-Cascade分類器進行分類。
相較於VJ-cascade的設計,Soft-Cascade採用幾個改進的方案:
(1)每一個stage的決策函數不是二值而是標量值(scalar-valued) ,且與該樣本有多"容易"經過這個
stage以及在這個stage的相對重要性成比例。
(2)生成的決策函數是須要經過以前每一個階段的值而不僅僅是本階段來斷定。
(3)文中把檢測器的運行時間-準確率權衡經過一個叫ROC surface的3維曲面清楚的展現出來,方便
調節參數,能夠明確的知道動了哪一個參數會對這個檢測器的性能會有些什麼影響。
DMP模型
DPM(Deformable Part Model),正如其名稱所述,可變形的組件模型,是一種基於組件的檢測算法,其所見即其意。該模型由Felzenszwalb在2008年提出,並發表了一系列的CVPR,NIPS會議。而且還拿下了2010年,PASCAL VOC的「終身成就獎」。
因爲DPM算法[16]自己是一種基於組件的檢測算法,因此對扭曲,性別,多姿態,多角度等的人臉都具備很是好的檢測效果(人臉一般不會有大的形變,能夠近似爲剛體,基於DMP的方法能夠很好地處理人臉檢測問題)。
深度學習框架
卷積神經網絡在圖像分類問題上取得成功以後很快被用於人臉檢測問題,在精度上大幅度超越以前的AdaBoost框架,當前已經有一些高精度、高效的算法。直接用滑動窗口加捲積網絡對窗口圖像進行分類的方案計算量太大很難達到實時,使用卷積網絡進行人臉檢測的方法採用各類手段解決或者避免這個問題。
Cascade CNN
Cascade CNN[17]能夠認爲是傳統技術和深度網絡相結合的一個表明,和VJ人臉檢測器同樣,其包含了多個分類器,這些分類器採用級聯結構進行組織,然而不一樣的地方在於,Cascade CNN採用卷積網絡做爲每一級的分類器。
構建多尺度的人臉圖像金字塔,12-net將密集的掃描這整幅圖像(不一樣的尺寸),快速的剔除掉超過90%的檢測窗口,剩下來的檢測窗口送入12-calibration-net調整它的尺寸和位置,讓它更接近潛在的人臉圖像的附近。
採用非極大值抑制(NMS)合併高度重疊的檢測窗口,保留下來的候選檢測窗口將會被歸一化到24x24做爲24-net的輸入,這將進一步剔除掉剩下來的將近90%的檢測窗口。和以前的過程同樣,經過24-calibration-net矯正檢測窗口,並應用NMS進一步合併減小檢測窗口的數量
將經過以前全部層級的檢測窗口對應的圖像區域歸一化到48x48送入48-net進行分類獲得進一步過濾的人臉候選窗口。而後利用NMS進行窗口合併,送入48-calibration-net矯正檢測窗口做爲最後的輸出。
DenseBox
文獻[18]提出了一種稱爲DenseBox的目標檢測算法,適合人臉這類小目標的檢測。這種方法使用全卷積網絡,在同一個網絡中直接預測目標矩形框和目標類別置信度。經過在檢測的同時進行關鍵點定位,進一步提升了檢測精度。
檢測時的流程以下:
1.對待檢測圖像進行縮放,將各類尺度的圖像送入卷積網絡中處理,以檢測不一樣大小的目標。
2.通過屢次卷積和池化操做以後,對特徵圖像進行上採樣而後再進行卷積,獲得最終的輸出圖像,這張
圖像包含了每一個位置出現目標的機率,以及目標的位置、大小信息。
3.由輸出圖像獲得目標矩形框。
4.非最大抑制,獲得最終的檢測結果。
Faceness-Net
Faceness-Net[19]是一個典型的由粗到精的工做流,藉助了多個基於DCNN網絡的facial parts分類器對人臉進行打分,而後根據每一個部件的得分進行規則分析獲得Proposal的人臉區域,最後經過一個Refine的網絡獲得最終的人臉檢測結果。
MTCNN
MTCNN[20]顧名思義是多任務的一個方法,它將人臉區域檢測和人臉關鍵點檢測放在了一塊兒,同Cascade CNN同樣也是基於cascade的框架,可是總體思路更加巧妙合理,MTCNN整體來講分爲三個部分:PNet、RNet和ONet。
HR
以前咱們講過的一些方法都沒有針對小目標去分析,小目標檢測依然是檢測領域的一個難題,[21]本文做者提出的檢測器經過利用尺度,分辨率和上下文多種信息融合來檢測小目標
Face R-CNN
[22]該方法基於Faster R-CNN框架作人臉檢測,針對人臉檢測的特殊性作了優化。
SSH
[23] SSH最大的特點就是尺度不相關性(scale-invariant),好比MTCNN這樣的方法在預測的時候,是對不一樣尺度的圖片分別進行預測,而SSH只須要處以一個尺度的圖片就能夠搞定。實現方式就是對VGG網絡不一樣level的卷積層輸出作了3個分支(M1,M2,M3),每一個分支都使用相似的流程進行檢測和分類,經過針對不一樣尺度特徵圖進行分析,變相的實現了多尺度的人臉檢測。
PyramidBox
這一次是百度的「PyramidBox」[24]
參考文獻
[1] Henry A Rowley, Shumeet Baluja, Takeo Kanade. Neural network-based face detection. 1998, IEEE Transactions on Pattern Analysis and Machine Intelligence.
[2] Henry A Rowley, Shumeet Baluja, Takeo Kanade. Rotation invariant neural network-based face detection. 1998, computer vision and pattern recognition.
[3] P.Viola and M.Jones. Rapid object detection using a boosted cascade of simple features. In Proceedings IEEE Conf. on Computer Vision and Pattern Recognition, 2001
[4] Rainer Lienhart, Jochen Maydt. An extended set of Haar-like features for rapid object detection. 2002, international conference on image processing.
[5] Lubomir Bourdev, Jonathan Brandt. Robust Object Detection Via Soft Cascade. CVPR 2005.
[6] Bo Wu, Haizhou Ai, Chang Huang, Shihong Lao. Fast rotation invariant multi-view face detection based on real Adaboost. 2004, IEEE international conference on automatic face and gesture recognition.
[7] M.Jones, P.Viola. Fast Multi-View Face Detection. Mitsubishi Electric Research Laboratories, Technical Report: MERL-2003-96, July 2003.
[8] Y.Ma, X.Q.Ding. Real-time rotation invariant face detection based on cost-sensitive AdaBoost. In: Proceedings of the IEEE International Conference on Image Processing. Barcelona, Spain: IEEE Computer Society, 2003. 921-924.
[9] Y.Ma, X.Q.Ding. Robust multi-view face detection and pose estimation based on cost-sensitive AdaBoost. In: Proceedings of the 6-th Asian Conference on Computer Vision. Jeju, Korea: Springer, 2004.
[10] S.Z.Li, L.Zhu, Z.Q.Zhang, A.Blake, H.J.Zhang, H.Y.Shum. Statistical learning of multi-view face detection. In: Proceedings of the 7-th European Conference on Computer Vision. Copenhagen, Denmark: Springer, 2002.67-81.
[11] S.Z.Li, Z.Q.Zhang, H.Y.Shum, H.J.Zhang. FloatBoost learning for classification. In: Proceedings of the 16-th Annual Conference on Neural Information Processing Systems. Vancouver, Canada: MIT Press, 2002. 993-1000.
[12] S.Z.Li, L.Zhu, Z.Q.Zhang, H.J.Zhang. Learning to detect multi-view faces in real-time. In: Proceedings of the 2-nd International Conference on Development and Learning. Cambridge, MA, USA: IEEE Computer Society, 2002. 172-177.
[13] S.Z.Li, Z.Q.Zhang. FloatBoost Learning and Statistical Face Detection. In: IEEE Transactions on Pattern Analysis and Machine Intelligence, 2004.
[14] B.Wu, H.Z.Ai, C.Huang, S.H.Lao. Fast rotation invariant multi-view face detection based on real adaboost. In: Proc. 6th Int'l Conf. Automatic Face and Gesture Recognition, 2004, 79-84.
[15] B. Yang, J. Yan, Z. Lei and S. Z. Li. Aggregate channel features for multi-view face detection.. International Joint Conference on Biometrics, 2014.
[16] M. Mathias, R. Benenson, M. Pedersoli and L. Van Gool. Face detection without bells and whistles. ECCV 2014.
[17] Haoxiang Li, Zhe Lin, Xiaohui Shen, Jonathan Brandt, Gang Hua. A convolutional neural network cascade for face detection. 2015, computer vision and pattern recognition
[18] Lichao Huang, Yi Yang, Yafeng Deng, Yinan Yu. DenseBox: Unifying Landmark Localization with End to End Object Detection. 2015, arXiv: Computer Vision and Pattern Recognition
[19] Shuo Yang, Ping Luo, Chen Change Loy, Xiaoou Tang. Faceness-Net: Face Detection through Deep Facial Part Responses.
[20] Kaipeng Zhan, Zhanpeng Zhang, Zhifeng L, Yu Qiao. Joint Face Detection and Alignment Using Multitask Cascaded Convolutional Networks. 2016, IEEE Signal Processing Letters.
[21] HR - P. Hu, D. Ramanan. Finding Tiny Faces. IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2017.
[22] Face R-CNN - H. Wang, Z. Li, X. Ji, Y. Wang. Face R-CNN. arXiv preprint arXiv:1706.01061, 2017.
[23] SSH - M. Najibi, P. Samangouei, R. Chellappa, L. Davis. SSH: Single Stage Headless Face Detector. IEEE International Conference on Computer Vision (ICCV), 2017.
[24] PyramidBox - X. Tang, Daniel K. Du, Z. He, J. Liu PyramidBox: A Context-assisted Single Shot Face Detector. arXiv preprint arXiv:1803.07737, 2018.
推薦文章[1] 機器學習-波瀾壯闊40年 SIGAI 2018.4.13.[2] 學好機器學習須要哪些數學知識?SIGAI 2018.4.17.[3] 人臉識別算法演化史 SIGAI 2018.4.20.[4] 基於深度學習的目標檢測算法綜述 SIGAI 2018.4.24.[5] 卷積神經網絡爲何可以稱霸計算機視覺領域? SIGAI 2018.4.26.[6] 用一張圖理解SVM的脈絡 SIGAI