,,,, ,
(1.蘇州科技大學(xué) 江蘇省建筑智慧節(jié)能重點(diǎn)實(shí)驗(yàn)室,江蘇 蘇州 215009;2.蘇州市移動網(wǎng)絡(luò)技術(shù)與應(yīng)用重點(diǎn)實(shí)驗(yàn)室,江蘇 蘇州 215009;3.蘇州科技大學(xué) 電子與信息工程學(xué)院,江蘇 蘇州 215009;4.南京郵電大學(xué) 海外教育學(xué)院,南京 210000)
隨著深度學(xué)習(xí)相關(guān)研究的不斷發(fā)展,人工智能已經(jīng)逐步從理論研究開始轉(zhuǎn)入大規(guī)模應(yīng)用,應(yīng)用領(lǐng)域主要包括自然語言理解、視覺系統(tǒng)、問題求解、博弈、學(xué)習(xí)和知識展示等[1],人臉識別門禁系統(tǒng)就是人工智能在視覺系統(tǒng)中的應(yīng)用。
人臉是具有唯一性的生物標(biāo)識[2],近年來,人臉識別作為生物識別的關(guān)鍵技術(shù)之一,憑借其獨(dú)特發(fā)展優(yōu)勢,已經(jīng)被應(yīng)用于信息安全、出入口控制[3]等領(lǐng)域,并且其仍具有廣大的應(yīng)用前景[4],其中較為突出的就是門禁行業(yè)。
但是,當(dāng)前市場中的門禁系統(tǒng)大多采取離線的形式,給用戶在操作系統(tǒng)的時候帶來了很多不便,且當(dāng)前已有的人臉門禁產(chǎn)品,在使用后存在識別精度不夠、容錯率較低以及場景針對性不強(qiáng)的等不足,針對這些問題,系統(tǒng)使用MTCNN[5]與識別CNN分工處理組合方法[6],使得識別更為精準(zhǔn),且容錯率高,在樣本數(shù)量較小的前提下,實(shí)現(xiàn)精確識別,可以有效適應(yīng)小區(qū)或者公司這些人數(shù)相對較少和固定的應(yīng)用場合。
目前人臉提取的主要困難主要有兩方面:一是易受外部環(huán)境的影響,如人臉獲取不全、外界光照的變化等;二是耗時過長,人臉必須用多個角度進(jìn)行定位才能獲得較高的提取成功率,導(dǎo)致提取耗時過長。
MTCNN,即多任務(wù)級聯(lián)卷積網(wǎng)絡(luò),它具有三個連續(xù)深度CNN的框架:提案網(wǎng),剩余凈額和輸出凈額[7],是一種通過調(diào)整輸入圖片的大小來形成不同的尺度的神經(jīng)網(wǎng)絡(luò)。具有經(jīng)濟(jì)和精度較高等優(yōu)勢。MTCNN使用3*3大小的卷積核,有效減少了計(jì)算的負(fù)擔(dān),論精度,圖1給出了MTCNN的功能。
圖1 MTCNN框架圖
如圖所示,整個網(wǎng)絡(luò)將人臉提取的功能分成三個部分,即判斷人臉、框出人臉和定位特征點(diǎn),這三個功能由三層連續(xù)深度的卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn),每一層網(wǎng)絡(luò)輸入的都是RGB圖,圖片大小由式(1)確定:
minL=orgL*(12/minsize)*factor(n)
(1)
其中:minsize是可認(rèn)為設(shè)計(jì)的最小人臉尺寸,factor為縮放因子,org_L為輸入圖片的最小邊,并且每一層的輸入圖片大小均不同。相比直接利用haar特征進(jìn)行的人臉檢測的方式,MTCNN通過分工加強(qiáng)了每一層功能的精確度,能夠在一定程度上消除外界影響諸如光照變化或者小部分的人臉缺失,但是這種方式拉長了識別網(wǎng)絡(luò)的深度,使得運(yùn)算時間大大增加,但這并不影響最終結(jié)果,系統(tǒng)使用的MTCNN的參數(shù)設(shè)置如表1所示。
表1 MTCNN參數(shù)表
為了提高模型訓(xùn)練的效率,需要將經(jīng)過MTCNN網(wǎng)絡(luò)輸出的人臉圖片進(jìn)行進(jìn)一步的處理,以減輕內(nèi)存壓力,減少時間成本。原本輸出的圖片是48*48*3大小的RGB圖,先將圖片轉(zhuǎn)化為灰度圖,即48*48*1的圖像,之后使用雙線性插值的圖像縮放算法[8],引入一個縮放因子t,這樣每個像素新的灰度值就是P(x/t,y/t),把新的x、y值設(shè)為x1,y1,由于x1,y1必須為整數(shù),所以可以淘汰掉一部分的像素點(diǎn),這樣可以找到四個與它相鄰的灰度f1、f2、f3、f4,然后通過雙線性插值算法:
(2)
便可得到縮放后該點(diǎn)的灰度值。完成縮放后的圖片尺寸為128*128*1,雖然轉(zhuǎn)為灰度圖會減小膚色對訓(xùn)練的影響,但是從總體的精度來看膚色特征并不構(gòu)成較大影響。
從圖2可以看出,模型使用兩個卷積卷積層和兩個最大池化層來提去人臉中的一般特征,之后使用Flatten層將圖片一元化,使用兩個全連接層Dense進(jìn)一步提取不同人臉的深度特征,最后運(yùn)用softmax函數(shù)輸出分布概率。完成整個人臉識別的過程。
圖2 模型網(wǎng)絡(luò)圖
(1)卷積層:
設(shè)計(jì)使用兩層卷積[9],卷積核大小為5*5,第一層一共有32個卷積核,第二層有64個。識別通過這樣一個小核多核的設(shè)計(jì),來盡可能地保留特征同時減少參數(shù),也起到了平滑噪點(diǎn)的功能,防止過擬合,提高模型的泛化能力。
在經(jīng)過一個二維卷積核的卷積操作后,又使用一個最大池化函數(shù)來進(jìn)一步減少參數(shù)。所謂最大池化即是取出池化區(qū)域的元素的最大值,使用了一個2*2的池化區(qū)域,也就是沒經(jīng)過一次池化,將是池化作用的二維數(shù)據(jù)量縮小為1/4。這樣一個卷積層與池化函數(shù)的組合既捕捉到了主要特征,又使得數(shù)據(jù)規(guī)模進(jìn)一步的減小,使得到全連接層可以更方便快捷得獲取特征。
(2)全連接層:
表2給出了識別網(wǎng)絡(luò)數(shù)據(jù)結(jié)構(gòu),由表可得,經(jīng)過Flatten層將原本的三維數(shù)據(jù)壓縮為一維之后,進(jìn)一步使用一個Dense層獲得一個512空間的輸出。
表2 模擬燃料組件測量實(shí)驗(yàn)
(3)Relu函數(shù):
圖3所示為Rule函數(shù)曲線,由圖可見,在x<0時硬飽和,在x>0時f(x)的導(dǎo)數(shù)由為1,所以梯度不衰減,從而緩解了梯度爆炸,又能更快地收斂,由于硬件能力的制約,采取的樣本較少,Relu函數(shù)就能非常好地解決模型訓(xùn)練中容易梯度爆炸的問題。
圖3 Relu函數(shù)曲線
由表2可見,使用Relu函數(shù)進(jìn)行激活,通過Relu激活的神經(jīng)元特征進(jìn)一步保留并映射到下一層的Dense。最后一個Dense層最終收斂為所有的類別,并通過softmax的激活函數(shù)計(jì)算出各個類別的概率,表1中的num為訓(xùn)練人臉種類的數(shù)量。
(4)loss函數(shù):
與softmax相對應(yīng)的,設(shè)計(jì)使用categorical_crossentropy[10]函數(shù)作為loss函數(shù)(或稱結(jié)果函數(shù)),在使用這個函數(shù)之前應(yīng)該將所有的標(biāo)簽先one-hot化,也就是說將標(biāo)簽的判斷0、 1化,與該標(biāo)簽吻合為1,不吻合為0,并將標(biāo)簽組轉(zhuǎn)化為one-hot數(shù)據(jù)類型。Softmax和categorical_crossentropy函數(shù)的組合被廣泛應(yīng)用于這樣的多分類問題之中,使用loss進(jìn)行分層再使用softmax作為輸出層之后便能將各個標(biāo)簽的概率都表示出來,而不是簡單的判斷到底是哪一個標(biāo)簽,這就是這個組合的優(yōu)勢。
圖4所示為成品模型訓(xùn)練之后的acc-loss曲線圖,圖中橫軸為訓(xùn)練的代數(shù),也就是說橫軸代表著第幾次循環(huán)訓(xùn)練,縱軸則是loss/acc值。從圖中可以清晰地看出,在2代和10代訓(xùn)練明顯沒有最終收斂,還有很大的梯度,而20代時訓(xùn)練已經(jīng)基本完成,準(zhǔn)確率逼近100%,而loss值也已逼近0,表明20代訓(xùn)練模型確實(shí)已經(jīng)完全收斂。且訓(xùn)練的擬合速度適中,既沒有出現(xiàn)過快或者梯度消失的現(xiàn)象,也沒有出現(xiàn)過慢或者不收斂甚至反升的情況,可以說模型的學(xué)習(xí)率也已經(jīng)取到最佳。
圖4 acc-loss曲線圖
圖5展示的是實(shí)際預(yù)測結(jié)果,模型的預(yù)測結(jié)果還是比較準(zhǔn)確的,并且就算稍稍偏頭或者缺失了一下部分的臉的MTCNN算法還是可以將臉部抓取出來,然后將矩形框和識別結(jié)果繪制在圖片上。
圖5 典型場景實(shí)測結(jié)果圖
從圖5兩次典型場景測試中可以發(fā)現(xiàn),完成所使用的模型預(yù)測并不受到用戶周圍環(huán)境、穿戴等環(huán)境因素影響,這得益于人臉提取和人臉識別的分工、按序完成,即系統(tǒng)在進(jìn)行測試識別之前已經(jīng)將人臉提取出來,環(huán)境怎樣已經(jīng)無關(guān)緊要,并且采用MTCNN進(jìn)行人臉提取容錯率也很高,不會因?yàn)槠^或者人臉的部分缺失甚至異物遮擋而導(dǎo)致提取失敗。
門禁系統(tǒng),從功能上講可以分為單向門禁系統(tǒng)和雙向門禁系統(tǒng),也就是說系統(tǒng)是涉及進(jìn)出還是只能監(jiān)控進(jìn)門;從技術(shù)上講又可分為單機(jī)和組網(wǎng)門禁系統(tǒng)。系統(tǒng)采用的是單向組網(wǎng)涉及,具體結(jié)構(gòu)可見圖6。
圖6 硬件系統(tǒng)總體設(shè)計(jì)圖
由圖6可見,門禁終端設(shè)備是以X3288芯片為核心的開發(fā)板。該芯片體積小,且有充足的GPIO口,支持前兆有線以太網(wǎng),也支持電池休眠喚醒,非常適合作為需要長期待機(jī)的門禁系統(tǒng)的控制核心,且該開發(fā)板也支持多種操作系統(tǒng),如Linux系統(tǒng)、安卓系統(tǒng)和ubuntu系統(tǒng),十分便于開發(fā)。使用安卓系統(tǒng)作為控制終端的操作系統(tǒng),使用安卓編程可以非常方便地進(jìn)行前后交互以及用戶界面的業(yè)務(wù)處理,對開發(fā)者比較友好。圖6還給出了硬件系統(tǒng)實(shí)現(xiàn)的功能,當(dāng)用戶點(diǎn)擊設(shè)備顯示屏上的門禁按鈕時,門禁設(shè)備將調(diào)用攝像頭捕捉用戶的人臉,同時上傳后端并由后端判斷并返回判斷結(jié)果,設(shè)備將按照結(jié)果判斷是調(diào)用繼電器開門還是報(bào)警并向門衛(wèi)室傳遞信息,詳細(xì)的功能流程將在軟件系統(tǒng)設(shè)計(jì)中進(jìn)行解釋。
圖7給出了硬件結(jié)構(gòu)原理圖。如圖所示,門禁設(shè)備主體部件由攝像頭、報(bào)警器、指示燈、繼電器和網(wǎng)絡(luò)設(shè)備組成。由于時刻與后端保持通信,需要讓終端設(shè)備保持網(wǎng)絡(luò)暢通。在網(wǎng)絡(luò)連接上使用無線連接方式,主要原因是設(shè)計(jì)選擇了安卓系統(tǒng)作為設(shè)備主控系統(tǒng),使用有線連接并不方便操作;同時,無線連接又確實(shí)方便可靠,并且在每個門禁設(shè)備相距不遠(yuǎn)的情況下,又可以共用一個路由器,簡化了線路的復(fù)雜性,有利于維護(hù)和拆裝。大多數(shù)需要大量運(yùn)算的識別和訓(xùn)練過程均不在前端設(shè)備中進(jìn)行,也是出于經(jīng)濟(jì)考慮,但是設(shè)備端仍然存儲有人臉識別最新的模型并且將實(shí)時更新,此是針對斷網(wǎng)的情況,使設(shè)備不至于停止工作。
圖7 硬件系統(tǒng)原理圖
采取傳統(tǒng)的網(wǎng)絡(luò)設(shè)計(jì)模式,即用戶的移動客戶端+后端+設(shè)備端的形式,客戶端選擇微信小程序+iOS App+Android App的形式,給用戶多種選擇,也加強(qiáng)的平臺兼容性。后端使用Tomcat作為Web服務(wù)器的容器,采取javaEE+mysql+python的編程形式,javaEE和mysql完成多種業(yè)務(wù)的處理,并由java調(diào)用python完成模型的更新訓(xùn)練與調(diào)度。設(shè)備端則使用Android編程,完成的功能與用戶客戶端的功能類似。
(1)移動客戶端:
移動客戶端的主要功能是將待識別人員的臉部圖像上傳至服務(wù)器,用以更新模型,流程如圖8所示。由圖可見,用戶打開App后,需進(jìn)行登錄驗(yàn)證。若系統(tǒng)針對一個公司或者小區(qū)的內(nèi)部系統(tǒng),則不開放注冊,用戶的賬號和密碼均由管理員在后臺輸入,用戶只需使用賬號密碼登錄即可。進(jìn)入用戶界面之后,有兩種上傳的方式,分別可以使用現(xiàn)場拍攝或者已有的正臉照,用戶可重復(fù)上傳自己的照片,識別精度隨著用戶上傳照片數(shù)量增加而提高。使用python接口對照片進(jìn)行微調(diào)由一張照片生成幾十張人臉,與已有的人臉庫一起進(jìn)行訓(xùn)練,更新識別模型和版本號,這個版本號與設(shè)備端的模型更新有關(guān)。
圖8 客戶端功能流程圖
(2)設(shè)備端:
設(shè)備端與后端的結(jié)合可以簡化設(shè)備的較多功能,原設(shè)備不僅負(fù)責(zé)實(shí)現(xiàn)識別的功能,但需將識別的模型轉(zhuǎn)移到后端去,而本地的模型只是負(fù)責(zé)在斷網(wǎng)之時的維持功能,詳細(xì)的設(shè)備端與后端的前后交互流程可見圖9。圖9中拍攝照片并不是直接拍攝,而是調(diào)用相機(jī)進(jìn)入預(yù)覽模式,然后從預(yù)覽的視頻中截取一張圖片上傳后端,后端在接收到圖片之后會對圖片進(jìn)行截取人臉、轉(zhuǎn)灰度圖、降噪處理,在截取人臉中將返回一個結(jié)果信息,即有沒有檢測到人臉。然后系統(tǒng)調(diào)用后端模型對照片進(jìn)行預(yù)測,預(yù)測結(jié)果將返回結(jié)果信息,代表人臉標(biāo)簽庫中是否有這個人臉,如果有將返回該人臉的姓名和吻合的可能性(使用小于1的小數(shù)表示),如果沒有則返回不認(rèn)識。之后將結(jié)果信息返回給前端設(shè)備并由前端設(shè)備進(jìn)行判斷。
圖9 設(shè)備操作流程圖
在設(shè)備端還有一個備用模型,這個備用模型是在斷網(wǎng)之時由設(shè)備調(diào)用對人臉進(jìn)行預(yù)測的。設(shè)備端的人臉識別模型是如何更新的可見圖10,系統(tǒng)使用了心跳連接技術(shù),即在設(shè)備的程序中開一個線程,每30秒向后端發(fā)送一次請求,用存儲在設(shè)備中的版本號與客戶端使用流程中介紹的后端的版本號進(jìn)行一次減法運(yùn)算,如果小于0,代表設(shè)備端的模型版本低于系統(tǒng)模型的版本,于是設(shè)備端再次發(fā)送請求將系統(tǒng)的新模型和版本號下載到本地進(jìn)行更新;如果等于0,代表如今已是最新版本,無需更新,設(shè)備端繼續(xù)等待30秒到下一次心跳連接。
圖10 本地模型更新流程
在實(shí)際應(yīng)用中,人臉識別的識別精度會受到各種外在環(huán)境的影響。實(shí)驗(yàn)將采用控制變量法,測試在臉部反射光強(qiáng)差異大、有無遮擋物和臉部表情發(fā)生變化這3種影響較大的環(huán)境變數(shù)下,產(chǎn)品是否還能實(shí)現(xiàn)精確的識別,并且還將使用極限測試的方法,條件將逐漸苛刻,以此更好地測試設(shè)備的性能。
實(shí)驗(yàn)對象始終控制為同一個人,在正常表情并佩戴眼鏡的情況下進(jìn)行測試,分別讓攝像頭對光和背光對人臉進(jìn)行跟蹤采集識別,每隔三秒記錄一次人臉識別的置信度即識別率。圖11位10次數(shù)據(jù)采集獲得的識別率的折線圖,圖像表明在臉部反射光較強(qiáng)的情況下識別率明顯優(yōu)于反射光較弱的情況。對采集數(shù)據(jù)計(jì)算數(shù)學(xué)期望,反射光較強(qiáng)的情況下數(shù)學(xué)期望為0.8504,反射光較弱時數(shù)學(xué)期望為0.7673,雖然識別率在兩種情況下仍有差距,但就算在反射光較弱的時候,識別率仍然非常高,識別結(jié)果可信。
圖11 間隔三秒測得識別率折線圖
根據(jù)上一次實(shí)驗(yàn)的結(jié)果,實(shí)驗(yàn)控制人臉反射光較弱的時候進(jìn)行極限測試。為了突出表情的變化,實(shí)驗(yàn)采用正常表情和咧嘴笑這兩種臉部特征區(qū)別較大的情況進(jìn)行測試。結(jié)果如圖12所示,折線圖反映表情變化對識別率的影響并不是很大,計(jì)算兩種情況數(shù)據(jù)的數(shù)學(xué)期望,正常表情下數(shù)學(xué)期望為0.7673,咧嘴笑時數(shù)學(xué)期望為0.7658,仍然保持較高的識別精度。這是由于在模型訓(xùn)練之前是使用MTCNN網(wǎng)絡(luò)進(jìn)行臉部的時候,并不是提取完整的人臉,而是抓取特征點(diǎn)密集的部分,造成在提取之時忽略了一部分特征點(diǎn),導(dǎo)致模糊了表情變化的影響。
圖12 不同表情下測得識別率折線圖
鑒于表情影響并不大,實(shí)驗(yàn)仍然控制正常表情并控制較弱的人臉反射光。圖13的第一張圖是在用戶只上傳了一次圖像數(shù)據(jù)的情況下遮擋物對識別率的影響,并且上傳的數(shù)據(jù)為佩戴眼鏡的圖像數(shù)據(jù)。結(jié)果表明識別率的折線在遮擋物的影響下確有震蕩,裸眼情況下識別率明顯低于佩戴眼鏡的情況。測量數(shù)學(xué)期望值,在裸眼時的數(shù)學(xué)期望為0.710 3,而在佩戴眼鏡之時的數(shù)學(xué)期望為0.767 3,可見遮擋物對識別率的影響較大。但是本系統(tǒng)支持用戶多次上傳數(shù)據(jù)更新模型,實(shí)驗(yàn)又進(jìn)行了一次變動,實(shí)驗(yàn)對象再次上傳了一些在正常光照下裸眼的圖像數(shù)據(jù)進(jìn)行模型更新,再次進(jìn)行測試,圖13的第二張圖為實(shí)驗(yàn)結(jié)果,可見模型更新后遮擋物的影響明顯變?nèi)?,兩種情況下識別率并無大出入,裸眼時候的數(shù)學(xué)期望也上升至0.769 1,故用戶多次上傳不同情況下的圖像數(shù)據(jù)可以很好地消除一些環(huán)境影響。但即使在最惡劣的識別環(huán)境下,模型的預(yù)測預(yù)測置信度仍然在0.710 3的較高水平,故產(chǎn)品具有很好的環(huán)境適應(yīng)性。
圖13 遮擋物對識別的影響折線圖
通過使用人工智能算法,系統(tǒng)有效提高了傳統(tǒng)人臉識別的準(zhǔn)確性,同時優(yōu)化了客戶端的工作流程,有效減少了識別時間和識別精度,進(jìn)一步優(yōu)化了系統(tǒng)。本系統(tǒng)在小區(qū)、公司等場合具有廣泛的應(yīng)用前景。