曾 燕,陳岳林,蔡曉東
(1. 桂林電子科技大學(xué) 機電工程學(xué)院,廣西 桂林 541004;2. 桂林電子科技大學(xué) 信息與通信學(xué)院,廣西 桂林 541004)
近年來,基于卷積神經(jīng)網(wǎng)絡(luò)的人臉識別方法在準確率方面取得了顯著的效果.反觀人臉識別效率的關(guān)注度卻不及識別準確率,而在實際應(yīng)用場景中,如何能夠在保證識別準確率穩(wěn)定的同時提高識別效率是人臉識別中必須要解決的問題.
人臉特征提取網(wǎng)絡(luò)如DeepFace[1],Web-Scale Training (WST)Fusion[2],Visual Geometry Group(VGG)[3]等均屬于大型的網(wǎng)絡(luò)結(jié)構(gòu),包含上百兆比特參數(shù),網(wǎng)絡(luò)輸出的均是不低于 1 024 維的高維特征,這會導(dǎo)致在識別時,特征提取和相似度計算都會產(chǎn)生大量的時間成本,降低了識別效率.因此,為了解決高維特征帶來的高計算成本問題,通常需要對高維特征進行降維.傳統(tǒng)的人臉識別降維方法主要包括主成分分析(Principal Component Analysis,PCA)、線性判別分析(Linear Discriminant Analysis,LDA)和局部保持投影(Locality Preserving Projection,LPP)等.將這些方法結(jié)合深度學(xué)習(xí)進行人臉識別時,需要首先提取出卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN)模型中的特征,再用這些降維方法進行特征維度壓縮,將高維的特征通過向量空間映射到低維的空間中.這種傳統(tǒng)的降維方式不能實現(xiàn)端到端的識別,且在通過映射降維這個過程中會大量損失特征所包含的有效信息,導(dǎo)致識別準確率降低.例如主成分分析在投影方向上有可能會導(dǎo)致特征差異信息的弱化,使得降維后的特征不具有高區(qū)分性,導(dǎo)致分類效果不好;此外,雖然這種方式對特征進行了壓縮,在相似度計算時減少了計算成本,但是在降維這個過程的計算量不可忽略不計,且特征提取效率也并沒有得到提升.
筆者提出一種結(jié)合全局與局部池化的深度哈希人臉識別算法,設(shè)計了新的池化操作,將全局平均池化與最大池化融合作為網(wǎng)絡(luò)的特征提取層,可以有效地減少網(wǎng)絡(luò)計算量,并大幅壓縮網(wǎng)絡(luò)模型.為了實現(xiàn)端到端的降維,筆者將深度哈希融合到全卷積神經(jīng)網(wǎng)絡(luò)中,在訓(xùn)練過程中網(wǎng)絡(luò)的高維浮點型特征通過融合的深度哈希會學(xué)習(xí)到近似哈希編碼.該編碼是超低維浮點型特征,能夠進一步量化為整型的哈希編碼.與此同時,筆者提出一種融合損失方法,將哈希量化誤差損失與分類損失進行加權(quán)融合,使網(wǎng)絡(luò)在訓(xùn)練過程中同時學(xué)習(xí)到具有多分類特性的近似哈希編碼和高維浮點型特征,以減少降維過程中圖像有效信息的損失.最終筆者提出的方法能夠減少網(wǎng)絡(luò)參數(shù),且從特征提取和特征降維兩方面提高識別效率.
傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)中全連接層所占參數(shù)比例幾乎為整個網(wǎng)絡(luò)的80%.減少網(wǎng)絡(luò)參數(shù)的一般做法是:將網(wǎng)絡(luò)中的全連接層全部轉(zhuǎn)換為卷積層.這種方式將全連接層的冗余參數(shù)去掉,但由于全連接層是對全局信息進行學(xué)習(xí)的,卷積層是局部信息的連接,雖然理論上可采用與全連接層特征圖尺寸相同的卷積核進行替換,但是這種方式得到的結(jié)果往往不如全連接層的精確.減少所有層的特征輸出維度.這種方式可以降低特征維度,但是會導(dǎo)致網(wǎng)絡(luò)訓(xùn)練困難,最后輸出的特征維度包含的信息沒有原維度特征包含的多,影響識別準確率.相較于做法,筆者借鑒GoogLeNet[4]中用全局平均池化層代替全連接層的思想,采用全局平均池化層與最大池化層融合的池化操作來代替全連接層用以提取特征.不同于用卷積層代替全連接層,全局平均池化層可以鏈接到全局信息,最大池化可以鏈接到局部信息,從而學(xué)習(xí)到更細致全面的特征.同時,池化層不包含任何參數(shù),網(wǎng)絡(luò)訓(xùn)練過程中不會與全連接層一樣出現(xiàn)過擬合現(xiàn)象,這使得學(xué)習(xí)到的特征更具有魯棒性.相較于做法,筆者引入深度哈希的思想,在特征輸出層后融入深度哈希,通過網(wǎng)絡(luò)在線學(xué)習(xí)的方式對特征進行降維,而不改變網(wǎng)絡(luò)本身卷積層的輸出維度.這種方式可以減少網(wǎng)絡(luò)特征輸出層部分的參數(shù)且輸出的特征能夠保留更多的信息.此外,這種方式可以保證網(wǎng)絡(luò)正常收斂,同時可以達到端到端降維的目的.

