郝林倩
(福建船政交通職業學院 信息與智慧交通學院,福州 350007)
人臉識別(Face Recognition),是指對人臉圖像進行辨識提取,通過分析比較而獲得的人臉視覺特征信息數據,并以此來對個人身份特征進行比對或鑒別的計算機技術。分析可知,該技術屬于生物學特性識別算法,迄今為止也已然成為現階段國內外學者的研究熱點,即能夠根據人們對自然界中某一種特定生命體(一般特指人)的自身所存在的生物學特性,來實現特征識別以區分特定生物體的個體。
卷積神經網絡(Convolutional Neural Networks,CNN)算法是目前人臉圖像識別訓練中具有可觀應用前景的一種深度學習方法。深度學習方法的主要優勢就在于能夠分析訓練大量的人臉數據,并能夠快速學到人臉訓練中的數據所表現出的人臉特征變化,進而對其他未知情況做出準確可靠的人臉表征識別。這種訓練方法通常不需要預先設計出對不同身體類型的類域內的差異因素(比如光照、姿勢、面部表情、年齡等)所穩健具備的各種特定運動特征,而是完全可以通過從訓練結果數據中學習來得到。
主成分分析方法(Principal Component Analysis,PCA),是一種使用最廣泛的數據降維算法。PCA的主要思想是將維特征映射到維上,這個維是全新的正交特征、也被稱為主成分,是在原有維特征的基礎上重新構造出來的維特征。將2個數據軸各由某一個原本已經給定坐標的坐標系軸中轉置至多個新坐標的坐標系軸中,第一個坐標的選擇是原始數據中方差最大的,第二個坐標軸選擇的是和第一個坐標軸正交、且具有最大方差的方向,重復該過程,重復的次數則為原始數據的特征數。因此大部分方差都在前幾個新坐標中,把后面的坐標忽略,如此就完成了數據降維。
PCA在本質上主要是要將方差為最大的正交方向數據作為主要的統計特征,并且要在其各個主要正交方向上將數據寫“離相關”,即盡量讓數據彼此間在其不同主要正交方向數據上完全沒有任何相關性,原理示意如圖1所示。

圖1 PCA算法原理Fig.1 Principle of PCA algorithm
線性判別分析(Linear Discriminant Analysis,LDA)算法的思路與PCA類似,都是對圖像的整體分析。不同之處在于,PCA是通過確定一組正交基對數據進行降維,而LDA是通過確定一組投影向量使得數據集不同類的數據投影的差別較大、同一類的數據經過投影更加聚合。在統計形式處理上,PCA方法與傳統LDA算法的2個最大顯著區別即在于,PCA方法中最終能求得結果的特征向量通常是完全正交的,而在LDA方法中求得的結果特征向量就不可能一定全部正交。
利用LDA尋找一個投影向量,使得不同類型的數據點在投影向量所在直線上投影能較好地做出區分,如圖2所示。

圖2 LDA算法向量投影Fig.2 Vector projection of LDA algorithm
局部二進制模式直方圖(Local Binary Pattern Histograms,LBPH)人臉識別方法中的技術核心之一就是LBP算子。LBP算子主要是指可以用來分析計算與描述圖像局部紋理特征信息關系的一種算子,其最終所能反映到的抽象內容則往往僅僅是描述圖像內每個紋理特征像素間與該圖像及其周圍所有紋理像素間信息的關系。
原始的LBP算子定義為在3*3的窗口內,以窗口中心像素為閾值,將相鄰的8個像素的灰度值與其進行比較,若周圍像素值大于或等于中心像素值,則該像素點的位置被標記為1,否則為0。這樣,3*3鄰域內的8個點經比較可產生8位二進制數(通常轉換為十進制數、即LBP碼,共256種),就得到該窗口中心像素點的LBP值,并用這個值來反映該區域的紋理特征,也就是圖像區域圖像中包含的所有圖像紋理信息。這里給出的LBP算子計算方式如圖3所示。

