學(xué)號(hào):17020110019? ? 姓名:高少魁
【嵌牛導(dǎo)讀】PCA算法作為一種經(jīng)典的數(shù)據(jù)降維算法滑蚯,可以對(duì)數(shù)據(jù)進(jìn)行有效的降維。降維具有如下一些優(yōu)點(diǎn):使得數(shù)據(jù)集更易使用抵栈、降低算法的計(jì)算開(kāi)銷(xiāo)告材、去除噪聲、使得結(jié)果容易理解古劲。本文對(duì)PCA算法原理進(jìn)行一些初步的介紹斥赋,之后使用matlab工具設(shè)計(jì)算法,使用ORL人臉數(shù)據(jù)庫(kù)产艾,完成一個(gè)簡(jiǎn)單的人臉識(shí)別功能灿渴。該算法識(shí)別準(zhǔn)確率達(dá)到了90%以上。
【嵌牛鼻子】數(shù)據(jù)降維? ? 人臉識(shí)別? ? 數(shù)據(jù)挖掘? ? 主成分分析算法
【嵌牛正文】
一胰舆、PCA算法介紹
PCA(Principal Components Analysis)即主成分分析骚露,也稱(chēng)主分量分析或主成分回歸分析法,是一種無(wú)監(jiān)督的數(shù)據(jù)降維方法缚窿,它通過(guò)降維棘幸,可以將多個(gè)指標(biāo)轉(zhuǎn)化為具有代表性的幾個(gè)特征來(lái)進(jìn)行分析。
PCA的主要步驟如下:
1倦零、對(duì)于樣本數(shù)據(jù)D=(x1,x2,x3,...,xm)误续,設(shè)其維度為n吨悍,若使用PCA將其維度降到n’,首先對(duì)樣本進(jìn)行去中心化:
2蹋嵌、計(jì)算樣本的協(xié)方差矩陣XXT育瓜。
3、對(duì)協(xié)方差矩陣計(jì)算特征值和特征向量栽烂。
4躏仇、取出最大的n’個(gè)特征值對(duì)應(yīng)的特征向量,將特征向量標(biāo)準(zhǔn)化后組成特征矩陣W腺办。
5焰手、對(duì)于樣本集的每一個(gè)樣本xi,使用如下公式轉(zhuǎn)化為新的樣本:
6怀喉、經(jīng)過(guò)上一步計(jì)算书妻,即可得到輸出的樣本集。
二躬拢、利用PCA進(jìn)行人臉識(shí)別的原理
要利用此算法進(jìn)行人臉識(shí)別躲履,就要先對(duì)人臉圖像進(jìn)行一些預(yù)處理。在獲得的ORL人臉數(shù)據(jù)庫(kù)中聊闯,人臉的灰度圖片大小為112×92工猜,在讀取人臉之后將其轉(zhuǎn)化為1×10304(92×112=10304)的行向量,這樣馅袁,一張人臉就被轉(zhuǎn)化為一系列的行向量域慷,便于后續(xù)的處理。
進(jìn)行數(shù)據(jù)預(yù)處理后汗销,就可以將人臉圖像集使用PCA算法進(jìn)行處理犹褒,通過(guò)去中心化得到一張平均值臉,之后計(jì)算其協(xié)方差矩陣及其特征值和特征向量弛针,再將特征值排序后進(jìn)行篩選叠骑;通過(guò)去中心化得到的差分臉矩陣的轉(zhuǎn)置與特征向量相乘,即可得到特征臉削茁,筆者保留了原特征值85%的能量宙枷,并取出了對(duì)應(yīng)的特征值組成了特征臉。
得到特征臉之后茧跋,就可以使用測(cè)試集進(jìn)行驗(yàn)證了慰丛。訓(xùn)練集中每一張圖片向量d乘以特征臉即為圖片向量在特征臉空間上的投影向量pi,而測(cè)試集的圖片同樣做這個(gè)操作瘾杭,得到投影向量p诅病,此時(shí)可以通過(guò)計(jì)算p與上面所有的pi的歐氏距離,與p的距離最小的pi所對(duì)應(yīng)的訓(xùn)練集人臉即是識(shí)別的人臉類(lèi)別。
三贤笆、使用的人臉數(shù)據(jù)集
筆者的人臉數(shù)據(jù)集來(lái)自O(shè)RL數(shù)據(jù)庫(kù)蝇棉,共選取了40個(gè)人的人臉圖像,每個(gè)人有10張不同表情的圖片芥永,一共有400張篡殷。根據(jù)實(shí)際應(yīng)用場(chǎng)景,選取前7張為訓(xùn)練集埋涧,后3張為測(cè)試集板辽。得到特征臉后,將測(cè)試集的人臉傳入recognition函數(shù)進(jìn)行識(shí)別飞袋,得到的類(lèi)別與真實(shí)類(lèi)別作對(duì)比戳气,最后將結(jié)果統(tǒng)計(jì)链患,得到識(shí)別精確率巧鸭。
ORL人臉數(shù)據(jù)庫(kù)(樣例)如下圖:
四、算法設(shè)計(jì)
筆者使用的語(yǔ)言為matlab麻捻。
1纲仍、數(shù)據(jù)加載
由于人臉數(shù)據(jù)庫(kù)文件夾的命名非常規(guī)律治笨,為’face1’逞泄,’face2’等年枕,因此數(shù)據(jù)加載部分主要是使用循環(huán)語(yǔ)句填大,通過(guò)字符串拼接生成每一次要讀取的圖片的路徑蔗喂,讀取圖片之后通過(guò)rgb2gray函數(shù)將其轉(zhuǎn)化為灰度圖像(如果原圖像為彩色人臉圖像的話)颠蕴,之后使用reshape函數(shù)將原先為92×112的圖像轉(zhuǎn)化為1×10304的行向量哨免,拼接到傳出的數(shù)據(jù)矩陣data中亚情,最后將讀取數(shù)據(jù)結(jié)果data返回給調(diào)用它的主函數(shù)摊腋。
2沸版、PCA訓(xùn)練
該部分主要是計(jì)算人臉數(shù)據(jù)的協(xié)方差矩陣、特征值兴蒸、特征向量以及得到特征臉等视粮,由于matlab在這一領(lǐng)域的庫(kù)函數(shù)十分齊全,因此該部分算法設(shè)計(jì)較為簡(jiǎn)單橙凳。上一步得到的數(shù)據(jù)集為一個(gè)二維矩陣蕾殴,每一張人臉轉(zhuǎn)化為1×10304的行向量,一共有40×7=280張人臉岛啸,因此钓觉,數(shù)據(jù)集為280×10304的矩陣。數(shù)據(jù)集通過(guò)mean函數(shù)可以得到平均臉坚踩,再將每行表示的人臉減去平均臉荡灾,即可得到去中心化的人臉(實(shí)驗(yàn)中稱(chēng)為差分臉)。將差分臉乘以其轉(zhuǎn)置可得到協(xié)方差矩陣,通過(guò)eig函數(shù)即可計(jì)算其特征值和特征向量卧晓。特征向量與差分臉進(jìn)行計(jì)算得到特征臉芬首,通過(guò)將特征值排序,保留了85%的能量逼裆,將特征值對(duì)應(yīng)的特征臉作為輸出郁稍,之后的識(shí)別步驟,即可將人臉投影到特征臉空間中去以求出兩張要對(duì)比臉的歐氏距離胜宇。
3耀怜、人臉識(shí)別
程序中的recognition函數(shù)為核心的識(shí)別程序。根據(jù)前文提到的步驟桐愉,每張訓(xùn)練集人臉都可以通過(guò)特征臉與該人臉向量轉(zhuǎn)置的乘運(yùn)算得到投影财破,而測(cè)試集圖片也經(jīng)過(guò)此步驟得到其在特征臉空間的投影。不難看出从诲,如果在訓(xùn)練集中含有測(cè)試集的人臉左痢,那么測(cè)試集圖片的投影一定與訓(xùn)練集中某個(gè)圖像投影的歐氏距離很小且與其他不屬于測(cè)試集類(lèi)別的人臉圖片投影的歐氏距離很大,通過(guò)計(jì)算歐式距離中的最小值及其索引系洛,即可得到所識(shí)別人臉的類(lèi)別代號(hào)(1~40)俊性,這樣就完成了一次人臉識(shí)別。
4描扯、主程序
為了測(cè)試此算法的準(zhǔn)確性定页,光靠輸出測(cè)試集圖像和訓(xùn)練集中匹配的人臉圖像,通過(guò)人工對(duì)比是遠(yuǎn)遠(yuǎn)不夠的绽诚,尤其在數(shù)據(jù)庫(kù)中含有雙胞胎的情況下典徊,人工也會(huì)出現(xiàn)錯(cuò)誤,因此可以將人臉識(shí)別算法輸出的該測(cè)試集屬于的類(lèi)別與傳入的測(cè)試集真正屬于的類(lèi)別作比較恩够,如果人臉識(shí)別成功卒落,那么兩個(gè)類(lèi)別代號(hào)一定是相同的。因此玫鸟,在主程序的設(shè)計(jì)上导绷,我使用了循環(huán)語(yǔ)句,通過(guò)人臉類(lèi)別和某張人臉的不同表情構(gòu)造了雙重循環(huán)屎飘,每個(gè)類(lèi)別的人臉使用了后三張作為測(cè)試集妥曲,將某張人臉傳入人臉識(shí)別函數(shù),輸出的類(lèi)別與實(shí)際人臉類(lèi)別作比較钦购,如果相同則命中的計(jì)數(shù)加一檐盟,最終將命中數(shù)除以一共傳入的圖片數(shù),得到人臉識(shí)別正確率押桃。同時(shí)葵萎,為了使運(yùn)行者能夠直觀且具體的看到識(shí)別的結(jié)果,在類(lèi)別號(hào)為12時(shí),輸出了傳入的測(cè)試圖片與識(shí)別到的與其最接近的人臉圖像羡忘。
五谎痢、算法運(yùn)行結(jié)果
可見(jiàn),在訓(xùn)練集為280張人臉圖像卷雕,測(cè)試集為120張圖像時(shí)节猿,120張圖像正確識(shí)別了110張,識(shí)別識(shí)別精確率達(dá)到了91.6667%漫雕,識(shí)別正確率較高滨嘱。在程序效率方面,訓(xùn)練數(shù)據(jù)一共使用了大約5秒浸间,整個(gè)程序運(yùn)行結(jié)束使用了約14.5秒太雨,120張測(cè)試集進(jìn)行識(shí)別時(shí)共用了約9.56秒,平均識(shí)別一張人臉需要大約0.08秒魁蒜,識(shí)別速度是較快的囊扳。
為了使運(yùn)行者能夠直觀且具體的看到識(shí)別的結(jié)果,在類(lèi)別號(hào)為12時(shí)梅惯,輸出了三組傳入的測(cè)試圖片與識(shí)別到的與其最接近的人臉圖像宪拥,如下圖:
通過(guò)分析以上結(jié)果可以看出仿野,三張測(cè)試圖片中有兩張((a)和(c))被成功識(shí)別铣减,輸出了與其最相似人臉的類(lèi)別號(hào)12,而第二張(b)識(shí)別錯(cuò)誤脚作,輸出的類(lèi)別號(hào)為40葫哗,而通過(guò)觀察也很容易看出第二張人臉識(shí)別錯(cuò)誤。
六球涛、算法局限性
(1)數(shù)據(jù)集只有40個(gè)人劣针,一共400張圖像,而測(cè)試集也只設(shè)計(jì)了120張亿扁,數(shù)據(jù)集過(guò)于小會(huì)使識(shí)別準(zhǔn)確率偏離實(shí)際捺典;
(2)280張訓(xùn)練集在訓(xùn)練時(shí)間上使用了5秒,但如果訓(xùn)練集進(jìn)一步增大會(huì)影響程序運(yùn)行速度从祝,因此需要設(shè)計(jì)更高效的算法使運(yùn)行效率提高襟己。