薛繼偉,孫宇銳,辛紀元
(東北石油大學計算機與信息技術學院,黑龍江大慶 163000)
課堂考勤一直是教師評估學生學習狀態以及評定學生平時成績的重要方式之一,現如今大部分教師依舊使用人工點名這種傳統的考勤方式,存在替課、效率低下等問題。因此,近年來工作人員一直在探索全新的考勤方式,主要有指紋識別[1]、人臉識別、RFID[2]等技術。但指紋識別技術不僅需要提前采集學生指紋,學生簽到時也需要現場對比,雖然減少了教師點名的工作量,卻并未節省時間。RFID 技術的弊端是需要學生隨時攜帶簽到卡。以上兩種方式雖然非常適合企業級的考勤管理,卻并不適合教室場景的應用。人臉識別技術是一種重要的生物特征識別技術,且在司法刑偵、電子護照以及各種考勤系統中都有應用[3]。利用人臉識別技術可以在學生無感知的情況下,達到考勤的目的,為學生和教師節省時間[4]。
人臉識別技術如今已經逐漸成熟,傳統的人臉識別算法有基于幾何特征的方法、模板匹配算法和基于外觀形狀的方法等。隨著深度學習研究的發展,人臉識別技術也在不斷更新。DeepFace 是深度學習人臉識別方法的開山之作,它可以實現人臉檢測、對齊和識別。其在最后的識別階段使用了多種方法,包括直接算內積、計算加權的卡方距離(Chisquare Measure)以及孿生神經網絡等。FaceNet 中提出了Triplet Loss 三元組損失,由Anchor、Negative 和Positive 3 個元素組成,通過訓練該損失增大了Anchor到Negative的距離,減小了Anchor到Positive的距離。為了使神經網絡最終得到的特征更有辨識力度,不同學者對Softmax 公式進行了多種改進。如:CenterLoss 方法在Softmax 的基礎上添加維持類別中心的損失函數,L-Softmax 方法去掉了神經網絡最后一層的偏置項,SphereFace[5]中提出的ASoftmax、L2-Softmax[6]以及AM-Softmax[7]和文中使用的ArcFace[8]等都沿用了這一改動。
每張人臉具有的特征都不相同,人臉所包含的可提取的特征數量越多,對人臉信息的表示越準確。如何區分這些特征,并將其對應到合適的人臉中,是人臉識別需要解決的問題。深度學習人臉識別方法使用深度神經網絡將特征數值映射到特征空間中,并通過人臉識別算法訓練人臉數據集,得到適合計算機理解和區分的人臉特征[9]。
人臉識別具體流程如圖1 所示,首先需要構建學生人臉數據庫,根據學生提交的照片進行分類,數據庫下分若干文件夾,每個文件夾命名為學生學號,學號文件夾下為該學生的所有照片。圖2 為人臉數據庫存儲目錄結構示意圖。在構建人臉數據庫階段,為了便于特征提取,需要對圖像數據進行人臉對齊預處理,將人臉裁剪為同一大小統一朝向的圖像,再利用人臉識別算法提取樣本的人臉特征向量。

圖1 人臉識別流程

