譚 彬,杜炳德,趙雅琪
(山西農(nóng)業(yè)大學 信息科學與工程學院,山西 太谷 030801)
目前,深度學習的發(fā)展越來越快,人臉屬性識別也成了深度學習的一個重要研究領(lǐng)域[1]。人臉包含很多屬性特征,比如性別、微笑、眼鏡等,人臉多屬性識別檢測到一張圖像時,對圖像處理并返回一些人臉信息。基于人臉多屬性識別技術(shù)可應(yīng)用在智慧公安系統(tǒng)[2]、教學管理系統(tǒng)等諸多領(lǐng)域[3]。
傳統(tǒng)的人臉識別包括對圖像進行特征提取以及進行分類器的訓(xùn)練[4]。隨著人臉屬性識別算法不斷發(fā)展,對應(yīng)的神經(jīng)網(wǎng)絡(luò)逐漸加深,識別效果也逐步提升。隨著網(wǎng)絡(luò)加深,參數(shù)也必定會增多。因此本文采用一種基于多任務(wù)網(wǎng)絡(luò)的人臉識別技術(shù)。通過共享Inception-V3主干網(wǎng)絡(luò),大大地減少了模型參數(shù),并且加快了訓(xùn)練速度。將一種屬性對應(yīng)一個分支網(wǎng)絡(luò),構(gòu)建多分支網(wǎng)絡(luò),聯(lián)合學習多個屬性,增強屬性之間的相關(guān)性。此方法模型參數(shù)較少,準確率較高,具有很大的研究意義。
本文搭建了一個多任務(wù)網(wǎng)絡(luò)來完成人臉識別任務(wù),為了減少計算量和網(wǎng)絡(luò)參數(shù),通過使用共享的Inception-V3主干網(wǎng)絡(luò)進行特征提取[5],然后將得到的特征輸送給搭建好的4個分支網(wǎng)絡(luò),最終完成多任務(wù)網(wǎng)絡(luò)的訓(xùn)練和測試。
為了保持神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的稀疏性,又能充分利用密集矩陣的高計算性能。Google團隊提出Inception結(jié)構(gòu),相較于傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)來說,Inception的計算量比傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)更少,控制了參數(shù)量和計算量的同時,獲得了非常好的分類性能。Inception-V1有22層,比VGGNet的19層更深但參數(shù)更少,表達能力更強。采取多個尺度的卷積核進行特征提取,其中包括1×1、3×3、5×5,通過1×1卷積核降低通道數(shù)量,可以加速網(wǎng)絡(luò)學習。該網(wǎng)絡(luò)結(jié)構(gòu)在增加了網(wǎng)絡(luò)深度,提升了網(wǎng)絡(luò)普遍性。原始的Inception模塊如圖1所示。
圖1 原始的Inception模塊
后續(xù)Inception模塊在原始的Inception模塊上進行了改進,Inception-V2是使用小卷積替換了大卷積,使用兩個3×3卷積替換了一個5×5的卷積,分解前后的感受野相同,并且增強了representation能力,分解之后可以多加一個激活函數(shù),增強了非線性表達能力。Inception-V2還提出了著名的Batch Normalization算法,該算法是將網(wǎng)絡(luò)的輸入數(shù)據(jù)進行歸一化處理,讓梯度增大,避免梯度消失現(xiàn)象,加快訓(xùn)練速度和收斂速度。Inception-V2模塊如圖2所示。
圖2 Inception-V2模塊
在此基礎(chǔ)之上,Inception-V3引入了非對稱卷積,將N×N結(jié)構(gòu)分解為1×N和N×1的疊加,分解之后的感受野還是與原來的感受野相同,并且進一步減少了計算量、加快訓(xùn)練測試速度和減輕過擬合。此外,Inception-V3網(wǎng)絡(luò)優(yōu)化了Inception-module結(jié)構(gòu),優(yōu)化后的Inception-module應(yīng)用在網(wǎng)絡(luò)后面部分,淺層還是使用了普通的卷積層,以確保網(wǎng)絡(luò)可以有效提取更多的特征。
多任務(wù)學習是一種歸納遷移機制[6],多任務(wù)學習方法基于同一個主干網(wǎng)絡(luò),在淺層的卷積層共享特征,在深層的卷積層則開始對每個任務(wù)分別學習。其中每個屬性對應(yīng)一個學習任務(wù),將主干網(wǎng)絡(luò)的輸出作為每一個分支網(wǎng)絡(luò)的輸入,最終完成對分支任務(wù)的學習。該方法通過共享的主干網(wǎng)絡(luò),大大減少了整體的計算量,并且能夠?qū)⒍鄠€任務(wù)之間關(guān)聯(lián)起來進行學習,最終能夠得到更優(yōu)的學習效果。本文搭建了一個多任務(wù)網(wǎng)絡(luò)模型,多任務(wù)網(wǎng)絡(luò)模型如圖3所示。
圖3 多任務(wù)網(wǎng)絡(luò)框
本文設(shè)計了一種基于多任務(wù)學習網(wǎng)絡(luò)的人臉屬性識別方法,整體的網(wǎng)絡(luò)結(jié)構(gòu)如圖4所示,其中包含了主干共享網(wǎng)絡(luò)和屬性識別分支網(wǎng)絡(luò)。
圖4 整體網(wǎng)絡(luò)結(jié)構(gòu)
本文基于Inception-V3進行了改進,并且延展了分支網(wǎng)絡(luò),組成了一個多任務(wù)學習網(wǎng)絡(luò)。本文中采用小卷積核來改進傳統(tǒng)的卷積核,保證感受野不變的同時將參數(shù)量也減少了,并且還能增加更多的relu激活函數(shù)。輸入大小為三通道的180×180的圖片,進入主干網(wǎng)絡(luò)進行一系列卷積操作,主干網(wǎng)絡(luò)部分是多個 1×1 的小卷積和3×1與1×3的非對稱卷積的組合,在卷積層之間加入relu激活函數(shù),可以增加網(wǎng)絡(luò)的非線性,使網(wǎng)格具有稀疏性,減少過擬合的風險。
在主干網(wǎng)絡(luò)中加入BN層,目的是在網(wǎng)絡(luò)的每一層輸入的時候,插入一個BN層,也就是先進行歸一化處理,然后再進入網(wǎng)絡(luò)的下一層。歸一化公式如下:
一層有d維輸入:x=(x(1)…x(d))
注:所用藥物統(tǒng)一為:拜阿司匹林為拜耳公司生產(chǎn)的阿司匹林腸溶片;阿托伐他汀鈣為輝瑞制藥有限公司生產(chǎn)的立普妥。
(1)
(2)
增加了BN層之后,能夠改善流經(jīng)網(wǎng)絡(luò)的梯度、允許更大的學習率、大幅提高訓(xùn)練速度。
主干網(wǎng)絡(luò)輸出的值,首先通過一個average-pooling層,將當前的特征圖進行平均操作,減少空間信息也就是減少參數(shù)。隨之在average-pooling層后加一個dropout層,不僅解決過擬合問題還加快了訓(xùn)練速度。然后再加一個flatten層,該層用來將輸入壓平,即把多維的輸入一維化,常用在從卷積層到全連接層的過渡。最后即可得到分支網(wǎng)絡(luò)的輸入。
主干網(wǎng)絡(luò)搭建完成之后,進行搭建分支網(wǎng)絡(luò),定義4個屬性,分別是glasses,smile,young,male。分支網(wǎng)絡(luò)使用二分類網(wǎng)絡(luò)對4個屬性進行處理,最終輸出結(jié)果為0或1,其中1表示具有該屬性,0表示不具有該屬性。本文使用4個全連接層分別對各分支網(wǎng)絡(luò)的輸入數(shù)據(jù)進行處理,處理后輸出一個二維的數(shù)據(jù)。在最后一層加入softmax函數(shù),softmax適用于解決多分類問題,當分類情況只有兩種的時候,softmax就轉(zhuǎn)換成了回歸問題,也就是二分類問題,對應(yīng)的softmax的表達式如下:
(3)
該函數(shù)進行結(jié)果的預(yù)測,將最終結(jié)果約束到[0,1]之間,將得到的預(yù)測結(jié)果與真實結(jié)果進行比較,比較他們的擬合效果,通過損失函數(shù)的大小,不斷修正模型參數(shù)。
本文采用了香港中文大學發(fā)布的CelebA人臉屬性數(shù)據(jù)集,該數(shù)據(jù)集提供了人臉對齊和自然場景下近20萬張人臉圖像,標注了40種人臉屬性和5個人臉關(guān)鍵點的位置信息。本文只使用其中4個人臉屬性進行具體的研究,以這4種屬性來驗證該網(wǎng)絡(luò)模型的可行性。這4個屬性分別是glasses,smile,young,male。
首先通過opencv庫對圖片進行讀取,將讀取到的圖片通過dlib庫中的人臉檢測器識別出人臉的位置,并且裁剪人臉區(qū)域的圖像,通過檢測出來的人臉框數(shù)據(jù),把數(shù)據(jù)中較小的人臉圖片過濾掉。把最終得到的圖像resize至128×128的大小,將圖像的類型轉(zhuǎn)換成bytes類型,方便后續(xù)打包。
然后從標注文件中提取4個屬性對應(yīng)的屬性值。遍歷標注文件(txt文件)中的屬性名所對應(yīng)的一行,通過split函數(shù)對屬性名進行分隔,得到4個屬性所對的下標值。對每一行的標注信息也通過split函數(shù)進行分隔,結(jié)合得到的下標值和分隔后的標注信息就能夠得到圖片中4個屬性對應(yīng)的屬性值,其中1表示是該圖片具有該屬性,-1表示否。實驗中將處理后的圖像數(shù)據(jù)與對應(yīng)的4個屬性值的數(shù)據(jù)結(jié)合起來完成數(shù)據(jù)打包,把最終打包的文件保存為tfrecord類型文件。
指定訓(xùn)練的參數(shù)之后,傳入tfrecord文件進行訓(xùn)練,訓(xùn)練時將shuffle參數(shù)置為True,通過shuffle實現(xiàn)數(shù)據(jù)增強。在標注信息中,需要將原來的標注信息的值為-1和1轉(zhuǎn)換為0和1,其中1表示具有該屬性,0表示不具有該屬性,使得后續(xù)預(yù)測的時候輸出的是0和1。將最終訓(xùn)練好的模型保存為ckpt文件。然后將保存的網(wǎng)絡(luò)模型進行網(wǎng)絡(luò)固化,將ckpt文件轉(zhuǎn)為pb文件,使用pb文件實現(xiàn)前向推理。
損失函數(shù)的作用是描述模型的預(yù)測值和真實值之間的差距大小,使得模型通過不斷地訓(xùn)練來變得收斂。對于多任務(wù)網(wǎng)絡(luò)結(jié)構(gòu),本文采用交叉熵損失函數(shù)對模型進行訓(xùn)練[7]。對輸入的logits先通過softmax函數(shù)計算,再計算交叉熵損失函數(shù),交叉熵損失函數(shù)的公式如下:
(4)
隨著訓(xùn)練次數(shù)的增加,不斷更新網(wǎng)絡(luò)參數(shù),來減少損失函數(shù)的大小,實現(xiàn)模型的高精確性。本文中每一個屬性對應(yīng)一個損失函數(shù),然后將4個損失函數(shù)相加得到一個總的損失函數(shù),總的損失函數(shù)的變化如圖5所示。
圖5 損失函數(shù)的變化情況
本文采用準確率(ACC)作為模型的評價標準,準確率(ACC)是指分類正確樣本個數(shù)與總樣本數(shù)的比值,公式如下:
(5)
公式(5)中TP表示被模型預(yù)測為正的正樣本,TN表示被模型預(yù)測為負的負樣本,F(xiàn)P表示被模型預(yù)測為正的負樣本,F(xiàn)N表示被模型預(yù)測為負的正樣本。
選取300張人臉圖片進行測試,多任務(wù)網(wǎng)絡(luò)模型逐一讀取圖片,并且完成多屬性識別任務(wù),得到如表1所示的準確率。實驗表明,基于Inception-V3改進的多任務(wù)網(wǎng)絡(luò)人臉屬性識別模型的平均分類準確率可達89.09%,準確率較高,進一步證明了該模型對于人臉屬性識別的可行性,能夠較好地應(yīng)用在信息安全等領(lǐng)域,具有較高的研究價值。
表1 各屬性的識別準確率
本文結(jié)合深度學習進行人臉屬性的識別,基于Inception-V3網(wǎng)絡(luò)為主干網(wǎng)絡(luò),并對其進行擴展和優(yōu)化,搭建了多任務(wù)網(wǎng)絡(luò)結(jié)構(gòu),使用此網(wǎng)絡(luò)結(jié)構(gòu)的人臉屬性識別有效地降低參數(shù)量,準確率最高可達91.67%,證明了該網(wǎng)絡(luò)的可行性。人臉屬性識別的應(yīng)用領(lǐng)域越來越廣泛,為教育、公安等部門提供了很好的技術(shù)方案,其應(yīng)用前景非常廣闊。