人臉檢測技術——深度學習算法原理

人臉檢測技術——深度學習算法原理

  上篇推送介紹了人臉檢測技術的基本概念,人臉檢測與人臉識別的區別,以及通過代碼向讀者直觀地展示了人臉檢測技術;這篇文章,將主要介紹人臉檢測技術的算法原理
  人臉檢測指的是檢測出圖片中的人臉,並能夠標示出人臉的位置。人臉檢測技術主要完成了兩件工作:第一,判斷圖片中是否包含人臉區域;第二,如果圖片中存在人臉,將人臉的位置預測出來。
  人臉檢測分爲前深度學習時期深度學習時期:前深度學習時期,人們主要將傳統的計算機視覺算法運用於人臉檢測,傳統的計算機視覺算法,依賴於人工提取特徵,然後使用這些人工特徵來訓練一個檢測器;在深度學習時期,人們嘗試將卷積神經網絡應用於人臉檢測這一問題,一般有兩種方式:一種是將適用於多種任務的目標檢測網絡(如faster-rcnn網絡,yolo網絡)應用於人臉檢測任務;另一種是研究專門的人臉檢測網絡
  本文接下來將主要簡述基於深度學習技術的人臉檢測算法原理:首先,講述faster-rcnn網絡的基本原理,以及如何將faster-rcnn應用於人臉檢測;接着,講述專門用於人臉檢測的卷積神經網絡。

1. 通用目標檢測網絡

  通用目標檢測網絡有faster-rcnn,yolo,ssd以及最新的基於點檢測的等網絡。只要有相應的數據集,這些網絡一般可用來檢測任意目標,比如皮卡丘、車輛、人臉等。

1.1 faster-rcnn檢測算法的基本原理

  faster-rcnn[1]是一種通用的目標檢測網絡。faster-rcnn網絡結構大體上可以分爲三個部分。第一部分是用來提取圖片特徵,生成feature maps的卷積層。第二部分是候選區域生成網絡——RPN。第三部分是對候選區域進行分類和調整的網絡。其網絡結構如下圖所示。
faster-rcnn
  這幅圖應按照從下往上看。最下面是image,這是整個網絡的輸入。image的上面是卷積層conv layers。在這裏,卷積層主要是用來提取圖片特徵,生成feature maps。提取特徵的卷積層,可以使用Vgg Net網絡結構,也可以使用Res Net網絡結構。image數據經過conv layers後得到feature maps。faster rcnn網絡的後幾層,便是基於feature maps來計算的。
  真正使faster-rcnn具備檢測能力的是RPN層和Roi Pooling層。其中,RPN層用於生成候選區域。Roi Pooling層使用RPN層生成的候選區域,以及conv layers最後一層的輸出,來生成固定大小的proposal feature map。
  classifier層以Roi Pooling層的輸出作爲輸入,進行全連接運算,並使用Softmax來預測候選區域所屬的類別。

1.2 faster-rcnn應用於人臉檢測

  將faster-rcnn應用於人臉檢測,需要在訓練這個網絡的時候,使用人臉檢測數據集。github上有基於caffe的faster rcnn的實現[2]。讀者可以基於這個工程,使用一些開源或者自己標註的人臉檢測數據集,訓練出一個用於人臉檢測的模型。

2. 專門應用於人臉檢測的卷積神經網絡

2.1 專門用於人臉檢測的卷積神經網絡的發展現狀

  自深度學習在計算機視覺領域大放異彩後,人們設計了一些專門應用於人臉檢測的網絡結構。級聯卷積神經網絡,常被人們應用在人臉檢測任務。例如,cascadeCNN,MTCNN等。在專門用於人臉檢測的卷積神經網絡中,最經典的網絡當屬MTCNN。MTCNN在github上有一些源碼,以及一些已經訓練好的模型。讀者可以下載到本地機器上運行。

2.2 cascadeCNN

  cascadeCNN[3]是一種比較快速的人臉檢測網絡。該網絡在FDDB數據集上可以達到85.1%以上的準確率。
