況朝青 ,賀 超 ,王均成 ,鄒建紋
(1.重慶郵電大學 通信與信息工程學院,重慶 400065;2.重慶高校市級光通信與網絡重點實驗室,重慶 400065;3.泛在感知與互聯重慶市重點實驗室,重慶 400065)
近年來,人臉識別受到越來越多的關注,主要是通過神經網絡模型來進行人臉識別。但人臉識別依然是一個非常重要但又極具挑戰性的問題,主要是現在大部分的人臉識別采用的圖像都是靜態和質量較高的圖片,所以識別效果很好。但在實際應用中,人臉圖像受到光照、表情和較大的姿態變化的影響,可能導致識別率急劇下降。因此,采用一種預處理的方式來處理圖片,提高圖片的質量,成為了當下研究的關鍵[1]。并且在邊緣計算系統中,采用大型網絡來進行人臉識別是不現實的,主要是受到處理器的速度和功耗的影響,因此這方面的應用成為了研究的熱點。
針對這些問題,文獻[2]-[3]主要是通過位置向量的特征來解決人的姿勢問題;文獻[4]-[5]則試圖合成一個正面的人臉;文獻[6]提出了采用主成分分析(PCA)的方法,主要是可以將樣本數據向一個新的低維空間投影,經過坐標轉換后,使用原樣本中最大的一個線性無關特征值對應的空間坐標表示,可以一定程度地去除樣本噪聲;文獻[7]用濾波器方法來提高識別率。
本文采用了神經網絡的方法來對輸入圖片的人臉進行預處理,將預處理后生成的圖片輸入到網絡中進行測試。本文采用在SqueezeNet 網絡的基礎上加入殘差網絡,并對傳統的softmax 進行了修改。SqueezeNet 網絡是一個輕量級網絡,網絡的層數不多,非常適合于邊緣計算的識別系統。但如果直接進行人臉識別測試,可能識別率不是很高。因此,本文對圖片加了預處理,然后對網絡進行了適當改進。并且對網絡改進以后,通過計算和測試,并沒有增加網絡的計算量。最后通過實驗表明,該方法提高了識別的準確率。
人臉識別系統中很重要的一步就是人臉圖像的預處理過程。本文主要采用神經網絡的人臉歸一化方法。人臉歸一化是在保持人臉身份的前提下,從一張人臉圖像中合成一張正態人臉。本文主要是將邊緣計算中提取的人臉圖片經過MTCNN[8]神經網絡來對人臉圖片進行裁剪,減少圖片上的無用信息,使得提取的人臉的特征值更多。然后將裁剪后的圖片通過文獻[1]提出的方法進行處理,生成一張新的歸一化后的人臉圖片,圖片的分辨率得到提高。
FaceNet[9]是一個通用的人臉識別系統,采用的方法是通過卷積神經網絡將人臉圖像映射到歐幾里得空間,檢測映射不同點之間的距離進而判斷是否是同一個人。因為每個人都可以看成一個類,同一個人的不同人臉之間的距離可被看作類內距離,不同人的人臉圖像之間的距離可被看作是類間距離。FaceNet 系統的主要思想可看作盡量縮小類內距離,增大類間距離。本文主要采用FaceNet 網絡架構,使用SqueezeNet[10]網絡。然后對SqueezeNet 網絡進行了適當的改進,加入了殘差網絡,將損失函數改為了現在識別效果更好的損失函數。FaceNet的網絡結構如圖1 所示。

圖1 FaceNet 網絡架構
為了使模型適用于邊緣計算系統中,并且能有一個好的識別率,本文對SqueezeNet 網絡架構進行了修改,并加入了預處理的過程,整個識別過程如圖2 所示。主要是將邊緣計算中提取的原始人臉圖像輸入網絡中先通過MTCNN 網絡進行裁剪人臉,再進行預處理,最后通過輸入本文改進的神經網絡結構,識別是否是同一個人。

圖2 總的網絡結構圖
本文采用的損失函數是Arcface[11-12]損失函數。Arcface 是對傳統的softmax[13]的改進,傳統的損失函數如式(1)所示,改進以后的損失函數如式(2)所示。Arcface 為了使類內對象緊致,類間對象分離,主要是對歸一化后輸入的x(特征)和歸一化后的W(權重)通過叉乘得到一個Arccos 的值,這個值對應的角度為θ;然后m 加上θ后,將新的cos(θ+m)與s(特征縮放)相乘后取log,再經過softmax 輸出。Arcface 的實現方式與softmax 比較也沒有變得更加復雜,但考慮了角度對分類的影響,通過驗證能更好地提高識別率。

SqueezeNet 的核心在于fire 模塊,fire 模塊由兩層構成,分別是squeeze 層+expand 層。squeeze 層是一個1×1卷積核的卷積層;expand 層是1×1 和3×3 卷積核的卷積層,expand 層中,把1×1 和3×3 得到的特征圖進行拼接(concat),具體操作如圖3 所示。Kernel 是卷積核大小,Num 是卷積核個數;H、W、M 分別是特征的長、寬、維數。

