李 楠, 蔡堅(jiān)勇,2,3,4, 李 科, 程 玉, 張明偉
1(福建師范大學(xué) 光電與信息工程學(xué)院, 福州 350007)
2(福建師范大學(xué) 醫(yī)學(xué)光電科學(xué)與技術(shù)教育部重點(diǎn)實(shí)驗(yàn)室, 福州 350007)
3(福建師范大學(xué) 福建省光子技術(shù)重點(diǎn)實(shí)驗(yàn)室, 福州 350007)
4(福建師范大學(xué) 福建省光電傳感應(yīng)用工程技術(shù)研究中心, 福州 350007)
上述方法雖能解決部分非限制性問(wèn)題, 但在收斂速度上性能較差, 特別是當(dāng)網(wǎng)絡(luò)層數(shù)太多時(shí), 會(huì)出現(xiàn)梯度彌散現(xiàn)象.為了解決這類問(wèn)題, 本文提出基于多Inception 結(jié)構(gòu)的卷積網(wǎng)絡(luò)神經(jīng)算法用于人臉識(shí)別, 通過(guò)改造傳統(tǒng)的SoftmaxLoss 方法, 結(jié)合Softmax 和TripletLoss 可以獲得更大的類間距離和更小的類內(nèi)距離.實(shí)驗(yàn)證明本文提出的算法在增加網(wǎng)絡(luò)深度和寬度的同時(shí)減少了參數(shù)個(gè)數(shù), 在訓(xùn)練過(guò)程中能有效減少類內(nèi)間距, 在同等條件下能獲取更高的特征提取能力.
CNN (Convolutional Neural Network)是一個(gè)多層次結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò)[6], 通常由輸入、特征提取層(多層)以及分類器組成, 每層都有多個(gè)二維獨(dú)立神經(jīng)元.CNN 網(wǎng)絡(luò)通過(guò)逐層的特征提取來(lái)提升特征準(zhǔn)確度, 最后將其輸入到分類器中對(duì)結(jié)果進(jìn)行分類.卷積層是CNN 的特征映射層, 具有局部連接和權(quán)值共享的特征.這兩種特征降低了模型的復(fù)雜度, 并使參數(shù)數(shù)量大幅減少.下采樣(池化)層是CNN 的特征提取層, 它將輸入中的連續(xù)范圍作為池化區(qū)域, 并且只對(duì)重復(fù)的隱藏單元輸出特征進(jìn)行池化, 該操作使CNN 具有平移不變性.實(shí)際上每個(gè)用來(lái)求局部平均和二次提取的卷積層后都緊跟一個(gè)下采樣層, 這種兩次特征提取的結(jié)構(gòu)使CNN 在對(duì)輸入樣本進(jìn)行識(shí)別時(shí)具有較高畸變?nèi)萑塘?網(wǎng)絡(luò)的最后是分類器, 通常由Softmax 方法實(shí)現(xiàn), 該層將之前提取到的特征進(jìn)行綜合, 使圖像特征信息由二維降為一維.分類器層(如Softmax 層)一般位于網(wǎng)絡(luò)尾端, 對(duì)前面逐層變換和映射提取的特征進(jìn)行回歸分類等處理也可作輸出層.
主流的卷積神經(jīng)網(wǎng)絡(luò)在特征提取過(guò)程中主要采用加深網(wǎng)絡(luò)層數(shù)來(lái)實(shí)現(xiàn), 但是由此引入了過(guò)度擬合、梯度彌散和計(jì)算復(fù)雜度提升的問(wèn)題.因此, Szegedy 等提出了Inception 結(jié)構(gòu)用于解決該類問(wèn)題[7].這種結(jié)構(gòu)能夠有效地減少網(wǎng)絡(luò)的參數(shù)數(shù)量, 同時(shí)也能加深加寬網(wǎng)絡(luò), 增加網(wǎng)絡(luò)的特征提取能力.
最初的Inception 是所有卷積核都放到上層的輸出來(lái)實(shí)現(xiàn), 即1×1, 3×3, 5×5 的卷積和3×3 池融合在一起,因此也造成5×5 的卷積核計(jì)算復(fù)雜度太高, 特征圖厚度過(guò)大.隨后在Inception 的第一個(gè)穩(wěn)定版本中, Szegedy將Inception 結(jié)構(gòu)進(jìn)行優(yōu)化, 在3×3 前, 5×5 前, max pooling 后都分別加上了1×1 的卷積核從而降低特征圖厚度的.最后的模型如圖1 所示.

