楊太平
(上海電力大學現代教育技術中心,上海,201306)
人臉識別技術得到了廣泛應用,如支付、考勤等場景。人臉識別實現技術有很多,本文介紹一種基于卷積神經網絡的人臉檢測和識別的系統,實現快速、準確的人臉特征提取與匹配。
該人臉識別系統從技術結構上分為人臉檢測、特征提取、特征注冊、特征識別四個模塊,從業務上分為人臉注冊和人臉識別兩個流程。

圖1 系統整理結構
人臉檢測模塊使用人臉檢測網絡對攝像頭或圖像中的人臉進行檢測,提取人臉圖像框。人臉檢測網絡通過人臉檢測訓練庫進行訓練,這里的人臉檢測網絡使用AlexNET 網絡。
特征提取模塊使用特征提取網絡將人臉圖片中的特征提取出來形成特征向量,特征提取網絡通過人臉特征提取訓練庫進行訓練,這里的特征提取網絡使用VGG-16。
特征注冊模塊將特征提取模塊提取出的特征向量存入人臉特征庫。
特征識別模塊是將上一步提取的特征向量同人臉特征庫里的特征向量進行匹配。來判斷新提取的特征是否已錄入特征庫。
人臉注冊流程:人臉注冊即為人員登記,首先將人臉圖片經過人臉檢測和特征提取模塊,最后經過特征注冊模塊將人臉特征存入人臉特征庫,并與人員身份信息進行關聯。
人臉識別流程:人臉識別流程同樣先將人臉圖片經過人臉檢測和特征提取,然后經過特征識別模塊查找特征庫中是否已存有相匹配的特征,如果有則識別成功,輸出對應的人員信息;如果沒有則返回失敗。
人臉檢測方法很多,這里使用的CNN網絡實現人臉檢測。
用于人臉檢測的CNN 網絡的訓練:使用帶有人臉信息的圖片(大小為224x224)作為正樣本,不帶人臉信息的圖片作為負樣本對CNN 網絡進行訓練,訓練后的CNN 網絡具有了判別圖片是否為人臉圖片的能力。
AlexNET 網絡如圖2 所示。

圖2 AlexNET 網絡
Alexnet 的整個網絡結構是由5 個卷積層和3 個全連接層組成的,深度總共8 層。
將在環境中抓拍到的圖片進行多比例的縮放處理,針對原圖及縮放后的每一幅圖片,使用滑動框(大小224x244)從圖片的左上角到右下角,按照一定步長移動滑動框進行截取,將截取得到的多個224x224(預處理后為227x227)大小的圖片輸入訓練好的CNN 網絡進行是否為人臉的判定,得到判定矩陣,最后根據判定矩陣逆向找到含有人臉的框在原圖像中的坐標位置,進行截取得到最終的人臉圖片。
VGG 在Alexnet 基礎上對深度神經網絡在深度和寬度上做了更多深入的研究,更深的網絡具有比淺網絡更強的表達能力,是一個很好的特征提取器。
VGG16 網絡為13 層卷積層+3 層全連接層而組成。
VGG 與Alexnet 相比,具有如下改進幾點:
(1)使用了更小的3*3 卷積核,和更深的網絡。兩個3*3卷積核的堆疊相對于5*5 卷積核的視野,三個3*3 卷積核的堆疊相當于7*7 卷積核的視野。這樣一方面可以有更少的參數(3 個堆疊的3*3 結構只有7*7 結構參數數量的(3*3*3)/(7*7)=55%);另一方面擁有更多的非線性變換,增加了CNN 對特征的學習能力。
(2)在VGGNet 的卷積結構中,引入1*1 的卷積核,在不影響輸入輸出維度的情況下,引入非線性變換,增加網絡的表達能力,降低計算量。
(3)訓練時,使用了逐層訓練分段卷積的方法。先訓練級別簡單(層數較淺)的VGGNet 的A 級網絡,然后使用A 網絡的權重來初始化后面的復雜模型,加快訓練的收斂速度。
(4)采用了Multi-Scale 的方法來訓練和預測。可以增加訓練的數據量,防止模型過擬合,提升預測準確率
這些優點使得VGG 網絡更深更寬且收斂更快。
對VGG 網絡訓練使用了2622 個名人的照片作為人臉庫,每個名人(identity)有幾百個照片來標識同一個人。因此可將訓練過程視為一個N=2622 的分類問題,即每一個identity都是一類,網絡的最后一層是分類器,分類的誤差用softmax log-loss 來計算,通過最小化類內差異和最大化類間差異來訓練網絡。
一旦學習過程完成后,就可以把分類器去除,分數向量便可以作為特征通過計算歐式距離進行人臉校驗。最后得到的分數向量能夠進一步得到改善,通過在歐式空間里面使用“triplet loss”的方式進行訓練,對特征進一步精煉。
將人臉圖片通過訓練好的VGG 網絡計算出的分數向量作為人臉的特征向量,該過程稱為特征提取。
將需要進行人臉識別的一群人進行面部圖片采集,經過訓練好的VGG 網絡獲得人臉特征向量,將該特征向量與對應的人員標識一對一成對存儲,形成人臉信息庫。
在進行人臉識別的場景,將新采集的待測人臉圖片輸入訓練好的VGG 網絡獲得人臉特征向量,將該向量與人臉信息庫中已有的人臉特征向量逐一比對,計算向量之間的距離,如果某一已知向量與待測向量距離相近,且滿足閾值,則將待測人臉判定為該已知特征向量所對應的人員。向前端返回匹配成功信息,如果便利人臉信息庫沒有距離滿足閾值的已知向量,則返回匹配失敗信息。
人臉識別系統的實現一共用到了5 個開源庫:OpenCV(計算機視覺庫)、Caffe(深度學習庫)、Dlib(機器學習庫)、libfacedetection(人臉檢測庫)、cudnn(gpu 加速庫)。用到了一個開源的深度學習模型:VGG model,具體為該模型的caffe 版本vgg_face_caffe。
使用LabeledFacesIn the Wild 人臉數據庫測試,該系統識別成功率為97.27%,在相同數據集下,高于Fisherface和Eigenface 算法的成功率。