張 晗
(山東科技大學 計算機科學與工程學院,山東 青島 266590)
人臉識別作為日常生活的需要和硬件技術提升的受益者,開始頻繁的走到人們的視線中。人臉識別包括兩部分:①人臉檢測。具體指對某一圖片中是否含有人臉模塊進行判斷檢測并將檢測出來的人臉模塊用某一特定的方式圈出來,例如才用正方形框出某一圖片中某一區域的人臉。②人臉識別。即人們看到這個名詞時所想到的概述,利用已知數據庫與①中檢測出的人臉模塊進行比對,從而得到該人臉模塊的具體身份,達到人臉識別的目的。
PCA(主成分分析法)是一種用來處理數據和建立數理模型的方法。主要過程是通過特征分解協方差矩陣,進而得出數據的主成分(特征向量)與它們的權值(特征值)。是一種對數據集進行分析和簡化的技術,此過程的本質是一種通過對數據降低維數從而簡化其數據結構的方法。PCA本質是將高維空間中的數據通過正交變換投影到低維空間中,從而實現對主要特征的提取。PCA在分析復雜數據時尤其有用,比如人臉識別。圖片作為一個N*N的數據結構,在神經網絡中如果直接作為輸入層輸入進去的話,需要 N*N個神經元,而在本文中,使用PCA對圖片進行降維處理,提取六個特征值成為特征向量,作為 BP神經網絡的輸入層輸入,產生六個神經元。這樣,極大的縮減了神經網絡訓練和測試所消耗的資源。
PCA步驟如下:
(1)數據預處理(data preprocessing):均值歸一化(mean normalization)。
(2)計算協方差矩陣(covarience matrix)。
(3) 計算特征值(eigenvalue)與特征向量(eigenvector)。
(4)依據特征值大小將特征向量進行排序,選取前k個特征向量作為基(basis)組成一個子空間。
(5)將原始矩陣(及數據矩陣)投射(project)到該子空間中,通過基得到降維之后的矩陣。
神經網絡分為監督訓練和無監督訓練。常用的監督訓練算法有六種,分別是反向傳播算法,曼哈頓更新規則,快速傳播算法,彈性傳播算法,量化共軛梯度法,LM算法。其中,反向傳播算法是其中基礎和重要的算法。反向傳播算法(Backpropagation,縮寫為 BP)的全稱是“誤差反向傳播”。BP算法通常梯度下降法來對人工神經網絡進行訓練。其主要實現方法是對網絡中所有權重的損失函數的梯度進行計算。在梯度計算完成后,將值反饋傳遞給某一優化方式,接著對產生的權重進行更新。從而達到將損失函數最小化的目的。簡單的來看,反向傳播算法就是復合函數的鏈式求導法則,但反向傳播算法在現實生活中的應用比鏈式求導法則重要的多。根據實驗來看,只需要一個簡單的包含一個隱含層的三層BP神經網絡就可以逼近任意一個的連續函數。
BP神經網絡的基本思想分為兩部分,一、信號的正向傳播。 在正向傳播中,每個樣本依次通過輸入層,然后通過每個隱藏層進行處理,將處理后的數據送達輸出層。二、損失(誤差)的反向傳播。如果實際輸出與預先設置的訓練輸出相差較大,則將損失進行反向傳播。損失按順序依次通過隱藏層傳遞回輸入層。其目的是將誤差傳回每一層的每一個神經元,從而獲得各個神經元,進而獲得每層的誤差信號,進而對每個單元的權值進行修正,損失在修正中不斷減少,越來越接近正確值。一步一步對權重進行調整,不斷的前饋和反傳,就是傳統意義上的神經網絡的逐步學習。
反向傳播算法實現步驟如下:
(1)首先要對數據進行初始化處理,即對數據矩陣進行歸一化或者降維等操作,是對神經網絡進行訓練之前的準備。
(2)將處理后的數據作為訓練集進行輸入,逐步計算各層輸出,并將其記錄下來,為下一步做準備。
(3)通過上一步中計算的各層輸出,對全局輸出進行總計算,并將其與預期輸出進行比較,得到全局輸出誤差,對全局輸出誤差進行記錄。
(4)將全局輸出進行反傳,反傳后依次計算每一層的誤差信號,就是上述中提到的分部到每一個神經元。
(5)通過得到的各層的誤差信號,對每一層的權重進行調整,從而達到精確度越來越高的目標。
(6)最后就是查看網絡總誤差是否達到我們所希望的精確度要求,如果達到了目的,則訓練結束;不滿足,則重新返回第二步,繼續對神經網絡進行訓練。
本設計由三個實現部分組成。(1)人臉表情分類;(2)人臉的朝向分類;(3)人臉的匹配識別。其中,采用了耶魯大學的人臉表情數據庫進行人臉表情識別,額外采用了 180張人臉朝向圖片和 150張人臉識別圖片。包括了15個人的11種表情,一共165幅圖片。將其中110幅圖片作為訓練集,另外55幅圖片作為測試集。首先應用主成分分析對訓練圖像進行二維相關和降維。因本文對精確度要求不高,故統一采用六個特征值作為特征向量輸入。對 BP神經網絡進行訓練,然后再將測試集的圖片同樣經過PCA處理,輸入BP神經網絡,得到測試結果。設計結構如圖1所示。

