徐 迅,陶 俊*,吳 瑰
(江漢大學 a.數(shù)學與計算機科學學院;b.工程訓練中心,湖北 武漢 430056)
作為模式識別和圖像處理領域成功的應用之一,人臉識別在過去20年里一直都是研究熱點。人臉識別的普遍性、可采集性與被采集者的可接受性較高,具有方便友好、易于接受、不易偽造等一系列優(yōu)點。隨著技術的發(fā)展,人們對公共安全更加關注,對人臉識別這一技術也有了新的要求。在實際生產(chǎn)生活中采集到的人臉圖像不一定是完整清晰的,對光照差異、面部表情變化、有無遮擋物等干擾因素的魯棒性是判定一個人臉識別系統(tǒng)好壞的標準之一。
傳統(tǒng)的人臉識別方法[1-3]有基于線性回歸分類(linear regression classification,LRC)的方法。LRC 能很好地識別無遮擋的人臉,識別率良好,但是在加入遮擋等干擾因素下,效果不佳?;谙∈璞硎痉诸悾╯parse representation-based classifier,SRC)的人臉識別方法原理在于人臉的稀疏表示是基于光照模型。SRC 有一個很強的假設條件:所有的人臉圖像必須是事先嚴格對齊的;否則,稀疏性很難滿足。換言之,對于表情變化、姿態(tài)角度變化的人臉都不滿足稀疏性這個假設。所以,經(jīng)典的SRC 很難用于真實的應用場景。
近年來,神經(jīng)網(wǎng)絡應用于人臉識別成為研究熱點。其采用的方法有基于受約束的局部神經(jīng)域[4](constrained local neural field,CLNF)和卷積神經(jīng)網(wǎng)絡相結(jié)合的方法[1]。CLNF 方法實際上是對受約束的局部模型(constrained local models,CLM)的創(chuàng)新,主要研究對人臉特征點的定位算法。相對于傳統(tǒng)的CLM 等算法,擬合速度更快、準確率更高,能夠使人臉識別技術更加精確,具有更大的優(yōu)勢。但是,當人臉在光照、噪聲、背景等環(huán)境因素較為惡劣的情況下,CLNF 算法雖然能在特征點定位方面保持一定的精確性,但對特征點的搜索和特征點擬合的過程耗時較長。深度卷積神經(jīng)網(wǎng)絡框架VGG-NET 是Oxford 大學計算機視覺組和DeepMind 公司的研究人員在2014年聯(lián)合開發(fā)的一種深度神經(jīng)網(wǎng)絡,其識別率相較于過去的網(wǎng)絡結(jié)構(gòu)有一定的提升。還有如GoogleNet 和ResNet 等深度神經(jīng)網(wǎng)絡框架性能優(yōu)異,相較于傳統(tǒng)的方法均有相當明顯的優(yōu)勢,其在如手寫數(shù)字、車牌識別等方面已經(jīng)有很好的應用。
本文采用深度卷積神經(jīng)網(wǎng)絡Inception-ResNet-v1[5]框架進行人臉識別。Inception-ResNet-v1 框架是結(jié)合了GoogleNet 和ResNet 發(fā)明的,克服了傳統(tǒng)神經(jīng)網(wǎng)絡參數(shù)太多,容易過擬合;而網(wǎng)絡龐大,計算復雜度大,難以應用;網(wǎng)絡越深,梯度越往后穿越容易消失(梯度彌散),難以優(yōu)化模型等缺點。其性能相較于過去的卷積神經(jīng)網(wǎng)絡模型有較大的提升。對遮擋、表情變化、姿態(tài)角度變化等干擾因素具有魯棒性。可實現(xiàn)復雜條件下的人臉識別。
圖1 為系統(tǒng)的模型結(jié)構(gòu)[6-7],本文模型采用的是卷積神經(jīng)網(wǎng)絡模型的基本結(jié)構(gòu)。每個模塊功能如下:
1)Batchs:輸入的人臉圖像樣本,這里的樣本是已經(jīng)過人臉檢測找到人臉并裁剪到固定尺寸的圖片樣本。
2)DEEP ARCHITECTURE:深度學習框架,實驗采用的是Inception-ResNet-v1 網(wǎng)絡結(jié)構(gòu)。
3)L2:特征歸一化,防止模型過擬合。
4)EMBEEDING:嵌入層。
5)Triplet Loss:三元組損失函數(shù)。
圖1 系統(tǒng)結(jié)構(gòu)Fig.1 System structure
模型的作用是將人臉圖像X嵌入到d維度的歐幾里得空間。與一般的深度學習架構(gòu)不一樣的是,傳統(tǒng)的深度學習框架一般都是Double Loss 或者Single Loss,而本文采用3 張圖片輸入的損失函數(shù)Triplet Loss 直接學習特征間的可分性:相同身份之間的特征距離要盡可能小,而不同身份之間的特征距離要盡可能大。
模型采用的結(jié)構(gòu)是卷積神經(jīng)網(wǎng)絡(CNNs)的一種。CNNs 本質(zhì)是一個前向反饋神經(jīng)網(wǎng)絡,與多層感知器的最大區(qū)別是網(wǎng)絡前幾層由卷積層和池化層交替級聯(lián)組成,通過神經(jīng)元平面上神經(jīng)元的權(quán)重共享,不同的卷積核提取不同的特征,有效減少了卷積神經(jīng)網(wǎng)絡訓練過程中的參數(shù)數(shù)量,降低了運算復雜度。
模型采用Inception-ResNet-v1 網(wǎng)絡結(jié)構(gòu)[8-15],該結(jié)構(gòu)結(jié)合了ResNet 與GoogleNet。圖2 為網(wǎng)絡結(jié)構(gòu)主體,之后連接一個Stem 結(jié)構(gòu)。Stem 用于對進入Inception 模塊前的數(shù)據(jù)進行預處理。Stem 后用了3種共20 個Inception-ResNet 模塊,模塊中添加了residual connection 模塊,residual connection 模塊的作用是加速網(wǎng)絡收斂,使網(wǎng)絡的訓練速度加快。模型中3 種Inception 模塊間的Reduction 模塊起到池化層的作用,使用了并行的結(jié)構(gòu)來防止bottleneck 問題。
圖2 Inception-ResNet-v1 網(wǎng)絡結(jié)構(gòu)主體Fig.2 Structure of Inception-ResNet-v1
模型采用的損失函數(shù)為Triplet Loss[3],是根據(jù)3張圖片組成的三元組(Triplet)計算而來的損失(Loss)。其中,三元組是由Anchor(a)、Negative(n)、Positive(p)組成。設單個個體的圖像為,該個體的其他圖像為,其他個體的圖像為。由于在圖像中同一類人臉圖像的距離要小于不同類人臉圖像的距離,因此有優(yōu)化函數(shù)不等式為:
根據(jù)不等式(1),可以得出模型損失函數(shù):
損失函數(shù)的意義在于:求最小化(類內(nèi)距離-類間距離+邊際)。其中表示類內(nèi)距離表示類間距離,α是一個常量。優(yōu)化過程就是使用梯度下降法使得損失函數(shù)不斷下降,即類內(nèi)距離不斷下降,類間距離不斷提升。
模型在分類識別模塊采用的是歐式距離算法,歐式距離算法的核心是:設圖像矩陣有n個元素(n個像素點),用n個元素值(X1,X2,…,Xn)組成該圖像的特征組。特征組形成了n維空間,特征組中的特征碼即每一個像素點構(gòu)成了每一維的數(shù)值。在n維空間下,兩個圖像矩陣各形成了一個點,然后利用(3)式計算圖像間的距離,
模型通過歐式距離法計算兩圖片間的距離,其距離的范圍在[0,4]之間,因此相同的圖片間的距離為0。而同類圖片之間的距離要小于不同類圖片間的距離,因此可以通過判斷圖像間距離的遠近來對圖像進行分類。
本文程序在TensorFlow 框架下采用Python 語言實現(xiàn)。程序分成兩大部分,分別為訓練部分和分類部分。圖3 為訓練部分的程序流程圖。首先載入圖片訓練集數(shù)據(jù),然后檢測圖片中的人臉,剪輯圖片,剪輯的大小為160*160。啟動網(wǎng)絡模塊,輸出結(jié)果通過L2 正則范數(shù)進行歸一化,之后通過損失函數(shù)計算損失,校正參數(shù),最后輸出訓練集模型。
圖4 為分類程序流程圖。首先載入圖片,之后載入訓練模型。對載入的圖片進行預處理。計算兩圖片間的歐式距離dist。根據(jù)訓練集圖片間的距離得出區(qū)分圖片間的最佳距離閥值。根據(jù)得出的閥值對測試集圖片進行分類,計算模型的識別率。
圖3 訓練程序流程圖Fig.3 Flow chart of training program
圖4 分類程序流程圖Fig.4 Flow chart of classification program
為驗證本文模型的性能,實驗通過攝像頭采集圖片結(jié)合LFW 數(shù)據(jù)集制作訓練集。隨機選取10 000張圖片作為訓練集,模型訓練的學習率為0.1,共學習500 輪,每輪的大小為1 000。以圖5 為基準圖制作帶遮擋干擾因素的人臉識別測試集。如圖6 所示,從左往右第一排分別為嘴部遮擋、眼部遮擋和眼部嘴部同時遮擋的人臉關鍵特征信息實驗圖共3 組,每組包括不同人、性別和年齡段分別有100張。第二排為遮擋率在10%左右,20%左右和30%~45%之間的人臉圖片,遮擋部位隨機分布,每組各100 張。
圖5 基準人臉圖Fig.5 Benchmark of experimental human face
圖6 人物圖像遮擋干擾添加示意圖Fig.6 Diagrammatic sketch of figure image with occlusion interference
為驗證模型在臉部關鍵信息如眼部和嘴部被遮擋的情況下模型的識別率,實驗通過在測試集圖片的臉部關鍵部位如眼部和嘴部添加遮擋測試模型的識別率。如表1 所示,進行3 組實驗,每組測試集圖片各100 張。模型在眼部被完全遮擋的情況下其識別率為98.8%;在嘴部被遮擋的情況下其識別率為98.6%;當眼部和嘴部同時遮擋時,識別率為96.9%。
表1 不同遮擋部位的識別率Tab.1 Recognition rates with different occlusion parts of face
為驗證模型在不同遮擋率下的識別率,實驗通過在測試集上添加遮擋率不同的干擾因素。如表2所示,模型在沒有遮擋的情況下識別率為99.2%,在遮擋10%~20%的情況下,識別率為98.6%。在遮擋30%~45%的情況下模型的識別率為96.9%。
表2 不同遮擋率下模型的識別率Tab.2 Recognition rates of models under different occlusion rates
實驗通過攝像頭采集圖片結(jié)合LFW 數(shù)據(jù)集制作擴充測試集測試其準確率。樣本數(shù)為4 234,樣本包括不同人種和性別。實驗的遮擋率為20%~30%,遮擋均為眼部和嘴部等人臉關鍵信息,測得模型的識別率為98.2%。因此可以得出,在遮擋率在20%~30%的干擾因素下,模型對不同人種、不同年齡層次、不同性別仍可以有很好的識別率。
實驗選取的相同人物圖片存在時間年齡差異,不同人存在性別、人種、年齡等的差異,并且均添加了針對人臉關鍵特征信息遮擋的干擾因素,從實驗可以看出,雖然在添加了遮擋的干擾因素下,模型的識別率有所下降,但是其在20%~30%左右的遮擋率下識別率為98.2%。
如表3 所示,實驗的測試集共4 234 張圖片,測試SRC 和LRC 算法和本文算法在添加20% ~30%左右的遮擋干擾因素下的識別率,測得本文算法識別率可以達到98.2%,具有一定的實際應用價值。而SRC 和LRC 算法的識別率卻并不如意。由此可以得出結(jié)論,相比于其他算法,在遮擋因素對模型進行干擾的情況下,沒有使模型失去穩(wěn)定性,仍可以很好地區(qū)分出不同人的人臉,并且識別率較高。綜上所述,相比于傳統(tǒng)算法而言,本文算法在帶遮擋的人臉識別問題上更具有實用性。
表3 在遮擋率為20% ~30%時不同算法的識別率Tab.3 Recognition rates of different algorithms when the occlusion rate is 20%-30%
本文的模型基于卷積神經(jīng)網(wǎng)絡并且損失函數(shù)采用Triplet Loss,直接學習特征間的可分性:相同身份之間的特征距離要盡可能的小,而不同身份之間的特征距離要盡可能的大。模型通過大量圖片進行訓練與測試,20% ~30%左右的遮擋干擾因素下人臉識別率為98.2%。驗證了模型在遮擋等的干擾因素下,仍能準確地對人臉進行識別。相比于現(xiàn)在的其他傳統(tǒng)的人臉識別模型,模型對遮擋等干擾因素具有魯棒性,人臉識別率較高,具有實際應用價值,實現(xiàn)了在遮擋的干擾因素下的人臉識別。