圖1 基于全局平均池化層的人臉特征提取網(wǎng)絡(luò)構(gòu)架
為了在網(wǎng)絡(luò)參數(shù)得到大幅減少的同時保證該網(wǎng)絡(luò)的泛化能力,筆者基于全局平均池化層對包含有全連接層的卷積神經(jīng)網(wǎng)絡(luò)進行重新設(shè)計,網(wǎng)絡(luò)構(gòu)架如圖1所示.具體設(shè)計思路如下:
(1) 用圖1中的模塊A作為卷積神經(jīng)網(wǎng)絡(luò)的特征輸出層.采用全局平均池化層與最大池化層進行維度拼接的融合方式作為卷積神經(jīng)網(wǎng)絡(luò)的特征輸出層,使網(wǎng)絡(luò)中不再包含全連接層.文獻[4]中采取的是單獨使用全局平均池化層的方式,這種做法與全連接層提取的特征一樣,它們只包含了全局信息,沒有局部信息.因此,筆者采用能夠同時鏈接到全局和局部信息的學(xué)習(xí)方式作為網(wǎng)絡(luò)的特征輸出層.如圖1所示,模塊A在卷積層后同時連接最大池化層和全局平均池化層.為了確保網(wǎng)絡(luò)能夠正常收斂并提高其泛化能力,在兩個池化層后面分別加上批次歸一化層.最大池化層可以學(xué)習(xí)到局部信息,再用聯(lián)合層將這兩個層進行維度拼接,使網(wǎng)絡(luò)訓(xùn)練過程中的特征能夠同時鏈接到局部信息和全局信息,從而學(xué)習(xí)到包含更全面圖像信息的特征.模塊A的參數(shù)為零,大幅壓縮了網(wǎng)絡(luò)的參數(shù),從而提高了模型的訓(xùn)練速度.
(2) 將哈希層和分類層設(shè)計為1×1卷積層.為了進一步減少網(wǎng)絡(luò)參數(shù),圖1中的模塊B借鑒Deep Hashing Network(DHN)[5]的思路,在該網(wǎng)絡(luò)中融入哈希,添加哈希層學(xué)習(xí)低維特征,這比傳統(tǒng)的網(wǎng)絡(luò)外降維的方式保留的特征信息更多.在包含有全連接層的卷積神經(jīng)網(wǎng)絡(luò)中,引入哈希層時使用的是全連接層,會導(dǎo)致網(wǎng)絡(luò)的參數(shù)增多,且增大了網(wǎng)絡(luò)的過擬合風(fēng)險.因此,筆者將模塊B部分根據(jù)全卷積網(wǎng)絡(luò)中卷積層代替全連接層的規(guī)則將哈希層和分類層均設(shè)計為 1×1 卷積層,在進一步減少網(wǎng)絡(luò)參數(shù)的同時,降低了網(wǎng)絡(luò)的訓(xùn)練難度.
(3) 卷積層的激活函數(shù)Rectified Linear Uints (ReLU)[6]輸出沒有負值,即負值部分不攜帶任何信息,這對于模塊B中學(xué)習(xí)近似哈希編碼有一定的阻礙作用.因此,筆者采用能夠?qū)斎胱兓蛟肼暩敯羟沂諗啃阅芨谩⒖奢敵鲐撝档腅xponential Linear Units (ELU)[7]作為卷積層的激活函數(shù),使被激活層的輸出信息更豐富.
基于卷積神經(jīng)網(wǎng)絡(luò)的端到端的降維方式一般是壓縮網(wǎng)絡(luò)輸出特征的維度.網(wǎng)絡(luò)學(xué)習(xí)高維特征后再學(xué)習(xí)低維特征,若在降維過程中不對學(xué)習(xí)過程進行處理,則很容易導(dǎo)致網(wǎng)絡(luò)不收斂,且最后輸出的低維特征表達能力較弱,降低了識別準確率.為了解決以上問題,筆者借鑒文獻[5]中提出的哈希降維與量化誤差損失,哈希層采用雙曲正切作為激活函數(shù),將壓縮后的低維特征約束在 [-1,1]之間.具體計算公式如下:
(1)
其中,N為訓(xùn)練批次的大小;K為激活函數(shù)層輸出的近似哈希編碼長度;z=Wtxi,k+bt,Wt和bt分別為雙曲正切層的權(quán)重和偏置,xi,k是此批次中第i個樣本的特征向量中的第k位編碼.
量化誤差損失的主要作用是優(yōu)化激活函數(shù)雙曲正切,目標是使網(wǎng)絡(luò)訓(xùn)練時低維特征量化為[-1,1]的量化誤差最小.如果只用這一個損失層,網(wǎng)絡(luò)訓(xùn)練出來的特征并不具備區(qū)分性,不能達到分類的效果,而文獻[5]中的交叉熵損失只能完成基于三元組的多標簽數(shù)據(jù)庫的二分類任務(wù),不能完成單標簽人臉數(shù)據(jù)庫的多分類任務(wù).因此,為了學(xué)習(xí)到可對人臉數(shù)據(jù)庫進行分類的近似哈希編碼,筆者將量化誤差損失和可完成多分類任務(wù)的Softmax Loss進行融合,兩個損失分別學(xué)習(xí)不同的特征,量化誤差損失只學(xué)習(xí)近似哈希編碼,而Softmax Loss只學(xué)習(xí)分類的特征,最后將這兩個損失進行加權(quán)融合并同時作用于圖1中模塊B的哈希層.基于兩個損失加權(quán)融合的目標函數(shù)設(shè)計如下:
(2)
其中,L1為Softmax Loss函數(shù),M為訓(xùn)練數(shù)據(jù)類別總數(shù);h為標簽;W為分類層的權(quán)重集合;b為對應(yīng)的偏置值;L2為量化誤差損失函數(shù);λ為量化誤差損失的權(quán)重值,用來平衡這兩個損失,經(jīng)過實驗將其值設(shè)置為 0.000 1.
融合損失的優(yōu)化過程如下:網(wǎng)絡(luò)前向傳播分別通過式(1)和式(2)得到近似哈希編碼和融合損失值; 采用隨機梯度下降法(Stochastic Gradient Descent,SGD)進行反向傳播.融合損失函數(shù)梯度計算公式如下:
(3)
其中,at為雙曲正切層的輸出向量.反向傳播通過式(3)更新Wt.網(wǎng)絡(luò)訓(xùn)練不斷重復(fù)此過程,最終得到最小的量化誤差損失和分類損失,同時學(xué)習(xí)到具備多分類能力的最優(yōu)近似哈希編碼.
實驗平臺的配置為Intel i3四核3.4 GHz處理器、8 GB內(nèi)存、GTX980Ti顯卡以及Ubuntu 14.04操作系統(tǒng),并使用基于C++編程語言的Caffe工具包.
2.1.1 訓(xùn)練數(shù)據(jù)庫
采用Institute of Automation,Chinese Academy of Sciences WebFace(CASIA-WebFace)[8]公開的數(shù)據(jù)庫對網(wǎng)絡(luò)進行訓(xùn)練,篩選掉錯誤的和重復(fù)的圖片之后,最終的樣本庫包含 10 575 人,共 453 439 張圖片.
2.1.2 測試數(shù)據(jù)庫
使用公開人臉庫Labeled Faces in the Wild (LFW)[9]數(shù)據(jù)庫進行測試.LFW數(shù)據(jù)庫有 5 479 個人,共 13 233 張人臉圖片.文中的測試結(jié)果是基于LFW數(shù)據(jù)庫的人臉識別任務(wù),根據(jù)文獻[10]選取LFW閉集作為測試庫進行Rank-1準確率以及識別效率的測試.閉集gallery庫選取596個多于兩張的人臉樣本,每個人選取一張人臉圖像,再選取 3 653 個僅僅只有1張圖片的人臉樣本,共 4 249 張圖片.probe庫選取與gallery對應(yīng)的596個人臉剩下的樣本,共 3 143 張.
2.1.3 數(shù)據(jù)預(yù)處理
對所有訓(xùn)練和測試樣本都進行相同的預(yù)處理.首先,使用Multi-task Cascaded Convolutional Networks (MTCNN)[11]算法對每一張樣本進行人臉檢測和5個關(guān)鍵點定位(兩只眼睛,一個鼻子和兩個嘴角); 然后根據(jù)定位出的5個關(guān)鍵點的位置進行相似變換; 最后將所有人臉裁剪成 224× 224大小的Red Green Blue(RGB)圖片.
實驗參數(shù)設(shè)置如下: 實驗使用的基礎(chǔ)框架是VGG框架,分別使用VGG原網(wǎng)絡(luò)和筆者提出的思路對VGG進行重新設(shè)計并在訓(xùn)練庫上微調(diào)VGG公開的人臉預(yù)訓(xùn)練模型.VGG原網(wǎng)絡(luò)參數(shù)不變.對VGG網(wǎng)絡(luò)進行改進后,由于圖1中模塊B的融合損失同時對特征層產(chǎn)生作用,因此采用MSRA進行權(quán)重初始化時選取更側(cè)重于反向傳播的參數(shù)FANOUT.參數(shù)配置文件中初始學(xué)習(xí)率設(shè)置為0.001,權(quán)重衰減設(shè)置為 0.000 5,學(xué)習(xí)率迭代方式為poly并設(shè)置參數(shù)power為1.在測試時,使用由粗到精的二次識別模型分別提取測試圖片原圖與水平翻轉(zhuǎn)圖在哈希層和聯(lián)合層的特征,哈希層和聯(lián)合層最終的特征分別使用漢明距離和余弦距離計算相似度.
2.2.1 激活函數(shù)對比實驗
該實驗分別使用PReLU、ReLU和ELU作為圖1中卷積層的激活函數(shù)進行網(wǎng)絡(luò)訓(xùn)練,3個網(wǎng)絡(luò)的訓(xùn)練參數(shù)完全一致,訓(xùn)練時在網(wǎng)絡(luò)文件中設(shè)置從訓(xùn)練集中隨機抽取 10 000 張作為驗證集.截取3個網(wǎng)絡(luò)訓(xùn)練中的部分結(jié)果進行曲線描繪,如圖2所示,左圖為驗證準確率與損失曲線,右圖為訓(xùn)練與驗證的Softmax Loss(Losss)和量化誤差損失(Lossh)曲線.從圖中可以看出,PReLU的驗證準確率比ReLU和ELU低約16%;ELU訓(xùn)練曲線比ReLU和PReLU更平滑,損失浮動范圍更窄,總體收斂效果更優(yōu).

