劉 敏
(合肥財經職業學院人工智能學院 安徽合肥 230061)
PCA+SVM 是人們常用的面部識別算法,識別性能較好。但PCA+SVM 算法也需要提高識別精度,以應對大規模的人臉數據。所以,如何提高PCA+SVM 算法在人臉識別領域應用的精確度,是目前研究的一個重要方向。小波變換(dwt)是一種時頻分析方法,具有多分辨率、局部性和優秀的壓縮性等特點。小波變換可以將訊號分解為頻率不同、時間不同的多個子訊號,從而實現訊號的降維和特性的抽離。所以通過小波變的方式優化PCA+SVM算法,可以增強人臉識別的精確度。
PCA+SVM 算法的基本思路是,首先利用PCA 算法將高維度的人面圖像數據向低維度空間進行降維處理,再將降維處理后的數據送至SVM分類器進行分類處理。
(一)PCA算法。PCA算法是一種常用的降維方法,其基本思路是將高維數據通過線性變換映射到低維空間,從而達到數據維度的降低。在圖像處理中,PCA算法可以通過對圖像數據的協方差矩陣進行特征值分解來提取圖像的主成分,進而實現對圖像的降維操作。
假設有一個n 維的樣本數據矩陣X,每個樣本有m 個特征值,則可以通過以下步驟來實現PCA算法:
第一步:對數據進行中心化處理
計算出數據矩陣X每個特征值的均值,然后將數據矩陣X的每個樣本向量減去其均值,得到新的中心化數據矩陣Y。
第二步:計算數據的協方差矩陣
協方差矩陣C可以從一個中心化數據矩陣Y與Y的轉置矩陣YT與相乘得到。
第三步:特征值分解協方差矩陣
特征向量和對應特征值用特征值分解協方差矩陣C求得。
第四步:選取主成分
按特征值從大到小的順序取前k 個特征量,組成投影矩陣w。
第五步:進行降維操作
降維后的數據矩陣Z由原始數據矩陣X乘以投影矩陣計算得來。
(二)SVM分類器。SVM 是一種二分類模型,其基本思想是將原始數據映射到高維空間中,然后在高維空間中找到使正負樣本分離最好的最優超平面(surface)。在SVM 中,對于一個二分類題,假設訓練集中有n個樣本,每個樣本以m維的特征向量表示,其中xi 表示第i 個樣本,yi 表示該樣本的類別標記,取值為+1或-1。那么SVM分類題的基礎模型就可以表現為:
其中,C表示懲罰因子,b表示一個分類超平面的截距,w表示一個分類超平面的法向量,εi表示松弛變量。
DWT變換是一種基于小波分析的信號處理方法,可以將信號分解為不同尺度的子信號,并且能夠提取信號的局部特征。在圖像處理中,DWT可以將圖像分解為不同尺度和方向的子圖像,適用于圖像的多尺度表示和特征提取。
DWT的基本思想是將信號分解成不同的尺度,對各種尺度的子信號進行低通和高過濾。具體地,對于一個長度為N的信號x,可以進行J級DWT分解,得到J+1個子信號,其中第j級的低頻子信號Lj和高頻子信號Hj可以分別表示為:
其中,h、g 分別表示低通、高濾,L0 為原始信號,Lj 為第j級低頻子信號,Hj為第j級高頻信號,n為點索引。
(一)算法流程。本文提出的基于DWT 的PCA+SVM 算法優化方法的流程如下:

圖1 DWT+PCA+SVM算法優化流程圖
(二)算法實現步驟。本文提出的使用DWT 的PCA+SVM算法優化方法的具體步驟是:
1.用DWT分解原人的臉部形象為多條子帶。DWT是一種多尺度分析方法,其基本思想是通過對信號進行多級低通和高通濾波,得到一系列尺度不同、頻帶寬度逐漸減小的子信號。在人臉識別中,將原始人臉圖像分解為多個子帶,可以有效提取圖像的多尺度信息,提高人臉識別的魯棒性。
假設有一個大小為N×M的原始人臉圖像I,DWT分解的過程可以分為以下步驟:
Step1:將原始圖像I分解為四個子圖像
將原始圖像I 分成四個子圖像,即LH、HL、HH 和LL,其中LL子圖像是低頻子帶,而LH、HL和HH子圖像是高頻子帶。這個過程可以通過一個二維的 DWT 變換原始的圖像來實現,得到如下公示:
其中,Lj+1、Hj+1、Vj+1、Dj+1分別表示第j+1 級DWT 變換的低頻、水平高頻、垂直高頻和對角高頻子帶。
Step2:LL子圖像再次分解
將LL子圖像使用DWT再次分解,求得LL子圖像的下一級分解系數。這個過程可以重復多個等級,直到子帶的數量達到規定的要求。
Step3:重復Step1和Step2,得到所有的子帶
對于其他三個子圖像(LH、HL 和HH),可以重復Step1 和Step2 的過程,分別對這些子圖像進行DWT 分解,得到對應的子帶。
最終,將所有得到的子帶拼接在一起,得到一個多尺度子帶圖像序列$D={D_1,D_2,...,D_n}$,其中n為子帶數目。
實現這一步功能的主要代碼在MATLAB軟件中表示如下。

