李紀鑫,任高明,赫 磊,孫 瑜
(陜西國防工業(yè)職業(yè)技術(shù)學(xué)院 計算機與軟件學(xué)院,西安 710300)
人臉檢測的核心在于人臉識別。關(guān)于人臉識別的起源,最早可以追溯到20世紀60、70年代,經(jīng)過幾十年的發(fā)展,目前已經(jīng)比較成熟。人臉檢測是人臉識別系統(tǒng)的關(guān)鍵部分[1]。但早期的人臉識別研究主要集中在具有較強約束條件的人臉圖像上。它假設(shè)人臉位置已知或容易獲得,因此忽略了人臉檢測。隨著電子商務(wù)等應(yīng)用的發(fā)展,人臉識別成為最有潛力的生物認證手段[2-3]。它要求人臉識別系統(tǒng)能夠從視頻流或一般的圖像中,對人臉進行找尋并且識別。因此,一系列的問題使得人臉檢測成為一個獨立的研究課題。目前,人臉檢測在數(shù)字視頻處理、視頻檢測等領(lǐng)域具有重要的應(yīng)用價值[4-5]。
人臉檢測的目的是發(fā)現(xiàn)任意給定圖像中的所有的人臉。如果包含面,則返回面的位置、大小和姿態(tài)。目前,人臉檢測算法主要分為基于知識的方法、基于模板匹配的方法、基于特征的方法和基于統(tǒng)計模型的方法[6]。
從人臉檢測算法的發(fā)展來看,人臉檢測算法主要分為3個階段:早期算法階段、AdaBoost幀階段和深度學(xué)習(xí)階段。在早期算法階段,人臉檢測算法采用模板匹配技術(shù)等,例如Rowley等人使用神經(jīng)網(wǎng)絡(luò)進行人臉檢測,并訓(xùn)練了一個包含20×20張人臉和非人臉圖像的多層感知器模型[7]。在AdaBoost幀階段,人臉檢測得到了突破性的發(fā)展。維奧拉等人2001年提出了一種基于類Haar特征和AdaBoost算法的人臉檢測方法。之后,許多學(xué)者提出了基于AdaBoost算法的相應(yīng)改進方法。例如:為了提高檢測的速度和準確性,他們開始使用融合算法,包括基于支持向量機和AdaBoost算法的人臉檢測方法,基于膚色模型的人臉檢測方法和AdaBoost算法。在深度學(xué)習(xí)階段,卷積神經(jīng)網(wǎng)絡(luò)(CNN)在圖像分類成功后被用于人臉檢測。目前,已有一些高效、高精度的算法,包括級聯(lián)CNN、Faceness-Net、MTCNN、TCNN等[8]。
由于人臉在圖像和視頻流中與其他部分有明顯的顏色特征區(qū)別,因此,利用該特點,在此提出了一種基于BP神經(jīng)網(wǎng)絡(luò)的膚色檢測模型,該模型靈感主要是來源于YCbCr顏色空間及相應(yīng)的高斯模型。實驗結(jié)果表明,該模型在膚色檢測方面優(yōu)于YCbCr-高斯模型。同時,為了提高傳統(tǒng)AdaBoost的人臉檢測算法的性能,提出了一種改進的AdaBoost權(quán)值更新方法。最后,采用新的膚色模型提取膚色,然后采用改進的AdaBoost算法對人臉進行準確檢測。
人類膚色像素分類器的目的是確定一個膚色像素是膚色還是非膚色。好的膚色像素分類器應(yīng)該覆蓋所有膚色類型的色調(diào)(棕色、黃色、黑色、白色等),并盡可能滿足不同的照明條件。顏色用于識別圖像上的物體。為了進行數(shù)字圖像處理,人們投射了大量的色彩空間。在目標檢測中,為了獲得準確的檢測結(jié)果,需要選擇合適的顏色空間。
YCbCr是一個感知色彩空間,有兩個元素:
亮度(Y)表示亮度和色度(Cb和Cr),表示藍色和紅色的色度成分。YCbCr顏色空間是由RGB顏色空間的數(shù)學(xué)變換坐標設(shè)計的。如果底層RGB顏色空間是絕對的,則YCbCr顏色空間是絕對的顏色空間。
YCbCr顏色空間是根據(jù)YUV顏色空間的縮放比例和偏移量得出的[9]。圖像的RGB值由R,G和B變量表示。將RGB顏色空間轉(zhuǎn)換為YCbCr顏色空間的公式如下:
(1)
與其他色彩空間相比,YCbCr色彩空間的計算非常簡單。圖1顯示膚色在YCbCr顏色空間中具有良好的聚類特性。
YCbCr-高斯模型通過計算像素顏色和膚色之間的相似度來確定膚色。對于每個像素,Cb和Cr的值為x。膚色的平均值為m,膚色的方差為S,像素顏色與膚色之間的相似度為P(Cb,Cr)。P(Cb,Cr)可以通過公式(2)~(5)進行計算:
(2)
(3)
(4)
x=(Cr,Cb)T
(5)
在YCbCr-高斯模型中,選取多個樣本分析膚色分布。如圖2所示,0.5可用作區(qū)分膚色和非膚色的閾值。
盡管YCbCr-高斯膚色模型可以區(qū)分膚色和非膚色。然而,靠近皮膚的部分顏色也符合YCbCr-高斯模型,該模型被誤認為是皮膚顏色。為了提高膚色檢測的準確性,提出了基于BP神經(jīng)網(wǎng)絡(luò)的膚色模型。
如圖3所示,BP神經(jīng)網(wǎng)絡(luò)分為輸入層、隱藏層和輸出層。輸入層的神經(jīng)元數(shù)目為5個,表示LX,LY,Y,Cb和Cr,(LX,LY)表示像素的位置坐標。(Y,Cb,Cr)是像素的顏色值。(LX,LY)使BP神經(jīng)網(wǎng)絡(luò)考慮膚色的連通性。那么隱藏層中的神經(jīng)元數(shù)量是10個。最后一層是輸出層,神經(jīng)元數(shù)量為1。每個神經(jīng)元之間的重量為w,神經(jīng)元的值為v。激活函數(shù)f(x)如公式(6)所示。最后用公式(7)計算神經(jīng)元的輸出值:
(6)
y=f(w1v1+w2v2+…+wivi)
(7)
在BP神經(jīng)網(wǎng)絡(luò)模型訓(xùn)練完成后,用訓(xùn)練后的模型代替YCbCr高斯模型進行膚色檢測。圖4(a)為原始圖像,圖4(b)為YCbCr高斯模型的檢測圖像,圖4(c)為BP神經(jīng)網(wǎng)絡(luò)的檢測圖像。結(jié)果表明,基于BP神經(jīng)網(wǎng)絡(luò)的膚色模型優(yōu)于YCbCr高斯模型。
圖4 不同檢測結(jié)果與原始圖像對比
基于AdaBoost,Viola利用Haar特征和積分圖進行人臉檢測。它主要使用積分圖來幫助計算Haar特征。然后利用Haar特征對一系列分類能力較弱的弱分類器進行訓(xùn)練,使弱分類器的分類精度達到50%以上。然后將這些弱分類器結(jié)合起來,形成具有較強分類能力的強分類器。最后,將這些強分類器組合成級聯(lián)分類器,達到人臉檢測的目的[10]。
如圖5所示,Viola提出了5種常見的矩形特征原型[11]。這些特征和人臉之間的匹配如圖6所示。
圖5常見矩形特征
圖6 Haar特征與人臉的匹配
Haar特征的值是通過減去黑色矩形像素和白色矩形像素來計算的[10]。為了便于計算,采用積分圖的方法提高了計算速度。其主要思想是計算ii(x,y),即從點(0,0)到點(x,y)的所有像素顏色之和。如下式所示,是原始圖像的值。
ii(x,y)=∑x’≤x,y’≤yi(x’,y’)
(8)
弱分類器和強分類器:每個不同的Haar特征代表一個不同的弱分類器。閾值為θ,f為特征值。x表示檢測窗口,p表示不等式的方向。弱分類器可計算為:
(9)
強分類器由幾個分類能力最強的弱分類器組成。整個訓(xùn)練過程如下:
1)訓(xùn)練集s={(x1,y1),(x2,y2),…,(xn,yn)},樣本圖像為xn,陽性樣本數(shù)為m,陰性樣本數(shù)為l.yn∈(-1,1),陽性樣本數(shù)為1,陰性樣本數(shù)為-1。
2)初始化權(quán)重,其中w(t,i)表示第t次迭代中第i個樣本的權(quán)重。重量可用公式(10)計算:
(10)
3)如公式(10)所示,迭代次數(shù)為T。在每次迭代中需要對權(quán)重進行規(guī)范化。需要計算弱分類器的錯誤率,具體公式如(11)、(12)所示:
(11)
(12)
4)計算弱分類器權(quán)重αt并更新樣本權(quán)重。zt是所有樣本權(quán)重的總和。計算過程如式(13)~(15)所示:
(13)
(14)
(15)
5)最后利用公式(16)獲得強分類器H(x):
(16)
級聯(lián)分類器由決策樹算法導(dǎo)出。級聯(lián)分類器由幾個強分類器串聯(lián)而成。對于一個檢測窗口,只有在上層的強分類器對其進行正確分類后,強分類器才能對其進行檢測。級聯(lián)分類器的結(jié)構(gòu)如圖7所示。
圖7 級聯(lián)分類器示意圖
Adaboost算法是一種迭代算法,其主要思想是用一個訓(xùn)練集訓(xùn)練不同的分類器(弱分類器),然后用一些方法將它們結(jié)合起來構(gòu)造一個更強的分類器,如圖8所示。
圖8 Adaboost算法框架
算法本身是通過改變數(shù)據(jù)分布來實現(xiàn)的,即根據(jù)訓(xùn)練集樣本的分類修正,以及最后的整體分類精度來確定每個樣本的權(quán)重。然后將修改后的新數(shù)據(jù)的權(quán)值發(fā)送給下層分類器進行訓(xùn)練,最后將每個訓(xùn)練分類器融合在一起,作為最終的決策分類器。
整個AdaBoost算法的要點如下:
1)每次迭代的變化是樣本的分布,而不是重采樣;
2)樣本分布的變化取決于樣本的分類是否正確,而分類正確的樣本權(quán)重低,分類錯誤的樣本權(quán)重高(通常是靠近邊界的樣本),這將使下一個分類器關(guān)注當前的分類錯誤樣本;
3)將所有的弱分類器合并得到結(jié)果。
但是傳統(tǒng)的AdaBoost算法因為權(quán)值分配不均,會導(dǎo)致噪聲權(quán)值無限大,從而造成結(jié)果的不準確。因此在此,提出了一種改進型AdaBoost算法。
在傳統(tǒng)的AdaBoost算法中,在訓(xùn)練過程中,誤檢樣本的權(quán)重會越來越大。分類器將更加注意錯誤檢查的樣本。同時,逐漸忽略正確分類的樣本。這是目前AdaBoost算法的不足。其中f(xi)是特征值的函數(shù),θ是特征的閾值。如果f(x1) 將閾值和樣本之間的距離添加到權(quán)重更新中。 (17) (18) 防止誤分類樣品重量的無限增加。在權(quán)值更新中加入閾值與樣本之間的距離,增加閾值限制。新的權(quán)重更新計算如公式(19)所示: (19) 整個具體算法如下: Algorithm1改進AdaBoost算法: Input:The training setS= { (xi,yi) },i=1…nandyi∈(-1,1);Tis the number of iteration,Iis weak classifier,the weight iswt,i,the number of positive samples is m and the number of negative samples is l. 1. Fori=1:n 4. end 5. fort=1:T 6.ht=I(S,wt) 13. end 將改進的AdaBoost算法用于人臉檢測。雖然大多數(shù)人臉都可以檢測,但對于復(fù)雜的背景圖像,仍然存在一些錯誤檢測。為了提高人臉檢測的精度,提出了一種基于BP神經(jīng)網(wǎng)絡(luò)和AdaBoost算法的人臉檢測方法。利用BP神經(jīng)網(wǎng)絡(luò)提取膚色候選區(qū)域,然后利用改進的AdaBoost算法對人臉進行精確定位。工作流程如圖9所示。 圖9 人臉檢測流程 實驗表明,新的人臉檢測方法具有較好的性能。圖10(a)是原始圖像。圖10(b)是BP神經(jīng)網(wǎng)絡(luò)的檢測圖像。圖10(c)是改進的AdaBoost的檢測圖像。 圖10 改進后檢測結(jié)果與其他圖像對比 驗證實驗從MIT、Yale和FDDB人臉數(shù)據(jù)庫中選取6 000個人臉樣本。選取2萬個非人臉樣本。這些樣本用于訓(xùn)練改進的AdaBoost人臉檢測器。訓(xùn)練時,圖像大小為20*20。在硬件為酷睿i7處理器,DDR3 16GB內(nèi)存,MAC OS操作系統(tǒng)的MACBOOK PRO筆記本電腦和軟件為matlab 2016b上進行編程,圖11顯示了算法在不同的人臉數(shù)據(jù)庫中的檢測效果,包括Yale、FDDB、MIT和混合數(shù)據(jù)。結(jié)果表明,該方法在不同數(shù)據(jù)集上的檢測率均在90%以上。 圖11 不同數(shù)據(jù)集上結(jié)果顯示圖 為了進一步比較提出的人臉檢測方法的準確性。表1比較了傳統(tǒng)的AdaBoost算法、基于YCbCr高斯模型和AdaBoost的人臉檢測算法以及提出的人臉檢測算法。 表1 算法對比結(jié)果 結(jié)果表明,與傳統(tǒng)的AdaBoost算法相比,該方法的檢測率提高了5.5%。與基于YCbCr高斯模型和AdaBoost的人臉檢測方法相比,該方法的檢測率提高了2.25%。在錯誤率方面,提出的方法比AdaBoost算法低7.65%,比基于YCbCr高斯模型和AdaBoost的方法低4.2%。 表2顯示了在統(tǒng)一尺寸的視頻流中,不同算法對人臉識別的精確度以及視頻處理速度。從表中可以看出,相對于其他兩種方法,該方法每秒能夠讀取12幀圖片,處理視頻的速度較快,尤其是相對于MTCNN算法,是其速度的4倍。同時在精確度方面,該算法的精確度較高,能達到94%左右,相對于DSST算法,精確度提高了將近10%。具有較好的精確度,能夠滿足日常的實際需求。 表2 算法時間對比結(jié)果 為了檢驗該算法的在復(fù)雜情況下(如光照不足或人臉較為模糊等情況),在此將該算法與其他類似的人臉檢測算法進行對比,如Faceness-Net、SSH、ACF、Face R-CNN、DenseBox。整個實驗對比結(jié)果如圖12所示。 圖12 復(fù)雜情況下人臉檢測算法結(jié)果對比 從圖12中可知,在此利用計算人臉框的位置與真實人臉之間的偏差距離,來表示人檢測算法的效果。在這6種人臉檢測算法中,在此提出的算法精確度較高,尤其是相對與ACF算法來說,精確度提高了70%。同時,還可以知道,歐氏距離在0~6時,精確度提高較大。相對于距離為0~6時,距離為6~20時,精確度增長緩慢。并且距離在2~4時,精確度增長最快。 提出了一種基于BP神經(jīng)網(wǎng)絡(luò)和改進的AdaBoost算法的人臉檢測方法。首先,采用BP神經(jīng)網(wǎng)絡(luò)模型提取膚色。然后,采用改進的AdaBoost算法對提取的膚色區(qū)域進行準確的人臉檢測。實驗結(jié)果表明,與其它方法相比,該方法具有較高的精度和較低的誤差率。今后的工作重點是保證高檢測率,提高人臉檢測效率。4 人臉檢測結(jié)果和性能分析
5 結(jié)束語