圖2 PReLU、ReLU與ELU網(wǎng)絡(luò)訓(xùn)練曲線圖
3個網(wǎng)絡(luò)在LFW閉集上的Rank-1測試結(jié)果如圖3所示.結(jié)果顯示,ELU識別準確率比ReLU高5%,比PReLU高42%,表明ELU的網(wǎng)絡(luò)收斂性更強,能夠?qū)W習(xí)到表達能力更強的特征.因此,筆者采用ELU作為卷積層的激活函數(shù).

圖3 PReLU、ReLU和ELU測試結(jié)果示意圖圖4 資源占用對比示意圖
2.2.2 LFW閉集測試結(jié)果及分析
該實驗用VGG公開的人臉預(yù)訓(xùn)練模型,在訓(xùn)練集上分別微調(diào)VGG原網(wǎng)絡(luò)以及根據(jù)筆者的思想改進后的VGG網(wǎng)絡(luò).網(wǎng)絡(luò)訓(xùn)練所占資源如圖4所示,網(wǎng)絡(luò)均設(shè)置相同的batchsize.筆者提出的方法使用全局平均池化層和卷積層代替全連接層,比VGG所占資源幾乎節(jié)約了一半.
實驗結(jié)果如表1所示,其中DeepFace和WTS Fusion是對應(yīng)文獻上的結(jié)果.從表1中可以看出,筆者提出的方法在準確率上優(yōu)于前面3種方法.與DeepFace和WTS Fusion相比,筆者提出的方法只用了兩者 1/10 的訓(xùn)練數(shù)據(jù)卻得到了更高的識別準確率; 與VGG相比,修改后的網(wǎng)絡(luò)結(jié)構(gòu)得到更高的準確率,且整體識別效率比原來提高了約68%.不論是特征提取還是相似度計算,效率都有所提高,其中相似度計算效率提高了約4倍,而在網(wǎng)絡(luò)模型參數(shù)方面筆者提出的方法也減少了約90.86%.從實驗結(jié)果可知,筆者提出的方法可以有效地減少計算資源的消耗以及內(nèi)存占用率,使用Softmax Loss和量化誤差損失融合訓(xùn)練可以得到具有強分類效果的近似哈希編碼,最終可以整體提高準確率和效率.