圖2 人臉數據庫存儲目錄
當輸入一張圖像時,首先利用人臉檢測算法獲得人臉具體位置,再通過人臉識別算法提取特征向量,最后計算所提取的特征與人臉庫中特征的相似度,并輸出與其相似度最高的人臉身份[10]。幾項重要技術的具體實現以及部分對比實驗如下。
由于學生提交照片無法完全做到尺寸、人臉位置、大小等一致,直接使用會導致提取特征不準確,因此需要進行人臉對齊處理[11]。
人臉對齊算法有傳統的ASM、AAM、SDM 算法等,文中選用如今較為常用的深度學習人臉對齊算法MTCNN。MTCNN 全稱為多任務卷積神經網絡,可以實現人臉檢測、人臉關鍵點檢測以及人臉對齊。該網絡模型包含P-Net、R-Net 和O-Net 3 部分,利用候選框加分類器的思想,在輕量化網絡模型的同時可以進行快速高效的人臉檢測。MTCNN 通過P-Net 先粗略快速生成候選窗口,再經過R-Net 進行高精度的過濾,最終生成精確邊界框。O-Net 比RNet 結構多一個卷積層,通過O-Net 最終會輸出人面部的5 個特征點,分別是雙眼、鼻子和兩個嘴角。人臉對齊主要是通過人臉關鍵點檢測得到相應坐標,根據該坐標調整人臉角度,可以得到對齊的人臉。圖3 為使用MTCNN 進行人臉對齊的部分圖像示例,圖像大小為160×160 px。

圖3 人臉對齊圖像示例
3.2.1 人臉檢測算法
人臉檢測算法到目前為止經歷了3 個階段,即早期的模板匹配技術、AdaBoost[12]算法和深度學習方法。為了提高在嵌入式設備上的計算效率,文中對比了幾種輕量級人臉檢測算法,并根據實驗結果選擇了LFFD 算法。LFFD[13]是一種較為快速的、用于人臉檢測的無錨框方法。該算法提出了一種具有8 個分支的簡單且高效的網絡,網絡中每兩個分支為一部分,分別是tiny part、small part、medium part 和large part。
3.2.2 人臉檢測算法對比實驗
文中針對相同場景(該場景有58 張人臉,其中被遮擋人臉數為5,NMS閾值設為0.3),對4種人臉檢測算法YOLOFace[14]、RetinaFace[15]、CenterFace[16](以下分別簡稱YOLOF、RetinaF、CenterF)和LFFD 進行了實驗對比。表1 列出了4 種人臉檢測算法在同樣的場景下檢測到的人臉數量以及用時等。

表1 人臉檢測算法對比結果
從表1中可以看出,LFFD檢測到的人臉數最多且漏檢率最低,雖然相對于其他方法誤檢率較高,但對結果影響不大。綜合考慮多種因素,最終選擇LFFD方法。
設計人臉識別算法時主要考慮的問題是:同一個人在特征空間的距離非常近,不同人在特征空間中距離較遠。文中選用的ArcFace 算法本質目標為縮小類內距離,增大類間差距。
ArcFace 提出了用于人臉識別的損失函數,即Additive angular margin loss。ArcFace 在SphereFace和CosineFace的基礎上進行了改進,不同的是ArcFace在角度空間中最大化分類界限,而CosineFace 在余弦空間中最大化分類界限。ArcFace 損失函數的計算公式如式(1)所示:

