讀古今文學網 > 刷臉背後:人臉檢測 人臉識別 人臉檢索 > 4.2 DDFD人臉檢測算法 >

4.2 DDFD人臉檢測算法

DDFD人臉檢測算法是由Farfade等人[3]在2015年發表的。該算法是一種基於深度學習的人臉檢測算法,並可以進行多角度的人臉檢測。通常進行多角度人臉檢測的算法需要訓練大量的模型捕捉各個方向的人臉,還需要對面部關鍵點或者面部姿勢進行註解,這些方法工作量大,比較複雜。DDFD人臉檢測算法只需要一個基於深度卷積神經網絡的模型(Deep Dense Face Detector,DDFD),就可以檢測各個方向的人臉。

4.2.1 DDFD人臉檢測算法的使用

關於DDFD人臉檢測算法的程序,Farfade等人沒有公開源代碼和檢測器,本書使用的程序來自文獻[4]和文獻[5]。

新建一個項目,名稱為:Face Detection_CNN-master。該項目包含主要程序[6]和訓練好的模型[7],本書只是利用該算法進行檢測。

注意:該算法需要在Caffe環境下運行。

讀者可根據實際情況,在test.py文件中修改檢測圖片和檢測結果的存放路徑,具體如下。

檢測圖片路徑:

face_detection('face.txt')

face.txt是包含檢測圖像名稱的文檔。

檢測結果路徑:

imageFile.save("result/" + str(img_count) + ".jpg")

修改路徑後,運行test.py即可使用DDFD人臉檢測算法進行人臉檢測。

如果讀者需要自行訓練模型,則可按照如下步驟處理。

(1)運行image_preprocess.py。該程序是為了對圖片進行預處理,使用AFLW[8]數據庫,對於每張圖片,如果檢測到的人臉與真實的人臉區域重疊面積大於0.5,則認為是正樣本;如果小於0.3,則認為是負樣本。

(2)運行train.sh。該程序使用AlexNet[9]在AFLW數據庫上繼續訓練,訓練後得到的模型為alexNet__iter_60000.caffemodel[7]。

(3)參考文獻[10]將全連接層通過改變參數改成卷積層。

(4)最後運行test.py。該程序可以得到每張圖片的熱度圖,通過熱度圖定位人臉區域。

如果讀者對檢測結果不是很滿意,則可以修改test.py裡面的函數face_detection中參數factor的值和delim中的值,具體如下。

4.2.2 DDFD人臉檢測算法的原理

使用AFLW數據庫,對於每張圖片來說,如果與檢測到的人臉重疊面積大於0.5,則認為是正樣本。所有圖片縮放到227×227像素。作者通過使用預訓練模型AlexNet Model和AFLW數據庫進行調優訓練,在調優過程中,設置最大迭代次數為50K,批處理大小為128個,其中96個為正樣本,32個為負樣本。

作者使用的網絡結構與AlexNet網絡類似,AlexNet網絡包含8層,前5層為卷積層,後3層為全連接層。作者首先通過重新設置網絡參數將最後三層全連接層改成了卷積層,這樣就可以通過使用修改後的網絡提取任何尺寸的圖片的熱度圖。熱度圖中的每一個點代表存在面部區域的概率值,對應原來圖片中227×227像素的區域。然後使用NMS(非最大值抑制)機制來最終確定人臉區域。最後對圖片進行縮放,並分別對縮放得到的圖片進行檢測,從而得到最終的人臉區域結果。

4.2.3 DDFD人臉檢測算法的檢測結果

經過大量的測試發現,DDFD人臉檢測算法能夠很好地檢測多角度人臉,但是檢測結果中有很多噪聲,根據文獻[3]中提到的結論,該算法的檢測效果應該是很好的。但是本書測試結果有很多噪聲,可能是因為本書程序中訓練的模型不好,或者test.py參數沒有設置好。在圖4-2中,我們呈現了一些有代表性的圖片的檢測結果。

圖4-2 DDFD人臉檢測算法的檢測結果