段金成 張風(fēng)霞* 朱曉慶
(黑龍江科技大學(xué)電子與信息工程學(xué)院,黑龍江 哈爾濱 150022)
在最近幾年間,人工智能成為被媒體關(guān)注的熱點(diǎn)。人臉識別作為人工智能應(yīng)用的一個(gè)方面,現(xiàn)如今也被廣泛應(yīng)用,安全實(shí)用的人臉識別在科學(xué)應(yīng)用和研究中都具有廣闊的應(yīng)用前景。雖然過去的研究已經(jīng)奠定了這一領(lǐng)域的基礎(chǔ)和成果,但視角的不確定性、表達(dá)的夸張性等都造成了復(fù)雜的人臉識別環(huán)境使其難以識別。深度學(xué)習(xí)的出現(xiàn)使這些特殊問題變得簡單,深度學(xué)習(xí)在人臉識別中的應(yīng)用可以更本質(zhì)地表達(dá)原始的人臉信息,通過網(wǎng)絡(luò)的深度學(xué)習(xí)提取特征自主學(xué)習(xí),人臉識別率從而進(jìn)一步提高。
TensorFlow 是一種端到端的開源機(jī)器學(xué)習(xí)平臺。它具備一個(gè)包含全面而靈活的各種工具、庫和社區(qū)資源的生態(tài)系統(tǒng),這有助于科研人員對先進(jìn)相關(guān)機(jī)器學(xué)習(xí)技術(shù)的研究,這也對要構(gòu)建和部署機(jī)器學(xué)習(xí)驅(qū)動應(yīng)用程序的有關(guān)開發(fā)人員有所幫助。如圖1 所示為Tensorflow的系統(tǒng)框架,上一部分是可編程的客戶端,其編程語言可以用Java、C++、Python 等;中間部分為C 的API 接口;下一部分為后端執(zhí)行系統(tǒng)。客戶端系統(tǒng)會提供多語言編程模型以及創(chuàng)建計(jì)算圖,Tensorflow運(yùn)行時(shí)的系統(tǒng)就是后端執(zhí)行系統(tǒng),其主要工作是計(jì)算圖執(zhí)行過程。例如計(jì)算圖的剪枝、子圖算法等。
圖1 Tensorflow 系統(tǒng)框架
TensorFlow 使用符號計(jì)算圖,與Theano 相比,TensorFlow的簡潔性更加突出。其本身就表明了自身的工作原理是由兩部分組成:節(jié)點(diǎn)和邊,也就是其具備的兩個(gè)基本數(shù)據(jù)結(jié)構(gòu),tensor 就是張量代表了n 維數(shù)組,flow就代表了有向圖的計(jì)算,而有向圖就是數(shù)據(jù)流程中的圖。如圖2 是一個(gè)簡潔的數(shù)據(jù)流圖,包括任何操作都必須具備的基本類型操作:輸入和輸出,它們代表的是數(shù)據(jù)的起點(diǎn)和重點(diǎn),邊作為節(jié)點(diǎn)與節(jié)點(diǎn)之間輸入輸出關(guān)系的橋梁,具有不可或缺的作用。
圖2 數(shù)據(jù)流圖
在圖2 中,數(shù)據(jù)流圖由節(jié)點(diǎn)a、b、c、d、e 和相應(yīng)的邊組成,有兩個(gè)輸入和一個(gè)輸出,其運(yùn)算可通過以下代碼實(shí)現(xiàn):
a=Input1;b=Input2
c=a*b;d=a+b
e=c+d
當(dāng)a=2,b=4, 就可以完成計(jì)算e=2*4+(2+4)=14
我們可以把數(shù)據(jù)流圖看作一個(gè)構(gòu)件,把其他數(shù)據(jù)流圖作為它的輸入或輸出,在可視化過程中把每一個(gè)數(shù)據(jù)流圖內(nèi)部的運(yùn)算掩蓋起來,因此可以更好的展示其運(yùn)算的結(jié)構(gòu)鏈路。
Keras 框架是一種基于底層張量庫(如TensorFlow等)的高層神經(jīng)網(wǎng)絡(luò)構(gòu)建框架。為了快速提供掉用接口的一致性,同時(shí)隱藏底層張量庫的差異性,Keras 對不同底層張量庫提供了不同的封裝,并在該層API 的設(shè)計(jì)上保持了一致性,使得同一套代碼可以在以不同的張量庫為底層的Keras 框架下運(yùn)行,從而有效避免了由于框架更替帶來的額外的代碼維護(hù)成本。使用keras 搭建一個(gè)神經(jīng)網(wǎng)絡(luò)的步驟,Keras 具有極具特色的特性,例如:高度模塊化、極簡特性和可擴(kuò)充特性等。
通過攝像頭把人臉圖像采集下來。
在攝像頭中給定任意人臉,找到其中是否存在一個(gè)或多個(gè)人臉,并框出每個(gè)人臉的位置。
通過人臉的五官及其外在特征來對其定位,確定具體的位置信息。
此步驟主要對應(yīng)用的圖像進(jìn)行相關(guān)處理操作,包括灰度變換、過濾等相關(guān)處理操作,考慮到圖像可能會具有像清晰度、距離等外在因素和眼鏡、表情等自身因素的很多干擾操作,因此需要訓(xùn)練大量的數(shù)據(jù),使其提取出具有意義的特征。
特征提取是將機(jī)器學(xué)習(xí)算法中不能檢測和識別到的原始數(shù)據(jù)變換成可以檢測和識別的數(shù)據(jù)特征過程。如圖3 所示為傳統(tǒng)機(jī)器學(xué)習(xí)與深度學(xué)習(xí)的一些異同。
圖3 傳統(tǒng)機(jī)器學(xué)習(xí)與深度學(xué)習(xí)間的區(qū)別
根據(jù)人臉具備的特有特征,尋找像眼鏡、嘴巴等具有特點(diǎn)的位置,利用特征點(diǎn)間的距離、曲率來對特征分量進(jìn)行,最后將找到的相關(guān)特征點(diǎn)連接成一定長度的特征向量。
通過模型訓(xùn)練,讓其回答反應(yīng)出每張人臉是否屬于數(shù)據(jù)庫中的人臉數(shù)據(jù)集。
用攝像頭識別任意人臉,使其與數(shù)據(jù)庫中的人臉進(jìn)行比對,最終給出識別率。
要實(shí)現(xiàn)基于深度學(xué)習(xí)的人臉識別,需要收集大量的圖片來供電腦進(jìn)行學(xué)習(xí)。目前國內(nèi)外有多種有關(guān)人臉的數(shù)據(jù)庫和數(shù)據(jù)集,例如MIT 人臉數(shù)據(jù)集、UMIST 圖像集、YALE 和ORL 人臉數(shù)據(jù)集等。本次研究將基于卷積神經(jīng)網(wǎng)絡(luò)提取人臉特征,在攝像頭的視頻流中獲取人臉數(shù)據(jù)集進(jìn)行實(shí)驗(yàn),接下來將采集到的人臉數(shù)據(jù)集進(jìn)行圖像預(yù)處理,最后作為訓(xùn)練輸入。
第一,運(yùn)用Opencv 的人臉識別分類器,實(shí)現(xiàn)人臉檢測相關(guān)功能,人臉檢測效果如圖4 所示。而人臉識別分類器的具體功能操作如下:
圖4 人臉檢測效果
人臉默認(rèn)檢測器:haarcascade_frontalface_default.xml
人臉快速Harr 檢測器:haarcascade_frontalface_alt2.xml
人臉側(cè)視檢測器:haarcascade_profileface.xml
眼部左眼檢測器:haarcascade_leftye_2splits.xml
眼部右眼檢測器:haarcascade_righteye_2splits.xml
嘴巴部位檢測器:haarcascade_mcs_mouth.xml
鼻子部位檢測器:haarcascade_mcs_nose.xml
身體部位檢測器:haarcascade_fullbody.xml
人臉檢測器(快速LBP):lbpcascade_frontalface.xm
第二,進(jìn)行捕獲人臉數(shù)據(jù)庫,本次研究采集了五個(gè)人的人臉數(shù)據(jù)集,每人200 張,共計(jì)1000 張,存儲在data2 這一文件夾中。
第三,對采集到的圖像進(jìn)行預(yù)處理,將圖片像素設(shè)置為64*64,使輸入的所有圖片轉(zhuǎn)換為四維數(shù)組,尺寸為200*5*64*64*3,并將圖像設(shè)置為灰度圖,預(yù)處理后的數(shù)據(jù)集。處理結(jié)果如圖5 所示。
圖5 圖片預(yù)處理運(yùn)行結(jié)果
卷積神經(jīng)網(wǎng)絡(luò)模型訓(xùn)練過程由前向傳播和反向傳播兩部分組成,主要以反向傳播階段為主,如圖6 所示為反向傳播階段的訓(xùn)練過程。
圖6 卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程
本文的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)圖是參考LeNet-5 網(wǎng)絡(luò)結(jié)構(gòu)所設(shè)計(jì)的,本次研究的網(wǎng)絡(luò)卷積層共有10 層網(wǎng)絡(luò)層,包括4 個(gè)卷積層、2 個(gè)全連接層、2 個(gè)池化層、1 個(gè)flatten層和1 個(gè)softmax 層。
訓(xùn)練步驟依次為:導(dǎo)入需要的庫、定義預(yù)處理后的圖片所在目錄、規(guī)范圖片學(xué)習(xí)輪數(shù)120 輪和學(xué)習(xí)率0.001、定義變量及神經(jīng)網(wǎng)絡(luò)層、訓(xùn)練模型。次研究訓(xùn)練模型的訓(xùn)練結(jié)果如圖7 所示。
圖7 訓(xùn)練模型部分結(jié)果
本文基于卷積神經(jīng)網(wǎng)絡(luò)的人臉識別技術(shù)是機(jī)器學(xué)習(xí)中深度學(xué)習(xí)的一個(gè)重要應(yīng)用,本次研究檢測人臉識別的測試可以達(dá)到90%以上的正確率。采用Pycharm 作為代碼編譯工具,設(shè)計(jì)采用Python 編程語言進(jìn)行開發(fā),Tensorflow 框架作為后端支撐,Keras 作為一種基于底層張量庫的高層神經(jīng)網(wǎng)絡(luò)構(gòu)建框架,對不同的底層張量庫提供了不同的封裝,利用python 中的cv2 進(jìn)行圖像預(yù)處理,用dlib 庫進(jìn)行人臉檢測,利用卷積神經(jīng)網(wǎng)絡(luò)模型進(jìn)行圖像識別,經(jīng)過大量的實(shí)驗(yàn)與測試,算法最終實(shí)現(xiàn)了研究的目標(biāo)結(jié)果。
科學(xué)技術(shù)創(chuàng)新2022年10期