ArcFace 在取消偏置的基礎上對輸入進行L2正則化(L2Regularization)處理,同時乘以固定的scale參數s。該公式在cos 函數的θyi角度后加上m參數,m參數為微小角度,通常取20°左右。該角度間隔比余弦間隔對角度的影響更加直接。
對ArcFace 損失函數的訓練是在人臉識別之前的初始化工作。由于官方的ArcFace 使用MXNet 框架,預訓練模型無法直接在Pytorch[17]中使用,并且其提供的Pytorch 版本預訓練模型精度不高。文中使用遷移學習的方式重新訓練ArcFace,以提高模型精度,進而改善識別結果。
4.2.1 數據集
1)CASIA-WebFace
文中使用了CASIA-WebFace 數據集,該數據集包括10 575 個人的494 414 張圖像,通過對數據集進行預處理,刪除有較多噪聲的圖片,將清理后的數據集導入到項目中作為訓練集。
2)LFW
LFW 是無約束自然場景下的人臉識別數據集,該數據集由不同朝向和表情以及光照等條件下截取的人臉圖片組成,共13 233 張圖片,共5 749 人。圖片尺寸為250×250 px,其中1 680 人含有兩張或以上人臉圖片。該數據集如今主要用于驗證人臉識別準確率。LFW 提供了驗證列表LFW_test_pair.txt,該列表中隨機選擇了6 000 對人臉。其中3 000 對屬于同一人,另3 000 對為不同的兩人,每人各一張圖片。屬于同一個人的兩張圖片標記為1,屬于不同人的兩張圖片標記為0。若模型對同一人預測結果為1 即為正確,預測結果為0 即為錯誤。同理對不同人預測結果為0 即為正確,預測結果為1 即為錯誤。
4.2.2 訓練和驗證
文中的主要實驗環境配置:Intel Core i7-7800X、32 GB 內存、512 GB SSD 硬盤,NVIDIA RTX 2080Ti顯卡,Ubuntu16.04 操作系統、Python3.6 語言、深度學習框架Pytorch1.2.0。模型訓練參數如下:骨干網絡使用MobileNet,BatchSize 設為64,epoch 為120;初始學習率為0.1,每10 個epoch 更新一次,衰減因子為0.1;ArcFace 公式中的s值設為30.0,m設為0.50。訓練過程中損失函數變化曲線如圖4(a)所示,橫坐標為訓練epoch(輪次),所有訓練樣本完成一次正向傳播和反向傳播為一輪次。縱坐標為loss 損失值。訓練得到的MobileNet_120.pth 模型在LFW 驗證集上的準確率為93.2%。圖4(b)為準確率變化曲線,橫坐標為訓練epoch(輪次),縱坐標為測試準確率數值。

圖4 訓練Loss及準確率變化曲線
人臉識別即對比特征的過程,通過式(2)計算待識別人臉特征(x11,x12,…x1n)與人臉庫中每個人臉特征(xi1,xi2,…xin)的歐式距離,如果小于所設定的閾值則輸出距離最小的人臉圖像作為識別結果,大于閾值則識別失敗。

最后,進行人臉識別實驗發現,不同人臉檢測模型對人臉識別結果影響不大,但若漏檢率較高會造成最終統計結果不準確。
無感點名系統主要分為5 個模塊,即登錄模塊、個人管理模塊、點名模塊、查詢模塊和后臺管理模塊。系統可以完成登錄、查看個人信息、修改密碼等功能。點名模塊包括快速點名和正式點名功能。查詢模塊包括普通查詢和按條件查詢,教師可以按班級或學生姓名查詢學生簽到信息。后臺管理模塊完成對教師、學生、人臉庫以及課程等信息的管理功能。
系統開發使用前后端分離的方式,通過后端封裝API 接口,前端請求的方式連接。前端使用uni-APP UI 框架,后端使用Django Web 應用框架。開發工具分別為HBuilderX 和PyCharm。在后端框架的選擇上,雖然Flask 框架小巧輕便、方便定制,但Django功能更加強大完善,且Django 內置admin 后臺系統提高了軟件開發效率。圖5 為無感點名系統架構。

圖5 無感點名系統架構
教師可以根據需求選擇快速點名或正式點名,快速點名顯示實到人數,不對結果進行統計。正式點名功能需要教師選擇具體的課程信息,包括學期、課程名、班級、節次。教師使用系統時,上傳學生課堂圖像,進行人臉識別,可以查看統計結果,圖6 為正式點名界面。統計結果包括應到人數、實到人數、缺勤人數以及缺勤學生的具體姓名等信息,教師可以選擇是否保存該次點名結果,便于后續查詢統計。

圖6 正式點名界面
該文對深度學習人臉識別技術進行了研究,并將其應用在無感點名系統中。開發了較為完整的無感點名系統,描述了具體的人臉識別流程以及系統架構等。該系統為教師課堂點名節約了時間,提高了效率。由于實驗設備拍攝質量限制,教室課堂圖片可能會出現不夠清晰的情況。未來工作目標為對課堂圖像進行處理,提高圖像質量,進一步提高識別準確率。