圖1 設計結構圖Fig.1 Design structure
BP神經網絡一般由三部分組成,即分為三層,分別是輸入層、隱藏層和輸出層。每一層有著不同數量的神經元,就是我們所說的單元單位。對于每一層的神經元數量,由其所在層數所覺得,一般輸入層神經元的數量取決于特征的數量,而輸出層的數量則取決于所分種類的數量。但是我們可以自定義隱含層的層數和隱含層中神經元個數。
每一層的每一個神經元都代表了數據的一次操作處理,常用的操作步驟如下圖2所示。

圖2 操作步驟圖Fig.2 Operating steps
而每個神經元經過隱含層輸入,經由輸出層輸出,神經元通過隱含層到達輸出層之間的函數關系如公式1為:
其中,Wij的代表了神經元I與J之間連接的權重值,Oj代表了某一神經元J的輸出值,sigmod是一種特殊的函數,目的是將實數值投影至(0,1)區間。我們一般把sigmod函數這種具有特殊功能的函數稱之為“激活函數”。將神經網絡訓練完成之后,我們才用神經網絡處理問題。
在實際應用中,每一個樣本通常都是一個 n*n的矩陣,每個樣本單獨屬于一個類型,因此,對于每個樣本來說,都會有N個神經元作為輸入層的輸入,同時,有一個神經元在輸出層作為該樣本所屬于的類別。即對一個神經元來說,神經網絡為之分配n個輸入神經元和1個輸出神經元。然而,僅僅通過機器的學習分類往往達不到預期的目標,所以在實際中,我們會提供受控輸入校正,就是向輸入層添加一個額外的神經元作為偏移神經元,對偏移提供校正處理。在將N個特征值依次發送到輸入神經元之后,隱層神經元得到輸入層的輸出并計算它們的輸出值。輸出層中的神經元輸出回歸值根據隱藏層計算。
這一趟流程被我們稱為“前饋過程”,在前饋中,神經網絡的輸入和輸出可以類比成多維函數的輸入和輸出。接下來我們進行訓練神經網絡。BP神經網絡算法是一種監督性學習算法。其訓練過程被稱為“反向傳播”,就是通過比較誤差與預測值,在對前饋參考值綜合對比,從而不斷的對權重Wij進行調整的過程。由于數據流與前饋過程恰好相反,所以該訓練過程被稱為“反向傳播”。
在一開始的時候,隨機初始化連接權重Wij是我們的第一個問題,我們對每一個權重隨機獲得,然后對每一個訓練樣本進行前饋過程,目的是為了得到每個神經元的輸出,這樣就得到了第一步的結果。
接下來,對輸出層的誤差進行計算,采用以下公式2
上述公式中Ej表示神經元j的誤差(損失)值,Oj代表上述神經元j經過sigmod函數映射到(0,1)中的輸出,Tj代表我們標記的訓練樣本的參考輸出,sigmod′(x)是sigmod函數的一階導函數。
然后對隱含層誤差進行計算,如下公式3:

由于隱含層的輸出不存在我們標記的參考值,所以使用下一層誤差(對于本神經網絡來說,即輸出層誤差)的加權和代替當前訓練樣本的參考輸出減去表示神經元的輸出,即上文中的(Tj?Oj)。
在誤差計算完成之后,我們就可以對Wij和 θj進行更新了,如公式4:

