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