張 晗
(山東科技大學 計算機科學與工程學院,山東 青島 266590)
人臉識別作為日常生活的需要和硬件技術提升的受益者,開始頻繁的走到人們的視線中。人臉識別包括兩部分:①人臉檢測。具體指對某一圖片中是否含有人臉模塊進行判斷檢測并將檢測出來的人臉模塊用某一特定的方式圈出來,例如才用正方形框出某一圖片中某一區(qū)域的人臉。②人臉識別。即人們看到這個名詞時所想到的概述,利用已知數(shù)據(jù)庫與①中檢測出的人臉模塊進行比對,從而得到該人臉模塊的具體身份,達到人臉識別的目的。
PCA(主成分分析法)是一種用來處理數(shù)據(jù)和建立數(shù)理模型的方法。主要過程是通過特征分解協(xié)方差矩陣,進而得出數(shù)據(jù)的主成分(特征向量)與它們的權值(特征值)。是一種對數(shù)據(jù)集進行分析和簡化的技術,此過程的本質(zhì)是一種通過對數(shù)據(jù)降低維數(shù)從而簡化其數(shù)據(jù)結構的方法。PCA本質(zhì)是將高維空間中的數(shù)據(jù)通過正交變換投影到低維空間中,從而實現(xiàn)對主要特征的提取。PCA在分析復雜數(shù)據(jù)時尤其有用,比如人臉識別。圖片作為一個N*N的數(shù)據(jù)結構,在神經(jīng)網(wǎng)絡中如果直接作為輸入層輸入進去的話,需要 N*N個神經(jīng)元,而在本文中,使用PCA對圖片進行降維處理,提取六個特征值成為特征向量,作為 BP神經(jīng)網(wǎng)絡的輸入層輸入,產(chǎn)生六個神經(jīng)元。這樣,極大的縮減了神經(jīng)網(wǎng)絡訓練和測試所消耗的資源。
PCA步驟如下:
(1)數(shù)據(jù)預處理(data preprocessing):均值歸一化(mean normalization)。
(2)計算協(xié)方差矩陣(covarience matrix)。
(3) 計算特征值(eigenvalue)與特征向量(eigenvector)。
(4)依據(jù)特征值大小將特征向量進行排序,選取前k個特征向量作為基(basis)組成一個子空間。
(5)將原始矩陣(及數(shù)據(jù)矩陣)投射(project)到該子空間中,通過基得到降維之后的矩陣。
神經(jīng)網(wǎng)絡分為監(jiān)督訓練和無監(jiān)督訓練。常用的監(jiān)督訓練算法有六種,分別是反向傳播算法,曼哈頓更新規(guī)則,快速傳播算法,彈性傳播算法,量化共軛梯度法,LM算法。其中,反向傳播算法是其中基礎和重要的算法。反向傳播算法(Backpropagation,縮寫為 BP)的全稱是“誤差反向傳播”。BP算法通常梯度下降法來對人工神經(jīng)網(wǎng)絡進行訓練。其主要實現(xiàn)方法是對網(wǎng)絡中所有權重的損失函數(shù)的梯度進行計算。在梯度計算完成后,將值反饋傳遞給某一優(yōu)化方式,接著對產(chǎn)生的權重進行更新。從而達到將損失函數(shù)最小化的目的。簡單的來看,反向傳播算法就是復合函數(shù)的鏈式求導法則,但反向傳播算法在現(xiàn)實生活中的應用比鏈式求導法則重要的多。根據(jù)實驗來看,只需要一個簡單的包含一個隱含層的三層BP神經(jīng)網(wǎng)絡就可以逼近任意一個的連續(xù)函數(shù)。
BP神經(jīng)網(wǎng)絡的基本思想分為兩部分,一、信號的正向傳播。 在正向傳播中,每個樣本依次通過輸入層,然后通過每個隱藏層進行處理,將處理后的數(shù)據(jù)送達輸出層。二、損失(誤差)的反向傳播。如果實際輸出與預先設置的訓練輸出相差較大,則將損失進行反向傳播。損失按順序依次通過隱藏層傳遞回輸入層。其目的是將誤差傳回每一層的每一個神經(jīng)元,從而獲得各個神經(jīng)元,進而獲得每層的誤差信號,進而對每個單元的權值進行修正,損失在修正中不斷減少,越來越接近正確值。一步一步對權重進行調(diào)整,不斷的前饋和反傳,就是傳統(tǒng)意義上的神經(jīng)網(wǎng)絡的逐步學習。
反向傳播算法實現(xiàn)步驟如下:
(1)首先要對數(shù)據(jù)進行初始化處理,即對數(shù)據(jù)矩陣進行歸一化或者降維等操作,是對神經(jīng)網(wǎng)絡進行訓練之前的準備。
(2)將處理后的數(shù)據(jù)作為訓練集進行輸入,逐步計算各層輸出,并將其記錄下來,為下一步做準備。
(3)通過上一步中計算的各層輸出,對全局輸出進行總計算,并將其與預期輸出進行比較,得到全局輸出誤差,對全局輸出誤差進行記錄。
(4)將全局輸出進行反傳,反傳后依次計算每一層的誤差信號,就是上述中提到的分部到每一個神經(jīng)元。
(5)通過得到的各層的誤差信號,對每一層的權重進行調(diào)整,從而達到精確度越來越高的目標。
(6)最后就是查看網(wǎng)絡總誤差是否達到我們所希望的精確度要求,如果達到了目的,則訓練結束;不滿足,則重新返回第二步,繼續(xù)對神經(jīng)網(wǎng)絡進行訓練。
本設計由三個實現(xiàn)部分組成。(1)人臉表情分類;(2)人臉的朝向分類;(3)人臉的匹配識別。其中,采用了耶魯大學的人臉表情數(shù)據(jù)庫進行人臉表情識別,額外采用了 180張人臉朝向圖片和 150張人臉識別圖片。包括了15個人的11種表情,一共165幅圖片。將其中110幅圖片作為訓練集,另外55幅圖片作為測試集。首先應用主成分分析對訓練圖像進行二維相關和降維。因本文對精確度要求不高,故統(tǒng)一采用六個特征值作為特征向量輸入。對 BP神經(jīng)網(wǎng)絡進行訓練,然后再將測試集的圖片同樣經(jīng)過PCA處理,輸入BP神經(jīng)網(wǎng)絡,得到測試結果。設計結構如圖1所示。
圖1 設計結構圖Fig.1 Design structure
BP神經(jīng)網(wǎng)絡一般由三部分組成,即分為三層,分別是輸入層、隱藏層和輸出層。每一層有著不同數(shù)量的神經(jīng)元,就是我們所說的單元單位。對于每一層的神經(jīng)元數(shù)量,由其所在層數(shù)所覺得,一般輸入層神經(jīng)元的數(shù)量取決于特征的數(shù)量,而輸出層的數(shù)量則取決于所分種類的數(shù)量。但是我們可以自定義隱含層的層數(shù)和隱含層中神經(jīng)元個數(shù)。
每一層的每一個神經(jīng)元都代表了數(shù)據(jù)的一次操作處理,常用的操作步驟如下圖2所示。
圖2 操作步驟圖Fig.2 Operating steps
而每個神經(jīng)元經(jīng)過隱含層輸入,經(jīng)由輸出層輸出,神經(jīng)元通過隱含層到達輸出層之間的函數(shù)關系如公式1為:
其中,Wij的代表了神經(jīng)元I與J之間連接的權重值,Oj代表了某一神經(jīng)元J的輸出值,sigmod是一種特殊的函數(shù),目的是將實數(shù)值投影至(0,1)區(qū)間。我們一般把sigmod函數(shù)這種具有特殊功能的函數(shù)稱之為“激活函數(shù)”。將神經(jīng)網(wǎng)絡訓練完成之后,我們才用神經(jīng)網(wǎng)絡處理問題。
在實際應用中,每一個樣本通常都是一個 n*n的矩陣,每個樣本單獨屬于一個類型,因此,對于每個樣本來說,都會有N個神經(jīng)元作為輸入層的輸入,同時,有一個神經(jīng)元在輸出層作為該樣本所屬于的類別。即對一個神經(jīng)元來說,神經(jīng)網(wǎng)絡為之分配n個輸入神經(jīng)元和1個輸出神經(jīng)元。然而,僅僅通過機器的學習分類往往達不到預期的目標,所以在實際中,我們會提供受控輸入校正,就是向輸入層添加一個額外的神經(jīng)元作為偏移神經(jīng)元,對偏移提供校正處理。在將N個特征值依次發(fā)送到輸入神經(jīng)元之后,隱層神經(jīng)元得到輸入層的輸出并計算它們的輸出值。輸出層中的神經(jīng)元輸出回歸值根據(jù)隱藏層計算。
這一趟流程被我們稱為“前饋過程”,在前饋中,神經(jīng)網(wǎng)絡的輸入和輸出可以類比成多維函數(shù)的輸入和輸出。接下來我們進行訓練神經(jīng)網(wǎng)絡。BP神經(jīng)網(wǎng)絡算法是一種監(jiān)督性學習算法。其訓練過程被稱為“反向傳播”,就是通過比較誤差與預測值,在對前饋參考值綜合對比,從而不斷的對權重Wij進行調(diào)整的過程。由于數(shù)據(jù)流與前饋過程恰好相反,所以該訓練過程被稱為“反向傳播”。
在一開始的時候,隨機初始化連接權重Wij是我們的第一個問題,我們對每一個權重隨機獲得,然后對每一個訓練樣本進行前饋過程,目的是為了得到每個神經(jīng)元的輸出,這樣就得到了第一步的結果。
接下來,對輸出層的誤差進行計算,采用以下公式2
上述公式中Ej表示神經(jīng)元j的誤差(損失)值,Oj代表上述神經(jīng)元j經(jīng)過sigmod函數(shù)映射到(0,1)中的輸出,Tj代表我們標記的訓練樣本的參考輸出,sigmod′(x)是sigmod函數(shù)的一階導函數(shù)。
然后對隱含層誤差進行計算,如下公式3:
由于隱含層的輸出不存在我們標記的參考值,所以使用下一層誤差(對于本神經(jīng)網(wǎng)絡來說,即輸出層誤差)的加權和代替當前訓練樣本的參考輸出減去表示神經(jīng)元的輸出,即上文中的(Tj?Oj)。
在誤差計算完成之后,我們就可以對Wij和 θj進行更新了,如公式4:
上述公式中λ是一個被稱為學習率的參數(shù),該參數(shù)常在(0,0.1)區(qū)間上進行取值,用來控制學習速率。
由于每一個訓練集樣本都會對整個網(wǎng)絡的參數(shù)進行一次更新,為了防止過多的更新,避免不必要的浪費,我們需要對訓練終止的條件進行另外設置。一個最簡單的訓練終止條件對訓練環(huán)節(jié)設置最大迭代次數(shù),比如將設置成對數(shù)據(jù)集迭代1000次后將訓練終止。但是,僅僅設置了最大迭代次數(shù),并不能對訓練結果的精確度進行良好的保證,我們會額外使用損失函數(shù)(loss function)作為判斷是否應該終止訓練的標準。
對于損失函數(shù)的選擇,我們可以采用輸出層各個節(jié)點的方差來作為損失函數(shù)L,公式3-6如下:
由于神經(jīng)網(wǎng)絡容易出現(xiàn)許多無意義的迭代,為了避免這種情況,我們經(jīng)常做的事就是抽出一部分的訓練數(shù)據(jù)集,將其作為檢查的部分。當這部分檢測到預測誤差高于某一指定的值(閾值)時候,我們就會提前將訓練終止,防止無意義迭代的產(chǎn)生。
第一步,對圖片進行灰度化:
通常,當我們對彩色圖像進行處理時,往往圖片被分成R,G,B三種通道,而我們則需要對這三個通道進行依次的處理,由于需要處理三個通道,時間成本很高從而導致了效率底下。對此,為了減少時間成本的消耗,我們常常減少需要處理的數(shù)據(jù)量。就是將彩色圖像轉(zhuǎn)化成灰度圖像,將三個通道轉(zhuǎn)換成單通道,這樣節(jié)約時間,提高效率。常用的灰度化法是加權平均法。圖片灰度化效果如圖3所示。
圖3 灰度化效果展示Fig.3 Grayscale effect display
第二步,對圖像進行幾何變換:
圖像幾何變換也稱為圖像空間變換。就是通過一些操作進行圖像處理,類似于平移、移調(diào)、鏡像、旋轉(zhuǎn)和縮放等操作。進行圖像幾何變換的目的是糾正因圖像采集系統(tǒng)的系統(tǒng)誤差和儀器位置擺放的誤差所導致外部因素誤差。減少外部因素對精確度的影響。除了變換之外,我們還需要一些額外的操作,灰度插值算法等。達到圖像變換減少誤差的最終目的。
第三步,對之前產(chǎn)生的圖像進行圖像增強,突出特征:
對圖像中的有用信息進行增強。主要目的是對圖像的視覺效果進行改善。突出圖像的特征值,擴大圖像的差異,對圖像的質(zhì)量進行提高,信息展現(xiàn)程度也得到了豐富,這樣可以滿足特殊分析的需要。
用50張正向朝向圖片對神經(jīng)網(wǎng)絡進行訓練,在神經(jīng)網(wǎng)絡訓練完成之后,我們用30張正向朝向圖對訓練后的神經(jīng)網(wǎng)絡進行測試,將測試結果輸入神經(jīng)網(wǎng)絡后,因為我們是監(jiān)督性學習,事先對訓練樣例進行了標簽分類,人臉正向朝向是[0,0]的標簽,所以預測的結果要盡量的像[0,0]進行靠近,最逼近[0,0]這一標簽的,就是人臉的正向識別。測試結果如圖4所示。
圖4 測試結果1Fig.4 Test result 1
由圖4可以看到,30張圖片的預測值均在[0,0]附近,即預測的結果30張圖片都是正向,達到的預期的結果,對30張測試圖像進行了正確分類。
上述是人臉正向朝向的分類,接下來是人臉表情的分類,使用的是Yale大學數(shù)據(jù)集,為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張測試圖像進行了正確分類。
本章在前文分析與設計基礎上,展示了神經(jīng)網(wǎng)絡的建立,圖像的預處理和 PCA的使用,最后對30張人臉正向朝向和10張人臉微笑表情進行測試,測試結果正確。
科學技術不斷發(fā)展,人工智能更是飛快的進步。人臉識別作為人工智能重要的組成部分,在現(xiàn)實生活中的應用越來越廣。了解人工智能,學習人工智能,是當代IT從業(yè)者都要掌握的知識。BP神經(jīng)網(wǎng)絡算法作為人臉識別最基礎,應用最廣泛的算法,更是需要深入了解和掌握。