谷廣兵 沈曉萍 王玉婷
摘 ?要:人臉識別技術(shù)是人工智能一個典型的應用場景,為了實現(xiàn)基于微信小程序的人臉登錄功能,文章對人臉區(qū)域檢測、人臉特征提取、人臉判別內(nèi)容進行了研究。人臉區(qū)域檢測通過tensorflow-ssd 進行模型搭建并采用widerface進行模型參數(shù)的訓練。人臉特征提取采用facenet進行模型搭建并采用LFW數(shù)據(jù)集進行模型參數(shù)的訓練,然后采用歐式距離進行人臉相似度計算,以TensorFlow將訓練好的模型以PB格式存儲,通過Python完成上述功能模塊的封裝,并與前端微信小程序完成數(shù)據(jù)交互。通過測試,系統(tǒng)可以完成人臉注冊、人臉登錄功能。
關(guān)鍵詞:TensorFlow;SSD;facenet;人臉檢測;人臉匹配
中圖分類號:TP391.4 ? ? ?文獻標識碼:A文章編號:2096-4706(2021)13-0014-05
Research and Implementation of Face Recognition Based on CNN
GU Guangbing, SHEN Xiaoping, WANG Yuting
(Jiaxing Vocational & Technical College, Jiaxing ?314036, China)
Abstract: Face recognition technology is a typical application scenario of artificial intelligence. In order to realize the face login function based on WeChat applet, the paper studies face region detection, face feature extraction and face discrimination. The face region detection model is built by tensorflow-ssd, and the model parameters are trained by wideface. Face feature extraction uses facenet to build the model and LFW data set to train the model parameters, then uses European distance to calculate the face similarity, stores the trained model in Pb format with tensorflow, completes the packaging of the above functional modules through python, and completes the data interaction with the front-end WeChat applet. Through the test, the system can complete the face registration and face login functions.
Keywords: TensorFlow; SSD; facenet; face detection; face matching
0 ?引 ?言
人臉識別[1]是人工智能技術(shù)落地的一個重要體現(xiàn)。在當今社會中,人臉識別廣泛應用在考勤、門禁、醫(yī)療診斷、公共安全系統(tǒng)、監(jiān)視系統(tǒng)等領(lǐng)域,與人臉識別有關(guān)的應用智能化最高,相關(guān)業(yè)務落地更深入。以曠視集團、商湯科技、科大訊飛為代表的一批企業(yè)在該方面的研究較為超前,提供了API接口,具備明顯的發(fā)展優(yōu)勢。總之,人臉識別作為新興技術(shù),有很好的安全性、可靠性和有效性,并且在很多新興生物特征識別技術(shù)中脫穎而出。
本文以深度學習中的卷積神經(jīng)網(wǎng)絡(luò)為基礎(chǔ)[2],通過數(shù)據(jù)集的選取、數(shù)據(jù)集的清洗與打包、模型的訓練與測試、PB模型文件的轉(zhuǎn)化,并最終以微信小程序為客戶端,以flask框架為服務端完成系統(tǒng)的實現(xiàn),完成人臉驗證的功能,從而讓新興技術(shù)成果能很好地轉(zhuǎn)化。
1 ?技術(shù)分析
本文研究過程中,以深度學習中的卷積神經(jīng)網(wǎng)絡(luò)、TensorFlow為技術(shù)核心。深度學習[3]是一種含有多隱藏層的多層感知器,在已知網(wǎng)絡(luò)結(jié)構(gòu)和網(wǎng)絡(luò)結(jié)構(gòu)內(nèi)部參數(shù)的前提下,通過“前向運算”完成目標任務分類的功能,屬于“怎么用”的范疇;通過“反向傳播”可以完成網(wǎng)絡(luò)參數(shù)的學習,也就是一種有監(jiān)督的學習過程,屬于“怎么學”的范疇。TensorFlow 是一個基于數(shù)據(jù)流圖的可用于大規(guī)模分布式數(shù)值計算的開源框架,主要分為計算圖的搭建、計算圖的訓練兩大部分。
1.1 ?卷積神經(jīng)網(wǎng)絡(luò)
深度學習涉及卷積神經(jīng)網(wǎng)絡(luò)(CNN)、循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)、自動編碼機(Autoencoder)等內(nèi)容。卷積神經(jīng)網(wǎng)絡(luò)主要用來解決圖像問題,因此也是本文所采用的網(wǎng)絡(luò)模型。
卷積神經(jīng)網(wǎng)絡(luò)是以卷積結(jié)構(gòu)為主搭建起來的深度網(wǎng)絡(luò),可以自動提取所輸入圖片的特征,并且對圖片的變形(如平移、比例縮放)等具有高度不變性。卷積神經(jīng)網(wǎng)絡(luò)包括兩個重要的內(nèi)容“卷積”和“池化”。通過卷積中的卷積核(或者稱為濾波器),可以幫助我們找到特定的局部圖像特征(如邊緣),用于后面的網(wǎng)絡(luò)模型中,如圖1 所示。
由于相鄰像素傾向于具有相似的值,同理,卷積層相鄰的輸出像素包含的大部分信息都是冗余的,此時通過引入“池化層”可以在某個位置找到強邊緣,降低數(shù)據(jù)的冗余,簡化網(wǎng)絡(luò)的參數(shù),如圖2 所示。
1.2 ?TensorFlow
TensorFlow作為一個數(shù)據(jù)流編程的系統(tǒng),被廣泛用于機器學習。其核心概念包括Graph、Session、tensor:
(1)Graph主要構(gòu)建網(wǎng)絡(luò)結(jié)構(gòu)、參數(shù),實際應用中,可以將訓練、測試過的模型保存成PB文件,以供后續(xù)使用。以下為相關(guān)程序代碼:
#將Graph模型保存為PB文件
import tensorflow as tf
g = tf.Graph()
tf.train.write_graph(g.as_graph_def(),”.”,“graph_frozen.pb”)
#加載PB,還原Graph模型
with tf.gfile.GFile(graph_frozen.pb,’rb’) as fid:
serialized_graph = fid.read()
od_graph_def.ParseFromString(serialized_graph)
tf.import_graph_def(od_graph_def,name=’’)
(2)上述Graph必須在Session這個上下文中完成執(zhí)行,通常將與Graph有關(guān)的操作稱之為“前端計算”,將與Session有關(guān)的操作稱之為“后端計算”。在Session執(zhí)行中,可以指定資源設(shè)備情況、數(shù)據(jù)情況,對Graph進行feed數(shù)據(jù)tensor填充,tensor指的是網(wǎng)絡(luò)解點之間傳輸?shù)臄?shù)據(jù)。相關(guān)程序代碼為:
#指定CPU資源
tf.device(‘/cpu:0’):
#按需分配GPU資源
gpu_options = tf.GPUOptions(allow_growth=True)
config = tf.ConfigProto(gpu_options=gpu_options)
with tf.Session(config=config) as sess:
….
#注入數(shù)據(jù)
sess.run(OperaInstance,feed_dict=dict_sample)
2 ?人臉檢測與人臉匹配模型構(gòu)建
人臉檢測與人臉匹配[4]模型是系統(tǒng)實現(xiàn)的主要功能,如圖3所示為人臉檢測、識別的主要流程圖,分別要經(jīng)過人臉數(shù)據(jù)采集、人臉數(shù)據(jù)預處理,人臉特征提取,人臉相似度度量。其中,人臉數(shù)據(jù)采集需要捕捉人臉信息,并上傳至服務端,服務端進行臨時存儲;預處理是提取一個如同(449 330 122 149)的人臉坐標信息;人臉特征提取主要是提取128維的特征向量,人臉相似度比對,是對數(shù)據(jù)庫中預存的人臉特征進行歐拉計算,選取差距最小的預存信息。
2.1 ?人臉檢測
人臉檢測屬于目標檢測的一種,作為人臉識別業(yè)務的重要一環(huán),受人臉姿態(tài)和表情變化、大小、位置、遮擋等因素的影響。目前存在較多的人臉檢測模型,如R-CNN、SSD、Yolo、MTCNN等。本文所采用的SSD模型[5,6],屬于one-stage檢測模型,以resnet作為前置網(wǎng)絡(luò)。本模型采用widerface作為數(shù)據(jù)集,該數(shù)據(jù)集背景場景差異較大,因此訓練出來的模型更具有適應性。本文采用https: //github.com/tensorflow/models所提供的系統(tǒng)框架進行模型的搭建,最終將訓練的模型網(wǎng)絡(luò)結(jié)構(gòu)、參數(shù)生成PB文件。具體業(yè)務流程如表1所示。
2.2 ?人臉匹配
本節(jié)所述人臉匹配專注于人臉識別,即通過當前人臉和數(shù)據(jù)庫中所存人臉進行對比,屬于1∶N的識別歸類,其主要分為人臉特征表示、人臉相似度度量兩個方面。FaceNet[7]采用卷積神經(jīng)網(wǎng)絡(luò)(CNN)學習人臉到歐式空間的映射,因此歐式空間里距離的度量關(guān)聯(lián)著人臉相似度,同一個人的不同圖像在空間中的距離很小,不同人的圖像在空間中有較大的距離。并采用triplet_loss[8]來衡量訓練過程中樣本之間的距離誤差,網(wǎng)絡(luò)直接輸出為128維度的向量空間。
本文采用https: //github.com/davidsandberg/facenet.git所提供的系統(tǒng)框架進行模型的搭建,最終將訓練的模型網(wǎng)絡(luò)結(jié)構(gòu)、參數(shù)生成PB文件。具體業(yè)務流程如表2所示。
3 ?程序?qū)崿F(xiàn)
前述內(nèi)容分別完成了基于CNN的人臉檢測、人臉匹配模型的訓練,并將模型保存為PB文件。本文將采用微信小程序作為客戶端,微信小程序是基于手機微信的一種客戶端集成平臺,具有功能強大的組件庫,本文將采用媒體組件camera實時捕捉用戶人臉,使用畫布canvas展示人臉圖像。在服務端語言選擇上,使用Python語言,可以提取PB文件中的網(wǎng)絡(luò)結(jié)構(gòu)與參數(shù),通過封裝Python函數(shù)的方式,完成輸入數(shù)據(jù)的前向運算,并使用flask作為服務端框架,完成人臉識別程序的開發(fā)工作。該程序業(yè)務流程圖如圖4所示。
3.1 ?人臉注冊
人臉注冊模塊可以選擇從相冊中選擇,也可以選擇相機按鈕從系統(tǒng)中實時采集。后端/frServer/register 接口負責對上傳信息進行校驗,主要是針對人臉坐標位置的提取,如果此時未能檢測出人臉,則返回“error”信息,效果圖如圖5所示。
3.2 ?人臉登錄
人臉登錄模塊將通過攝像頭捕捉當前人臉區(qū)域,后端接口調(diào)用/frServer/login。通過完成人臉框提取,如圖6、圖7所示,進一步調(diào)用特征提取函數(shù),提取128維特征向量,通過與數(shù)據(jù)庫中存儲的特征進行歐式距離計算,找出相似度最高的數(shù)據(jù),從而驗證成功進行跳轉(zhuǎn),如圖8所示。如果未能找出相似度數(shù)據(jù),則提示登錄失敗,如圖9所示,更換其他方式登錄。
4 ?結(jié) ?論
人臉識別技術(shù)是深度學習的重要研究方向,在當前人工智能領(lǐng)域有著廣泛的應用,本文主要側(cè)重于研究人臉區(qū)域識別、人臉特征向量提取,在研究過程中,運用了深度學習網(wǎng)絡(luò)中的SSD、facenet模型,以及resnet、triplet等深度學習網(wǎng)絡(luò),分別進行數(shù)據(jù)清洗、數(shù)據(jù)打包、模型參數(shù)選取、模型訓練、數(shù)據(jù)驗證等。在后續(xù)的研究過程中,將側(cè)重于人臉關(guān)鍵點提取、人臉屬性判定的研究。
目前,隨著人臉識別算法的發(fā)展,人臉識別精度也越來越高,但同時也面臨諸如低質(zhì)量人臉識別、人臉防偽等問題。相信隨著相關(guān)技術(shù)的發(fā)展以及法律制度的健全,上述問題會得到很好的解決。
參考文獻:
[1] 張晶晶,李秋艷,劉碩,等.基于深度學習的人臉識別在身份認證領(lǐng)域應用綜述 [J].數(shù)據(jù)通信,2021(4):1-6.
[2] 張廣才,何繼榮,高文朋.基于深度學習的人臉識別研究 [J].無線互聯(lián)科技,2019,16(19):133-135.
[3] 郭麗麗,丁世飛.深度學習研究進展 [J].計算機科學,2015,42(5):28-33.
[4] 余璀璨,李慧斌.基于深度學習的人臉識別方法綜述 [J].工程數(shù)學學報,2021,38(4):451-469.
[5] WU W Y,QIAN C,YANG S,et al. Look at boundary:a boundary-aware face alignment algorithm [C]//2018 IEEE/CVF Conference on Computer Vision and Pattern Recognition. Salt Lake City:IEEE,2018:2129-2138.
[6] LIU W,ANGUELOV D,ERHAN D,et al. SSD:single shot multibox detector [C]// European Conferenceon Computer Vision,Amsterdam,Netherlands,2016:21-37.
[7] SCHROFF F,KALENICHENKO D,PHILBIN J. FaceNet:a united embedding for face recognition andclustering [C]//IEEE Conference on Computer Vision and Pattern Recognition,Boston,MA,USA. IEEE,2015:815-823.
[8] YI D,LEI Z,LIAO S C,et al. Learning face representation from scratch [EB/OL].(2014-11-28).https://arxiv.org/abs/1411.7923.
作者簡介:谷廣兵(1986—),男,漢族,河南漯河人,講師,碩士,研究方向:計算機視覺、大數(shù)據(jù)技術(shù)、工業(yè)互聯(lián)網(wǎng)。