李慧穎 李薇 邢艷芳 何光威
摘要:介紹了基于TensorFlow的人臉識(shí)別系統(tǒng)的設(shè)計(jì)過(guò)程。該系統(tǒng)采用深度學(xué)習(xí)的理論以及Google開發(fā)的人工智能框架TensorFlow來(lái)實(shí)現(xiàn)人臉識(shí)別。系統(tǒng)調(diào)用OpenCV計(jì)算機(jī)視覺(jué)庫(kù)中的功能函數(shù)從一段離線視頻幀里截取人臉圖像幀,用MTCNN模型進(jìn)行人臉檢測(cè),再與通過(guò)數(shù)據(jù)集VGGface2里訓(xùn)練的Inception模型進(jìn)行識(shí)別,輸出特征向量,并與選好的圖片庫(kù)內(nèi)圖片對(duì)比。結(jié)果表明,該系統(tǒng)可較好的實(shí)現(xiàn)人臉識(shí)別功能。
關(guān)鍵詞:人臉識(shí)別;深度學(xué)習(xí);人工智能;TensorFlow; OpenCV計(jì)算機(jī)視覺(jué)庫(kù)
中圖分類號(hào):TP311
文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1006-8228(2020)09-61-03
Design of face recognition system based on TensorFlow
Li Huiying, Li Wei. Xing Yanfang, He Guangwei
(Com,nun.ication University of China, Aranjing, Jiang.su 211100. China)
Abstract: Developed a face recognition system based on TensorFlow. The system uses deep learning theory and artificialintelligence framework TensorFlow developed by Google to realize face recognition. The system calls the function in the OpenCVcomputer vision library to intercept the face image frame from an offline video frame, uses the MTCNN model for face detection.and identifies the face detected with the Inception model trained in the data set VGGface2, then outputs the feature vector andcompared it with pictures selected from the gallery. The results show that the system can realize the face recognition function.
Key words: face recognition; deep learning; artificial intelligence; TensorFlow; OpenCV computer vision library
0引言
許多早期普遍使用的身份驗(yàn)證方法隨著時(shí)代演變已不具有完整的安全性,因?yàn)檫@類信息極易被偽造。本文研究基于TensorFlow的人臉識(shí)別技術(shù),先應(yīng)用一種較好的MTCNN模型進(jìn)行人臉檢測(cè),它是一種既考慮面部關(guān)鍵點(diǎn)檢測(cè)又考慮面部邊界回歸深度的學(xué)習(xí)模型[1]。從OpenCV庫(kù)中調(diào)用函數(shù)進(jìn)行面部檢測(cè)并識(shí)別被輸入圖像信息,并從視頻數(shù)據(jù)中截取圖像幀數(shù)據(jù)。然后程序從MTCNN網(wǎng)絡(luò)讀取截取的人臉圖像,并通過(guò)Inception框架對(duì)圖像進(jìn)行識(shí)別和確認(rèn)。人臉檢測(cè)和識(shí)別過(guò)程使用TensorFlow來(lái)構(gòu)建網(wǎng)絡(luò)完成系統(tǒng)設(shè)計(jì)。
1CNN的基本網(wǎng)絡(luò)結(jié)構(gòu)
CNN的基本網(wǎng)絡(luò)結(jié)構(gòu)由卷積層、池化層、全連接層、Softmax層組成。而計(jì)算機(jī)所理解的輸入層就是由許多的輸入矩陣組成。在這一層上是跟DNN有很大相同點(diǎn)的。它的第一個(gè)網(wǎng)絡(luò)是CNN結(jié)構(gòu)獨(dú)有的卷積層,其后是池化層,它也是CNN的獨(dú)特部分。卷積層和池化層的組合在結(jié)構(gòu)中出現(xiàn)多次。卷積層和池化層的組合模型可靈活使用所需的任意組合。在這些組合層后面出現(xiàn)的是有著DNN結(jié)構(gòu)的全連接層(Fully Connected Layer,簡(jiǎn)稱FC)。而輸出層主要是使用Softmax激活函數(shù)來(lái)做圖像識(shí)別的分類。
2MTCNN的研究與應(yīng)用
在執(zhí)行到人臉檢測(cè)和特征點(diǎn)定位的任務(wù)時(shí),將會(huì)使用多任務(wù)級(jí)聯(lián)的卷積神經(jīng)網(wǎng)絡(luò)(MTCNN)。該網(wǎng)絡(luò)是實(shí)現(xiàn)人臉檢測(cè)和五點(diǎn)校準(zhǔn)的模型,主要通過(guò)CNN模型級(jí)聯(lián)實(shí)現(xiàn)多任務(wù)學(xué)習(xí)網(wǎng)絡(luò)。該模型利用檢測(cè)和對(duì)齊之間的通用關(guān)系來(lái)提高其性能,并且從細(xì)致任務(wù)到粗糙任務(wù)的替換基本上是由三階級(jí)聯(lián)卷積神經(jīng)網(wǎng)絡(luò)完成的。這也是其特殊性能的體現(xiàn)。三階段可大致分為:
(1)使用全卷積網(wǎng)絡(luò)(P-Net)快速發(fā)布一系列候選窗口;
(2)通過(guò)使用更復(fù)雜的CNN網(wǎng)絡(luò)(R-Net)過(guò)濾掉大多數(shù)非面部候選窗口;
(3)使用一個(gè)能力稍作加強(qiáng)的網(wǎng)絡(luò)(O-Net)監(jiān)測(cè)出人臉上面的五個(gè)標(biāo)記點(diǎn)。
3TensorFlow系統(tǒng)結(jié)構(gòu)
TensorFlow是一個(gè)可以使用數(shù)值類計(jì)算的開源軟件庫(kù),它可以穩(wěn)定在Python的語(yǔ)言環(huán)境中運(yùn)行[2]。該程序在實(shí)施運(yùn)行的基礎(chǔ)上,兼顧一定的準(zhǔn)確性和穩(wěn)定性。TensorFlow還具備完全開源性,可在智能手機(jī)或數(shù)據(jù)服務(wù)中心集群上運(yùn)行,重要的是基于數(shù)據(jù)流圖(data flow graphs),并可以廣泛的應(yīng)用于語(yǔ)音或圖像分類的機(jī)器學(xué)習(xí)和深度學(xué)習(xí)領(lǐng)域[3]。TensorFlow代表將張量從流程圖的一個(gè)部分運(yùn)動(dòng)到另一端所需要進(jìn)行的計(jì)算過(guò)程,分解來(lái)看就是Tensor表示著張量(由N維數(shù)組成),以及流表示了基于數(shù)據(jù)流程圖的運(yùn)算。
CAPI(Computer Assisted Personal Interviewing)即計(jì)算機(jī)輔助面訪,是作為本系統(tǒng)的界線,分出兩個(gè)子系統(tǒng):前端系統(tǒng)和后端系統(tǒng)。前端系統(tǒng)主要工作是負(fù)責(zé)構(gòu)造建成計(jì)算圖并為其提供實(shí)現(xiàn)編程所需要的模型;后端系統(tǒng)主要負(fù)責(zé)執(zhí)行(出計(jì)算圖)并在系統(tǒng)運(yùn)行時(shí)提供穩(wěn)定的環(huán)境。本系統(tǒng)中需關(guān)注四個(gè)基本組件,因系統(tǒng)是采用分布式運(yùn)行機(jī)制,那么這四個(gè)組件就是關(guān)鍵。①客戶端是構(gòu)成前端系統(tǒng)的重要部分,該系統(tǒng)可以支持多語(yǔ)言的客戶端,不僅如此,還提供基于計(jì)算圖上的編程模型,可為用戶構(gòu)建造出各種類的計(jì)算圖而提供了便利,從而實(shí)現(xiàn)所需的模型沒(méi)計(jì)??蛻舳艘詴?huì)話為橋梁連接后端的運(yùn)行,同時(shí)啟動(dòng)計(jì)算圖的運(yùn)行過(guò)程。②在分布式的運(yùn)行環(huán)境中,分布式Master承擔(dān)從計(jì)算圖中找到最小子圖的責(zé)任,并將其分成多個(gè)子圖,以便在多種進(jìn)程和設(shè)備上運(yùn)行。③TensorFlow將為每個(gè)不同的任務(wù)啟動(dòng)相應(yīng)的工作者服務(wù)。Worker Service在計(jì)算圖的節(jié)點(diǎn)之間存在依賴關(guān)系的前提下完成圖的計(jì)算,然后在硬件環(huán)境(例如CPU/GPU)中移動(dòng)OP內(nèi)核,并且還需要接受其他工人服務(wù)或工序的計(jì)算結(jié)果將結(jié)果發(fā)送到其他工人服務(wù)。④OP(operator)以特殊方式在硬件設(shè)備上實(shí)現(xiàn),以表示數(shù)據(jù)操作層。它負(fù)責(zé)執(zhí)行OP操作,每個(gè)OP都有一個(gè)優(yōu)化的內(nèi)核實(shí)現(xiàn),但要考慮設(shè)備的類型[4]。
4系統(tǒng)設(shè)計(jì)與分析
4.1獲取被識(shí)別人臉特征向量
由于本設(shè)計(jì)并沒(méi)用到攝像頭獲取人臉圖像,而是自主構(gòu)建圖片庫(kù)。初次系統(tǒng)識(shí)別公眾人物周杰倫,建立出一個(gè)名為jaychou的文件夾。在該文件夾內(nèi)保存為獲取人臉特征向量進(jìn)行對(duì)比而截取的三張圖片。
為了與系統(tǒng)運(yùn)行后從離線視頻端檢測(cè)到的人臉特征向量進(jìn)行對(duì)比,首先要在圖片庫(kù)里已獲取的圖片上進(jìn)行檢測(cè),獲取特征向量。
4.2基于OpenCV讀取視頻
該程序使用OpenCV截取視頻數(shù)據(jù)流中的圖像幀數(shù)據(jù)來(lái)提供輸入圖像以供之后的面部檢測(cè)和面部識(shí)別[5]。OpenCV,也就是計(jì)算機(jī)視覺(jué)接口可以用在許多類型的操作系統(tǒng)上實(shí)現(xiàn)運(yùn)行,例如更常用的Windows,MacOS和Linux。OpenCV是使用C++類與C函數(shù)構(gòu)成的,具有高效特性與輕量化優(yōu)勢(shì),此外在架構(gòu)上還規(guī)劃了一些接口提供給Python、Ruby、MATLAB等使用。該程序調(diào)用OpenCV庫(kù)中的函數(shù)從離線視頻端截取到視頻幀,它內(nèi)部的視覺(jué)處理算法變化多端,且C語(yǔ)言編寫占用它的絕大多數(shù)功能,可以說(shuō)在DSP系統(tǒng)包括ARM嵌入式系統(tǒng)中的運(yùn)行代碼都會(huì)在OpenCV中簡(jiǎn)略的重寫過(guò),考慮其開源特性前提下處理穩(wěn)妥,不加額外的非內(nèi)部支持也是能完整的編譯鏈接并產(chǎn)生運(yùn)行程序的,可以極其方便的做算法的移植。該步驟會(huì)影響后面程序?qū)θ四槞z測(cè)的效果,所以必須嚴(yán)謹(jǐn),其實(shí)現(xiàn)流程圖如1所示。
4.3MTCNN人臉檢測(cè)
人臉檢測(cè)首先必須檢測(cè)圖片中是否含有人臉,這是其主要工作。其次,確定是否存在人臉邊界的關(guān)鍵點(diǎn)。該系統(tǒng)的面部檢測(cè)模塊是使用多任務(wù)級(jí)聯(lián)卷積神經(jīng)網(wǎng)絡(luò)(MTCNN)深度學(xué)習(xí)模型實(shí)現(xiàn)的,該模型專注于對(duì)面部框架回歸和面部關(guān)鍵點(diǎn)檢測(cè)。MTCNN主要存在三層網(wǎng)絡(luò),分別是P-Net層、R-Net層和O-Net層。首先P-Net用在初步確認(rèn)人臉的邊框范圍,使用R-Net層精準(zhǔn)的確定人臉邊框范圍,最后用O-Net層檢測(cè)并確認(rèn)五個(gè)人臉關(guān)鍵點(diǎn)。首先將12*12尺寸的圖像輸入到P-Net網(wǎng)絡(luò)層,然后使用在訓(xùn)練之前生成的訓(xùn)練數(shù)據(jù)將其轉(zhuǎn)換為12*12*3的結(jié)構(gòu)。然后,R-Net可以更準(zhǔn)確地調(diào)整P-Net生成的邊界框的坐標(biāo)。由P-Net生成的回歸幀和由其生成的面部輪廓關(guān)鍵點(diǎn)構(gòu)成R-Net訓(xùn)練數(shù)據(jù),其中R-Net生成的回歸幀變?yōu)?4*24大小,其面部輪廓關(guān)鍵點(diǎn)所用生成數(shù)據(jù)的方法與P-Net相比沒(méi)有變化。在MTCNN中用作輸出的最后一個(gè)網(wǎng)絡(luò)是O-Net。與R-Net的訓(xùn)練數(shù)據(jù)生成方式相類似是O-Net網(wǎng)絡(luò)的特點(diǎn),其中包含面部輪廓關(guān)鍵點(diǎn)數(shù)據(jù)和通過(guò)P-Net和R-Net后檢測(cè)出來(lái)的每個(gè)圖片中的bounding boxes。
4.4 Inception人臉識(shí)別
人臉識(shí)別的步驟使用Inception模型,該模型在VGGface2數(shù)據(jù)集里進(jìn)行了訓(xùn)練,在這里是形成了pb文件,直接進(jìn)行使用。人臉識(shí)別是檢測(cè)到人臉后的關(guān)鍵步驟,嵌入特征向量(embedding)是通過(guò)Inception網(wǎng)絡(luò)識(shí)別獲得的。獲得到人臉特征向量的代碼: embs=sess.run(embeddings, feed_dict=feed_dict)
從pb文件中找到模型的入口輸入、出口輸出并加載,其工作代碼如下: images_placeholder=tf.get_default_graph()
.get_tensor_by_name("input:0") embeddings = tf.get_default_graph()
.get_tensor_by_name("embeddings:0") phase_train_placeholder = tf.get_default_graph()
.get_tensor_by_name("phase_train:0")
4.5特征向量的比對(duì)
以上步驟進(jìn)行完,這時(shí)獲得了兩種人臉的特征向量,分別是自己創(chuàng)建的圖片庫(kù)里的人臉特征向量和離線視頻里截取到的人臉特征向量,比較這兩者,當(dāng)特征向量之間比對(duì)的余弦距離較大時(shí),就可以識(shí)別出人臉[6]。
4.6結(jié)果展示
在確認(rèn)識(shí)別結(jié)果之后,用OpenCV畫框?qū)⒆R(shí)別人的名字打上去,顯示在視頻中。這樣,整個(gè)系統(tǒng)的操作完成。設(shè)計(jì)完成后,該系統(tǒng)的運(yùn)行結(jié)果如圖2所示。
這組圖片中,第一、二張為設(shè)計(jì)所需的結(jié)果,在視頻中識(shí)別周杰倫的臉,并顯示名字jaychou在畫框里。第三張為對(duì)比顯示圖,其中,程序中獲得人臉特征向量的人物得到識(shí)別,而另一個(gè)人沒(méi)有獲取特征向量識(shí)別為unk無(wú)信息。最后一張也為未獲取特征向量的人物,故識(shí)別為unk。
5結(jié)束語(yǔ)
該系統(tǒng)設(shè)計(jì)的完成,具有一定的實(shí)用價(jià)值。系統(tǒng)依賴深度學(xué)習(xí)的發(fā)展,其在人臉識(shí)別技術(shù)上的運(yùn)用,使得在短時(shí)間內(nèi)刷新了大眾對(duì)傳統(tǒng)識(shí)別方式的認(rèn)知[7]。但同時(shí)也存在著不可忽略的問(wèn)題,如在完成度上由于缺少大量的訓(xùn)練,造成一些環(huán)境下存在識(shí)別誤差,這也是人臉識(shí)別技術(shù)未來(lái)需要攻克的難題。
參考文獻(xiàn)(References):
[1]朱秀娟,盧琳,鐘洪發(fā),人臉識(shí)別技術(shù)在考試身份驗(yàn)證中的應(yīng)用[J].激光雜志,2016.37(6):90-93
[2]章敏敏,徐和平,王曉潔,等.谷歌TensorFlow機(jī)器學(xué)習(xí)框架及應(yīng)用.微型機(jī)與應(yīng)用[J].2017,36(10):58-60.
[3]黃睿,陸許明,鄔依林.基于TensorFlow深度學(xué)習(xí)手寫體數(shù)字識(shí)別及應(yīng)用[J].電子技術(shù)應(yīng)用,2018.44(10):6-10
[4]嚴(yán)嚴(yán),章毓晉.基于視頻的人臉識(shí)別研究進(jìn)展[J].清華大學(xué)電子工程系計(jì)算機(jī)學(xué)報(bào),2009.32(5):879-885
[5]方玫.OpenCV技術(shù)在數(shù)字圖像處理中的應(yīng)用[J].北京教育學(xué)院學(xué)報(bào)(自然科學(xué)版),2011.6(1):7-11
[6]黃琳,蔣為,楊鐵軍.基于Caffe框架的人臉定位與識(shí)別系統(tǒng)的設(shè)計(jì)[J].計(jì)算機(jī)時(shí)代,2019.6:56-58,62
[7]陳果,周志鋒,楊小波,王成,歐陽(yáng)純萍,基于人臉識(shí)別的商品推薦系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)時(shí)代,2018.11:52-55
收稿日期:2020-05-26
基金項(xiàng)目:2019年江蘇省大學(xué)生創(chuàng)新創(chuàng)業(yè)訓(xùn)練項(xiàng)目“基于深度學(xué)習(xí)的上班打卡系統(tǒng)”(201913687002Y)
作者簡(jiǎn)介:李慧穎(1998. 10-),女,江蘇鹽城人,本科在讀,主要研究方向:深度學(xué)習(xí)。
通訊作者:邢艷芳(1981. 10-),女,江蘇南京人,副教授,主要研究方向:人工智能。