趙 洋,許 軍
(沈陽化工大學 計算機科學與技術學院,沈陽 110142)
自2006年,LeCun 等發現通過逐層預訓練的方式可以較好的訓練多層神經網絡,提出了深度學習(deep learning)的概念[1].從此,人臉識別技術得到了快速的發展,并且已經普遍應用到人們的日常生活中.文獻[2]提出基于ARM 進行人臉識別的方法.該方法首先通過ViBe 算法提取監控區域內的運動目標,然后再用局部二值模式 (Local Binary Pattern,LBP) 算法對人臉進行檢測和識別.該方法雖然能識別較遠距離的人臉,但是識別準確率不高.文獻[3]提出基于達芬奇平臺OMAP3530 進行人臉識別的方法.該方法首先進行可見光圖像和近紅外圖像的雙路圖像采集,然后通過Harr-like 特征的AdaBoost 算法進行人臉目標的檢測,最后利用LBP 算法進行特征提取.該方法只克服了光照環境對識別精度的影響,然而在復雜環境下,識別效果欠佳.文獻[4]提出了一種利用云計算平臺實現人臉識別的方法.該方法首先將采集的圖像傳入嵌入式平臺,然后和FaceCore 人臉識別云計算平臺交互,利用云計算平臺進行人臉的檢測和識別.該方法在一定程度上減少了嵌入式設備的計算量,但是需要通過網絡和云計算平臺進行數據傳輸,增加了等待的時間,實效性差.文獻[5]首先把采集的圖像傳入互聯網端,利用Dlib 官方自帶的人臉檢測功能定位出人臉圖像,然后使用Dlib 官方訓練好的深度殘差網絡模型識別人臉.該方法雖然很大程度上簡化了開發的復雜度,但無法同時對多張人臉檢測.由以上分析可知,在嵌入式設備或者移動端部署人臉識別系統還需要進一步的研究,特別是在保證成本低廉,易用性的前提下,如何提高識別速度仍是亟待解決的問題.
文獻[6]提出了LBP,KNN和BP 神經網絡相結合的人臉識別方法.首先將圖像分為局部區域并提取每個局部區域的特征紋理,然后將提取的特征圖傳入神經網絡.LBP和KNN 這種相結合的方式減小了原始訓練圖像之間的相關性.傳統的人臉識別算法[7]雖然在人臉特征提取方面取得了很好的效果,但是這些方法在光照,表情,識別速度,準確率等方面還存在著一些不足.文獻[8]提出了一種Adacos的人臉損失函數,使用自適應動態縮放參數來解決模型在訓練過程中超參數的選擇問題,但是模型在訓練過程中參數比較多,模型的收斂速度比較慢.文獻[9]提出了一種引進感知模型的人臉識別方法,該方法通過在孿生卷積神經網絡上引入感知模型,使得網絡能夠學習到更加詳細的特征,解決了在非限定條件下人臉識別困難的問題.文獻[10]提出了一種基于空間注意力機制的3D 人臉識別方法,該方法采用類間正則化損失函數,降低了不同人臉之間的特征相似度.雖然在一定程度上解決了低質量人臉圖像的問題,但是其中的超參數設定只能根據經驗設定,沒有固定的計算公式.一些大型的深度學習網絡模型[11]集成了特征提取和圖像分類方法,采用自學習的方式進行訓練,在準確率和速度方面得到了很大的提升,但是運行在計算能力有限的嵌入式設備或者移動設備上還有些困難.本文以MobileNetV2網絡模型為研究對象,提出了一種基于Raspberry Pi的人臉識別方法.該方法首先對圖庫中的圖像進行預處理,利用OpenCV 庫中的Haar 級聯方法對圖像中的人臉進行定位,然后把數據送入MobileNetV2 網進絡進行遷移學習,通過訓練得到一個健壯的模型,最后將模型移植到Raspberry Pi,利用Raspberry Pi 完成人臉識別的任務.
考慮到成本、算力、功耗等各方面的原因,本系統選用Raspberry Pi 作為主控制器[12].整個系統由圖像采集模塊,供電模塊,圖像處理模塊以及圖像顯示模塊組成.圖像采集模塊負責人臉圖像的讀入;供電模塊為系統的正常運行提供穩定的電源;圖像處理模塊對讀入的圖像進行預處理,然后經過特征提取,對人臉進行識別;顯示模塊主要對讀入的圖像進行顯示,將識別的結果顯示出來.Raspberry Pi 作為硬件和軟件的核心部分,連接各個功能模塊,搭載1.4 GHz的64 位四核處理器,10/100 以太網接口,雙頻802.11ac 無線局域網,藍牙4.2,HDMI 結構,4 個USB2.0 接口D-SI 顯示連接器,RCA av 端口音頻輸出,USB 電源接口.
系統的數據集是本研究室自己采集的.在不同的環境下,對每名成員采集1000 張圖片,以姓名命名,以JPG的格式存放在本地.MobileNetV2 網絡屬于輕量級的神經網絡,擁有更少的參數,更高的準確率,更快的速度,所以選擇該網絡結構作為我們的模型.模型采用遷移學習的方式進行訓練,加載MobileNetV2 網絡的初始化參數,這樣能夠提高模型訓練的速度,讓模型更快的收斂.然后通過添加輔助層和修改Softmax 層的分類類別,調整超參數,得到訓練的模型.由于訓練模型產生大量的參數,對設備的硬件資源和算力要求比較高,因此選用離線的方式在PC 端訓練模型,通過訓練得到一個性能優越的模型.模型訓練過程如圖1所示.