圖1 Inception V1 結(jié)構(gòu)圖
在接下來(lái)的Inception V2 中, Google 團(tuán)隊(duì)為了進(jìn)一步減少計(jì)算量并提升性能, 加入了BN 層減少Internal Covariate Shift, 將兩個(gè)5×5 的卷積分解成兩個(gè)3×3 的卷積進(jìn)行疊加, 節(jié)省了72%左右的開銷, 再將3×3 的conv 用1×3 和3×1 的卷積來(lái)代替, 在此基礎(chǔ)上,Santurkar 等[8]認(rèn)為n×n 的卷積在理論上都可以由n×1和1×n 的卷積來(lái)進(jìn)行替代, 從而節(jié)約CPU 和內(nèi)存損耗.最終在訓(xùn)練參數(shù)較少的情況下提升了分類準(zhǔn)確率.Inception V2 如圖2 所示.

圖2 Inception V2 結(jié)構(gòu)圖
Inception V3 一個(gè)最重要的改進(jìn)是分解(factorization), 將7×7 分解成兩個(gè)一維的卷積(1×7, 7×1),3×3 也是一樣(1×3, 3×1), 這樣的好處, 既可以加速計(jì)算(多余的計(jì)算能力可以用來(lái)加深網(wǎng)絡(luò)), 又可以將1 個(gè)卷積拆成2 個(gè)卷積, 使得網(wǎng)絡(luò)深度進(jìn)一步增加, 增加了網(wǎng)絡(luò)的非線性.


其中, 分母為第 i 維數(shù)據(jù)的標(biāo)準(zhǔn)差, 分子為i 維數(shù)據(jù)和均值的差.
對(duì)照組大鼠存活良好,模型組大鼠進(jìn)食、活動(dòng)減少,毛發(fā)凌亂甚至脫毛,成功率100%,丁酸鈉組由于藥物作用,造模成功25例,成功率為83.3%,成功率顯著低于模型組(P<0.05)。
本文提出的多Inception 結(jié)構(gòu)特征提取算法的核心思路是將網(wǎng)絡(luò)層的輸入輸出尺寸進(jìn)行修改, 并將濾波器的結(jié)構(gòu)進(jìn)行調(diào)整, 每個(gè)Inception 結(jié)構(gòu)都在對(duì)應(yīng)的卷積層特征上提取不同尺度的特征圖, 從而對(duì)同一目標(biāo)不同尺寸的特征進(jìn)行提取, 能有效將卷積特征層更好地結(jié)合, 從而在整體上提升人臉特征的精度.本文構(gòu)建Inception 的核心思路是: ① 使用更小的核來(lái)減少網(wǎng)絡(luò)參數(shù), 例如在第一層將原本7×7 的卷積核減少為兩個(gè)5×5 和3×3 的卷積核, 從而減少參數(shù).② 利用BN 層降低梯度消失的問(wèn)題.③ 利用TripletLoss 和Softmax 結(jié)合的方法來(lái)降低類內(nèi)距離, 提高類間距離.④ 采用瓶頸性結(jié)構(gòu), 充分利用深層次提高抽象能力, 同時(shí)節(jié)約計(jì)算.本文提出的多Inception 結(jié)構(gòu)如下:
(1)第1 層為卷積層, 使用5×5 的卷積核(滑動(dòng)步長(zhǎng)2, padding 為3), 在64 通道卷積后進(jìn)行ReLU 操作經(jīng)過(guò)3×3 的max pooling(步長(zhǎng)為2), 輸出為((112-3+1)/2)+1=56, 即輸出大小為56×56×64, 再進(jìn)行ReLU 操作.
(2)第2 層繼續(xù)使用卷積層, 使用3×3 的卷積核(滑動(dòng)步長(zhǎng)為1, padding 為1), 192 通道, 輸出大小轉(zhuǎn)化為56×56×192, 卷積后進(jìn)行歸一化操作, 經(jīng)過(guò)3×3 的max pooling(步長(zhǎng)為2), 輸出為((56-3+1)/2)+1=28, 即輸出大小為28×28×192, 再進(jìn)行ReLU 操作.
(3)第3 層分成4 個(gè)部分, 采用不同尺度的卷積核來(lái)進(jìn)行處理, 4 個(gè)卷積核分別為: 1) 64 個(gè)1×1 的卷積核, 然后進(jìn)行ReLU 操作, 輸出28×28×64, 2) 96 個(gè)3×3 的卷積核, 進(jìn)行ReLU 計(jì)算, 再進(jìn)行128 個(gè)3×3 的卷積(padding 為1), 輸出28×28×128.3) 16 個(gè)5×5 的卷積核, 大小變?yōu)?8×28×16.4) MaxPool 層, 使用3×3 的核(padding 為1), 然后進(jìn)行32 個(gè)1×1 的卷積,大小變?yōu)?8×28×32.最后將4 個(gè)結(jié)果進(jìn)行連接, 對(duì)這4 部分輸出結(jié)果的第三維進(jìn)行并聯(lián), 即64+128+32+32=256, 最終輸出大小變?yōu)?8×28×256.
(4)第4 層有4 部分, 分別是: ① 128 個(gè)1×1 的卷積核, 進(jìn)行ReLU 操作, 輸出28×28×128.② 128 個(gè)1×1 的卷積核, 作為3×3 卷積核之前的降維, 進(jìn)行R e L U 操作, 再進(jìn)行1 9 2 個(gè)3×3 的卷積操作(padding 為1), 輸出大小為28×28×192.③ 將32 個(gè)1×1 的卷積核作為5×5 卷積核之前的降維, 進(jìn)行ReLU 操作后, 再進(jìn)行96 個(gè)5×5 的卷積(padding 為1),輸出大小變?yōu)?8×28×96.④ pool 層, 使用3×3 的核(padding 為1)進(jìn)行64 個(gè)1×1 的卷積, 輸出大小轉(zhuǎn)換為28×28×64.將4 個(gè)結(jié)果進(jìn)行連接, 對(duì)這4 部分輸出結(jié)果的第三維并聯(lián).
由于本文提出的結(jié)構(gòu)在每個(gè)卷積層都加入Inception, 使網(wǎng)絡(luò)可以充分考慮每個(gè)卷積層的特征維度, 獲取不同場(chǎng)景下(即各種非限制條件)的目標(biāo)特征, 具有更強(qiáng)的魯棒性, 同時(shí)BN 層能進(jìn)一步優(yōu)化了參數(shù), 能實(shí)現(xiàn)快速收斂.本文提出的多Inception 結(jié)構(gòu)如圖3.

