找到一個總結很好的blog。python
具體訓練的過程會在後續的隨筆中給出。git
轉載自:github
https://blog.csdn.net/lff1208/article/details/77328357算法
如下是內容:網絡
論文連接:架構
https://kpzhang93.github.io/MTCNN_face_detection_alignment/,框架
本文是根據本身的理解翻譯的若有錯誤,還請見諒,評論提出,立馬修改。性能
摘要:因爲姿式、光照或遮擋等緣由,在非強迫環境下的人臉識別和對齊是一項具備挑戰性的問題。最近的研究顯示,深度學習算法能夠很好的解決上述的兩個問題。在這篇文章中,咱們利用檢測和校準之間固有的相關性在深度級聯的多任務框架下來提高它們的性能。尤爲是,咱們利用三層級聯架構結合精心設計的卷神經網絡算法,來對人臉進行檢測和關鍵點的粗略定位。另外,咱們建議使用一種新的在線採集樣本策略來改善算法的性能。咱們的方法與最早進的人臉檢測算法FDDB和WIDER FACE進行對比,具備更高的精度。同時,與AFLW人臉對齊算法比較,實時性能良好。學習
關鍵字:人臉檢測、人臉對齊、級聯卷積神經網絡測試
1、介紹
人臉檢測和對齊是不少基於人臉的應用不可缺乏的一部分,如人臉識別、人臉行爲分析等。然而,視覺變化對於人臉的影響,加之姿式變化和極端光照的影響,使得在現實世界中對人臉檢測和對齊的任務變的極具挑戰。
Viola和Jones提出的級聯人臉檢測器,是利用Harr-Like特徵結合AdaBoost去實現高性能的實時訓練。然而,至關多的研究顯示,該算法在應對大量視覺影響的人臉圖片檢測時性能極具降低。而且目前訊在的DPM算法也具備必定的缺陷,因此須要新的方法來解決人臉檢測和對齊。最近,CNN在視覺方面取得了很好的效果,如圖像分類、人臉識別等。受到啓發研究人員開始將CNN用於人臉檢測,提出一些算法。同時吸引人臉對齊的研究者對此產生興趣,也提出了一下相關算法。然而,大多數之前的臉部檢測和臉部對齊方法忽略了這二者之間的固有相關性任務。 雖然現有的幾個算法試圖共同解決他們,但在這些算法中仍然有侷限性。
另外一方面,目前的訓練樣本度分類器的性能提高有必定的阻礙,須要設計一種用於人臉檢測的在線樣本用於對算法的訓練,已達到自適應的訓練狀態。
在本文中,我麼們提出新的級聯架構來整合多任務卷積神經網絡學習的問題。該算法有三個階段組成:第一階段,淺層的CNN快速產生候選窗體;第二階段,經過更復雜的CNN精煉候選窗體,丟棄大量的重疊窗體;第三階段,使用更增強大的CNN,實現候選窗體去留,同時顯示五個面部關鍵點定位。
2、具體方法實現
A、整體架構
本算法的總體流程如圖1 所示:
圖1級聯卷積神經網絡
Stage 1:採用全卷積神經網絡,即P-Net,去得到候選窗體和邊界迴歸向量。同時,候選窗體根據邊界框進行校準。而後,利用NMS方法去除重疊窗體。
stage 2:R-Net,將通過P-Net肯定的包含候選窗體的圖片在R-Net網絡中 訓練,網絡最後選用全鏈接的方式進行訓練。利用邊界框向量微調候選窗體,再利用NMS去除重疊窗體。
stage 3:O-Net,網絡結構比R-Net多一層卷積,功能與R-Net做用同樣,只是在去除重疊候選窗口的同時,顯示五我的臉關鍵點定位。
B、CNN網絡結構(CNN結構圖上面顯示)
多個CNN被設計爲人臉檢測器,但其性能可能受到如下狀況的限制:
(1)卷積層中的濾波器缺少多樣性,限制他們的識別能力;
(2)對比多類識別檢測和分類任務,人臉檢測是一個二進制的分類問題,所以須要較少許的濾波器,咱們將5*5的濾波大小改成3*3的濾波大小去減小計算,同時增長深度來提升性能。相比以前的算法有了更好的效果,縮短了訓練時間。結果如表1所示。
C、訓練
本算法從三個方面對CNN檢測器進行訓練:人臉分類、邊界框迴歸、地標定位(關鍵點定位)。
具體能夠參考博文http://blog.csdn.net/qq_14845119/article/details/52680940
添加一些新的資料:
github的代碼:https://github.com/kpzhang93/MTCNN_face_detection_alignment
論文和代碼
源代碼是MATLAB版的
訓練模型,須要使用caffe,這就比較尷尬了,這個框架用的少,須要花點時間咯。
這是python的源代碼:
https://github.com/pangyupo/mxnet_mtcnn_face_detection
做者說改了語言以及對caffe的依賴,
但這也不是我測試使用的版本。
https://github.com/ShyBigBoy/face-detection-mtcnn
這個版本對於訓練樣本的讀入方式改爲讀 xxx.npy 文件了。