圖2 實現相關功能的主要代碼
2.對每個子帶進行PCA降維操作,選取最重要的特征子集作為輸入數據。對于每個子帶,我們可以按照以下步驟進行PCA降維操作,并選取最重要的特征子集作為輸入數據:
Step1:將子帶重構成矩陣X:
其中,xi為子帶中的一張人臉圖像。
Step2:對矩陣X的各個列進行零的均值化處理:
其中,ui和σi分別為第i列的均值和標準差。
Step3:計算X的協方差矩陣C:
Step4:對C 協方差矩陣特征值的分解,求得特征值λ 和特征向量V:
Step5:按特征值由大到小排序特征向量,選擇前k 位的特征向量作為特征的重要子集。
Step6:將重要特征子集組成的矩陣乘子帶矩陣X,得出降維后的子帶矩陣Y:
基于Matlab實現的PCA降維的主要代碼如圖3所示:

圖3 實現相關功能的主要代碼
3.把特征向量傳入已訓練的SVM 分類器進行分類。SVM分類器是一種二分類算法,可以將樣本點劃分為兩個類別,例如“是”或“否”,“正”或“負”,“真”或“假”等。在人臉識別中,一般將SVM分類器用于將人臉圖像分為“是該人臉”和“不是該人臉”兩個類別。在使用SVM分類器前,先要對訓練集進行訓練,以確定SVM 分類器的參數,后在將特征向量傳入SVM 分類器進行分類。
主要有以下幾個步驟來進行SVM分類器的訓練:
Step1:讀取訓練集數據:將訓練集中的圖像數據讀入程序中,并將其轉換為特征向量。
Step2:規范數據:對訓練集合數據進行規范處理,以杜絕各特點之間的大綱差異。
Step3:SVM 分類器參數的確定:通過交叉驗證等方法確定 SVM 分類器的參數,如懲罰系數,核函數參數等。
Step4:訓練SVM分類器:利用訓練集數據和確定的 SVM分類器參數對SVM分類器模型進行訓練。
Step5:測試SVM分類器:將測試集合數據送到SVM分類器中進行測試,該分類器經過訓練,計算識別率和準確度。
在執行上述步驟時,可以使用MATLAB 軟件,調用其中的SVM 工具箱,對SVM 分類器進行訓練和測試。下面是具體步驟:
Step1:讀取訓練集數據并轉換為特征向量:使用imread()函數讀取圖像數據,并使用reshape()函數將圖像矩陣轉換為向量。將每個人的面部形象分別轉化為一個matrix 中儲存的特征向量。
Step2:標準化數據:使用zscore()函數對矩陣中的數據進行標準化處理,使各特征的均值為0,標準差為1。
Step3:確定SVM 分類器參數:使用fitcsvm()函數訓練SVM分類器,并通過交叉驗證等方法確定懲罰系數和核函數參數等參數。
Step4:訓練SVM分類器:使用FitcSVM()函數對SVM分類器模型進行訓練,并測試訓練集數據使用Predict()函數。
Step5:測試SVM 分類器:利用Predict()函數將測試集合數據發送給訓練良好的SVM 分類器進行測試,計算識別率和準確度。
(三)實驗結果和分析。本文訓練樣本來自劍橋大學AT&T實驗室創建的ORL人臉數據庫中的圖像,因為無論從形態、光線強度還是特征的幾個關鍵點來看,這個人的人臉數據庫中的圖像都是標準化的,所以優化算法的實驗不用預先處理圖片,就可以直接使用ORL人臉數據庫中的圖片。在ORL人臉數據庫中,部分人臉圖像如圖4所示:

圖4 ORL人臉庫中的圖像
此次訓練樣本選擇ORL人臉圖片庫中抽取了10個人臉后5張圖片前5張為測試樣張。選擇10、20、30、40、50個重要特征向量為基,分別測試PCA+SVM 算法與本文提出的PCA+SVM優化算法基于DWT 的識別率進行比較,兩種算法的識別率見表1。

表1 樣本識別率
從圖5可以看出,基于DWT 的PCA+SVM 多尺度人臉識別算法在識別準確率方面優于傳統PCA方法。

圖5 兩種算法識別率對比圖
實驗中將實訓樣本分為50%用于實訓,50%用于驗證;測試樣張采用每人后5幅照片作為訓練樣張,剩余前5幅照片作為測試樣張。識別率表示正確分類的測試樣本數占全部測試樣本數的比例,本實驗使用的評價指標為識別率,識別率越高,說明使用的算法越優。從表1 和圖5 中可以看出基于DWT 的PCA+SVM算法優勝于單純的PCA+SVM算法。
本文研究了基于DWT 的PCA 和SVM 算法的人臉識別方法,并對該方法進行了優化。通過DWT 將原始人臉圖像分解為多個子帶,然后對每個子帶進行PCA降維操作,并選取最重要的特征子集作為輸入數據,最后利用SVM分類器對人臉進行識別,從而實現快速準確識別面部特征。
實驗結果表明,本文提出的方法在人臉識別精度上都傳統的PCA+SVM方法更優。通過實驗分析發現,DWT分解能夠在一定程度上增加識別準確率,而PCA降維能夠降低數據的維度和復雜度,提高分類的效率,最后通過SVM分類器能夠進一步提高識別的準確性。
這項研究為人臉識別技術的發展提供了一種新的思路和方法,也為人類面部識別系統在實際應用中的應用提供了可行的解決方案。未來的研究方向可以在該方法的基礎上進一步探索,如結合深度學習等新興技術進行優化,以獲得更好的效果。