胡沐晗
摘 要: PCA(主成分分析)與SVM(支持向量機)技術(shù)對于人臉識別而言非常重要,文章結(jié)合PCA與SVM來設(shè)計一個人臉識別系統(tǒng)。在MATLAB編譯環(huán)境下,分別探討PCA技術(shù)與SVM技術(shù),總結(jié)出一種快速PCA算法以及SVM的測試與訓練算法;從orl_faces人臉庫中選取訓練數(shù)據(jù)與測試數(shù)據(jù)進行訓練與測試,對其中重要的參數(shù)進行調(diào)優(yōu),最終達到90%的識別成功率。再經(jīng)真實人臉的訓練與測試,達到了73%的真實人臉識別成功率。
關(guān)鍵詞: PCA技術(shù); SVM技術(shù); 人臉識別; 訓練數(shù)據(jù); 測試數(shù)據(jù); matlab
中圖分類號:TP391.4 文獻標志碼:A 文章編號:1006-8228(2017)12-60-04
Face recognition system based on PCA and SVM
Hu Muhan
(Department of Information, ZhongBei College of NanJing Normal University, Nanjing, Jiangsu 210046, China)
Abstract: PCA (Primary Component Analysis) and SVM (Support Vector Machine) technologies are very important for face recognition. This paper combines PCA and SVM to design a face recognition system. In the MATLAB compiler environment, the PCA technology and SVM technology are discussed, a fast PCA algorithm is summed up as well as the test and training algorithm for SVM; the training data and test data are selected from the orl_faces database to train and test, the important parameters are optimized, and 90% recognition success rate is ultimately achieved. After the training and testing by real face, the success rate of 73% real face recognition is achieved.
Key words: PCA; SVM; face recognition; training data; testing data; MATLAB
0 引言
人臉識別是人工智能領(lǐng)域的一個重要技術(shù)。如今,人臉識別技術(shù)已經(jīng)在我們的生活中被廣泛應(yīng)用,例如人臉識別門禁考勤系統(tǒng),公安部的人臉識別網(wǎng)絡(luò)等。本研究項目主要立足于PCA(主成分分析方法)以及SVM(支持向量機)來對圖像進行識別,PCA與SVM是處理圖像的重要技術(shù),其中涉及的圖像降維處理,機器訓練對人像識別尤其重要。
1 PCA技術(shù)
1.1 PCA技術(shù)原理
PCA技術(shù)是將高維的數(shù)據(jù)通過投影方式,降至低維的平面上[1],即乘以少于向量本身維數(shù)的基,來達到降維的效果。具體我們可以通過一個例子展開,如下列矩陣:
首先將每個字段內(nèi)所有值減去均值,結(jié)果每個字段都變?yōu)榫禐?,變換后:
若要將圖1的點降維,則要進行投影,即乘以所選方向的基,不過若向X軸投影,那么最左邊的兩個點將重疊,中間的兩個點也將重疊,若想要盡量多的保存信息,則要選擇一個投影平面使得投影值盡量的分散,而在數(shù)學上,判定一個數(shù)值分散程度的量是方差,方差即每個元素與字符段均值的差的平方和的均值,即:
由于上文已將字段均值減為0,所以可表示為:
方差越大,則投影的數(shù)據(jù)越分散,從而數(shù)據(jù)可盡量多的保存。
正如以上所述,PCA技術(shù)原理之一即保證投影降維之后方差盡可能大,從而保留更多的數(shù)據(jù)[2-4],但除此之外PCA還需要處理另一個問題,例如對于三維降到二維的問題來說,需要選擇兩個投影的方向,我們需要引入另一個約束條件,即不希望兩個投影方向之間存在線性相關(guān)性,因為相關(guān)性必然意味著存在重復(fù)信息。數(shù)學上可以用協(xié)方差來表示其相關(guān)性即:
當協(xié)方差為0時,表示兩個字段完全獨立,為了讓協(xié)方差為0,我們選擇第二個基時只能在第一個基正交的方向上選擇,因此最終選擇得兩個方向一定正交。
1.2 PCA的具體操作
1.2.1 快速PCA算法
普通PCA算法存在一個問題,即對于協(xié)方差矩陣M而言,M是由ZT*Z得出,而Z是一個m*n的矩陣,所以ZT*Z是一個n*n的矩陣,往往在圖像中,n的值遠遠大于m,所以對這樣一個協(xié)方差矩陣求特征值特征向量開銷會非常巨大,因此我們需要一種更高效的PCA算法。
對于M=ZT*Z有M*V=D*V,其中V是M的特征向量,D是M的特征值,因此兩邊乘以得到M*ZT*V= D*ZT*V,所以(ZT*Z)*ZT*V=D*ZT*V,又設(shè)N=Z*ZT,且(ZT*Z)*ZT*V=ZT*(Z*ZT)*V所以ZT*N*V=D*ZT*V=ZT*D*V,所以根據(jù)以上數(shù)學公式的推導(dǎo),可以看出M的特征值D和特征向量V可以通過N來獲得,因為M如上所述是一個n*n的矩陣,而N=Z*ZT且Z=m*n,所以N是一個m*m的矩陣,因n遠大于m,故通過N求得M的特征值和特征向量將會減小資源的開銷,提高PCA降維的效率,因此可以得到一個快速PCA算法,步驟如下。
⑴ 將原始數(shù)據(jù)按列組成一個m行n列的矩陣Z。
⑵ 將Z的每一行減去零均值化,減去均值。
⑶ 設(shè)矩陣N=Z*ZT。
⑷ 求出N的特征值和特征向量,使用eigs函數(shù)將特征值從大到小排列,取出前K個特征值對應(yīng)的特征向量。
⑸ 乘以ZT得到M的沒有單位化的特征向量。
⑹ 對協(xié)方差矩陣M進行單位化。
⑺ 原始矩陣Z乘以特征向量V,得到降至K維的矩陣。
1.2.2 PCA降維
完成PCA算法后,接下來就是使用它對一組圖片進行降維處理,這里我們使用了orl_faces圖片庫,其中有40個人,每個人10張照片,總共400張照片,然后對所有圖片讀入減去均值到一張平均臉,然后將圖片進行PCA降維之后還原得到還原臉。
可以看出,相對于圖3,圖2保留了大量特征,K值越高,即降的維數(shù)越高,圖像越清晰,保留的特征越多。
兩種PCA算法的比較:
普通PCA算法降至100,200,300,400維的時間總共為81秒,而快速PCA算法所需時間僅0.4秒。
2 SVM技術(shù)
2.1 SVM技術(shù)原理
2.1.1 SVM技術(shù)簡介
SVM技術(shù)可以將一些數(shù)據(jù)點分為兩個不同的類[5-7],如圖4所示,現(xiàn)有一個二維平面,平面上有兩種不同的數(shù)據(jù),分別用圈和叉表示。由于這些數(shù)據(jù)是線性可分的,所以可以用一條直線將兩類數(shù)據(jù)分開,這條直線相當于一個超平面,超平面一邊的數(shù)據(jù)點對應(yīng)的Y全是-1。另一邊所對應(yīng)的Y全是1。
因此,對于人臉識別而言,我們可以通過標簽來區(qū)分兩個不同的人臉,即將一組人臉標志為1,另一組人臉標志為0。然后,如圖4所示這個超平面可以f(x)=ωTx+b來表示,當f(x)等于0時,x便是位于超平面上的點,當f(x)大于0的點對應(yīng)的y=1的數(shù)據(jù)點,f(x)小于零對應(yīng)y=-1這個點,如圖5所示。
以上通過SVM處理的都是線性可分的點,而對于線性不可分的點而言,要做的是將這些點投放到更高維的空間中進行處理,不過對于機器而言,投射的維度越高意味著模型的復(fù)雜度越高,處理數(shù)據(jù)的開銷也就越大,從而泛化誤差也就越大,因此為了處理線性不可分的數(shù)據(jù),我們引入了高斯核函數(shù),核函數(shù)對于線性不可分的點不用投放到高維空間進行處理,只用在低維空間運算就可以計算高維空間的內(nèi)積。
2.1.2 SVM技術(shù)中的重要參數(shù)
SVM模型中有兩個非常重要的參數(shù)C和gamma。SVM的目標函數(shù):
其中C代表懲罰因子,即在線性不可分的情況下,對分類錯誤的懲罰程度。C越高往往越不能容忍誤差,因此容易過擬合,C越小,分類器會越不在乎分類錯誤,會欠擬合。
gamma是選擇RBF函數(shù)作為核函數(shù)后,該函數(shù)自帶的一個參數(shù)。隱含地決定了數(shù)據(jù)映射到新的特征空間后的分布。RBF核函數(shù):
其中g(shù)amma=-,對于gamma的物理意義而言,它影響的是每個支持向量對應(yīng)的高斯作用范圍,從而影響泛化性能,gamma越大,σ越小,對應(yīng)的支持向量也就越少,gamma值越小則支持向量越多。支持向量的個數(shù)影響訓練與預(yù)測的個數(shù)。因此c和gamma兩個參數(shù)的調(diào)優(yōu)對于后續(xù)的人臉識別系統(tǒng)的成功率是非常重要的。
2.2 SVM的具體操作
2.2.1 SVM訓練函數(shù)
這次我們選取兩組圖片來進行SVM處理,其中一組為訓練數(shù)據(jù),一組為測試數(shù)據(jù),訓練數(shù)據(jù)對應(yīng)的是0-9共十個不同數(shù)字,每個數(shù)字有5張圖片,測試數(shù)據(jù)也是0-9十個不同數(shù)字,每個數(shù)字3張圖片。除了選取數(shù)據(jù)之外,最重要的是編寫SVM訓練函數(shù)與SVM測試函數(shù)。SVM訓練函數(shù)步驟如下。
⑴ 將50張圖片數(shù)據(jù)讀入矩陣,每個數(shù)字對應(yīng)5張圖片,形成訓練數(shù)據(jù)。
⑵ 將前5張打上標簽為1,后5張數(shù)字打上標簽0。
⑶ 調(diào)用matlab庫中的SVMtrain函數(shù),進行訓練,通過循環(huán)產(chǎn)生45個分類器。
⑷ 將分類器存入矩陣中。
2.2.2 SVM測試函數(shù)
SVM訓練函數(shù)主要是用來形成分類器,接下來,就要通過這個分類器來編寫SVM測試函數(shù),測試函數(shù)主要是運用了投票的理念,SVM測試函數(shù)步驟如下:
⑴ 將30張圖片數(shù)據(jù)讀入矩陣,每個數(shù)字對應(yīng)3張圖片,形成測試數(shù)據(jù)。
⑵ 讀入測試數(shù)據(jù),獲取測試數(shù)據(jù)的容量m,以及分類的容量n,形成一個m*n的voting矩陣。
⑶ 根據(jù)分類器對測試數(shù)據(jù)進行比對,通過svmclassify庫函數(shù)返回標簽,如果標簽對應(yīng)的是1,則測試數(shù)據(jù)在對應(yīng)數(shù)字數(shù)目加一,如果標簽對應(yīng)的是零,則在另一個數(shù)字數(shù)目加一。
⑷ 最后,找到每個測試數(shù)據(jù)中對應(yīng)數(shù)目最多的數(shù)字,這個數(shù)字即跟這個測試數(shù)據(jù)匹配。
設(shè)置c=1,gamma=0.0001,最后經(jīng)過SVM訓練和測試,我們對測試數(shù)據(jù)30張數(shù)字圖片的識別成功率為86.67%。
3 結(jié)合PCA與SVM的人臉識別系統(tǒng)
這個人臉識別系統(tǒng)采用的數(shù)據(jù)主要是orl_faces人臉庫中的40個人總共400張人臉,其中前五張作為訓練數(shù)據(jù),后五張作為測試數(shù)據(jù),主要流程如下。
⑴ 將40個人的人臉總共400張圖讀入,其中前五張作為訓練數(shù)據(jù),后五張作為測試數(shù)據(jù)。
⑵ 將訓練數(shù)據(jù)進行PCA變換,得到降維后的矩陣,然后用scaling對數(shù)據(jù)標準化,使其在-1到1的范圍內(nèi),增加識別成功率。
⑶ 將訓練數(shù)據(jù)放入SVM訓練函數(shù)中,產(chǎn)生分類器。
⑷ 將測試數(shù)據(jù)進行PCA降維,然后放入SVM測試函數(shù)中。
⑸ 將測試函數(shù)產(chǎn)生的標簽與現(xiàn)實圖片標簽進行比對,輸出成功率。
最后,如圖7所示當降維數(shù)K=80時,經(jīng)過對gamma和C的調(diào)參,當C在70到80的范圍內(nèi),gamma在0.005到0.02的范圍內(nèi)時,識別成功率最 高可達90%。然后,我們將C設(shè)置為70,gamma設(shè)置為0.015,K設(shè)置為80,將小組內(nèi)三個人共30張照片放入orl_faces人臉庫進行比對,成功率只有73%。而將30張真實人臉單獨進行訓練,測試,識別成功率只有60%。真實人臉比對的圖如圖8、圖9、圖10、圖11和圖12所示。
以上可以看出圖8,圖9識別都正確,而圖10識別錯誤主要是光線問題,圖11,圖12識別錯誤主要是相似特征太多,如黑框眼鏡。
4 結(jié)束語
為了制作一個人臉識別系統(tǒng)并且實現(xiàn)人臉識別的功能,本文將PCA與SVM技術(shù)結(jié)合,分別用于對圖片降維提取重要特征以及訓練機器識別不同的圖片,最終在orl_faces人臉庫中測試達到了90%的識別成功率,但是如果將真實人臉圖片進行識別,成功率只有73%。本系統(tǒng)在特定的人臉庫中證明是可行的,下一步需考慮如何減少像光照,濕度,以及過于相似的特征對于識別成功率的影響,從而使本系統(tǒng)更好的識別真實人臉。
參考文獻(References):
[1] 金忠.人臉圖像特征抽取與維數(shù)研究[D].南京理工大學碩士
學位論文,1999.
[2] 徐勇,張重陽,楊靜宇.基于主分量特征與獨立分量特征的人
臉識別實驗[J].計算機工程與設(shè)計,2005.26(5):1155-1157
[3] 陳伏兵.人臉識別中鑒別特征抽取若干方法研究[D].南京理
工大學,2006.
[4] 張翠平,蘇光大.人臉識別技術(shù)綜述[J].中國圖像圖形學報,
2000.5(11):885-894
[5] Javed A. Face Recognition Based on Principal Component
Analysis[J]. International Journal of Image, Graphics and Signal Processing(IJIGSP),2013.5(2):38
[6] Stan Z.Li Anil K.Jain. Handbook of Face Recognition[M].
New York:Springer,2004.5.
[7] Wayman J L Jain A K Maltoni D et al.Biometric Systems:
Technology, Design and Performance Evaluation[M].London:Springer,2005.