郝林倩
(福建船政交通職業(yè)學(xué)院 信息與智慧交通學(xué)院,福州 350007)
人臉識別(Face Recognition),是指對人臉圖像進(jìn)行辨識提取,通過分析比較而獲得的人臉視覺特征信息數(shù)據(jù),并以此來對個人身份特征進(jìn)行比對或鑒別的計算機(jī)技術(shù)。分析可知,該技術(shù)屬于生物學(xué)特性識別算法,迄今為止也已然成為現(xiàn)階段國內(nèi)外學(xué)者的研究熱點,即能夠根據(jù)人們對自然界中某一種特定生命體(一般特指人)的自身所存在的生物學(xué)特性,來實現(xiàn)特征識別以區(qū)分特定生物體的個體。
卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN)算法是目前人臉圖像識別訓(xùn)練中具有可觀應(yīng)用前景的一種深度學(xué)習(xí)方法。深度學(xué)習(xí)方法的主要優(yōu)勢就在于能夠分析訓(xùn)練大量的人臉數(shù)據(jù),并能夠快速學(xué)到人臉訓(xùn)練中的數(shù)據(jù)所表現(xiàn)出的人臉特征變化,進(jìn)而對其他未知情況做出準(zhǔn)確可靠的人臉表征識別。這種訓(xùn)練方法通常不需要預(yù)先設(shè)計出對不同身體類型的類域內(nèi)的差異因素(比如光照、姿勢、面部表情、年齡等)所穩(wěn)健具備的各種特定運動特征,而是完全可以通過從訓(xùn)練結(jié)果數(shù)據(jù)中學(xué)習(xí)來得到。
主成分分析方法(Principal Component Analysis,PCA),是一種使用最廣泛的數(shù)據(jù)降維算法。PCA的主要思想是將維特征映射到維上,這個維是全新的正交特征、也被稱為主成分,是在原有維特征的基礎(chǔ)上重新構(gòu)造出來的維特征。將2個數(shù)據(jù)軸各由某一個原本已經(jīng)給定坐標(biāo)的坐標(biāo)系軸中轉(zhuǎn)置至多個新坐標(biāo)的坐標(biāo)系軸中,第一個坐標(biāo)的選擇是原始數(shù)據(jù)中方差最大的,第二個坐標(biāo)軸選擇的是和第一個坐標(biāo)軸正交、且具有最大方差的方向,重復(fù)該過程,重復(fù)的次數(shù)則為原始數(shù)據(jù)的特征數(shù)。因此大部分方差都在前幾個新坐標(biāo)中,把后面的坐標(biāo)忽略,如此就完成了數(shù)據(jù)降維。
PCA在本質(zhì)上主要是要將方差為最大的正交方向數(shù)據(jù)作為主要的統(tǒng)計特征,并且要在其各個主要正交方向上將數(shù)據(jù)寫“離相關(guān)”,即盡量讓數(shù)據(jù)彼此間在其不同主要正交方向數(shù)據(jù)上完全沒有任何相關(guān)性,原理示意如圖1所示。
圖1 PCA算法原理Fig.1 Principle of PCA algorithm
線性判別分析(Linear Discriminant Analysis,LDA)算法的思路與PCA類似,都是對圖像的整體分析。不同之處在于,PCA是通過確定一組正交基對數(shù)據(jù)進(jìn)行降維,而LDA是通過確定一組投影向量使得數(shù)據(jù)集不同類的數(shù)據(jù)投影的差別較大、同一類的數(shù)據(jù)經(jīng)過投影更加聚合。在統(tǒng)計形式處理上,PCA方法與傳統(tǒng)LDA算法的2個最大顯著區(qū)別即在于,PCA方法中最終能求得結(jié)果的特征向量通常是完全正交的,而在LDA方法中求得的結(jié)果特征向量就不可能一定全部正交。
利用LDA尋找一個投影向量,使得不同類型的數(shù)據(jù)點在投影向量所在直線上投影能較好地做出區(qū)分,如圖2所示。
圖2 LDA算法向量投影Fig.2 Vector projection of LDA algorithm
局部二進(jìn)制模式直方圖(Local Binary Pattern Histograms,LBPH)人臉識別方法中的技術(shù)核心之一就是LBP算子。LBP算子主要是指可以用來分析計算與描述圖像局部紋理特征信息關(guān)系的一種算子,其最終所能反映到的抽象內(nèi)容則往往僅僅是描述圖像內(nèi)每個紋理特征像素間與該圖像及其周圍所有紋理像素間信息的關(guān)系。
原始的LBP算子定義為在3*3的窗口內(nèi),以窗口中心像素為閾值,將相鄰的8個像素的灰度值與其進(jìn)行比較,若周圍像素值大于或等于中心像素值,則該像素點的位置被標(biāo)記為1,否則為0。這樣,3*3鄰域內(nèi)的8個點經(jīng)比較可產(chǎn)生8位二進(jìn)制數(shù)(通常轉(zhuǎn)換為十進(jìn)制數(shù)、即LBP碼,共256種),就得到該窗口中心像素點的LBP值,并用這個值來反映該區(qū)域的紋理特征,也就是圖像區(qū)域圖像中包含的所有圖像紋理信息。這里給出的LBP算子計算方式如圖3所示。
圖3 LBP算子計算方式Fig.3 LBP Operator calculation method
卷積神經(jīng)網(wǎng)絡(luò)(CNN)的優(yōu)點有:能夠?qū)⒋髨D片數(shù)據(jù)量下的圖片有效降維成更小圖片數(shù)據(jù)量;可有效保留圖片特征,符合圖片處理的原則。
多層網(wǎng)絡(luò)結(jié)構(gòu)及組成用到了神經(jīng)網(wǎng)絡(luò),如圖4所示。由圖4可知,這是一個常見的多層卷積網(wǎng)絡(luò),首先是輸入層、然后是隱含層,隱藏層中包括了:卷積層、池化層、全連接層,最后是輸出層。對此擬做研究論述如下。
圖4 CNN的網(wǎng)絡(luò)結(jié)構(gòu)Fig.4 Network structure of CNN
卷積網(wǎng)絡(luò)模型中的圖像輸入層通常都可以做到只需接收到一組二維對象,卷積網(wǎng)絡(luò)模型上的一些圖像的輸入層特征也大多只要預(yù)先進(jìn)行一次圖像輸入標(biāo)準(zhǔn)化設(shè)計和處理即可,例如輸入層的輸入數(shù)據(jù)定義為像素,將分布到每個[0,255]像素區(qū)間上的所有原始圖像的每個像素值都必須歸一化地緊致分布在同一個[0,1]像素的區(qū)間。輸入特征的標(biāo)準(zhǔn)化也更有利于顯著提升在卷積網(wǎng)絡(luò)學(xué)習(xí)中的學(xué)習(xí)對象的學(xué)習(xí)效率水平和學(xué)習(xí)表現(xiàn)。
卷積網(wǎng)絡(luò)模型中的隱藏層中一般也包含有卷積層、池化層和全連接層等這3類網(wǎng)絡(luò)最廣泛常見層的構(gòu)筑,相較于其他任何類型網(wǎng)絡(luò),卷積層和池化層結(jié)構(gòu)多是為卷積神經(jīng)網(wǎng)絡(luò)模型中所特有。
卷積圖層法就是用某一個卷積核函數(shù)來遍歷出任意的一張圖片,而對于卷積圖層的一種基本的計算圖的輸出過程就是要用函數(shù)輸入每一張圖片信息,并把與其中的卷積核函數(shù)所對應(yīng)出的所有元素信息進(jìn)行相乘處理后,再做求和,這樣經(jīng)過計算輸出后的結(jié)果就得到了一張較新的計算圖(feature map),因此選擇一個合適的卷積核,可以突顯不同的圖像特征。該過程示意如圖5所示。
圖5 利用卷積核提取特征圖Fig.5 Extracting feature maps using convolution kernels
在處理圖像時,可以選擇多個卷積核,生成不同的圖像。這些不同圖像可以理解為不同通道,對此可稱為多核卷積。
同卷積層結(jié)構(gòu)一樣,池化層就是對每次計算輸入元素的數(shù)據(jù)都通過一個池化的窗口元素來完成計算輸入元素或輸出,如圖6所示。不同于一般卷積核層結(jié)構(gòu)的特點是,卷積核層只計算輸入元素與卷積核層的互相關(guān)性,池化核層可直接完成關(guān)于一個池化窗口元素輸出的最大值或最小平均值的計算。
圖6 池化層計算方法Fig.6 Pooling layer calculation method
全連接層中的所有其他神經(jīng)元都會與上一層中的所有其他神經(jīng)元進(jìn)行全連接,具體如圖7所示。同時為了提高網(wǎng)絡(luò)的整體性能,全連接層中的所有其他神經(jīng)元通常只會被一個激勵函數(shù)激活。
圖7 全連接網(wǎng)絡(luò)層的模型Fig.7 Model of fully connected network layer
卷積神經(jīng)網(wǎng)絡(luò)圖中使用的圖像分類輸出層中的圖像上層一般都是有一個全連接的輸出層,對于圖像上的分類的標(biāo)簽問題,輸出層本身也可以考慮通過使用輸出層本身用到的邏輯函數(shù)或歸一化指數(shù)函數(shù)(),而后再輸出圖像的分類上的標(biāo)簽,如圖8所示。
圖8 Softmax激活函數(shù)Fig.8 Softmax activation function
卷積神經(jīng)網(wǎng)絡(luò)圖層會在每一個隱含層的神經(jīng)元中分別提取出這些圖像表面上的某些局部特征,并再將其各自映射到下一個平面,技術(shù)上是通過使用激勵函數(shù)來使得所有這些局部特征中的每個映射點都是具有位移性質(zhì)的完全不變性。每一個神經(jīng)元都要與局部神經(jīng)感受野相聯(lián)系、并建立連接。這樣的特征提取過程使得網(wǎng)絡(luò)對輸入的樣本有較強(qiáng)的容忍能力,對圖像處理也具有非常好的魯棒性。
深 度 可 分 離 卷 積 (Depthwise separable convolution)的過程可分為2步。分別是:逐通道卷積(Depthwise Convolution,Dw),逐點卷積(Pointwise Convolution,Pw)。對此可做分析概述如下。
Dw中的一個卷積核負(fù)責(zé)一個輸出通道,一個輸入通道也只會由其中的一個卷積核來做卷積,由此得到的計算圖(feature map)輸出通道需要與輸入通道完全一致,即如圖9所示。
圖9 逐通道卷積的計算Fig.9 Calculation of depthwise convolution
Pw與常規(guī)卷積d方法頗為相似,所要求的卷積核面積一般為11,為最上一層的下一層的卷積通道,其中的卷積核數(shù)目與計算圖(feature map)的數(shù)目相同,即如圖10所示。
圖10 逐點卷積的計算Fig.10 Calculation of pointwise convolution
深度可分卷積的基本假設(shè),是卷積神經(jīng)網(wǎng)絡(luò)中特征圖的空間維和通道(深度)維是可以解耦(decouple)的。標(biāo)準(zhǔn)的卷積計算使用權(quán)重矩陣實現(xiàn)了空間維和通道維特征的聯(lián)合映射(joint mapping),這樣做的代價則是提升了計算復(fù)雜度、增加了內(nèi)存開銷,并引入了大量的權(quán)重系數(shù)計算。理論上,深度可分卷積通過對空間維和通道維分別進(jìn)行映射、并將結(jié)果進(jìn)行組合,在基本保留卷積核的表征學(xué)習(xí)(representation learning)能力的同時減少了權(quán)重系數(shù)的個數(shù)??紤]輸入和輸出通道數(shù)的差異,深度可分卷積的權(quán)重數(shù)約為標(biāo)準(zhǔn)卷積權(quán)重數(shù)的10%~25%。使用深度可分卷積搭建的一些卷積神經(jīng)網(wǎng)絡(luò)、例如Xception,在ImageNet數(shù)據(jù)集的圖像識別任務(wù)中的表現(xiàn)要優(yōu)于隱含層權(quán)重相同、但使用標(biāo)準(zhǔn)卷積和Inception模塊的Inception v3,因此研究認(rèn)為深度可分卷積提升了卷積核參數(shù)的使用效率。
Mobilenet V1是一種流水線的結(jié)構(gòu),是由深度可分離卷積構(gòu)建的十分輕量的神經(jīng)網(wǎng)絡(luò),往往會應(yīng)用在移動的設(shè)備端上,因此可以通過超參數(shù)對網(wǎng)絡(luò)模型大小做出限制,使得開發(fā)人員能夠更好地使用模型。
Mobilenet中的網(wǎng)絡(luò)結(jié)構(gòu),則如前面所提到過的卷積層結(jié)構(gòu)中除了第一層為標(biāo)準(zhǔn)卷積層結(jié)構(gòu)外,其他層都是深度可分離卷積結(jié)構(gòu)(Conv dw+Conv/s1),卷積結(jié)構(gòu)的后一層連接了一個7*7的平均池化層,此后再通過一個全連接層,最末端在利用激活函數(shù)運算后是將全連接層的輸出歸一化到0~1中的任意一個概率值,根據(jù)概率值的高低可以得到圖像的分類情況。對于Mobile的超參數(shù),這里可做剖析詳述如下。
(1)為了構(gòu)造結(jié)構(gòu)更小、且計算量更小的模型寬度因子(Width Multiplier),對于深度可分離卷積層,輸入的通道數(shù)乘上一個寬度因子,變?yōu)?,輸出通道?shù)變?yōu)椋渲小剩?,1]。此時深度可分離卷積的參數(shù)量為:****(1****),計 算 量 變 為********(1********),所以參數(shù)量和計算量差不多都變?yōu)樵瓉淼?倍。
(2)為了減少計算量,引入了第二個參數(shù),稱為分辨率因子。其作用是在每層特征圖的大小乘以一定的比例分辨率因子(Resolution Multiplier),改變了輸入層的分辨率,所以深度可分離卷積的參數(shù)量不變,但計算量為*ρ*ρ***ρ*ρ**(*******),即計算量變?yōu)樵瓉淼?倍。
FaceNet是可以對人臉識別、驗證、聚類等所有人臉問題方法進(jìn)行系統(tǒng)解決的一個技術(shù)框架,如圖11所示。即能夠把全部特征都放在同一個人臉特征空間里,研究人員只要致力于如何將人臉更好地映射到特征空間中即可。文中對此擬展開闡釋分述如下。
圖11 FaceNet結(jié)構(gòu)框架Fig.11 FaceNet structural framework
(1)直接學(xué)習(xí)圖像到歐式空間上點的映射,2張圖像對應(yīng)特征的歐式空間上的點的距離直接表示著2張圖像是否相似。
(2)總 體 網(wǎng) 絡(luò) 結(jié) 構(gòu):基 于GoogLeNet或Zeiler&Fergus模型、CNN+Triplet和loss方法,直接學(xué)習(xí)從人臉圖像到緊湊的歐幾里德空間的映射,提取的嵌入特征有助于實現(xiàn)人臉識別、驗證和聚類分析等項目任務(wù),訓(xùn)練的損失函數(shù)能夠直接針對實際誤差,端到端訓(xùn)練能得到更高的精度。
(3)嵌入:128維特征,可通過直接使用網(wǎng)絡(luò)訓(xùn)練優(yōu)化嵌入本身。而不是像以前中間的瓶頸層的表示,是間接的分類網(wǎng)絡(luò)。
(4):將正對與負(fù)對分開一個距離余量。
(5):半困難三元組樣本選擇方式。
(6)最小的對齊:面部周圍緊密的裁剪。近期研究還嘗試進(jìn)行了相似性變換對齊,并沒有注意到這一項設(shè)計實際上可以用來進(jìn)行小幅性能提升,但卻也會帶來復(fù)雜性的額外略增。而其他模型則需要復(fù)雜的3D對齊。
(7)人臉相似性驗證:用來對2個人臉嵌入空間特征點之間的平方距離進(jìn)行閾值比較,這2個嵌入特征空間點中人臉的平方距離值直接對應(yīng)著人臉的相似性,同一人的2個人臉圖像僅具有較小的距離值并且與不同人之間的一個人臉圖像間具有相當(dāng)大的距離。
(8)在LFW上有著99.63%的正確率,YouTube Faces上有95.12%的正確率。
本次實驗中,使用的開發(fā)環(huán)境是:硬件選用了RAM 16 G、CPU Intel(R)Core(TM)i7-1260P@2.1 GHz 4.7 GHZ,操作系統(tǒng)選用了Windows10,開發(fā)測試 軟 件 選 用 了pytorch_GPU+python3.8、pychram、Anaconda。
目前,互聯(lián)網(wǎng)上已有不少采集完備的數(shù)據(jù)集,可以下載并進(jìn)行數(shù)據(jù)清洗和標(biāo)注,以此來獲得本文研究所需的數(shù)據(jù)集。本次研究中使用的數(shù)據(jù)集為CASIA-WebFace,該數(shù)據(jù)集源主要來自于IMBb網(wǎng)站,包含1 w個人的近500 w張圖片。與此同時,又通過相似度聚類方法濾掉了其中的一部分噪聲。CAISA-WebFace的數(shù)據(jù)集源和IMDb-Face幾乎是完全是一樣的,唯一的不同點就是在數(shù)據(jù)集清洗后,CAISA-WebFace的圖片會相對少一些,而且噪聲也相對較少,故適合用來作為訓(xùn)練的數(shù)據(jù)。具體步驟可做闡釋如下。
(1)數(shù)據(jù)標(biāo)注。通過以下代碼,生成對應(yīng)的文件夾下的圖片標(biāo)簽,并寫入cls_train.txt文件。
(2)構(gòu) 建 網(wǎng) 絡(luò) 并 訓(xùn) 練。通 過 構(gòu) 建 一 個Mobilenets來進(jìn)行模型訓(xùn)練,這可能是基于一種超輕量的深度級卷積神經(jīng)網(wǎng)絡(luò),該網(wǎng)絡(luò)核心部分為深度級可分離的卷積。使用的算法為FaceNet人臉特征識別算法,這個識別算法就是通過抽取人臉圖像上的人臉某一層的特征,學(xué)習(xí)到一個從人臉圖像到歐式空間圖像的編碼識別方法,再基于這個圖像編碼來做人臉特征識別。下面將給出具體的處理流程。
①構(gòu)建第一個網(wǎng)絡(luò)結(jié)構(gòu)。研究中用到的代碼如下:
該網(wǎng)絡(luò)結(jié)構(gòu)可用來加速網(wǎng)絡(luò)模型的推理速度,通過堆疊網(wǎng)絡(luò),第一層為2卷積層、第二層為層、第三層為6激活層,分析可知2和都是線性運算,所以該網(wǎng)絡(luò)結(jié)構(gòu)融合后就減少了推理時間。
②構(gòu)建Dw深度可分離卷積網(wǎng)絡(luò)。研究中用到的代碼如下:
這個網(wǎng)絡(luò)的構(gòu)建就是深度可分離卷積層的構(gòu)建方法,用參數(shù)來選擇。
③構(gòu)建MobilenetV1模型。研究中用到的代碼如下:
通過第一個_層提取特征,此后用的都是_深度卷積。
④用主干特征提取網(wǎng)絡(luò)獲得特征層。研究中用到的代碼如下:
經(jīng)過一個平均池化、一個、再經(jīng)過一個后,又經(jīng)過全連接,最后標(biāo)準(zhǔn)化輸出一個128的特征向量。
⑤的標(biāo)準(zhǔn)化。在進(jìn)行標(biāo)準(zhǔn)化運算前一般都會計算范數(shù),對特征向量中的每個元素絕對值取平方和后、再去求其開方,的標(biāo)準(zhǔn)化過程就是先計算出每個元素的范數(shù)。此時用到的代碼為:
結(jié)合使用了和作為一種總體上的,單一使用的可能會導(dǎo)致人臉網(wǎng)絡(luò)的收斂困難,的則可同時用于2種不同類型人臉特征向量間在歐幾里得的空間距離范圍上的擴(kuò)張,同一個人的2個人臉圖像的特征向量間的距離由歐幾里得縮小。用于人臉分類,加速了的收斂。接下來,可開始進(jìn)行模型訓(xùn)練,如圖12所示。
圖12 進(jìn)行模型訓(xùn)練Fig.12 Conducting model training
選取2張人臉圖像,用訓(xùn)練好的模型來對其進(jìn)行驗證,如圖13所示。FaceNet的閾值設(shè)置為1.1。
圖13 進(jìn)行圖像驗證Fig.13 Performing images verification
通過FaceNet預(yù)測顯示為0.698,比預(yù)測前設(shè)置的閾值小,所以是同一張人臉,如圖14所示。
圖14 相同人臉預(yù)測Fig.14 Same face prediction
再選取2張人臉圖像,通過FaceNet預(yù)測顯示為1.337,超出預(yù)測前設(shè)置的閾值,所以是不同的人臉,如圖15所示。
圖15 不同人臉預(yù)測Fig.15 Different face prediction
本文對已有的CASIA-WebFace數(shù)據(jù)集進(jìn)行數(shù)據(jù)清洗和標(biāo)注,以獲得所需的訓(xùn)練數(shù)據(jù),而后通過構(gòu)建一個Mobilenets,來進(jìn)行模型訓(xùn)練,并采用CNN算法,通過FaceNet預(yù)測顯示的值與事先設(shè)置的閾值對比情況,驗證人臉圖像特征,從而達(dá)到人臉識別的目的。仿真結(jié)果表明,該算法在人臉識別方面取得了較好的效果。