圖3 多Inception 結(jié)構(gòu)
大部分基于CNN 的特征提取方法都會(huì)采用SoftmaxLoss[10]作為訓(xùn)練網(wǎng)絡(luò)的損失函數(shù), 通過(guò)迭代過(guò)程中損失函數(shù)反饋的損失值來(lái)動(dòng)態(tài)優(yōu)化網(wǎng)絡(luò)參數(shù), 但是在人臉識(shí)別的任務(wù)中, 由于人臉表情的復(fù)雜性, 環(huán)境的多變性, 傳統(tǒng)的Softmax 函數(shù)只能增大類間距離, 而類內(nèi)距離無(wú)法有效的減少, 因此非限制條件下的人臉識(shí)別效率很低.而三元組損失函數(shù)TripletLoss 在傳統(tǒng)的基于正負(fù)樣本對(duì)的基礎(chǔ)上, 引入了Anchor 作為第三個(gè)約束條件, 在減低同類樣本的同時(shí), 增大非同類樣本的類間距離[11].假設(shè)為錨樣本, 為正樣本, 為負(fù)樣本, 則可以將三元損失函數(shù)定義為:

因此綜合了SoftmaxLoss 和TripletLoss 的損失函數(shù)能有效的優(yōu)化類間距離和類內(nèi)距離的分類問(wèn)題, 同時(shí)避免TripletLoss 的收斂緩慢問(wèn)題.因此本實(shí)驗(yàn)采用的損失函數(shù)計(jì)算方法是將兩者進(jìn)行加權(quán), 具體為:

其中, β 是權(quán)重值, 用來(lái)平衡兩個(gè)損失函數(shù).在本文提出的網(wǎng)絡(luò)中, Softmax 層和TripletLoss 層的使用方式如下:

