孟逸凡 柳益君
(1.江蘇理工學(xué)院計(jì)算機(jī)工程學(xué)院,江蘇 常州 213001;2.常州市云計(jì)算與智能信息處理重點(diǎn)實(shí)驗(yàn)室,江蘇 常州 213001)
人臉識(shí)別技術(shù)是指包括人臉檢測和人臉身份認(rèn)證技術(shù)在內(nèi)的識(shí)別技術(shù)。隨著國內(nèi)外人臉識(shí)別方法研究的不斷發(fā)展,人臉識(shí)別技術(shù)已經(jīng)廣泛進(jìn)入了人們的日常生活,如日常的考勤打卡、電子身份證等[1]。 本文探究了一種經(jīng)典的PCA-SVM 人臉識(shí)別方法,并通過MATLAB 工具軟件進(jìn)行仿真計(jì)算。
1.1.1 主成分分析PCA
本文處理的所有原始圖片都是112×92 大小的pgm 格式圖片,每幅圖片包含10304 個(gè)像素點(diǎn),每一行代表一個(gè)樣本,維數(shù)就是10304 維。 維數(shù)過大使得數(shù)據(jù)處理工作十分復(fù)雜,同時(shí),圖片特征之間的強(qiáng)相關(guān)性還會(huì)導(dǎo)致“維數(shù)災(zāi)難”。 快速高效的人臉識(shí)別,其關(guān)鍵在于提取到精準(zhǔn)表征人臉的特征。從人臉圖像中找出最能表征人臉的特征空間, 是主成分分析(Principal Component Analysis,PCA)[2]在人臉特征提取中的基本思想。 在這個(gè)過程中,不能表征人臉的屬性會(huì)被剔除(降維的過程),也就是在一個(gè)高維特征空間中利用一組系數(shù)對(duì)特征加權(quán),來重新表示一張人臉圖片[3]。 PCA 過程的數(shù)學(xué)描述如下:
讀取樣本矩陣X={xi1,xi2,…,xin} (i=1,2,…,m),假設(shè)樣本矩陣是一個(gè)m 行n 列的矩陣, 其中m 為樣本數(shù)目,n 為特征數(shù)目。
用原始數(shù)據(jù)X 減均值之后可以得到Z={z1,z2,…,zn},其中
找到一個(gè)方向u1,使所有zi在u1方向上投影長度(方差)最大,即最大化展開可以得到
在這個(gè)過程中,如果要計(jì)算k 個(gè)方向(即降為k維),則保留前k 大的特征值對(duì)應(yīng)的特征向量V(V 為n 行×k 列)。
最后得到的降維后的數(shù)據(jù)為pcaA=(X-Z)×V,pcaA 是一個(gè)m 行k 列的矩陣。
1.1.2 支持向量機(jī)SVM
給定訓(xùn)練集, 在特征空間上找到一個(gè)分類超平面,將樣本點(diǎn)分到不同的類。存在唯一的分類超平面,使得樣本點(diǎn)距離分類超平面的距離最大。 其中,距離超平面最近的點(diǎn)為該超平面的支持向量。找到該超平面后,對(duì)于待測點(diǎn),通過計(jì)算該點(diǎn)相對(duì)于超平面的位置進(jìn)行分類。 其中,一個(gè)點(diǎn)距離分類超平面的距離越大, 表明分類預(yù)測的確信程度越高。 支持向量機(jī)(Support Vector Machine,SVM)[4,5]需要做的就是找出一個(gè)超平面, 使得在兩類樣本點(diǎn)能完全分離的情況下,盡可能使樣本邊界的距離最大。
定義正樣本邊界f(SV)=WTx++b=1,負(fù)樣本邊界f (SV)=WTx-+b=-1。 那么兩個(gè)邊界的距離等于正邊界上的點(diǎn)x*+(WTx*+b)=1 到負(fù)邊界(WTx-+b=-1)的距離:要最大化該距離,但是存在一個(gè)問題,函數(shù)在0 處不光滑,所以做一個(gè)變換, 求此函數(shù)的倒數(shù)的最小值, 即求的最小值,但此函數(shù)同樣存在在0 處不平滑這個(gè)問題。 最終函數(shù)滿足處處平滑這個(gè)條件,可以求出其最小值。
在這個(gè)過程中,可能存在一種問題:兩類樣本在原始空間中線性不可分。這時(shí)可以采用核函數(shù)將原始空間的點(diǎn)映射到高維空間中,在更高維的空間中找到一個(gè)線性分類將兩類樣本分開,從而使線性學(xué)習(xí)具有非線性可分的能力。
SVM 是一個(gè)兩類分類器,而大多數(shù)實(shí)際分類問題都是多類分類問題, 那么就需要利用SVM 這個(gè)二分類器去實(shí)現(xiàn)一個(gè)多類問題的分類。本文人臉識(shí)別程序中,采用的是一對(duì)一的投票策略,即在任意兩類樣本之間設(shè)計(jì)一個(gè)SVM 分類器,分類為得票最多的類。
本文通過MATLAB 工具軟件,對(duì)PCA-SVM 人臉識(shí)別方法進(jìn)行仿真計(jì)算。MATLAB 人臉識(shí)別程序的使用界面上分為三個(gè)按鈕:“開始運(yùn)行”“選擇照片”和“人臉識(shí)別”,既可以方便操作,又可以使識(shí)別結(jié)果直觀地顯示出來。點(diǎn)擊“開始運(yùn)行”按鈕調(diào)用的是主函數(shù)face.m,對(duì)人臉數(shù)據(jù)進(jìn)行處理;點(diǎn)擊“選擇照片”按鈕調(diào)用子函數(shù)GUIopen,用戶可以在相應(yīng)的文件路徑下選擇人臉照片;點(diǎn)擊“人臉識(shí)別”按鈕調(diào)用子函數(shù)GUIreg,通過每張圖片所對(duì)應(yīng)的標(biāo)簽來進(jìn)行匹配,從而得出識(shí)別結(jié)果。
人臉識(shí)別模型的建立首先需要適當(dāng)?shù)娜四槑?。本文分兩步?gòu)建人臉庫。
(1)選擇ORL 人臉數(shù)據(jù)庫加入本文人臉庫,其中包含40 個(gè)人的每人10 張人臉圖片, 一共400 張圖片,每張大小是112×92 像素,圖片格式是pgm。
(2)作者利用電腦攝像頭拍了10 張本人的照片,將這10 張圖片的格式轉(zhuǎn)化為pgm 格式, 同時(shí)大小也轉(zhuǎn)化為112×92 像素,加入本文人臉庫。
這里將每個(gè)人的前5 張人臉圖片作為訓(xùn)練集,后5張人臉圖片作為測試集。 訓(xùn)練集數(shù)據(jù)處理步驟如下:
(1) 讀入訓(xùn)練集數(shù)據(jù), 儲(chǔ)存在矩陣f_matrix(205*10304)中。
(2)對(duì)訓(xùn)練集數(shù)據(jù)進(jìn)行PCA 降維,本文選擇的降維維數(shù)是100。
(3)規(guī)范化特征數(shù)據(jù),將同一個(gè)樣本中的不同維度歸一化,從而對(duì)于不同的屬性之間也可以進(jìn)行比較。
這里特別增加了一個(gè)顯示特征臉的步驟。由于數(shù)據(jù)降至100 維, 在低維空間中的基就是100 張?zhí)卣髂槪渌薪?jīng)過降維的臉都可以通過這100 張?zhí)卣髂樉€性表示。 圖1 顯示了前10 個(gè)特征臉。
圖1 特征臉顯示
(4)利用SVM 分類器對(duì)訓(xùn)練樣本集進(jìn)行訓(xùn)練,獲得SVM 人臉識(shí)別模型。
在PCA-SVM 人臉識(shí)別模型建立中, 參數(shù)取值如下:
(1)npersons:樣本包含41 個(gè)人的人臉,將npersons設(shè)置為41。
(2)flag:flag 為0 時(shí)子函數(shù)ReadFace.m 讀取訓(xùn)練樣本數(shù)據(jù),flag 為1 時(shí)讀取測試樣本數(shù)據(jù)。
(3)k:表示降維至k 維。該參數(shù)在子函數(shù)fastPCA.m中以輸入?yún)?shù)出現(xiàn),在后面的SVM 訓(xùn)練中也有用處。k 值與gamma 值有很大關(guān)聯(lián),這里經(jīng)過反復(fù)調(diào)整將k設(shè)置為100。
(4)lowvec: 經(jīng)過降維后的圖像數(shù)據(jù)pcaface 的最小值,通過設(shè)置lownew,即新的邊界的下限,對(duì)數(shù)據(jù)進(jìn)行歸一化處理。
(5)upvec: 經(jīng)過降維后的圖像數(shù)據(jù)pcaface 的最大值,通過設(shè)置upnew,即新的邊界的上限,對(duì)數(shù)據(jù)進(jìn)行歸一化處理。
(6)核函數(shù):本文選擇的是高斯核函數(shù)。
(7)gamma: 參數(shù)gamma 是選擇高斯核函數(shù)RBF作為核函數(shù)后,該函數(shù)自帶的一個(gè)參數(shù)。 它隱含地決定了數(shù)據(jù)映射到新的特征空間后的分布。 gamma 越大,支持向量越少,反之支持向量越多。支持向量的個(gè)數(shù)直接影響到訓(xùn)練與預(yù)測的速度。gamma 如果設(shè)置得很大,會(huì)使得高斯分布顯得高而窄,只作用于支持向量樣本附近,對(duì)于未知樣本的分類效果很差,最終會(huì)導(dǎo)致訓(xùn)練準(zhǔn)確率很高, 而識(shí)別準(zhǔn)確率很低的結(jié)果,即過擬合。 而gamma 設(shè)置過小, 則會(huì)造成平滑效應(yīng)過大, 對(duì)于噪聲不敏感。 本文設(shè)置參數(shù)gamma 時(shí),在10-3~103的范圍依次嘗試,最終設(shè)置為0.01。
測試時(shí),首先讀取測試數(shù)據(jù),類似于處理訓(xùn)練數(shù)據(jù),需要對(duì)測試數(shù)據(jù)進(jìn)行降維和歸一化處理,然后利用訓(xùn)練所得的模型對(duì)測試數(shù)據(jù)集進(jìn)行分類識(shí)別。將識(shí)別結(jié)果與本身自帶的標(biāo)簽(即這是第幾個(gè)人的人臉圖片)進(jìn)行比對(duì),可以獲得識(shí)別準(zhǔn)確率。 測試結(jié)果表明,基于PCA-SVM 的人臉識(shí)別方法準(zhǔn)確率為85.85%,如圖2 所示。 這里選取第8 個(gè)人的人臉圖片作為示例,如圖3 所示,可以看到在最終的人臉識(shí)別階段可以準(zhǔn)確地進(jìn)行人臉識(shí)別。
圖2 人臉識(shí)別準(zhǔn)確率
圖3 人臉識(shí)別結(jié)果示例
人臉識(shí)別的發(fā)展方向就在于不斷提高識(shí)別準(zhǔn)確率和數(shù)據(jù)處理效率。 這不僅需要改進(jìn)圖像的特征提取,同時(shí)也需要改進(jìn)分類器的設(shè)計(jì),從而實(shí)現(xiàn)快速準(zhǔn)確的人臉識(shí)別。 本文采用MATLAB 工具軟件對(duì)基于PCA-SVM 的人臉識(shí)別方法進(jìn)行了探究,結(jié)果表明,基于PCA-SVM 的人臉識(shí)別方法效果良好,但還有較大的提高空間。 在以后的工作中,擬從優(yōu)化懲罰參數(shù)的角度提高該方法的性能。