廣東工業(yè)大學自動化學院 陳奕豪
在現(xiàn)代生活中,人臉識別技術(shù)被廣泛的應用,主要是因為傳統(tǒng)的鑒別工具如鑰匙、令牌等不易攜帶,容易丟失,和安全性低,而人臉特征具有唯一性,不可偽造性和安全性等特點。但由于人臉環(huán)境的不確定因素給人臉識別增加了難度。將深度學習應用于人臉識別中,通過卷積神經(jīng)網(wǎng)絡(luò)提取人臉的特征更能表達原本人臉信息,總而進一步提高人臉識別的效率。
本文圍繞卷積神經(jīng)網(wǎng)絡(luò)中的人臉識別,結(jié)合人臉圖片.和識別對卷積神經(jīng)網(wǎng)絡(luò)進行優(yōu)化,提高人臉的識別率
卷積神經(jīng)網(wǎng)絡(luò)是由數(shù)據(jù)層(Inpput layer)、卷積計算層(CONV layer)、ReLU激勵層(ReLU layer)、池化層(Pooling layer)、全連接層(FC layer)穿插不斷疊加組成。一般的CNN結(jié)構(gòu)yi次為:INPUTàCONVàRELUàPOOLàFCàRELUàFC
人臉檢測是人臉識別的第一步工作,在圖像中尋找人臉,判斷圖像中是否有人臉存在。人臉檢測網(wǎng)絡(luò)的本質(zhì)是一個二分類網(wǎng)絡(luò)。卷積神經(jīng)網(wǎng)絡(luò)由多層神經(jīng)網(wǎng)絡(luò)組成,每一層由多個平面。
卷積神經(jīng)網(wǎng)絡(luò)按照功能可分為數(shù)據(jù)輸入模塊、特征提取模塊、網(wǎng)絡(luò)優(yōu)化模分類識別模塊。數(shù)據(jù)輸入前要進行標簽化分類和計算均值。然后將樣本數(shù)據(jù)和標簽分類文件輸入網(wǎng)絡(luò)數(shù)據(jù)模塊進行預處理。
Caffe是伯克利大學開發(fā)的一個開源的深度學習網(wǎng)絡(luò)框架,底層由C++語言實現(xiàn),內(nèi)置由Python和Matlab接口,可供給開發(fā)人員使用Python和matlab語言進行編寫以深度學習為核心算法的應用。
Caffe有三大模塊Blobs、Layers和Nets。其中Blobs用來對數(shù)據(jù)進行存儲、數(shù)據(jù)交互和處理,通過Blobs,統(tǒng)一制定內(nèi)存接口,它的本質(zhì)結(jié)構(gòu)是一個N維度向量,用來存儲數(shù)據(jù)信息,。Layers是神經(jīng)網(wǎng)絡(luò)的核心,定義了許多層級結(jié)構(gòu), 包括卷積,池化,損失等層結(jié)構(gòu)哦,利用這些層結(jié)構(gòu)可以實現(xiàn)神經(jīng)網(wǎng)絡(luò)模型。Layer是將下層數(shù)據(jù)輸出作為數(shù)額u,進而通過內(nèi)部運算輸出。Nets是一系列的Layers的集合,并且這些層結(jié)構(gòu)通過連接形成一個網(wǎng)圖,Nets定義了輸入、輸出、網(wǎng)絡(luò)各層,并將各層連接成一個圖。
對于人臉識別的問題,本文考慮了其復雜性,需要性能好的網(wǎng)絡(luò)來支撐和實現(xiàn)。Alexnet網(wǎng)絡(luò)在圖像識別中有良好的識別效率,并且人臉識別引擎Seetaface也利用Alexnet取得和高識別率。
深度學習中,對于層數(shù)的選擇和具體層的提取到特征信息學術(shù)界尚且沒有明確的 定論。Alexnet、Goolgenet等CNN深度學習框架層數(shù)的設(shè)計很大程度上都是通過反復實驗 的經(jīng)驗值。神經(jīng)網(wǎng)絡(luò)中全連接層的設(shè)計思想?yún)⒖紓鹘y(tǒng)的識別模式是用于提取特征停止的“分 類模塊“,但用于圖像識別上全連接層的設(shè)計會使得值過于密集,造成模型過擬合和訓練困 難。近年的研究表明全連接并不是必須的 ,Goolgenet和ResNet沒有與Alexnet一樣使用 兩層全連接層,依然性能很好,但是他們良好的性能以特大深度和寬度為代價,網(wǎng)絡(luò)規(guī)模龐大計算復雜使得常規(guī)的硬件根本無法支撐。
本文人臉識別是基于Caffe實現(xiàn)的。首先,在數(shù)據(jù)輸入網(wǎng)絡(luò)之前需要對樣本數(shù)據(jù)轉(zhuǎn)換 (大小、格式)和根據(jù)樣本數(shù)據(jù)計算得到均值文件。本文圖片大小統(tǒng)一為256*256像素以及數(shù)據(jù)格式為Imdb,Caffe平臺提供了Imdb數(shù)據(jù)處理和轉(zhuǎn)換convert_imageset接口,關(guān)鍵代碼如下:
1.*/caffe/.build_release/tools/convert_imageset#接口入口函數(shù)
2.--resize_height=$RESIZE_HEIGHT#統(tǒng)一圖片的高
3.--resize_width=$RESIZE_WIDTH#統(tǒng)一圖片的寬
4.--shuf fle#數(shù)據(jù) 次序 打亂
5. $TRAIN_DATA_ROOT#圖片樣本文件
6. $IMAGE_LIST_ROOT/face.txt#圖片排序文件
7.$ROOT_LMDB/train#轉(zhuǎn)換后的文件
面部特征點定位(人臉對齊)在人臉識別的分析任務發(fā)揮著十分重要的作用。但在檢測 到的人臉圖片中,有人臉扭轉(zhuǎn)和背景信息等因素的影響存在,人臉對齊可以準確定位到需要人臉,有助于網(wǎng)絡(luò)的識別。眼睛是人臉十分重要且明顯的特征之一,它在人臉中的位置比較 固定,所以本文將通過眼睛定位來實現(xiàn)人臉的對齊。本文中利用matlab仿真具體算法流程如下:
(1)讀入imread()人臉檢測后切分出來的人臉圖片,并轉(zhuǎn)換圖片大小imresize()為100*100像素。
(2)手工在圖像中標定daspect()人臉眼睛的坐標inpt。
(3)根據(jù)(2)中兩眼坐標,利用函數(shù)Alignment_2points()動態(tài)規(guī)劃人臉大小xSize
和重新調(diào)整兩眼坐標dest。
(4)根據(jù)(2)和(3)中的參數(shù),定義線性投影轉(zhuǎn)換tran=cp2tform(inputpt,basept,’linear conformal’),最后根據(jù)tran變換和得到參數(shù)利用函數(shù)Imtransform得到對齊后的人臉圖片
其中關(guān)鍵算法函數(shù)Aligment_2points()核心代碼實現(xiàn)如下:
Aligment_2points(Img,input)
輸入:輸入圖 片,人臉眼睛的坐標inpt
輸出:xSize動態(tài)規(guī)劃人臉大小,dest重新調(diào)整兩眼坐標
BEGIN
#根據(jù)輸入坐標求兩眼的距離inter_ocular
Inter_ocular = norm([pts(1:2)-pts(3:4)])
#不改變分辨率,收集規(guī)整化人臉動態(tài)大小
xSize = [130*(inter_ocular/70),150*(inter_ocular/70)]
#根據(jù)兩眼的距離,重新規(guī)劃兩眼的坐標dest1和dest2
dest1 = [30*(inter_ocular/70),45*(inter_ocular/70)]
dest2 = [100*(inter_ocular/70),45*(inter_ocular/70)]
本文利用Caffe的matlab接口來對人臉識別的具體實現(xiàn)。根據(jù)上面改進后的Alexnet網(wǎng) 絡(luò)訓練得到參數(shù)模型caffemodel和網(wǎng)絡(luò)定義文件deploy.prototxt生成net網(wǎng)絡(luò)。人臉識別 的實現(xiàn),除了要利用到Alexnet網(wǎng)絡(luò)之外,還有考慮到實際因素,比如彩色圖像作為輸入和上面設(shè)計的網(wǎng)絡(luò)不符合、輸入人臉圖片信息不全面、圖片有旋轉(zhuǎn)等,針對這些問題,識別過程如下:
(1)輸入圖像灰度化處理
本文中設(shè)計的CNN是針對灰度圖像的人臉識別,但上章檢測到的人臉圖片是彩色圖片,并沒有經(jīng)過灰度處理,在該網(wǎng)絡(luò)人臉識別之前利用matlab中rgb2gray()函數(shù)對圖像灰度化處理 。
(2)輸入圖像的采樣
在識別數(shù)據(jù)庫中,攝像頭采集的圖片可能人臉的信息不全,在輸入數(shù)據(jù)通過CNN與原 識別數(shù)據(jù)庫做信息識別時,可能會因為人臉圖片這部分丟失的信息導致識別失敗,輸入圖片的角度問題,比如圖片旋轉(zhuǎn),也會影響識別效果。針對這些問題,本文對每張圖片剪切釆樣10個樣本。假設(shè)輸入識別圖片大小M*M,網(wǎng)絡(luò)要求的輸入圖片大小N*N,算法如下:
1)計算裁剪尺度indices = [M - N]+1
2)根據(jù)indices值,通過循環(huán)分別 取[1,1]、[1,M-N+1]、[MN+1,1]、[M-N+1,M-N+1] 為圖像剪切的起點坐標,從輸入圖像中截取得到N*N大小的4幅樣本圖像和另外4幅鏡像樣本圖像。
3)取得[ ( M - N )/2 + 1]為剪切起點坐標,取得正面與其鏡像的最后兩幅圖像。
4)最后將得到10個樣本圖 片加入待識別數(shù)據(jù)集。
將輸入的圖片進行人臉定位和灰度化處理,然后將輸入的圖片采樣切分成10張符合Alexnet網(wǎng)絡(luò)識別尺寸的圖片大小,最后利用生成好的Alexnet網(wǎng)絡(luò)對該輸入圖片進行識別。
本章利用改進Alexnet網(wǎng)絡(luò)框架作為人臉識別網(wǎng)絡(luò)。針對Alexnet模型結(jié)構(gòu)所含的參數(shù)量大、網(wǎng)絡(luò)容易過擬合和識別率下降的問題,對網(wǎng)絡(luò)結(jié)構(gòu)改進方案。由于卷積神經(jīng)網(wǎng)絡(luò)的全連接層占用該網(wǎng)絡(luò)的大量參數(shù),并且全連接層并不是必須的,因此去掉原網(wǎng)絡(luò)一個全連接層,最后,利用Caffe對人臉識別進行實現(xiàn)。
[1]魏正.基于Caffe平臺深度學習的人臉識別研究與實現(xiàn)[D].西安電子科技大學,2015.
[2]丁春輝.基于深度學習的暴力檢測及人臉識別方法研究[D].中國科學技術(shù)大學,2017.
[3]陸志澄.圖像特征提取在人臉識別中的應用[D].中國礦業(yè)大學,2017.
[4]黃泉龍.基于PCA的人臉識別研究[D]西安電子科技大學,2012.
[5]宋新慧.基于深度學習的人臉表情識別算法研究[D].浙江大學,2017.