圖3 fire 模塊
ResNet[14]的架構如圖4 所示。通過這種殘差網絡結構,不僅可以在邊緣計算中減少網絡結構的計算量,還能提高識別率。殘差網絡用了高速網絡[15]的跨層鏈接思想,通過捷徑連接(shortcut connections)的方式,直接把輸入x 傳到輸出作為初始結果,輸出結果為H(x)=F(x)+x,當F(x)=0 時,那么H(x)=x,也就是上面所提到的恒等映射。

圖4 殘差網絡模塊
SqueezeNet 網絡與加入殘差模塊后的網絡架構如圖5 所示。本文主要測試了兩種方式的殘差模塊,第一種是在隔一個的fire 模塊中加入殘差網絡,而第二種是在每一層中都加入殘差模塊。最后在識別中發現,第一種更好,并且不會增大網絡的計算量,因此第一種改進的算法更適合用于邊緣計算系統中。整個SqueezeNet 就是使用Fire 基本模塊堆積而成的,網絡結構如圖5 所示,其中左圖是標準的SqueezeNet,其開始是一個卷積層conv1,后面是Fire 模塊的堆積,中間穿插著stride=2 的最大池化(maxpool)層,其主要作用是下采樣,并且采用延遲的策略,盡量使前面層有較大的特征圖,最后經過池化(global avgpool)。中圖SqueezeNet+simple ResNet 和右圖SqueezeNet+complex ResNet 分別引入了不同的短路機制的SqueezeNet,這是借鑒了ResNet 的結構。

圖5 基于SqueezeNet 的不同網絡架構
本實驗所使用的計算機配置:Intel 的i5 處理器,GTX1660Ti 的GPU,Win10 操作系統。在Anconda+TensorFlow 環境下運行。
首先對本文采用的預處理方法進行驗證,圖6 顯示了在極端姿態、表情和光照條件下該方法處理后的圖片與原圖的對比圖。從上往下依次是姿態、表情、光照、遮擋、正常人臉的測試圖;每行圖中,兩列圖像為一組,一共展示了3 組;其中每一組中第一列是原始圖像,第二列是處理以后的圖像。可以明顯看出,將裁剪后的圖片進行預處理后,人臉的分辨率得到了提高。

圖6 預處理后的圖片對比圖
本文主要采用LFW 數據集和IJB-A 數據集進行了測試。LFW 數據集的人臉圖像大多數是正面的照片,沒有干擾;而IJB-A 數據集是在自然環境下拍攝的,因此受到姿態、光照和表情等的影響。
記輸入的測試對為(xi,xj),所有的同一身份測試對為Psame,所有的不同身份測試對為Pdiff,閾值為d,測試對之間的歐氏距離之差為D(xi,xj),那么正確接受次數TA(d)、錯誤接受次數FA(d)、正確拒絕次數TR(d)以及錯誤拒絕次數FR(d)分別為:

為了能夠將人臉識運用在邊緣計算的硬件上(如FPGA),本文主要采用了SqueezeNet 網絡來進行人臉識別,主要在IJB-A 數據集和lfw 數據集上進行了測試。在IJB-A和LFW 數據集上測試了原始的SqueezeNet 測試結果和加入了人臉歸一化(FNM)預處理后人臉識別的結果,如表1、表2 所示。可以看出,在IJB-A 數據集上對進行了FNM預處理的人臉識別的識別率有明顯的提升,由于LFW數據集都是正常的人臉,所以識別率提高不是很多。Rank1 準確度就是某個類別的概率最高,就認為預測結果屬于哪種類別;Rank5 準確度選取5 個最大概率的類別,只要這5 個類別中的一個和真實標簽相同,該預測結果就為真。

表1 在IJB-A 數據集上的測試結果(%)

表2 在LFW 數據集上的測試結果(%)
對模型進行了改進,將損失函數改為Arcface 損失函數,并且將修改了損失函數的網絡記為MySqueezeNet,添加殘差網絡后的識別率為如表3 所示,主要在IJB-A 數據集上進行測試。通過比較,修改了損失函數的網絡比開始的網絡SqueezeNet 識別率提高了2%左右。并且對比修改的兩種網絡,識別率雖然都得到了提高,但是simple+ResNet 的網絡模型的大小是保持不變的,因此計算量不會增加,但加入了complex+ResNet 網絡以后,明顯增加了該網絡的計算量。因此,MySqueezeNet+simple ResNet 網絡更好。為了說明加入FNM 是有用的,因此在該網絡上進行了測試,發現在該網絡的基礎上加入FNM后識別率也得到了提高。因此,本文增加的修改了損失函數、預處理方法和加入了殘差網絡模塊都是有用的。綜合識別率和消耗的資源考慮,加入了simple+ResNet 結構更好。

表3 不同網絡模型的識別率
在邊緣計算中,采用大型的網絡會造成識別時間長、功耗高等問題,因此本文采用了SqueezeNet 網絡來進行人臉識別。由于直接對網絡進行人臉識別,識別率可能不高。因此,本文采用了預處理來對識別的圖片先進行處理,發現識別率得到了相應的提高;同時,改進了SqueezeNet網絡的損失函數,以及在網絡中增加了ResNet 模塊,這些處理方式都使得識別率得到了相應的提高,最后通過測試表明了該方法是有效的。本文方法還有很大的提升空間,后續將進一步增強網絡的魯棒性,使得網絡可以在當前經典數據集上的識別率更高。