圖1 模型訓練過程
人臉識別技術是基于人的臉部信息進行識別的一種生物技術,而人臉是保證人臉識別算法性能的重要因素之一.在人臉圖像的采集過程中,攝像頭的像素,拍攝的角度,光照強度等因素會影響整個系統的識別效果.為了增強系統的魯棒性,避免光照強度對圖像的影響,首先對圖像進行歸一化;然后利用Haar 級聯方法對人臉進行定位[13],篩選出定位錯誤或者不滿足條件的圖像,最后把圖庫中的圖像統一調整為224×224的大小.
MobileNet 網絡是Google 團隊在2017年提出的,專注于移動端或者嵌入式設備的輕量級網絡,相比于傳統的卷積神經網絡,在準確率小幅度降低的前提下大大減少了模型參數和運算量.MobileNetV2 網絡結構如表1所示.

表1 MobileNetV2 網絡結構
表1中Input為輸入特征圖的大小,bottleneck為倒殘差網絡結構,t為擴展因子,c是輸出特征矩陣的深度,n是bottleneck 重復的次數,s是步長.
MobileNetV2 網絡不但借鑒了MobileNetV1[14]網絡的深度可分離卷積[15,16],還借鑒了ResNet 網絡結構.深度可分離卷積可分成DW (DepthWise) 卷積和PW (PointWise)卷積.如圖2所示,DW 卷積是圖像一個通道對應一個卷積核,卷積核的深度為1,輸入特征矩陣的通道數等于卷積核個數等于輸出特征矩陣的個數.

圖2 DW 卷積
相對于傳統的卷積運算,DW 卷積它只對每個通道進行了獨立的卷積運算,沒有很好的利用空間上的特征信息,不能得到表達能力較強的Feature Map,所以還要經過PW 卷積(如圖3所示).PW 卷積主要是利用1×1×M(上一層的Maps 深度)的卷積核對上一層的Maps 逐點進行卷積,這樣就能很好的對空間位置上的特征信息進行融合,得到表達能力較強的特征信息.

圖3 PW 卷積
深度可分離卷積大大減少了運算量,提高了運算速度.如圖4所示,DF表示輸入圖像的大小,DK表示卷積核的大小,M表示輸入圖像的深度,N表示輸出特征矩陣的深度.傳統卷積計算量為DF×DF×DK×DK×M×N,而深度可分離卷積的計算量為DF×DF×DK×DK×M+DF×DF×1×1×M×N.兩者相比可以明顯的發現,深度可分離卷積的計算量遠遠小于傳統卷積的計算量.

圖4 傳統卷積
倒殘差網絡結構相比于殘差網絡結構,它先經過1×1的卷積進行升維,然后再通過3×3的DW 卷積,最后再通過1×1的卷積進行降維.結構中的Shortcut 操作只有當步距為1 且輸入特征矩陣和輸出特征矩陣的形狀相同時,才會執行剪枝操作.如圖5所示.

圖5 倒殘差網絡結構
本研究室自己制作的數據集主要通過攝像機拍攝的視頻,將采集的視頻分幀,取出不同時段的圖像作為訓練樣本.數據集共有5000 張圖片,5 個類別.每個類別的圖像都各不相同,包含不同的姿勢,不同的表情,不同的年齡.圖像的尺寸都是512×512,按7:3的比例把數據集分為訓練集和驗證集.實驗環境為Windows 10 操作系統,8 GB 內存,NVIDIA GTX1660 Ti 顯卡,在Tensorflow[17]深度學習框架上實現本文的Mobile-NetV2 模型并完成對模型的訓練.
在Tensorflow 深度學習框架上使用Adam 方法訓練模型,學習率為0.01,迭代次數為50 次,得到如圖6所示的模型訓練結果.模型的準確率為98.3%.

圖6 模型訓練結果
由圖6的訓練和驗證損失曲線可知,模型在前10 次迭代過程中損失不斷下降,說明模型在不斷學習.模型訓練次數到達40 次的時候,交叉熵損失下降緩慢,基本保持水平,說明模型達到局部最優.但是驗證集的損失明顯大于訓練集的損失,導致模型在訓練的過程中效果比較好,驗證的過程中效果比較差,這是一種過擬合現象.綜合分析,模型的過擬合問題主要原因是我們的數據集只有5 個類,全連接層的更改導致模型從1×1×1280 logits 回歸到1×1×5的全連接層的過程中有很大的信息特征突變.為了解決模型過擬合問題,采用正則化的方法對模型進行優化,通過添加 Dropout 層[18]的方式,得到訓練后的特征.不但在一定程度上避免模型過擬合問題,也能提高模型的泛化能力.
由圖7訓練損失和驗證損失曲線可以看出,通過將學習率修改為0.001和添加Dropout 層得到優化的模型,在一定程度上降低了模型的過擬合問題.由圖可知訓練損失和驗證損失慢慢趨向于持平,并且準確率相比優化前提高了1.1%.優化后的模型就可以移植到樹莓派設備,從而在實際的場景下進行測試.