上述公式中λ是一個被稱為學習率的參數,該參數常在(0,0.1)區間上進行取值,用來控制學習速率。
由于每一個訓練集樣本都會對整個網絡的參數進行一次更新,為了防止過多的更新,避免不必要的浪費,我們需要對訓練終止的條件進行另外設置。一個最簡單的訓練終止條件對訓練環節設置最大迭代次數,比如將設置成對數據集迭代1000次后將訓練終止。但是,僅僅設置了最大迭代次數,并不能對訓練結果的精確度進行良好的保證,我們會額外使用損失函數(loss function)作為判斷是否應該終止訓練的標準。
對于損失函數的選擇,我們可以采用輸出層各個節點的方差來作為損失函數L,公式3-6如下:

由于神經網絡容易出現許多無意義的迭代,為了避免這種情況,我們經常做的事就是抽出一部分的訓練數據集,將其作為檢查的部分。當這部分檢測到預測誤差高于某一指定的值(閾值)時候,我們就會提前將訓練終止,防止無意義迭代的產生。
第一步,對圖片進行灰度化:
通常,當我們對彩色圖像進行處理時,往往圖片被分成R,G,B三種通道,而我們則需要對這三個通道進行依次的處理,由于需要處理三個通道,時間成本很高從而導致了效率底下。對此,為了減少時間成本的消耗,我們常常減少需要處理的數據量。就是將彩色圖像轉化成灰度圖像,將三個通道轉換成單通道,這樣節約時間,提高效率。常用的灰度化法是加權平均法。圖片灰度化效果如圖3所示。

圖3 灰度化效果展示Fig.3 Grayscale effect display
第二步,對圖像進行幾何變換:
圖像幾何變換也稱為圖像空間變換。就是通過一些操作進行圖像處理,類似于平移、移調、鏡像、旋轉和縮放等操作。進行圖像幾何變換的目的是糾正因圖像采集系統的系統誤差和儀器位置擺放的誤差所導致外部因素誤差。減少外部因素對精確度的影響。除了變換之外,我們還需要一些額外的操作,灰度插值算法等。達到圖像變換減少誤差的最終目的。
第三步,對之前產生的圖像進行圖像增強,突出特征:
對圖像中的有用信息進行增強。主要目的是對圖像的視覺效果進行改善。突出圖像的特征值,擴大圖像的差異,對圖像的質量進行提高,信息展現程度也得到了豐富,這樣可以滿足特殊分析的需要。
用50張正向朝向圖片對神經網絡進行訓練,在神經網絡訓練完成之后,我們用30張正向朝向圖對訓練后的神經網絡進行測試,將測試結果輸入神經網絡后,因為我們是監督性學習,事先對訓練樣例進行了標簽分類,人臉正向朝向是[0,0]的標簽,所以預測的結果要盡量的像[0,0]進行靠近,最逼近[0,0]這一標簽的,就是人臉的正向識別。測試結果如圖4所示。

圖4 測試結果1Fig.4 Test result 1
由圖4可以看到,30張圖片的預測值均在[0,0]附近,即預測的結果30張圖片都是正向,達到的預期的結果,對30張測試圖像進行了正確分類。
上述是人臉正向朝向的分類,接下來是人臉表情的分類,使用的是Yale大學數據集,為15個人的11種表情,本文僅對一種表情(微笑)驗證進行展示。人臉微笑表情是[0,0,0]的標簽,預測的結果要盡量的像[0,0,0]進行靠近,接近[0,0,0]這一標簽的,就是人臉的微笑表情的識別。測試結果如圖5所示。

圖5 測試結果2Fig.5 Test result 2
由圖5可以看到,10張圖片的預測值均在[0,0,0]附近,即預測的結果10張圖片都是微笑,達到的預期的結果,對10張測試圖像進行了正確分類。
本章在前文分析與設計基礎上,展示了神經網絡的建立,圖像的預處理和 PCA的使用,最后對30張人臉正向朝向和10張人臉微笑表情進行測試,測試結果正確。
科學技術不斷發展,人工智能更是飛快的進步。人臉識別作為人工智能重要的組成部分,在現實生活中的應用越來越廣。了解人工智能,學習人工智能,是當代IT從業者都要掌握的知識。BP神經網絡算法作為人臉識別最基礎,應用最廣泛的算法,更是需要深入了解和掌握。