李 楠, 蔡堅勇,2,3,4, 李 科, 程 玉, 張明偉
1(福建師范大學 光電與信息工程學院, 福州 350007)
2(福建師范大學 醫(yī)學光電科學與技術教育部重點實驗室, 福州 350007)
3(福建師范大學 福建省光子技術重點實驗室, 福州 350007)
4(福建師范大學 福建省光電傳感應用工程技術研究中心, 福州 350007)
上述方法雖能解決部分非限制性問題, 但在收斂速度上性能較差, 特別是當網(wǎng)絡層數(shù)太多時, 會出現(xiàn)梯度彌散現(xiàn)象.為了解決這類問題, 本文提出基于多Inception 結構的卷積網(wǎng)絡神經(jīng)算法用于人臉識別, 通過改造傳統(tǒng)的SoftmaxLoss 方法, 結合Softmax 和TripletLoss 可以獲得更大的類間距離和更小的類內距離.實驗證明本文提出的算法在增加網(wǎng)絡深度和寬度的同時減少了參數(shù)個數(shù), 在訓練過程中能有效減少類內間距, 在同等條件下能獲取更高的特征提取能力.
CNN (Convolutional Neural Network)是一個多層次結構的神經(jīng)網(wǎng)絡[6], 通常由輸入、特征提取層(多層)以及分類器組成, 每層都有多個二維獨立神經(jīng)元.CNN 網(wǎng)絡通過逐層的特征提取來提升特征準確度, 最后將其輸入到分類器中對結果進行分類.卷積層是CNN 的特征映射層, 具有局部連接和權值共享的特征.這兩種特征降低了模型的復雜度, 并使參數(shù)數(shù)量大幅減少.下采樣(池化)層是CNN 的特征提取層, 它將輸入中的連續(xù)范圍作為池化區(qū)域, 并且只對重復的隱藏單元輸出特征進行池化, 該操作使CNN 具有平移不變性.實際上每個用來求局部平均和二次提取的卷積層后都緊跟一個下采樣層, 這種兩次特征提取的結構使CNN 在對輸入樣本進行識別時具有較高畸變容忍力.網(wǎng)絡的最后是分類器, 通常由Softmax 方法實現(xiàn), 該層將之前提取到的特征進行綜合, 使圖像特征信息由二維降為一維.分類器層(如Softmax 層)一般位于網(wǎng)絡尾端, 對前面逐層變換和映射提取的特征進行回歸分類等處理也可作輸出層.
主流的卷積神經(jīng)網(wǎng)絡在特征提取過程中主要采用加深網(wǎng)絡層數(shù)來實現(xiàn), 但是由此引入了過度擬合、梯度彌散和計算復雜度提升的問題.因此, Szegedy 等提出了Inception 結構用于解決該類問題[7].這種結構能夠有效地減少網(wǎng)絡的參數(shù)數(shù)量, 同時也能加深加寬網(wǎng)絡, 增加網(wǎng)絡的特征提取能力.
最初的Inception 是所有卷積核都放到上層的輸出來實現(xiàn), 即1×1, 3×3, 5×5 的卷積和3×3 池融合在一起,因此也造成5×5 的卷積核計算復雜度太高, 特征圖厚度過大.隨后在Inception 的第一個穩(wěn)定版本中, Szegedy將Inception 結構進行優(yōu)化, 在3×3 前, 5×5 前, max pooling 后都分別加上了1×1 的卷積核從而降低特征圖厚度的.最后的模型如圖1 所示.
圖1 Inception V1 結構圖
在接下來的Inception V2 中, Google 團隊為了進一步減少計算量并提升性能, 加入了BN 層減少Internal Covariate Shift, 將兩個5×5 的卷積分解成兩個3×3 的卷積進行疊加, 節(jié)省了72%左右的開銷, 再將3×3 的conv 用1×3 和3×1 的卷積來代替, 在此基礎上,Santurkar 等[8]認為n×n 的卷積在理論上都可以由n×1和1×n 的卷積來進行替代, 從而節(jié)約CPU 和內存損耗.最終在訓練參數(shù)較少的情況下提升了分類準確率.Inception V2 如圖2 所示.
圖2 Inception V2 結構圖
Inception V3 一個最重要的改進是分解(factorization), 將7×7 分解成兩個一維的卷積(1×7, 7×1),3×3 也是一樣(1×3, 3×1), 這樣的好處, 既可以加速計算(多余的計算能力可以用來加深網(wǎng)絡), 又可以將1 個卷積拆成2 個卷積, 使得網(wǎng)絡深度進一步增加, 增加了網(wǎng)絡的非線性.
其中, 分母為第 i 維數(shù)據(jù)的標準差, 分子為i 維數(shù)據(jù)和均值的差.
對照組大鼠存活良好,模型組大鼠進食、活動減少,毛發(fā)凌亂甚至脫毛,成功率100%,丁酸鈉組由于藥物作用,造模成功25例,成功率為83.3%,成功率顯著低于模型組(P<0.05)。
本文提出的多Inception 結構特征提取算法的核心思路是將網(wǎng)絡層的輸入輸出尺寸進行修改, 并將濾波器的結構進行調整, 每個Inception 結構都在對應的卷積層特征上提取不同尺度的特征圖, 從而對同一目標不同尺寸的特征進行提取, 能有效將卷積特征層更好地結合, 從而在整體上提升人臉特征的精度.本文構建Inception 的核心思路是: ① 使用更小的核來減少網(wǎng)絡參數(shù), 例如在第一層將原本7×7 的卷積核減少為兩個5×5 和3×3 的卷積核, 從而減少參數(shù).② 利用BN 層降低梯度消失的問題.③ 利用TripletLoss 和Softmax 結合的方法來降低類內距離, 提高類間距離.④ 采用瓶頸性結構, 充分利用深層次提高抽象能力, 同時節(jié)約計算.本文提出的多Inception 結構如下:
(1)第1 層為卷積層, 使用5×5 的卷積核(滑動步長2, padding 為3), 在64 通道卷積后進行ReLU 操作經(jīng)過3×3 的max pooling(步長為2), 輸出為((112-3+1)/2)+1=56, 即輸出大小為56×56×64, 再進行ReLU 操作.
(2)第2 層繼續(xù)使用卷積層, 使用3×3 的卷積核(滑動步長為1, padding 為1), 192 通道, 輸出大小轉化為56×56×192, 卷積后進行歸一化操作, 經(jīng)過3×3 的max pooling(步長為2), 輸出為((56-3+1)/2)+1=28, 即輸出大小為28×28×192, 再進行ReLU 操作.
(3)第3 層分成4 個部分, 采用不同尺度的卷積核來進行處理, 4 個卷積核分別為: 1) 64 個1×1 的卷積核, 然后進行ReLU 操作, 輸出28×28×64, 2) 96 個3×3 的卷積核, 進行ReLU 計算, 再進行128 個3×3 的卷積(padding 為1), 輸出28×28×128.3) 16 個5×5 的卷積核, 大小變?yōu)?8×28×16.4) MaxPool 層, 使用3×3 的核(padding 為1), 然后進行32 個1×1 的卷積,大小變?yōu)?8×28×32.最后將4 個結果進行連接, 對這4 部分輸出結果的第三維進行并聯(lián), 即64+128+32+32=256, 最終輸出大小變?yōu)?8×28×256.
(4)第4 層有4 部分, 分別是: ① 128 個1×1 的卷積核, 進行ReLU 操作, 輸出28×28×128.② 128 個1×1 的卷積核, 作為3×3 卷積核之前的降維, 進行R e L U 操作, 再進行1 9 2 個3×3 的卷積操作(padding 為1), 輸出大小為28×28×192.③ 將32 個1×1 的卷積核作為5×5 卷積核之前的降維, 進行ReLU 操作后, 再進行96 個5×5 的卷積(padding 為1),輸出大小變?yōu)?8×28×96.④ pool 層, 使用3×3 的核(padding 為1)進行64 個1×1 的卷積, 輸出大小轉換為28×28×64.將4 個結果進行連接, 對這4 部分輸出結果的第三維并聯(lián).
由于本文提出的結構在每個卷積層都加入Inception, 使網(wǎng)絡可以充分考慮每個卷積層的特征維度, 獲取不同場景下(即各種非限制條件)的目標特征, 具有更強的魯棒性, 同時BN 層能進一步優(yōu)化了參數(shù), 能實現(xiàn)快速收斂.本文提出的多Inception 結構如圖3.
圖3 多Inception 結構
大部分基于CNN 的特征提取方法都會采用SoftmaxLoss[10]作為訓練網(wǎng)絡的損失函數(shù), 通過迭代過程中損失函數(shù)反饋的損失值來動態(tài)優(yōu)化網(wǎng)絡參數(shù), 但是在人臉識別的任務中, 由于人臉表情的復雜性, 環(huán)境的多變性, 傳統(tǒng)的Softmax 函數(shù)只能增大類間距離, 而類內距離無法有效的減少, 因此非限制條件下的人臉識別效率很低.而三元組損失函數(shù)TripletLoss 在傳統(tǒng)的基于正負樣本對的基礎上, 引入了Anchor 作為第三個約束條件, 在減低同類樣本的同時, 增大非同類樣本的類間距離[11].假設為錨樣本, 為正樣本, 為負樣本, 則可以將三元損失函數(shù)定義為:
因此綜合了SoftmaxLoss 和TripletLoss 的損失函數(shù)能有效的優(yōu)化類間距離和類內距離的分類問題, 同時避免TripletLoss 的收斂緩慢問題.因此本實驗采用的損失函數(shù)計算方法是將兩者進行加權, 具體為:
其中, β 是權重值, 用來平衡兩個損失函數(shù).在本文提出的網(wǎng)絡中, Softmax 層和TripletLoss 層的使用方式如下:
圖4 基于多Inception 結構和融合TripletLoss 和SoftmaxLoss 的特征提取網(wǎng)絡
本實驗采用配置為Intel 的I7-8900K 4 核3.7 G 處理器, 32 GB 內存, M40 顯卡, Windows10 操作系統(tǒng)的PC 電腦作為運行環(huán)境, 使用基于Python 的Google 大數(shù)據(jù)平臺TensorFlow.
本文使用LFW (Labeled Faces in the Wild)[12]人臉數(shù)據(jù)庫, 該數(shù)據(jù)庫是由美國馬薩諸塞州立大學提供, 一共13 000 張圖片, 每張圖片都被標識出對應的人的名字, 其中有1680 人對應不只一張圖像, 即大約1680 個人包含兩張以上人臉.
首先將訓練和測試用的樣本進行預處理, 流程如下: (1)用Adaboost 算法[13]面部檢測器將樣本進行人臉檢測和面部關鍵點定位(雙眼, 鼻子, 嘴角, 耳朵).(2)根據(jù)Adaboost 算法定位出的6 個關鍵點位置進行數(shù)據(jù)剪裁, 得到統(tǒng)一的112×96 的人臉圖片.(3)開始訓練, 核心訓練參數(shù)如下: 學習衰減率設置為0.001, 訓練批次為50 次, 迭代次數(shù)為10 萬次.在測試結果的比對中, 將測試的人臉原圖特征和水平翻轉圖提取的特征進行對比, 計算其相似度, 最后標識出人物名字.最后識別效果圖如圖5.
圖5 識別效果圖
在LFW 庫中選取8000 個人臉, 在非限制條件下對人臉進行檢測的過程中, 在采用Softmax 和Triplet結合的損失函數(shù)作為訓練監(jiān)督信號的情況下, 能取得98.54%的準確率.在ROC 的對比方面, 如圖6 所示,本文將DeepID, DeepFace, 傳統(tǒng)Inception 等3 種算法的結果和本文提出算法進行比較.以虛檢率為橫坐標,檢出率為縱坐標, 可以看到, 本文提出的算法在ROC上表現(xiàn)優(yōu)于其他對比算法.實驗對比結果如表1.
圖6 ROC 對比圖
在最高識別準確率方面?zhèn)鹘y(tǒng)的基于BP 神經(jīng)網(wǎng)絡的PCA 算法[14]和Fisher[15]判別分析的算法相比, 本文提出的算法具有更高的識別準確率.其次, 與基于分類網(wǎng)絡的算法如DeepFace、DeepID 相比, 本文提出的算法的網(wǎng)絡個數(shù)明顯減少, 計算的復雜度大幅度下降.同時, 與基于cosine 距離的Contrastive loss 的算法相比,在保證相同識別率的條件下, 明顯減少了人臉關鍵點.和傳統(tǒng)的Inception 的對比中, 本文對卷積核進行了簡化, 例如第三層用一個3×3 和1×1 的的卷積核代替了5×5 的卷積核等等, 大量減少了網(wǎng)絡參數(shù).
表1 人臉識別對比結果
本文提出了基于多Inception 結構的神經(jīng)網(wǎng)絡人臉識別算法, 在進一步分解簡化了卷積核之后采用Softmax和TripletLoss 相結合的方式, 實現(xiàn)了加深和加寬網(wǎng)絡的能力, 在增強網(wǎng)絡性能的同時, 減少網(wǎng)絡參數(shù)的數(shù)量,在LWF 庫中進行實驗, 實驗證明本文提出的算法可以在減少輸入?yún)?shù)的情況下提高識別率, 同時降低計算復雜度, 為人臉識別算法的研究提供有益參考.