圖7 優化后的模型
測試平臺是Raspberry Pi-3B+,運行Linux 操作系統.搭載圖像處理庫OpenCV3.4.6,Tensorflow2.0.0 深度學習框架.具體參數如下:
CPU:1.4 GHz 64 位4 核 ARM Cortex-A53 處理器.
GPU:Broadcom VideoCoreIV,OPenGL Es2.0.
內存:1 GB LPDDR2,擴展儲存卡:16 GB.
人臉識別系統的具體識別過程如下:
(1)讀入攝像頭前的圖像.
(2)圖像預處理,首先對圖像進行歸一化操作,去除光照對圖像的干擾.
(3)利用OpenCV 計算機視覺庫中的Haar 級方法對圖像進行人臉的定位,并將圖像大調整為224×224.
(4)把圖像傳入訓練好的MobileNetV2 網絡,對圖像進行特征提取并且分類.
(5)通過和圖庫中圖像進行相似度比較,相似度達到設定的閾值就認為識別成功,否則識別失敗.
為了驗證系統對人臉識別的準確率,對圖庫中圖像和非圖庫中圖像進行測試.圖8(a)表示對圖庫中的人進行測試,圖8(b)表示對非圖庫中的人進行測試,分別在不同的表情,不同的光照條件下進行人臉辨別.其中沒有任何標識的表示識別成功,出現標識Input error表示識別結果為非圖庫中的人.

圖8 準確率測試
從圖8(a)中可以看出,該系統對圖庫中的人臉整體測試結果良好,偶爾出現誤判,但這并不影響系統的性能.因為攝像頭前的人可以在屏幕中看到自己的識別結果,當出現誤判現象,可以通過矯正身姿,調整檢測距離等方法重新進行識別.圖8(b)結果顯示,對于陌生面孔很容易出現誤判.造成這種現象的發生一方面可能是因為訓練數據集不足,實驗類別比較少,Mobile-NetV2 網絡會將陌生人歸為其中的一類;另一方面,網絡結構過于復雜,導致網絡退化.多次測試表明,通過修改預測圖像和實際圖庫中圖像的相似度閾值,可以在一定程度上提高準確率.經過多次實驗發現,將相似度閾值設置為0.9,不但能夠提高對圖庫中圖像識別的準確率,而且對陌生人識別的準確率也得到了提高.
為了進一步對系統進行穩定性測試,在自制數據集和FERET 數據集上分別進行測試.分別記錄識別類型,識別成功,識別失敗的次數和識別準確率.成功次數表示的是識別人物和識別類型匹配成功的次數,準確率=成功次數/(成功次數+失敗次數).自制數據集包含的對象比較少,在復雜環境下只對4 名成員進行20 次測試,分別標號為1~4 號.1~3 號為圖庫中人,4 號為陌生人.每名成員在不同的環境下進20 次人臉識別實驗,結果見表2.FERET 數據集包含200 個類,共1400 張圖片.將數據分為7 組,5 組為圖庫中人,每組分別為10 人,50 人,100 人,150 人,200 人;2 組為陌生人,每組分別為10 人,50 人.每人進行10 次人臉識別實驗.結果見表3.不同的網絡對數據集上的測試結果見表4.
從表4中可以看出,雖然ShuffleNetV2 網絡在數據集上的準確率略高于其它網絡結構,但是模型大于其它網絡結構,系統的識別速度會較慢.結合表2和表3可以明顯看出,MobileNetV2 網絡整體識別準確率也比較高,性能比較優良,對于圖庫中的人識別準確率達到95%以上,對于陌生人,識別準確率達到80%以上.針對于個別識別失敗的現象,主要的原因在于模型的過擬合,因此下一步還要提高模型的泛化能力.

表2 自制數據集人臉識別測試

表3 FERET 數據集人臉識別測試

表4 輕量化神經網絡模型在數據集上的對比
針對目前人臉識別系統成本高,移植性低的情況,提出基于MobileNetV2與Raspberry Pi的人臉識別系統方案.首先對圖庫中的圖像進行歸一化,然后通過不斷的調整參數,多次訓練MobileNetV2 網絡,使損失降到最低,從而得到一個最優模型,最后將模型移植到Raspberry Pi,利用Raspberry Pi對未知人臉圖像進行檢測和分類.實驗表明該系統性能穩定,能滿足用戶的基本需求,應用范圍廣,可應用于門禁,考勤等應用場景.
本文主要是以MobileNetV2 網絡結構為研究對象,基于Raspberry Pi 進行嵌入式開發,實現實時人臉識別.然而,由于MobileNetV2 網絡結構比較深,對人臉進行特征提取的過程中會發生特征突變,容易對陌生的面孔造成誤判.因此,如何提高準確率,避免特征突變對識別結果所帶來的影響,是以后重點研究的問題.