陳軻
摘要:本次報告的工作是利用PCA,SVM以及人工神經(jīng)網(wǎng)絡(luò)(ANN)實(shí)現(xiàn)對人臉的特征提取、分類和預(yù)測。然后利用GAN(生成對抗網(wǎng)絡(luò))實(shí)現(xiàn)對手寫數(shù)字的生成,并用SVM做預(yù)測,驗證生成效果。
本次報告采用的數(shù)據(jù)源自劍橋大學(xué)的ORL 人臉數(shù)據(jù)庫,其中包含40個人共400張人臉圖像。
關(guān)鍵詞:人工智能;圖像識別;數(shù)據(jù)
中圖分類號:TP18 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2018)13-0173-02
1 PCA降維
PCA(principal components analysis)即主成分分析,又稱主分量分析。旨在利用降維的思想,把多指標(biāo)轉(zhuǎn)化為少數(shù)幾個綜合指標(biāo)。
首先我們給出了數(shù)據(jù)庫的平均臉的圖像,并利用PCA對人臉降維,通過改變降低到的維度研究了保留維度的多少帶來的影響。最后給出了每一個維度的特征臉圖像,討論了每一個維度所能夠代表的人臉信息。
1.1 平均臉
首先,我們將數(shù)據(jù)庫中400張人臉按行存儲到一個矩陣中,即每一行為一張人臉(10304像素),每張人臉共10304維特征。我們對每一個維度去平均,構(gòu)成一個新的行向量,這就是平均臉。
平均臉反映了數(shù)據(jù)庫中400張人臉的平均特征,可以看清人臉的輪廓,但無法識別人臉的局部細(xì)節(jié)。
1.2 降低至不同維度時還原臉的情況
從左到右從上到下依次是同一張臉降低至10,30,50,100,200,250,300,350,400的圖像??梢钥吹剑S著保留維數(shù)的增多,圖像越清晰,與原圖的差異越小。
1.3 提取單一維度的特征做還原
為了研究不同維度所代表的人臉的信息,我們把PCA之后的每一個特征向量單獨(dú)提取出來對人臉做還原,還原的時候不加入平均臉并且做直方圖均衡化。
結(jié)果如下:
每一張圖像下方的數(shù)字代表了PCA之后按特征值從大到小排序的順序,比如第一張圖代表PCA之后最大特征值所對應(yīng)的特征向量還原出的人臉。
特征累積圖的縱坐標(biāo)代表了所保留的特征占總特征的比例。它是這樣計算出來的,假設(shè)保留k維信息,則縱坐標(biāo)值為這k個特征值的和除以總的400(400*10304的矩陣,最多有400個非零特征值)個特征值的和。
從圖4可以看出,當(dāng)保留維數(shù)為100維時,即能保留人臉90%的信息,而之后隨著保留維數(shù)的增多,保留信息的增多變緩。
同樣的結(jié)論也可由提取每個維度所代表的特征獲得。從前到后觀察實(shí)驗所得的圖像,我們可以發(fā)現(xiàn),人臉變得越來越模糊,到100維以后已經(jīng)分辨不清人臉了。這就說明前面的維度反映了大眾臉的特征,而越往后面的維度則反映不同人臉的細(xì)節(jié),比如頭發(fā)長短等等,以及圖片噪聲。
2 SVM對人臉分類
SVM(支持向量機(jī))是Corinna Cortes和Vapnik等于1995年首先提出的,在機(jī)器學(xué)習(xí)中,支持向量機(jī)是與相關(guān)的學(xué)習(xí)算法有關(guān)的監(jiān)督學(xué)習(xí)模型,可以分析數(shù)據(jù),識別模式,用于分類和回歸分析。
2.1 制作多分類器
用PCA對人臉降維以后,我們用SVM將400張人臉進(jìn)行分類。我們?nèi)∶總€人的前五張照片合并起來共200張作為訓(xùn)練集,每個人后五張照片合并起來共200張作為測試集。40個人即有40個標(biāo)簽,也就是有40類,但SVM只能作二分類器,因此我們利用二分類器生成多分類器,基本思想是制作C(40,2)個一對一分類器(也就是每兩個類別一個),每一張照片都分別用所有一對一分類器分類,分類結(jié)果存儲到投票矩陣中,分類結(jié)果就是投票矩陣中數(shù)字最大的那個。
分類前,我們還需對PCA后的數(shù)據(jù)進(jìn)行歸一化處理,將圖像矩陣的每一個元素映射到(-1,1)之間。
2.2 參數(shù)選擇及程序結(jié)果
1)分類數(shù)據(jù):每人取前五張做訓(xùn)練,后五張做測試(不加入自己的人臉)
SVM參數(shù)設(shè)定:k = 75(PCA降至75維)
Sigma = 30
c = 15
預(yù)測準(zhǔn)確率: accuracy=0.8950
2)每人取前五張做訓(xùn)練,后五張做測試(加入自己的人臉)
SVM參數(shù)同上,
預(yù)測準(zhǔn)確率: accuracy=0.8585
我們發(fā)現(xiàn),當(dāng)加入自己拍攝的人臉圖像后,預(yù)測準(zhǔn)確率有一定的下降,這可能是由于拍照時的光線,角度等造成的。
3 ANN對人臉分類
人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Networks,簡寫為ANNs)也簡稱為神經(jīng)網(wǎng)絡(luò)(NNs)或稱作連接模型(Connection Model),它是一種模仿動物神經(jīng)網(wǎng)絡(luò)行為特征,進(jìn)行分布式并行信息處理的算法數(shù)學(xué)模型。這種網(wǎng)絡(luò)依靠系統(tǒng)的復(fù)雜程度,通過調(diào)整內(nèi)部大量節(jié)點(diǎn)之間相互連接的關(guān)系,從而達(dá)到處理信息的目的。
為了方便與SVM的結(jié)果作比對,ANN的訓(xùn)練集和測試集與SVM相同,并且不加入自己人臉。
3.1 ANN結(jié)果及與SVM分類比較
ANN分類結(jié)果:
ANN參數(shù)設(shè)定為:1個隱層,含200個神經(jīng)元
學(xué)習(xí)率:1
dropout fraction:0.5
激活函數(shù):sigmoid
L2正則:0.0001
epoch:200
batchsize:50
分類錯誤率:
即分類準(zhǔn)確率(accuracy)為:93.5%
實(shí)驗過程中可以發(fā)現(xiàn),通過對神經(jīng)網(wǎng)絡(luò)多個參數(shù)的調(diào)節(jié),準(zhǔn)確率的變化是很復(fù)雜的,最終的93.5%的準(zhǔn)確率應(yīng)該還有上升的空間,參數(shù)還待進(jìn)一步調(diào)整。
與SVM比較起來,ANN準(zhǔn)確率更高,但分析表明,對于本次報告所采用的數(shù)據(jù)庫,ANN和SVM的準(zhǔn)確度不會有太大差異,因此SVM的參數(shù)或許還可以進(jìn)一步優(yōu)化。
4 GAN生成手寫數(shù)字
生成對抗網(wǎng)絡(luò)(GAN)是一種深度學(xué)習(xí)模型,是近年來復(fù)雜分布上無監(jiān)督學(xué)習(xí)最具前景的方法之一。模型通過框架中(至少)兩個模塊:生成模型(Generative Model)和判別模型(Discriminative Model)的互相博弈學(xué)習(xí)產(chǎn)生相當(dāng)好的輸出。原始 GAN 理論中,并不要求 G 和 D 都是神經(jīng)網(wǎng)絡(luò),只需要是能擬合相應(yīng)生成和判別的函數(shù)即可。但實(shí)用中一般均使用深度神經(jīng)網(wǎng)絡(luò)作為 G 和 D 。
在下面的工作中,我們利用已有的手寫數(shù)字(0-9)圖片(60000張用于訓(xùn)練,10000張用于測試),對生成對抗網(wǎng)絡(luò)(GAN)進(jìn)行訓(xùn)練并生成手寫數(shù)字,每個數(shù)字提取5000個樣本作為訓(xùn)練集。最后用SVM對電腦生成的手寫數(shù)字分類,看是否能“騙過”分類器。
4.1 參數(shù)設(shè)定及程序結(jié)果
首先,我們選取一個想要生成的手寫字體,將已有數(shù)據(jù)中所有該字體挑出并取前5000個作為訓(xùn)練集。
參數(shù)設(shè)定:生成器(generator):輸入層、隱層和輸出層分別有100,512,784個神經(jīng)元。
識別器(discriminator):輸入層、隱層和輸出層分別有784,200,1個神經(jīng)元。
學(xué)習(xí)率:0.01
Batchsize:50
更新判別器時的迭代次數(shù)設(shè)為1
生成訓(xùn)練集:
load('mnist_uint8');
classify_num = 9;
classify_matrix = zeros(1,10);
classify_matrix(classify_num+1) = 1;
choose = zeros(size(train_x,1),1);
for i=1:size(train_x,1)
if(train_y(i,:)==classify_matrix)
choose(i) = choose(i)+1;
end
end
choose = logical(choose);
train_x = train_x(choose,:);
train_x = train_x(1:5000,:);
train_x = double(reshape(train_x, 5000, 28, 28))/255;
train_x = permute(train_x,[1,3,2]);
train_x = reshape(train_x, 5000, 784);
生成器損失雖然不是很低,但是最終基本穩(wěn)定。
4.2 SVM對生成手寫數(shù)字做分類
我們用GAN分別生成0到9的手寫數(shù)字,將生成的圖片作為測試集用SVM做分類,看是否能分到正確的類別。
Result是SVM中的投票矩陣,投票數(shù)最多的一個的序號減一即為所分到的類別(數(shù)字0-9)。這里的SVM區(qū)別于前面所討論的人臉識別的SVM,它是由45個(C(10,2))一對一分類器生成的多分類器。
可以看到,每一個由GAN生成的手寫數(shù)字均被SVM分到了正確的類別,如此可見GAN實(shí)在強(qiáng)大。
5 總結(jié)
運(yùn)用PCA對原始數(shù)據(jù)進(jìn)行降維,不僅能夠保留原始的主要信息,而且可以減少算法的執(zhí)行時間。通過組合SVM的二分類器來生成多分類器實(shí)現(xiàn)對人臉的識別,準(zhǔn)確率達(dá)到89.5%,用人工神經(jīng)網(wǎng)絡(luò)ANN進(jìn)行分類準(zhǔn)確率達(dá)到93.5%。最后利用GAN生成手寫字體,SVM全部正確地進(jìn)行了分類,這表明GAN生成的手寫數(shù)字是十分逼真的。
參考文獻(xiàn):
[1] 劉振明.基于J2EE新聞門戶網(wǎng)站的設(shè)計與研究[D].吉林大學(xué),2010(06):65-102.