章樂
【摘要】 人臉關(guān)鍵點檢測又稱臉部關(guān)鍵點定位。在機器學(xué)習(xí)的領(lǐng)域里,人臉關(guān)鍵點檢測技術(shù)有著其獨特的應(yīng)用價值,因為該技術(shù)是眾多臉部圖片處理的先序步驟,這些應(yīng)用包括但不限于人臉識別,臉部表情分析,臉部變形動畫。本文嘗試了四種不同的機器學(xué)習(xí)模型來實現(xiàn)人臉關(guān)鍵點的檢測,并利用Kaggle數(shù)據(jù)庫對各模型的檢測效果進行橫向?qū)Ρ?。其中卷積神經(jīng)網(wǎng)絡(luò)模型擬合效果最好,其Kaggle測試均方根誤差僅為3.21。
【關(guān)鍵字】 Kaggle 人臉關(guān)鍵點檢測 線性回歸 支持向量機 前饋神經(jīng)網(wǎng)絡(luò) 卷積神經(jīng)網(wǎng)絡(luò)
一、Kaggle數(shù)據(jù)庫簡介
Kaggle數(shù)據(jù)庫一共提供了7049張96x96像素的訓(xùn)練灰度圖。對于每個樣本點,數(shù)據(jù)庫提供15個關(guān)鍵點的x, y坐標(biāo)(關(guān)鍵點坐標(biāo)允許部分缺失),即30個訓(xùn)練特征(feature)。對于測試數(shù)據(jù)集,Kaggle提供了1783臉部灰度圖。模型預(yù)測坐標(biāo)將被用于與Kaggle內(nèi)置的臉部關(guān)鍵點坐標(biāo)進行比對,其相應(yīng)的均方根誤差(RMSE)為模型得分。
二、線性回歸
2.1 線性回歸模型存在的問題
對于線性回歸模型,9216個像素灰度值將被作為輸入特征,而相應(yīng)的15個人臉關(guān)鍵點(位于眼、鼻、嘴等處)的X,Y坐標(biāo)將被視為目標(biāo)變數(shù)(variable)。為解決模型的過度擬合問題(overfitting),我們采取了部分特征抽樣的方法以減少輸入特征。
2.2 特征提取
在給定特征抽樣比例時,我們?nèi)孕鑼?216個輸入特征進行篩選。分段啟發(fā)函數(shù)(stepwise methods)是一個普適的特征選擇方法[1],但隨機性過強的分段方法并沒有充分考慮臉部關(guān)鍵點坐標(biāo)間存在的聯(lián)系 。
與一般機器學(xué)習(xí)問題不同,關(guān)鍵點定位存在很直觀的特征提取啟發(fā)策略—我們可僅提取眼、鼻、嘴處的像素值。實驗中,我們采用了以健壯性著稱的方向梯度直方圖HOG(Histogram of Oriented Gradients)來探測并截取其對應(yīng)區(qū)域的像素,如圖1所示[2]。
2.3 模型復(fù)雜度控制
我們從左右眼、鼻及嘴區(qū)域截取了長寬分別是H,W的像素塊作為線性回歸模型的輸入特征,通過調(diào)整像素塊的大小來控制模型的復(fù)雜度。當(dāng)H與W增大時,模型復(fù)雜度隨之增加。在實驗中我們發(fā)現(xiàn),檢驗方差及訓(xùn)練方差(Validation and traning MSE)隨著像素塊的增大而減小。這說明我們得到的線性回歸模型仍處于欠擬合區(qū)域(Underfitting)。然而,我們無法進一步增大提取像素塊,否則像素塊邊界將會產(chǎn)生越界現(xiàn)象。通過觀測,最佳的像素塊長寬均為32(像素)。對于該大小的像素塊得到的最終線性回歸模型,其Kaggle測試均方根誤差約為4.6367。
三、 支持向量機(support vector machine)
支持向量機(SVM)是廣泛應(yīng)用于機器學(xué)習(xí)分類以及回歸的抽象模型,因此存在眾多成熟的工具包。在實驗中,我們采用了著名的LIBSVM [3]來對數(shù)據(jù)進行擬合。我們利用9216個像素值作為輸入特征分別訓(xùn)練30個向量機,每個向量機輸出15個臉部關(guān)鍵點的X或Y坐標(biāo)。這樣的簡化處理并忽略了坐標(biāo)間存在的內(nèi)部聯(lián)系,卻成功避免了引入多目標(biāo)變數(shù)向量機(SVM struct [4]),使代碼大為簡化。
3.1線性卷積核
對于輸入特征較多,訓(xùn)練樣本較小的機器學(xué)習(xí)問題,線性卷積核是一個合理的選擇。在LIBSVM工具包中,我們?nèi)孕柽x取合適的正則參數(shù)C(regularization parameter)。對于線性卷積核,搜索得到的最佳正則參數(shù)C為0.1,其對應(yīng)模型的方差由默認(rèn)參數(shù)的10.663降至10.454,Kaggle測試均方根誤差為4.35512。
3.2 多項式卷積核
對于多項式卷積核的SVM模型,其最重要的調(diào)諧參數(shù)是多項式的最高次冪。在交叉檢驗中(Cross-validation),我們發(fā)現(xiàn)均方差與多項式核的最高次數(shù)呈正相關(guān),即檢驗均方差從線性核(P=1)時便開始增大,說明多項式卷積核的SVM在P=1時就已經(jīng)出現(xiàn)了過度擬合的現(xiàn)象。
3.3徑向基函數(shù)核與參數(shù)調(diào)諧
由于徑向基函數(shù)核(Radial Basis Kernel)能夠非線性地將輸入特征映射到更高維空間,因此它能夠處理絕大部分目標(biāo)參數(shù)與輸入特征存在非線性關(guān)系的機器學(xué)習(xí)問題。更為巧妙的是,當(dāng)徑向基函數(shù)核的懲罰參數(shù)C (不同于正則參數(shù))及核參數(shù)γ為某一特定組合時,其SVM模型的擬合效果將完全等同于與線性核SVM模型 [5]。邏輯回歸卷積核與徑向基卷積核SVM也有類似的關(guān)系[6]。
四、 前饋神經(jīng)網(wǎng)絡(luò)
4.1 基本結(jié)構(gòu)
常見的神經(jīng)網(wǎng)絡(luò)(Neural Network)結(jié)構(gòu)包括前饋神經(jīng)網(wǎng)絡(luò)(feed-forward),遞歸神經(jīng)網(wǎng)絡(luò)(recurrent)以及對稱連通網(wǎng)絡(luò)(symmetrically connected)等等。在該論文中,我們采用了實際應(yīng)用較廣的前饋神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。
根據(jù)[7]的論述,在給定相同數(shù)量的神經(jīng)元,擁有更深結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò)模型擁有更強的表達能力。因此,一個典型的前饋神經(jīng)網(wǎng)絡(luò)應(yīng)至少包含三個層次-----輸入層,輸出層以及在這兩層之間的隱藏層。對于臉部關(guān)鍵點檢測問題,輸入層一共有9216個神經(jīng)元,輸出層將由30個神經(jīng)元組成。
4.2 模型的參數(shù)設(shè)定
如前所述,神經(jīng)網(wǎng)絡(luò)模型復(fù)雜度主要取決于隱藏層的層數(shù),每層擁有的神經(jīng)元個數(shù)以及迭代次數(shù)(epochs)。在該實驗中,我們使用了目前較為先進的機器學(xué)習(xí)工具包 Theano[http://deeplearning.net/software/theano/]。
4.2.1 隱藏層層數(shù)、每層神經(jīng)元數(shù)量及迭代次數(shù)的選取
由于特征值域映射問題,Theano的顯示誤差為均方差的千分之一。由圖2知,當(dāng)層間神經(jīng)元數(shù)量超過300時,交叉檢驗誤差顯著上升,模型出現(xiàn)了過度擬合現(xiàn)象。在實際Kaggle測試中,我們嘗試了三個不同隱藏層層數(shù)(1,2及3層),其對應(yīng)的均方根誤差為3.82109, 3.85388以及3.81652。這一結(jié)果顯示了隱藏層數(shù)的改變并不會對擬合結(jié)果有顯著的影響。顯然,當(dāng)?shù)螖?shù)增加時模型復(fù)雜度也隨之增加。由圖2(右)知,迭代次數(shù)設(shè)置為1000是一個較為合適的選擇。
4.3 集成學(xué)習(xí)4.3.1 Bagging對于神經(jīng)網(wǎng)絡(luò)模型,我們可以采取兩種不同Bagging策略。
(1)從訓(xùn)練數(shù)據(jù)中抽樣選取部分樣本點。我們分別訓(xùn)練了10個不同的神經(jīng)網(wǎng)絡(luò),其輸入樣本為從訓(xùn)練數(shù)據(jù)中隨機抽取的1940個樣本點。最終的臉部關(guān)鍵點坐標(biāo)取這10個模型預(yù)測結(jié)果的算術(shù)平均值,其Kaggle測試均方根誤差為3.67293。
(2)從每個樣本點(臉部圖片)中選取部分輸入特征,每個樣本點的輸入特征為隨機抽取的8000個像素點。相應(yīng)模型的Kaggle均方根誤差為3.62655
4.3.2 混合模型
同樣地,我們可以采取如下兩種不同的混合策略。
(1)我們分別訓(xùn)練三個僅有1層,2層以及3層隱層的神經(jīng)網(wǎng)絡(luò),并取其預(yù)測的臉部關(guān)鍵點坐標(biāo)算術(shù)均值作為預(yù)測結(jié)果。該模型Kaggle測試均方根誤差降至3.62702。
(2)混合由(1)中的神經(jīng)網(wǎng)絡(luò)以及Bagging的第二種模型(部分特征抽樣)。這兩種目前表現(xiàn)最佳的神經(jīng)網(wǎng)絡(luò)的結(jié)合進一步降低了均方根誤差。該模型的測試均方根誤差約為3.58884。
4.4 總結(jié)
在論文的本節(jié)中,我們嘗試了一系列參數(shù)各異的神經(jīng)網(wǎng)絡(luò)和集成學(xué)習(xí)模型,使得均方根誤差由最初的3.8降至了3.58884。模型及其相應(yīng)的均方根誤差如表1所示。
五、卷積神經(jīng)網(wǎng)絡(luò)
5.1 模型結(jié)構(gòu)
卷積神經(jīng)網(wǎng)絡(luò)(Convolutional neural networks, CNN)是一種較為新型、直到90年代末才被成熟開發(fā)的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。在沒有犧牲模型的普適性前提下,卷積神經(jīng)網(wǎng)絡(luò)有效地利用了局部像素間關(guān)聯(lián)性,縮短了機器學(xué)習(xí)訓(xùn)練周期。對于卷積神經(jīng)網(wǎng)絡(luò),每一層神經(jīng)元將構(gòu)成三維結(jié)構(gòu)(傳統(tǒng)神經(jīng)網(wǎng)絡(luò)是二維平面結(jié)構(gòu)),而層間的神經(jīng)元只與前一層的神經(jīng)網(wǎng)絡(luò)的局部神經(jīng)元存在激勵、反饋聯(lián)系,這一特性稱為局部感知。
5.2 訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)
在本論文中,我們嘗試了一系列參數(shù)各異的神經(jīng)網(wǎng)絡(luò)模型,并使用NVIDA GTX-650顯卡與1GB內(nèi)存對模型進行訓(xùn)練。在訓(xùn)練過程中,我們將Kaggle提供的訓(xùn)練數(shù)據(jù)庫分成訓(xùn)練數(shù)據(jù)及檢驗數(shù)據(jù),其規(guī)模之比為4:1。
5.2.1 卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
實驗中使用的模型參數(shù):輸入層一層,由9216個神經(jīng)元組成;卷積層(Convolution)及最大值池化層(Max Poolling)各四層,每一層的卷積濾窗大小為3x3,池化過濾窗大小為2x2,位移步長為2。卷積核數(shù)從第一層至第四層分別為32, 64, 128以及256;全連通卷積層一層,包含500個隱藏神經(jīng)元;輸出層一層,由30個神經(jīng)元組成。神經(jīng)元的激勵函數(shù)采用的是RELU非線性函數(shù),輸出層輸出將取決于全連通層激勵信號的線性組合。為了提高訓(xùn)練速率,我們將學(xué)習(xí)速率(training rate)設(shè)置為一較大值并隨迭代次數(shù)線性減??;動量項(momentum)隨迭代次數(shù)線性增加。為了避免可能的內(nèi)存問題,斯托克斯數(shù)據(jù)包大?。╯tochastic batch size)設(shè)定為64. 從圖5.1可以看出,上述的改進大大加快了均方差的收斂速度,縮短了訓(xùn)練周期。
5.2.2 數(shù)據(jù)擴充
對于圖片類型數(shù)據(jù),我們可以垂直翻轉(zhuǎn)圖片實現(xiàn)數(shù)據(jù)擴充。由于訓(xùn)練數(shù)據(jù)庫規(guī)模變大,我們將迭代次數(shù)上線由600增至700。
利用數(shù)據(jù)擴充的策略,從圖5.1中可以清晰地看到不僅訓(xùn)練誤差明顯降低,檢驗誤差也隨之下降,意味著卷積神經(jīng)網(wǎng)絡(luò)得到正確的優(yōu)化。
5.2.3 激勵摒棄(dropout)
激勵摒棄(dropout)是避免過度擬合的又一新型策略,其在卷積神經(jīng)網(wǎng)絡(luò)中的應(yīng)用直到最近幾年才被關(guān)注并被開發(fā)。激勵摒棄是在每一卷積層隨機選取一定數(shù)量的激勵神經(jīng)元,并將其激勵人為地置零。對于不同的訓(xùn)練圖片,歸零的激勵神經(jīng)元也需重新選取。激勵摒棄可以有效地抑制神經(jīng)元間的過強聯(lián)系。
利用激勵摒棄的策略,我們將迭代次數(shù)增至1000,此時Kaggle測試均方根誤差降至3.45;若將迭代次數(shù)增3000,其相應(yīng)的Kaggle均方根誤差降至3.21。當(dāng)我們進一步增大迭代次數(shù)時,均方根誤差下降已十分緩慢。
六、結(jié)語
在本篇論文里,我們嘗試了一系列健壯的機器學(xué)習(xí)模型并系統(tǒng)地比較了他們的擬合效果。由于缺乏有效的特征選取及模型復(fù)雜度控制機制,基于計算機視覺的線性回歸模型并不能取得很好的效果。
而卷積核的靈活性使得支持向量機SVM在前者的基礎(chǔ)上有了明顯的進步。然而前饋神經(jīng)網(wǎng)絡(luò)以及卷積神經(jīng)網(wǎng)絡(luò)能夠更為有效地控制了高維模型的復(fù)雜度。
其中,專門用于圖片機器學(xué)習(xí)的卷積神經(jīng)網(wǎng)絡(luò)在Kaggle的測試中有著極佳的表現(xiàn),經(jīng)優(yōu)化后其均方根誤差僅為3.21959。
參 考 文 獻
[1] Efroymson, M. A. “Multiple regression analysis.” Mathematical methods for digital computers 1 (1960): 191-203.
[2] Dalal, Navneet, and Bill Triggs. ?Histograms of oriented gradients for human detection.? Computer Vision and Pattern Recognition, 2005. CVPR 2005. IEEE Computer Society Conference on. Vol. 1. IEEE, 2005.
[3] Chang, Chih-Chung, and Chih-Jen Lin. ?LIBSVM: a library for support vector machines.? ACM Transactions on Intelligent Systems and Technology (TIST)2.3 (2011): 27.
[4] Joachims T, Finley T, Yu C N J. Cutting-plane training of structural SVMs[J]. Machine Learning, 2009, 77(1): 27-59.[5] Keerthi S S, Lin C J. Asymptotic behaviors of support vector machines with Gaussian kernel[J]. Neural computation, 2003, 15(7): 1667-1689.
[6] Lin, Hsuan-Tien, and Chih-Jen Lin. ?A study on sigmoid kernels for SVM and the training of non-PSD kernels by SMO-type methods.? submitted to Neural Computation (2003): 1-32.
[7] Suykens J A K, Vandewalle J. Least squares support vector machine classifiers[J]. Neural processing letters, 1999, 9(3): 293-300.