表1 筆者提出的方法與其他方法在LFW閉集上的對比結(jié)果
為了驗證1.2節(jié)提出的融合損失方法是否具有延展性,將該方法移植到Face Residual Network(Face-ResNet)[12]網(wǎng)絡(luò)中進行擴展實驗.該實驗以Face-ResNet網(wǎng)絡(luò)作為基礎(chǔ)框架,在Face-ResNet網(wǎng)絡(luò)的特征層與分類層之間引入128維哈希隱藏層,并將圖1中模塊B與Center loss進行融合,網(wǎng)絡(luò)結(jié)構(gòu)(Hash-Face)如圖5所示,該網(wǎng)絡(luò)的特征提取層與分類層均為全連接層.實驗設(shè)置如下: 量化誤差損失、Center loss和Softmax Loss的權(quán)重值分別設(shè)置為 0.000 1、0.008和1,參數(shù)配置文件設(shè)置與2.2節(jié)的相同.該實驗對模型的壓縮主要體現(xiàn)在兩個網(wǎng)絡(luò)特征層與損失層之間的網(wǎng)絡(luò)節(jié)點數(shù)量的差異上,可做如下分析: Face-ResNet的特征層含有 128× 512個節(jié)點,與兩個損失層產(chǎn)生的網(wǎng)絡(luò)節(jié)點數(shù)為 2× 65 536,即 131 072 個節(jié)點; Hash-Face的哈希層與雙曲正切激活層均含有 128× 128個節(jié)點,激活層與3個損失層產(chǎn)生的網(wǎng)絡(luò)節(jié)點數(shù)為 3× 16 384,即改進后的網(wǎng)絡(luò)特征層與損失層間產(chǎn)生的節(jié)點數(shù)為 81 920,相對于Face-ResNet壓縮了 49 152 個網(wǎng)絡(luò)節(jié)點,可得到更小的模型尺寸.