圖3 LBP算子計算方式Fig.3 LBP Operator calculation method
卷積神經網絡(CNN)的優點有:能夠將大圖片數據量下的圖片有效降維成更小圖片數據量;可有效保留圖片特征,符合圖片處理的原則。
多層網絡結構及組成用到了神經網絡,如圖4所示。由圖4可知,這是一個常見的多層卷積網絡,首先是輸入層、然后是隱含層,隱藏層中包括了:卷積層、池化層、全連接層,最后是輸出層。對此擬做研究論述如下。

圖4 CNN的網絡結構Fig.4 Network structure of CNN
卷積網絡模型中的圖像輸入層通常都可以做到只需接收到一組二維對象,卷積網絡模型上的一些圖像的輸入層特征也大多只要預先進行一次圖像輸入標準化設計和處理即可,例如輸入層的輸入數據定義為像素,將分布到每個[0,255]像素區間上的所有原始圖像的每個像素值都必須歸一化地緊致分布在同一個[0,1]像素的區間。輸入特征的標準化也更有利于顯著提升在卷積網絡學習中的學習對象的學習效率水平和學習表現。
卷積網絡模型中的隱藏層中一般也包含有卷積層、池化層和全連接層等這3類網絡最廣泛常見層的構筑,相較于其他任何類型網絡,卷積層和池化層結構多是為卷積神經網絡模型中所特有。
卷積圖層法就是用某一個卷積核函數來遍歷出任意的一張圖片,而對于卷積圖層的一種基本的計算圖的輸出過程就是要用函數輸入每一張圖片信息,并把與其中的卷積核函數所對應出的所有元素信息進行相乘處理后,再做求和,這樣經過計算輸出后的結果就得到了一張較新的計算圖(feature map),因此選擇一個合適的卷積核,可以突顯不同的圖像特征。該過程示意如圖5所示。

圖5 利用卷積核提取特征圖Fig.5 Extracting feature maps using convolution kernels
在處理圖像時,可以選擇多個卷積核,生成不同的圖像。這些不同圖像可以理解為不同通道,對此可稱為多核卷積。
同卷積層結構一樣,池化層就是對每次計算輸入元素的數據都通過一個池化的窗口元素來完成計算輸入元素或輸出,如圖6所示。不同于一般卷積核層結構的特點是,卷積核層只計算輸入元素與卷積核層的互相關性,池化核層可直接完成關于一個池化窗口元素輸出的最大值或最小平均值的計算。

圖6 池化層計算方法Fig.6 Pooling layer calculation method
全連接層中的所有其他神經元都會與上一層中的所有其他神經元進行全連接,具體如圖7所示。同時為了提高網絡的整體性能,全連接層中的所有其他神經元通常只會被一個激勵函數激活。

圖7 全連接網絡層的模型Fig.7 Model of fully connected network layer
卷積神經網絡圖中使用的圖像分類輸出層中的圖像上層一般都是有一個全連接的輸出層,對于圖像上的分類的標簽問題,輸出層本身也可以考慮通過使用輸出層本身用到的邏輯函數或歸一化指數函數(),而后再輸出圖像的分類上的標簽,如圖8所示。

圖8 Softmax激活函數Fig.8 Softmax activation function
卷積神經網絡圖層會在每一個隱含層的神經元中分別提取出這些圖像表面上的某些局部特征,并再將其各自映射到下一個平面,技術上是通過使用激勵函數來使得所有這些局部特征中的每個映射點都是具有位移性質的完全不變性。每一個神經元都要與局部神經感受野相聯系、并建立連接。這樣的特征提取過程使得網絡對輸入的樣本有較強的容忍能力,對圖像處理也具有非常好的魯棒性。
深 度 可 分 離 卷 積 (Depthwise separable convolution)的過程可分為2步。分別是:逐通道卷積(Depthwise Convolution,Dw),逐點卷積(Pointwise Convolution,Pw)。對此可做分析概述如下。
Dw中的一個卷積核負責一個輸出通道,一個輸入通道也只會由其中的一個卷積核來做卷積,由此得到的計算圖(feature map)輸出通道需要與輸入通道完全一致,即如圖9所示。

圖9 逐通道卷積的計算Fig.9 Calculation of depthwise convolution
Pw與常規卷積d方法頗為相似,所要求的卷積核面積一般為11,為最上一層的下一層的卷積通道,其中的卷積核數目與計算圖(feature map)的數目相同,即如圖10所示。

