胡渲
(四川大學視覺合成圖形圖像技術國防重點學科實驗室計算機技術系,成都610041)
人臉識別,就是計算機根據(jù)人臉的特征判斷人物身份。傳統(tǒng)人臉識別技術的核心是根據(jù)人臉圖像的各個像素分布情況計算得到描述個體身份的特征描述子,使用這些特征描述子來進行身份匹配。隨著深度學習的興起,人臉識別領域得到了長足的發(fā)展,深度學習使得人臉識別相比傳統(tǒng)方法的速度和準確率都有很大的提升。深度學習的主要優(yōu)勢是它們可以利用大量的數(shù)據(jù)進行訓練,在訓練的過程中逐漸適應不同的情況,學習到表征這些數(shù)據(jù)的最佳特征。雖然深度學習方法比傳統(tǒng)方法更能夠應對復雜的外部環(huán)境,但是依然做不到完全忽視各種變化的場景。非限制條件下的人臉識別存在人物姿態(tài)不固定、表情變化多、光照條件復雜和面部容易有遮擋物等情況,對人臉識別存在巨大挑戰(zhàn)。
基于以上背景,為了將人臉識別應用到非限制條件下,本文提出基于特征融合的MTCNN[1]人臉檢測算法,結合VGG-16[2]添加Inception[3]結構的人臉識別網(wǎng)絡設計了一套動態(tài)人臉識別系統(tǒng),并利用KCF[4]跟蹤算法減輕客戶端GPU 壓力。
MTCNN 中的MT 代表多任務學習,在同一個任務中同時進行“識別人臉”、“邊框回歸”與“人臉關鍵點識別”。在工程實踐中,MTCNN 是一種檢測速度和準確度都很優(yōu)秀的算法。MTCNN 利用三層級聯(lián)架構,同時實現(xiàn)圖像中人臉檢測和人臉關鍵點定位。
如圖1 所示,MTCNN 由三個網(wǎng)絡組成:P-Net、RNet 和O-Net。對MTCNN 的三個階段的簡單解釋如下:
圖1 MTCNN網(wǎng)絡結構[1]
第一層網(wǎng)絡P-Net:首先將圖片進行多級縮放。使用12×12,步長為2 的滑動窗口,對每種縮放尺度的圖片進行滑動檢測。小圖片能夠檢測到大人臉,大圖片能夠檢測到小人臉。對所有檢測到的人臉框進行非極大值抑制,得到人臉框,再將人臉框轉換到原始尺寸,對短邊進行填充,轉化為24×24 的正方形。第二層網(wǎng)絡R-Net:將上一級多個24×24 的人臉輸入網(wǎng)絡,進入卷積神經(jīng)網(wǎng)絡進行處理得到更多精確的人臉框,再進行非極大值抑制,最后進行尺寸變換到48×48 的正方形。第三層網(wǎng)絡O-Net:將上一級多個48×48 的人臉輸入網(wǎng)絡,得到多個更精確的框、五個人臉位置標點和置信度。對人臉框進行非極大值抑制最后得到最終所需要的人臉框。
(1)人臉二分類任務使用交叉熵損失函數(shù):
a 為神經(jīng)網(wǎng)絡實際輸出值,yi為期望輸出值,Li為分類損失。
(2)人臉坐標框回歸任務使用均方誤差函數(shù):
在傳統(tǒng)MTCNN 中進行多尺度變換圖像預處理使用的縮放因子為0.709。這樣雖然可以將不同大小的人臉都縮放到接近12×12 大小,即模型尺度,但是依然不能夠很完美地匹配,造成一定程度的漏檢測,如圖2所示,中間部分遮擋的人臉未檢測成功。
圖2 MTCNN只能夠檢測出部分人臉
MTCNN 檢測速度已經(jīng)很快,但模型使用的卷積神經(jīng)網(wǎng)絡對復雜情況下的處理會產(chǎn)生很多漏檢和誤檢。而我們監(jiān)控人臉識別環(huán)境中存在圖像質(zhì)量差、人臉大小不一的情況,MTCNN 人臉檢測精度將會更差,所以我們需要在大體不影響檢測速率的情況下提升人臉檢測的精度,最大程度避免各種環(huán)境干擾。
(1)特征金字塔結構
既然MTCNN 可以在將圖片輸入神經(jīng)網(wǎng)絡之前將圖片進行多尺度變換,以識別到不同尺度的人臉,同理也可以將不同層次的神經(jīng)特征進行融合,即使用特征金字塔結構以此提高對不同大小的人臉的檢測率。
從圖3 的特征金字塔網(wǎng)絡結構可以看出,它主要分為自頂向下結構和水平連接結構。自下而上的過程是卷積神經(jīng)網(wǎng)絡中正向傳播的過程。底部圖像是輸入圖像。在向頂層卷積的過程中,特征圖的大小越來越小,卷積核的數(shù)量在增加,而卷積神經(jīng)網(wǎng)絡特征提取功能意義越來越抽象。MTCNN 使用的標準卷積神經(jīng)網(wǎng)絡將使用最后一個卷積層的高級特征進行面部檢測。這樣僅使用高級特征,而完全丟失了低級特征、邊緣和其他信息的位置。在特征金字塔中,自頂向下是一個上采樣過程,頂部最抽象的特征上采樣之后和原神經(jīng)網(wǎng)絡上一級的特征進行融合,它們的尺寸必須一致,根據(jù)圖3 的結構一層一層的向下融合,最后每一層都輸出結果。
圖3 特征金字塔結構
MTCNN 中的三個級聯(lián)的卷積神經(jīng)網(wǎng)絡使用最后一層的輸出作為特征,但是每一個卷積神經(jīng)網(wǎng)絡最后一層都是高分辨率特征,沒有利用到當前神經(jīng)網(wǎng)絡前面幾層的低分辨率特征,對信息的利用不足,就會導致MTCNN 對低分辨率的特征表現(xiàn)力不足,不容易檢測到多尺度變換后中間尺度的人臉。在不同部分的神經(jīng)網(wǎng)絡內(nèi)部進行特征融合,可以更好地利用圖像信息,使得不同尺度大小的人臉都有更平等的機會被檢測出來。而且特征融合是在卷積之后的特征之間進行融合,可以最大限度的減少因為融合帶來的性能損耗。
(2)特征融合MTCNN 測試
特征融合MTCNN 采用WIDER FACE 人臉數(shù)據(jù)集進行訓練,WIDER FACE 是香港中文大學收集的非限制條件下的人臉數(shù)據(jù)庫,包含不同尺寸、光照、姿態(tài)等情況的人臉,在WIDER FACE 人臉數(shù)據(jù)上進行訓練,對監(jiān)控環(huán)境下的動態(tài)人臉識別系統(tǒng)具有重要意義。
使用FDDB 測試集進行人臉檢測測試,使用檢測準確率Acc進行評估,公式如下:
檢測結果如圖4。
圖4 特征融合MTCNN與MTCNN性能測試結果
在特征融合之后MTCNN 檢測準確率有了明顯的提升,每一層網(wǎng)絡特征融合MTCNN 都比原MTCNN 網(wǎng)絡準確率高2%左右,可以更好地檢測到不同大小的人臉,符合我們的應用需求。
動態(tài)人臉識別一般是使用監(jiān)控攝像頭進行識別,在監(jiān)控的環(huán)境下,人臉識別技術面臨非常多的不確定因素的挑戰(zhàn)。在監(jiān)控畫面中雖然有時人物會不自覺的看向攝像頭,但是大多數(shù)時候我們拍攝到的都是人物的側臉。甚至有時候人物會佩戴面部遮擋飾品,例如帽子、眼睛、口罩等。在有的情況下為了拍攝到更大范圍的人臉,人臉在畫面中的比例容易變得很低,導致人臉分辨率很低。監(jiān)控環(huán)境下陽光的變化也容易很劇烈,晴天、雨天、早上、傍晚都會影響人物的面部特征?;谝陨蠈ο嚓P問題的研究(包括對人臉檢測與識別的研究),以及基于本文系統(tǒng)需求分析與實際算法使用,我們設計了一套可以用于監(jiān)控場景下的人臉識別系統(tǒng)。
整個動態(tài)人臉識別系統(tǒng)基于C++語言開發(fā),利用QT 形成一套完整的系統(tǒng)界面,包含登錄、注冊、檢測、識別、刪除、查詢六大模塊,如表1。
表1 功能架構
本系統(tǒng)的邏輯架構主要分為客戶端和服務端。
客戶端完成人臉檢測和KCF 人臉跟蹤的功能,服務端提供人臉特征的提取與數(shù)據(jù)庫對比特征的功能,最終向客戶端返回識別到的人的信息。
圖5 邏輯架構
(1)登錄
客戶端使用HTTP(post)請求向服務端發(fā)送JSON包進行登錄。服務端接收到用戶名和密碼之后進行驗證,如果驗證通過,服務端將隨機生成32 位的ses?sion_id 發(fā)送給客戶端。從此這個32 位的session_id 將成為客戶端和服務端的通信標識,每次傳輸JSON 數(shù)據(jù)包都將驗證session_id,如果不一致,將拒絕接收數(shù)據(jù)包。
(2)注冊
在客戶端上傳人臉圖片,填寫姓名編號。客戶端將進行人臉檢測,如果沒有識別到人臉,將提示重新上傳含有人臉的圖片。如果檢測到有人臉,將人臉圖片、人臉框、姓名、編號、指定庫名稱等信息一起通過HTTP(post)請求傳輸給服務端,服務端將注冊人信息存入數(shù)據(jù)庫,并返回相應狀態(tài)信息。
(3)檢測
對攝像頭輸出的幀序列進行人臉檢測,將檢測到的人臉位置交給KCF 進行跟蹤,同時交給服務端進行人臉識別??蛻舳说却斩朔祷氐娜四樧R別信息,將識別到的人臉信息顯示到界面上。為了防止KCF跟蹤失效以及不能識別新出現(xiàn)的人臉,每10 幀圖像客戶端將再進行MTCNN 人臉檢測,將所有檢測到的人臉發(fā)送給服務端進行識別,同時更新現(xiàn)有的KCF 跟蹤人臉框。
(4)識別
為了更快速、準確地進行人臉識別,我們設計了一種在VGG-16 基礎上添加Inception 結構的人臉識別網(wǎng)絡。適當?shù)奶砑覫nception 結構可以將網(wǎng)絡設計的更寬更深,提高模型提取魯棒特征的能力。服務端在接收到待識別人臉圖片后,通過人臉識別網(wǎng)絡提取768 個特征,將其與數(shù)據(jù)庫中所有已注冊的人臉特征進行對比,分數(shù)最高且超過設定閾值的人臉特征即識別到的人臉,將識別信息打包返還給客戶端。
(5)刪除
刪除功能是刪除注冊的人臉,客戶端中指定注冊庫名稱,輸入待刪除注冊人臉的姓名或者工號,將信息打包發(fā)送給服務端,服務端將在指定注冊庫中執(zhí)行刪除注冊人臉操作,并返回是否刪除成功。
(6)查詢
查詢功能不僅可以查詢?nèi)四樖欠褡?,還可以查詢識別記錄。服務端在進行人臉識別的時候,會將識別到的信息存入本地,客戶端填寫查詢時間段、個人信息、最低相似度等信息,發(fā)送到服務端,服務端將在數(shù)據(jù)庫中篩選檢索并返回結果。
圖6 為動態(tài)人臉識別系統(tǒng)運行界面,最上方為識別、注冊、檢測、查詢四大功能。在識別界面可以選擇M:N、1:N、1:1 三種工作模式。左邊為識別記錄,右邊是實時識別效果,即使人物運動快速,也能夠準確的跟蹤。
圖6 動態(tài)人臉識別系統(tǒng)運行界面
根據(jù)測試,在NVIDIA GTX 1050 Ti、注冊庫5 萬人、同屏人數(shù)7 人的條件下,動態(tài)人臉識別能夠達到30FPS。
本文介紹了二維人臉識別技術的研究現(xiàn)狀,針對MTCNN 人臉檢測方法有部分人臉漏檢的情況,提出了一種在不同網(wǎng)絡結構內(nèi)部進行特征融合的方法,有效提高了MTCNN 網(wǎng)絡的檢測準確率。在設計動態(tài)人臉識別系統(tǒng)的過程中,針對不同的用戶需求設計了六大基本功能:登錄、注冊、檢測、識別、刪除、查詢。在客戶端的設計中本文利用了KCF 目標跟蹤算法,有效地降低了客戶端GPU 的運算壓力,在實際運用過程中,可以有效地降低設備購置成本,降低能源消耗。最后展示了動態(tài)人臉識別系統(tǒng)的運行界面,達到了實時運算,且準確率高的目標。