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

4.3 人臉檢測算法融合

人臉檢測算法融合,這裡指將多個算法的檢測結果合併,從而盡可能多地檢測到所有人臉。多種人臉檢測算法的融合,是行之有效的提高人臉檢測準確率的方法。如圖4-3所示,圖(a)是Viola&Jones人臉檢測算法的檢測結果,圖(b)是CNN Facial Point Detection人臉檢測算法的檢測結果,如果將這兩個算法的檢測框合併,就可以檢測到所有的人臉。

圖4-3 不同算法的人臉檢測結果

如果直接合併這 10 個檢測框,則同一個區域上可能會有兩個檢測框,如圖4-4所示。所以,在合併不同人臉檢測算法的結果時,需要對結果進行判斷處理,如果出現圖4-4(a)中的情況,則判定兩個檢測框指向同一個人臉,只保留一個;如果出現圖4-4(b)中的情況,兩個檢測框重疊區域大,則也判定這兩個檢測框指向同一個人臉,刪除一個檢測框;如果出現圖4-4(c)中的情況,兩個檢測框的重疊區域較小,則判定為不同的人臉,不做處理;如果出現圖4-4(d)中的情況,兩個檢測框不重疊,則判斷為不同的人臉,不做處理。

圖4-4 合併後檢測框的情況(兩種不同顏色的檢測框分別代表不同算法的檢測結果)

圖4-4(b)中重疊區域大,表示指向同一個人臉;圖4-4(c)中重疊區域較小,表示指向不同的人臉。那麼重疊區域大小的判斷標準是什麼呢?對於兩個檢測框A、B來說,如果A框的中心點在B框區域內,並且B框的中心點在A框區域內,則表示它們重疊區域大,即高度重合;否則表示它們重疊區域小。

本書介紹了6種人臉檢測算法,分別是DPM、LAEO、Viola&Jones、CNN Facial Point Detection、DDFD、Fast R-CNN(第5章將介紹)。接下來我們對其中某些算法的檢測結果進行融合。

1.DPM和LAEO算法的融合

DPM和LAEO算法的融合有兩種實現途徑:

(1)使用MATLAB實現的程序,對應的項目名稱為:FaceDetect Algos\dpm_headdet_opencv_Matlab。

在運行之前,需要添加子文件夾dpm_headdet_opencv_Matlab\voc-release的一些函數。讀者可根據實際情況,在main.m 文件中修改存放檢測圖片和檢測結果的路徑,如下:

修改好路徑後,單擊main.m即可測試該合併算法。

(2)使用C++在 Visual Studio 上實現的程序,對應的項目名稱為:FaceDetectAlgos\ dpm_headdet_opencv_C。運行該項目只要在 Visual Studio 上配置好OpenCV視覺庫即可。

讀者可根據實際情況,在detectFace.cpp文件中修改存放檢測圖片和檢測結果的路徑,如下:

修改好路徑後,單擊detectFace.cpp即可測試該合併算法。

2.CNN Facial Point Detection和Viola&Jones算法的融合

CNN Facial Point Detection和Viola&Jones算法的融合是在 Visual Studio 平台上實現的,對應的項目名稱為:FaceDetectAlgos\facedetc_windopencv。