圖10 逐點卷積的計算Fig.10 Calculation of pointwise convolution
深度可分卷積的基本假設,是卷積神經網絡中特征圖的空間維和通道(深度)維是可以解耦(decouple)的。標準的卷積計算使用權重矩陣實現了空間維和通道維特征的聯合映射(joint mapping),這樣做的代價則是提升了計算復雜度、增加了內存開銷,并引入了大量的權重系數計算。理論上,深度可分卷積通過對空間維和通道維分別進行映射、并將結果進行組合,在基本保留卷積核的表征學習(representation learning)能力的同時減少了權重系數的個數。考慮輸入和輸出通道數的差異,深度可分卷積的權重數約為標準卷積權重數的10%~25%。使用深度可分卷積搭建的一些卷積神經網絡、例如Xception,在ImageNet數據集的圖像識別任務中的表現要優于隱含層權重相同、但使用標準卷積和Inception模塊的Inception v3,因此研究認為深度可分卷積提升了卷積核參數的使用效率。
Mobilenet V1是一種流水線的結構,是由深度可分離卷積構建的十分輕量的神經網絡,往往會應用在移動的設備端上,因此可以通過超參數對網絡模型大小做出限制,使得開發人員能夠更好地使用模型。
Mobilenet中的網絡結構,則如前面所提到過的卷積層結構中除了第一層為標準卷積層結構外,其他層都是深度可分離卷積結構(Conv dw+Conv/s1),卷積結構的后一層連接了一個7*7的平均池化層,此后再通過一個全連接層,最末端在利用激活函數運算后是將全連接層的輸出歸一化到0~1中的任意一個概率值,根據概率值的高低可以得到圖像的分類情況。對于Mobile的超參數,這里可做剖析詳述如下。
(1)為了構造結構更小、且計算量更小的模型寬度因子(Width Multiplier),對于深度可分離卷積層,輸入的通道數乘上一個寬度因子,變為,輸出通道數變為,其中∈(0,1]。此時深度可分離卷積的參數量為:****(1****),計 算 量 變 為********(1********),所以參數量和計算量差不多都變為原來的*倍。
(2)為了減少計算量,引入了第二個參數,稱為分辨率因子。其作用是在每層特征圖的大小乘以一定的比例分辨率因子(Resolution Multiplier),改變了輸入層的分辨率,所以深度可分離卷積的參數量不變,但計算量為*ρ*ρ***ρ*ρ**(*******),即計算量變為原來的*倍。
FaceNet是可以對人臉識別、驗證、聚類等所有人臉問題方法進行系統解決的一個技術框架,如圖11所示。即能夠把全部特征都放在同一個人臉特征空間里,研究人員只要致力于如何將人臉更好地映射到特征空間中即可。文中對此擬展開闡釋分述如下。

圖11 FaceNet結構框架Fig.11 FaceNet structural framework
(1)直接學習圖像到歐式空間上點的映射,2張圖像對應特征的歐式空間上的點的距離直接表示著2張圖像是否相似。
(2)總 體 網 絡 結 構:基 于GoogLeNet或Zeiler&Fergus模型、CNN+Triplet和loss方法,直接學習從人臉圖像到緊湊的歐幾里德空間的映射,提取的嵌入特征有助于實現人臉識別、驗證和聚類分析等項目任務,訓練的損失函數能夠直接針對實際誤差,端到端訓練能得到更高的精度。
(3)嵌入:128維特征,可通過直接使用網絡訓練優化嵌入本身。而不是像以前中間的瓶頸層的表示,是間接的分類網絡。
(4):將正對與負對分開一個距離余量。
(5):半困難三元組樣本選擇方式。
(6)最小的對齊:面部周圍緊密的裁剪。近期研究還嘗試進行了相似性變換對齊,并沒有注意到這一項設計實際上可以用來進行小幅性能提升,但卻也會帶來復雜性的額外略增。而其他模型則需要復雜的3D對齊。
(7)人臉相似性驗證:用來對2個人臉嵌入空間特征點之間的平方距離進行閾值比較,這2個嵌入特征空間點中人臉的平方距離值直接對應著人臉的相似性,同一人的2個人臉圖像僅具有較小的距離值并且與不同人之間的一個人臉圖像間具有相當大的距離。
(8)在LFW上有著99.63%的正確率,YouTube Faces上有95.12%的正確率。
本次實驗中,使用的開發環境是:硬件選用了RAM 16 G、CPU Intel(R)Core(TM)i7-1260P@2.1 GHz 4.7 GHZ,操作系統選用了Windows10,開發測試 軟 件 選 用 了pytorch_GPU+python3.8、pychram、Anaconda。
目前,互聯網上已有不少采集完備的數據集,可以下載并進行數據清洗和標注,以此來獲得本文研究所需的數據集。本次研究中使用的數據集為CASIA-WebFace,該數據集源主要來自于IMBb網站,包含1 w個人的近500 w張圖片。與此同時,又通過相似度聚類方法濾掉了其中的一部分噪聲。CAISA-WebFace的數據集源和IMDb-Face幾乎是完全是一樣的,唯一的不同點就是在數據集清洗后,CAISA-WebFace的圖片會相對少一些,而且噪聲也相對較少,故適合用來作為訓練的數據。具體步驟可做闡釋如下。
(1)數據標注。通過以下代碼,生成對應的文件夾下的圖片標簽,并寫入cls_train.txt文件。