圖4 基于多Inception 結(jié)構(gòu)和融合TripletLoss 和SoftmaxLoss 的特征提取網(wǎng)絡(luò)
本實(shí)驗(yàn)采用配置為Intel 的I7-8900K 4 核3.7 G 處理器, 32 GB 內(nèi)存, M40 顯卡, Windows10 操作系統(tǒng)的PC 電腦作為運(yùn)行環(huán)境, 使用基于Python 的Google 大數(shù)據(jù)平臺(tái)TensorFlow.
本文使用LFW (Labeled Faces in the Wild)[12]人臉數(shù)據(jù)庫(kù), 該數(shù)據(jù)庫(kù)是由美國(guó)馬薩諸塞州立大學(xué)提供, 一共13 000 張圖片, 每張圖片都被標(biāo)識(shí)出對(duì)應(yīng)的人的名字, 其中有1680 人對(duì)應(yīng)不只一張圖像, 即大約1680 個(gè)人包含兩張以上人臉.
首先將訓(xùn)練和測(cè)試用的樣本進(jìn)行預(yù)處理, 流程如下: (1)用Adaboost 算法[13]面部檢測(cè)器將樣本進(jìn)行人臉檢測(cè)和面部關(guān)鍵點(diǎn)定位(雙眼, 鼻子, 嘴角, 耳朵).(2)根據(jù)Adaboost 算法定位出的6 個(gè)關(guān)鍵點(diǎn)位置進(jìn)行數(shù)據(jù)剪裁, 得到統(tǒng)一的112×96 的人臉圖片.(3)開始訓(xùn)練, 核心訓(xùn)練參數(shù)如下: 學(xué)習(xí)衰減率設(shè)置為0.001, 訓(xùn)練批次為50 次, 迭代次數(shù)為10 萬(wàn)次.在測(cè)試結(jié)果的比對(duì)中, 將測(cè)試的人臉原圖特征和水平翻轉(zhuǎn)圖提取的特征進(jìn)行對(duì)比, 計(jì)算其相似度, 最后標(biāo)識(shí)出人物名字.最后識(shí)別效果圖如圖5.

圖5 識(shí)別效果圖
在LFW 庫(kù)中選取8000 個(gè)人臉, 在非限制條件下對(duì)人臉進(jìn)行檢測(cè)的過(guò)程中, 在采用Softmax 和Triplet結(jié)合的損失函數(shù)作為訓(xùn)練監(jiān)督信號(hào)的情況下, 能取得98.54%的準(zhǔn)確率.在ROC 的對(duì)比方面, 如圖6 所示,本文將DeepID, DeepFace, 傳統(tǒng)Inception 等3 種算法的結(jié)果和本文提出算法進(jìn)行比較.以虛檢率為橫坐標(biāo),檢出率為縱坐標(biāo), 可以看到, 本文提出的算法在ROC上表現(xiàn)優(yōu)于其他對(duì)比算法.實(shí)驗(yàn)對(duì)比結(jié)果如表1.

圖6 ROC 對(duì)比圖
在最高識(shí)別準(zhǔn)確率方面?zhèn)鹘y(tǒng)的基于BP 神經(jīng)網(wǎng)絡(luò)的PCA 算法[14]和Fisher[15]判別分析的算法相比, 本文提出的算法具有更高的識(shí)別準(zhǔn)確率.其次, 與基于分類網(wǎng)絡(luò)的算法如DeepFace、DeepID 相比, 本文提出的算法的網(wǎng)絡(luò)個(gè)數(shù)明顯減少, 計(jì)算的復(fù)雜度大幅度下降.同時(shí), 與基于cosine 距離的Contrastive loss 的算法相比,在保證相同識(shí)別率的條件下, 明顯減少了人臉關(guān)鍵點(diǎn).和傳統(tǒng)的Inception 的對(duì)比中, 本文對(duì)卷積核進(jìn)行了簡(jiǎn)化, 例如第三層用一個(gè)3×3 和1×1 的的卷積核代替了5×5 的卷積核等等, 大量減少了網(wǎng)絡(luò)參數(shù).

表1 人臉識(shí)別對(duì)比結(jié)果
本文提出了基于多Inception 結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò)人臉識(shí)別算法, 在進(jìn)一步分解簡(jiǎn)化了卷積核之后采用Softmax和TripletLoss 相結(jié)合的方式, 實(shí)現(xiàn)了加深和加寬網(wǎng)絡(luò)的能力, 在增強(qiáng)網(wǎng)絡(luò)性能的同時(shí), 減少網(wǎng)絡(luò)參數(shù)的數(shù)量,在LWF 庫(kù)中進(jìn)行實(shí)驗(yàn), 實(shí)驗(yàn)證明本文提出的算法可以在減少輸入?yún)?shù)的情況下提高識(shí)別率, 同時(shí)降低計(jì)算復(fù)雜度, 為人臉識(shí)別算法的研究提供有益參考.