圖5 基于Face-ResNet的融合損失網(wǎng)絡(luò)結(jié)構(gòu)示意圖
實驗結(jié)果如表2所示.由于網(wǎng)絡(luò)并未做大的改動,因此改進前后的特征提取時間相差無幾,效率評估以相似度計算耗時為主.從表2中可以看出, Hash-Face識別準確率比Face-ResNet降低不到1%,網(wǎng)絡(luò)的特征維度從512維降低到128維,使得單張圖片的識別效率提高約 20 ms (約23.7%),哈希層低維近似哈希編碼的引入使得模型參數(shù)減少約 30 MB.從實驗可知,筆者所提出的融合損失方法具有延展性,除了所比對的Face-ResNet網(wǎng)絡(luò),同樣適用于其他網(wǎng)絡(luò)架構(gòu),具有提升效率、降低內(nèi)存占用率的整體效果.

表2 擴展實驗在LFW閉集上的對比結(jié)果
筆者提出了一種基于融合哈希的深度人臉識別網(wǎng)絡(luò).基于全局平均池化層的全卷積網(wǎng)絡(luò),在含有全連接層的卷積神經(jīng)網(wǎng)絡(luò)中,使用全局平均池化與最大池化維度拼接的方式來提取高維特征,并將低維特征層和分類層設(shè)置為 1×1 卷積層,改進后的卷積神經(jīng)網(wǎng)絡(luò)為全卷積網(wǎng)絡(luò).在以VGG為基礎(chǔ)框架的實驗中,可學(xué)習(xí)到計算資源占用比為原來的 1/2、參數(shù)量僅為原來的 1/11 的深度模型來提取人臉特征.將哈希量化誤差損失與分類損失進行加權(quán)融合,使網(wǎng)絡(luò)在訓(xùn)練過程中能夠?qū)W習(xí)到可完成多分類任務(wù)的近似哈希編碼.在LFW庫 1∶N人臉識別上的兩個實驗結(jié)果證明,筆者提出的方法可以提取出有效的低維特征,實現(xiàn)端到端降維,達到在準確率不降低的情況下提高人臉識別效率的目的,且融合損失方法具有延展性,可適用于其他網(wǎng)絡(luò)框架,滿足實際場景的使用.