(2)構 建 網 絡 并 訓 練。通 過 構 建 一 個Mobilenets來進行模型訓練,這可能是基于一種超輕量的深度級卷積神經網絡,該網絡核心部分為深度級可分離的卷積。使用的算法為FaceNet人臉特征識別算法,這個識別算法就是通過抽取人臉圖像上的人臉某一層的特征,學習到一個從人臉圖像到歐式空間圖像的編碼識別方法,再基于這個圖像編碼來做人臉特征識別。下面將給出具體的處理流程。
①構建第一個網絡結構。研究中用到的代碼如下:

該網絡結構可用來加速網絡模型的推理速度,通過堆疊網絡,第一層為2卷積層、第二層為層、第三層為6激活層,分析可知2和都是線性運算,所以該網絡結構融合后就減少了推理時間。
②構建Dw深度可分離卷積網絡。研究中用到的代碼如下:

這個網絡的構建就是深度可分離卷積層的構建方法,用參數來選擇。
③構建MobilenetV1模型。研究中用到的代碼如下:


通過第一個_層提取特征,此后用的都是_深度卷積。
④用主干特征提取網絡獲得特征層。研究中用到的代碼如下:


經過一個平均池化、一個、再經過一個后,又經過全連接,最后標準化輸出一個128的特征向量。
⑤的標準化。在進行標準化運算前一般都會計算范數,對特征向量中的每個元素絕對值取平方和后、再去求其開方,的標準化過程就是先計算出每個元素的范數。此時用到的代碼為:

結合使用了和作為一種總體上的,單一使用的可能會導致人臉網絡的收斂困難,的則可同時用于2種不同類型人臉特征向量間在歐幾里得的空間距離范圍上的擴張,同一個人的2個人臉圖像的特征向量間的距離由歐幾里得縮小。用于人臉分類,加速了的收斂。接下來,可開始進行模型訓練,如圖12所示。

圖12 進行模型訓練Fig.12 Conducting model training
選取2張人臉圖像,用訓練好的模型來對其進行驗證,如圖13所示。FaceNet的閾值設置為1.1。

圖13 進行圖像驗證Fig.13 Performing images verification
通過FaceNet預測顯示為0.698,比預測前設置的閾值小,所以是同一張人臉,如圖14所示。

圖14 相同人臉預測Fig.14 Same face prediction
再選取2張人臉圖像,通過FaceNet預測顯示為1.337,超出預測前設置的閾值,所以是不同的人臉,如圖15所示。

圖15 不同人臉預測Fig.15 Different face prediction
本文對已有的CASIA-WebFace數據集進行數據清洗和標注,以獲得所需的訓練數據,而后通過構建一個Mobilenets,來進行模型訓練,并采用CNN算法,通過FaceNet預測顯示的值與事先設置的閾值對比情況,驗證人臉圖像特征,從而達到人臉識別的目的。仿真結果表明,該算法在人臉識別方面取得了較好的效果。