李帥杰,陳虎,蘭時勇
(四川大學視覺合成圖形圖像技術(shù)國防重點學科實驗室,成都 610064)
人臉檢測屬于目標檢測的范疇,目標檢測是計算機視覺中最重要的研究方向之一。人臉檢測作為特定的目標檢測在許多的常見應用中都能見到,例如拍照美顏、安防監(jiān)控、視頻會議等;同時人臉檢測技術(shù)也是許多基于人臉應用的技術(shù)前提,在人臉對齊、人臉識別、人臉跟蹤、面部表情分析等技術(shù)中進行人臉檢測都是必要條件。
由于人臉檢測在諸多技術(shù)中的地位和重要性,人臉檢測已經(jīng)逐漸發(fā)展成為一個相對獨立的研究方向,其研究方向和方法也呈現(xiàn)出多樣性。從人臉檢測算法的發(fā)展歷史來看,人臉檢測算法經(jīng)歷了由傳統(tǒng)方法即非深度學習階段到深度學習階段的發(fā)展過程。
在非深度學習階段中,一般通過人工設計的手工特征作為人臉特征,通過得到的人臉特征對圖像中某些位置判斷是否包含人臉。Viola和Jones提出了Haar-Like特征的快速計算方法和級聯(lián)AdaBoost分類器實現(xiàn)接近實時的人臉檢測方法[1];之后人們又設計出了一系列更加復雜的人工特征和不同的級聯(lián)結(jié)構(gòu)檢測器[2-7];還有基于組件的檢測算法可變的組件模型人臉檢測器等。這些傳統(tǒng)的人臉檢測算法在速度上具有一定優(yōu)勢,但是檢測效果在一定程度上制約了其使用范圍。
近年來,隨著深度學習的發(fā)展,人們提出了越來越多的基于深度學習的人臉檢測算法。OverFeat[8]檢測算法基于AlexNet[9]網(wǎng)絡結(jié)構(gòu),利用全卷積神經(jīng)網(wǎng)絡[10]和偏移池化同時對目標進行分類定位和檢測;DDFD[11]也是基于AlexNet[9]網(wǎng)絡,可以實現(xiàn)多角度和遮擋情境下的人臉檢測;FacenessNet[12]對人臉不同的人臉器官(頭發(fā)、眼睛、鼻子、嘴巴、胡子等)分別用不同的神經(jīng)網(wǎng)絡進行訓練最終得到檢測結(jié)果,算法對人臉遮擋具有很強的魯棒性;CMS-RCNN[13]在VGG-16[14]模型的基礎(chǔ)上增加了高層網(wǎng)絡采用區(qū)域建議網(wǎng)絡[15]網(wǎng)絡并且結(jié)合人體信息,在遮擋、低分辨率和強光照下的人臉檢測效果較好;S3FD[16]與SSD[17]著重處理不同尺度下的人臉檢測。基于深度學習的人臉檢測算法將人臉檢測的精度推向新的高度,不過隨著網(wǎng)絡的加深計算量越來越大檢測速度受到一定限制。
我們知道利用卷積神經(jīng)網(wǎng)絡強大的特征提取功能可以對圖像內(nèi)容進行分類和預測,把每個卷積神經(jīng)網(wǎng)絡看作一個分類器,然后把多個神經(jīng)網(wǎng)絡級聯(lián)起來組成具有強大的分類能力的分類器作為人臉檢測的分類器,但是考慮到利用復雜的卷積神經(jīng)網(wǎng)絡在進行多尺度掃描整幅圖像計算耗費時間過長,本文訓練了12×12,18×18,24×24三個不同小尺度輸入的簡單神經(jīng)網(wǎng)絡對圖像進行分類和預測,并將三級簡單的神經(jīng)級聯(lián)起來組成最終的檢測網(wǎng)絡。級聯(lián)網(wǎng)絡中每一級網(wǎng)絡中的檢測范圍和檢測精度逐級提高,下一級網(wǎng)絡對上一級網(wǎng)絡的輸出進行進一步的檢測篩選,三級神經(jīng)網(wǎng)絡分別進行由粗精度到細精度的人臉檢測,最后實現(xiàn)精確檢測人臉及其位置判斷。
近年來,基于深度學習的卷積神經(jīng)網(wǎng)絡因為其在計算機視覺、自然語言處理等領(lǐng)域的突出表現(xiàn)受到越來越多的研究人員的追捧,但是隨著深度神經(jīng)網(wǎng)絡在不同研究領(lǐng)域的表現(xiàn)越來越好,其層數(shù)也越來越深,速度也隨著計算量的增加而變慢。在實際應用中人臉檢測的速度的會嚴重影響用戶體驗,在火車站進口閘機、安檢通道等人流量大的場合中實時性顯得尤其重要。大部分實時的人臉檢測算法都基于級聯(lián)結(jié)構(gòu)和簡單的特征框架[22],為了平衡檢測精度與檢測速度,我們放棄了層數(shù)較深的網(wǎng)絡,而是使用淺層的網(wǎng)絡提取輸入圖像的特征并檢測其是否含有人臉,然后將三級淺層的網(wǎng)絡級聯(lián)起來以獲取更高的精度。與Cascade CNN[18]級聯(lián)網(wǎng)絡的每一級都包含一個分類網(wǎng)絡和一個校準網(wǎng)絡兩個網(wǎng)絡不同,本文提出的級聯(lián)網(wǎng)絡每一級網(wǎng)絡同時檢測圖像是否存在人臉并對人臉位置進行預測。我們的級聯(lián)網(wǎng)絡與MTCNN[24]相比網(wǎng)絡結(jié)構(gòu)更加簡單,計算量更少,能夠加快檢測速度。
級聯(lián)網(wǎng)絡的每一級檢測過程中都會過濾掉一部分錯誤樣本,尤其是要對整個輸入圖像檢測的第一級網(wǎng)絡,它的檢測能力直接決定了整個級聯(lián)網(wǎng)絡的檢測速度[18]。如果在第一級網(wǎng)絡檢測時能夠篩除大部分非人臉,就能夠降低后面網(wǎng)絡檢測耗時。我們級聯(lián)網(wǎng)絡結(jié)構(gòu)的復雜度逐級遞增,在上一級網(wǎng)絡過濾掉一部分非人臉圖像后,把難以分辨的部分交由下一層網(wǎng)絡檢測以獲得更精準的結(jié)果。
本文基于級聯(lián)神經(jīng)網(wǎng)絡的算法流程如圖1所示,綠色矩形框代表每一級網(wǎng)絡檢測結(jié)果。輸入圖像首先經(jīng)過縮放得到多尺度的輸入,將其送入級聯(lián)網(wǎng)絡分別經(jīng)過三級網(wǎng)絡,第一級網(wǎng)絡排除大部分非人臉,接下來的兩級網(wǎng)絡對上一級網(wǎng)絡的結(jié)果進一步檢測,經(jīng)過三級網(wǎng)絡最后得到人臉位置。
圖1 算法檢測流程
第一級網(wǎng)絡為一個淺層的全卷積網(wǎng)絡如圖2所示,它能夠接受任意尺寸的圖像并對其進行檢測,待檢測圖像在送入第一級網(wǎng)絡之前需要由不同的縮放因子對圖像進行縮放得到多尺度圖像金字塔,實現(xiàn)不同尺度的人臉檢測。對于一個寬和高分別為W、H的輸入圖像,檢測步長為n個像素,則第一級網(wǎng)絡的輸出包括大小為的人臉與非人臉的分類檢測結(jié)果和大小為×4預測的人臉位置。分類檢測結(jié)果圖上的每一點代表輸入圖像中12×12大小的檢測窗分類結(jié)果,根據(jù)閾值再篩選出置信度較高的檢測結(jié)果對應的人臉框進行非極大值抑制(Non Maximum Suppression,NMS)操作,合并相近的人臉框。最后對不同尺度下的人臉框做NMS得到人臉框作為第一級網(wǎng)絡的輸出。
第二級網(wǎng)絡為了保證檢測速度同樣使用了一個淺層網(wǎng)絡,實現(xiàn)對輸入圖像是否包含人臉的分類并對人臉位置預測,但是不同于第一級網(wǎng)絡的全卷積網(wǎng)絡,使用了兩層全連接網(wǎng)絡對人臉檢測結(jié)果分類和人臉位置預測,其結(jié)構(gòu)如圖3所示。第二級網(wǎng)絡的輸入為第一級網(wǎng)絡的檢測結(jié)果,對第一級網(wǎng)絡結(jié)果進一步檢測篩選減少檢測窗口數(shù)量,過濾更多的非人臉。第一級網(wǎng)絡檢測到的人臉圖像縮放到大小為18×18,輸入到第二級網(wǎng)絡中,對輸入圖像分類是否包含人臉,并調(diào)整人臉框的位置。與第一級網(wǎng)絡類似在檢測之后對檢測結(jié)果進行NMS操作,合并重合人臉框使人臉定位更加準確。
圖3 第二級網(wǎng)絡結(jié)構(gòu)
第三級網(wǎng)絡是級聯(lián)網(wǎng)絡中最復雜的一個網(wǎng)絡,網(wǎng)絡結(jié)構(gòu)與第二級網(wǎng)絡相似,但是層數(shù)加深保證檢測結(jié)果的精度。第三級網(wǎng)絡對第二級網(wǎng)絡的輸入結(jié)果進行最終篩選并調(diào)整人臉位置,在輸出最后整個級聯(lián)網(wǎng)絡結(jié)果之前同樣需要對檢測結(jié)果合并重合的人臉框。第三級網(wǎng)絡結(jié)構(gòu)如圖4所示。
圖4 第三級網(wǎng)絡結(jié)構(gòu)
對級聯(lián)網(wǎng)絡中的三級子網(wǎng)絡分別進行訓練,針對每個網(wǎng)絡輸入不同分別生成12×12,18×18和24×24大小的灰度圖樣本。在訓練和測試過程中我們使用Wider Face[20]和FDDB[21]數(shù)據(jù)集。Wider Face數(shù)據(jù)集是一個人臉檢測基準數(shù)據(jù)集,其中的圖像是從公開的Wider數(shù)據(jù)集中選擇的,Wider Face數(shù)據(jù)集中共包含32203張圖像和393703張人臉標簽,其中50%用于測試,40%用于訓練,10%用于驗證。FDDB數(shù)據(jù)集包含2845張圖像共5171張標注人臉,用于對比其他算法與本文算法檢測結(jié)果。
我們使用Wider Face中訓練部分數(shù)據(jù)生成訓練級聯(lián)網(wǎng)絡的訓練樣本,參與訓練的樣本分為正樣本、負樣本、部分人臉樣本共三類。各類樣本的類別是通過生成的圖像塊與真實人臉的重疊度(Intersection Over Union,IOU)確定的。如果圖像塊與真實人臉的IOU比例大于0.65,則該圖像塊為正樣本;如果圖像塊與真實人臉的IOU小于0.3,則為負樣本;部分樣本圖像塊與真實人臉的IOU在0.4-0.65之間。
從訓練數(shù)據(jù)庫中按照正樣本:部分樣本:負樣本=1∶1∶3的比例生成訓練需要的各類樣本。如果第一級網(wǎng)絡能夠過盡量多的非人臉,那么后面兩級網(wǎng)絡的運算量就會降低,整個網(wǎng)絡的檢測速度就會加快。因此訓練好第一級網(wǎng)絡是整個級聯(lián)網(wǎng)絡提速的關(guān)鍵。我們?yōu)榈谝患壘W(wǎng)絡訓練生成了約20萬張大小為12×12的灰度圖像作為正樣本。第二級網(wǎng)絡和第三級網(wǎng)絡所需要的訓練圖像是通過前面已經(jīng)訓練的網(wǎng)絡檢測得到,如圖5所示。第二級和第三級網(wǎng)絡訓練生成的正樣本數(shù)據(jù)大約為14萬張,同時生成對應的部分樣本和負樣本,訓練樣本過程按照比例將數(shù)據(jù)送入別進行訓練。
圖5 生成每級網(wǎng)絡的訓練數(shù)據(jù)
在級聯(lián)神經(jīng)網(wǎng)絡中預測圖像中是否含有人臉是一個二分類任務,對于分類任務我們使用交叉熵損失函數(shù)(Cross-Entropy Loss Function)。對于一張輸入圖像xi,{i=0,1,2…,N},經(jīng)過網(wǎng)絡輸出計算分類損失函數(shù)表示為:,其中 pi代表圖像xi經(jīng)過網(wǎng)絡預測圖像中包含人臉的概率,,{i=0,1,2…,N}為圖像xi的類別標簽,∈{0,1},=0代表圖中不包含人臉,=1代表圖中包含人臉。對于網(wǎng)絡預測的人臉位置,我們計算其與距離最近的真實人臉位置的偏移距離,這可以看作是回歸問題。對每一幅輸入圖像xi其歐氏距離損失函數(shù)為:為人臉的標注位置,為網(wǎng)絡預測的人臉位置。
級聯(lián)神經(jīng)網(wǎng)絡的損失函數(shù)包括人臉分類和人臉位置預測兩種損失函數(shù),但是在不同層級的網(wǎng)絡中網(wǎng)絡任務的側(cè)重不完全相同,在第一級網(wǎng)絡主要負責快速預測圖像中是否包含人臉,而對人臉位置的預測是次要任務,所以在訓練中分類損失函數(shù)的權(quán)重要大于人臉位置預測損失函數(shù)的權(quán)重,而在第三級網(wǎng)絡中人臉位置預測損失函數(shù)的權(quán)重將會增加。訓練中每一級網(wǎng)絡總的損失函數(shù)表示為:,其中α和β分別表示兩種損失函數(shù)的權(quán)重。
不同于傳統(tǒng)的困難樣本挖掘,我們在訓練過程中進行在線的困難樣本挖掘。在訓練時對每一批訓練樣本前向傳播后的損失進行排序,只選擇其中分類和回歸損失中最大的70%樣本進行反向傳播,忽略那些簡單樣本,減少了訓練所需時間,并且能夠提高整個網(wǎng)絡效果。
我們提出的級聯(lián)網(wǎng)絡訓練和測試都基于Tensor-Flow深度學習框架。我們設置最小檢測人臉尺寸為24,檢測步長為4個像素,三級網(wǎng)絡在檢測過濾非人臉窗口的閾值分別設置為0.5,0.5和0.3,在Intel i3-7100平臺下對VGA圖像檢測平均時長為48ms,在第一級網(wǎng)絡中我們使用的縮放因子為0.79,網(wǎng)絡檢測平均耗時為35ms,對每一次縮放后檢測結(jié)果進行NMS操作的IOU閾值為0.7,而對第一網(wǎng)絡整體檢測結(jié)果合并整理設置IOU閾值為0.5;的第二級網(wǎng)絡平均耗時6ms,第三級網(wǎng)絡平均耗時7ms,這兩級進行NMS操作閾值都設置為 0.6。該算法與 V-J[1]、Joint Cascade[22]、SURF-multiview[23]、MTCNN[24]、ICC-CNN[25]等快速人臉檢測算法檢測速度對比如表1所示:
表1 幾種人臉檢測算法檢測速度對比
由表1可以本文算法檢測速度快于V-J[1]、Cascade CNN[18]、MTCNN[24]、ICC-CNN[25],但是比 Joint Cascade[22]和 SURF-multiview[23]檢測速度慢。
上面我們比較了幾種算法的檢測速度,現(xiàn)在我們在FDDB數(shù)據(jù)集對算法檢測精度進行比較。FDDB是具有標準化評估過程的大型數(shù)據(jù)集,數(shù)據(jù)集中的2845張圖像中共有5171張標注人臉。FDDB中的使用橢圓標注人臉,我們首先將這些橢圓形標注轉(zhuǎn)化為與檢測算法相同標注的矩形標注。我們遵循所需的評估標準流程,使用作者提供的工具箱報告我們的檢測性能。FDDB中提供了兩種評估類型:離散評分和連續(xù)評分。在離散評分中它計算檢測到標注人臉數(shù)與誤檢人臉數(shù),只有檢測人臉與真實標注人臉位置的重合度大于0.5時才認為檢測到了標注人臉。在連續(xù)評分評估中,通過將重疊度比率視為檢測邊界框的匹配度量來評估人臉的位置。圖6和圖7分別代表每種算法的離散評分和連續(xù)評分。
圖6 離散評分結(jié)果對比
圖7 連續(xù)評分結(jié)果對比
從圖6和圖7的離散評分和連續(xù)評分并結(jié)合表1的檢測速度對比來看,本文算法與Cascade CNN[18]、MTCNN[24]級聯(lián)神經(jīng)網(wǎng)絡算法相比,在保證檢測精度的情況下提高了檢測速度。
為了提高人臉檢測的速度,本文將三級淺層的神經(jīng)網(wǎng)絡級聯(lián)起來,實現(xiàn)快速的人臉檢測。測試圖像輸入級聯(lián)網(wǎng)絡,第一級網(wǎng)絡對不同尺度下的圖像進行檢測,排除了大量非人臉位置,并把難以分辨的結(jié)果交由下級網(wǎng)絡進行檢測,經(jīng)過三級網(wǎng)絡檢測最終得到人臉位置。算法在FDDB數(shù)據(jù)集上算法達到了良好的檢測效果,提高了檢測速度,在CPU上對VGA圖像的檢測速度達到21fps。但是該算法檢測人臉所需時間與圖像大小,以及圖像中人臉數(shù)量有關(guān),第一級網(wǎng)絡要對整幅輸入圖像進行掃描檢測,因此圖像越大,人臉越多檢測時間越長,在針對多人臉圖像的檢測中需要進一步提高其檢測速度。