FDDB數據集
  cascadeCNN的網絡結構如下圖所示。
cascadeCNN網絡架構
  calibration-net的網絡結構如下圖所示。該網絡用於校正人臉框。
calibration-net網絡結構

2.3 MTCNN

  MTCNN全稱是Multitask Cascaded Convolutional Networks,是2016年中國科學院深圳先進技術研究院的研究成果。MTCNN將人臉檢測與人臉關鍵點檢測放在了一起,大體上可以分爲三層網絡結構:PNet、RNet和ONet
MTCNN
  該網絡的結構如下圖所示。
MTCNN網絡結構
  第一步P-Net是一個全卷積網絡,通過淺層的CNN用來生成候選區域。使用Bounding box regression和非極大值抑制(NMS)來過濾並校正候區域。
  第二步N-Net對候選區域進行調整。將通過P-Net的候選窗輸入R-Net中,拒絕掉大部分效果比較差的候選區域,使用Bounding box regression和NMS進一步優化候選區域。
  第三步O-Net是一個較爲複雜的卷積神經網絡。O-Net輸出最終的人臉框和特徵點位置。這個網絡最終輸出人臉框的位置,以及五個人臉關鍵點。

3. 人臉檢測最新進展

  以上的成果是17年之前的,這些經典的網絡有的在工業界取得非常成熟的應用。下面推薦兩篇18年的論文以及一篇19年的文章,有興趣的同學,可以細讀並復現一下這些文章,三篇文章分別是Face Detection Using Improved Faster RCNN[6]、Hoi Feature Agglomeration Networks for Single Stage Face Detection[7]、Single-Shot Scale-Aware Network for Real-Time Face Detection[8]。這三篇文章均在一些開源的人臉數據集如WIDER FACE上均取得不錯的效果;其中,最後一篇文章在VGA分辨率下對人臉的檢測速度可以達到82.1 FPS。
  本文簡單介紹了人臉檢測的發展歷程。主要闡述了可以應用於人臉檢測的通用目標檢測網絡faster rcnn,以及專門用於人臉檢測的級聯卷積神經網絡cascadeCNN和MTCNN;這些網絡是比較經典的人臉檢測網絡,是跟進最新人臉檢測的基礎,有興趣的讀者可以通過閱讀原文來加深理解。
  下一篇文章,將基於一個網絡結構和一個數據集,來講述如何訓練一個人臉檢測模型。敬請關注!


參考文獻

[1] Ren S, He K, Girshick R, et al. Faster r-cnn: Towards real-time object detection with region proposal networks[C]//Advances in neural information processing systems. 2015: 91-99.
[2] faster rcnn實現 https://github.com/rbgirshick/py-faster-rcnn
[3] Li H, Lin Z, Shen X, et al. A convolutional neural network cascade for face detection[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2015: 5325-5334.
[4] Zhang K , Zhang Z , Li Z , et al. Joint Face Detection and Alignment Using Multitask Cascaded Convolutional Networks[J]. IEEE Signal Processing Letters, 2016, 23(10):1499-1503.
[5] MTCNN代碼 https://github.com/kpzhang93/MTCNN_face_detection_alignment
[6] C. Zhang, X. Xu, D. Tu Face Detection Using Improved Faster RCNN. arXiv preprint arXiv:1802.02142, 2018.
[7] J. Zhang, X. Wu, J. Zhu, Steven C.H. Hoi Feature Agglomeration Networks for Single Stage Face Detection. arXiv preprint arXiv:1712.00721, 2018.
[8] S. Zhang, L. Wen, H. Shi, Z. Lei, S. Lyu, Stan Z. Li Single-Shot Scale-Aware Network for Real-Time Face Detection. International Journal of Computer Vision (IJCV), 2019.


微信公衆號同步

  關注微信公衆號“機器學習和人工智能”,乾貨多多~
  我們會定期推送Python編程,人工智能基礎算法,學術界、工業界最新動態,讓更多的人瞭解人工智能~
  歡迎掃描下方二維碼關注哈~
微信公衆號

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章