朱學(xué)玲 陳浩旗
(安徽新華學(xué)院大數(shù)據(jù)與人工智能學(xué)院,安徽 合肥 230088)
人臉識(shí)別技術(shù)的發(fā)展始于20 世紀(jì)60 年代,科研人員經(jīng)過60 多年的不斷探索和研究,尤其是近年來(lái)人工智能的快速發(fā)展,人臉識(shí)別已成為計(jì)算機(jī)視覺、圖像處理、模式識(shí)別等領(lǐng)域的研究熱點(diǎn)之一,特別是在視頻監(jiān)控、人機(jī)交互界面等方面。
人臉識(shí)別的方法有很多種,有幾何特征、特征提取、神經(jīng)網(wǎng)絡(luò)、彈性匹配等,本文采用了最基礎(chǔ)的卷積神經(jīng)網(wǎng)絡(luò)(CNN——Convolutional Neural Networks)來(lái)進(jìn)行特征提取,并結(jié)合OpenCV 進(jìn)行前期檢測(cè)和后期的識(shí)別,總體實(shí)現(xiàn)流程如圖1 所示。下面將詳細(xì)介紹檢測(cè)、特征提取和識(shí)別部分。
圖1 流程
人臉數(shù)據(jù)的獲取包括人臉圖像的采集和檢測(cè)。首先通過電腦攝像頭進(jìn)行人臉檢測(cè)和錄入,本人采用了OpenCV 技術(shù),用了OpenCV 的Cascade Classifier 類中的人臉檢測(cè)器haarcascade_frontalface_alt2.xml,生成原始數(shù)據(jù)集和標(biāo)簽。
圖像的預(yù)處理主要是調(diào)整圖片大小,使得圖片都滿足Inage_size=64,考慮到識(shí)別的效果,減小計(jì)算誤差,還做了灰度變換、維度轉(zhuǎn)換和歸一化處理,得到了處理好的數(shù)據(jù)集,如圖2 所示。
圖2 預(yù)處理后的數(shù)據(jù)集(無(wú)光線、角度等變化)
后期考慮到角度和光線的不同對(duì)識(shí)別結(jié)果的影響,又增加了角度變化和光線變化的數(shù)據(jù)集,如圖3和圖4 所示。
圖3 角度變化
圖4 光線變化
構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)做特征提取,本實(shí)驗(yàn)采用了三層“卷積+池化”的結(jié)構(gòu),第一和第二個(gè)卷積層各有32個(gè)filter,卷積核大小為3*3,池化層2*2,代碼如下:
由于以上數(shù)據(jù)集都是自己采樣而來(lái),訓(xùn)練數(shù)據(jù)不是很多,為了能有得到較好的測(cè)試精度防止過擬合,在構(gòu)建好卷積層和池化層后與全連接層和激活層之前,再添加Dropout 層,Dropout 比率設(shè)置為0.5:
在卷積層和池化層之后添加全連接層,該層有512 個(gè)神經(jīng)元,再通過激活函數(shù),增加神經(jīng)網(wǎng)絡(luò)的非線性,如圖5 所示,完成了卷積神經(jīng)網(wǎng)絡(luò)的構(gòu)建。
圖5 構(gòu)建卷積層和池化層代碼
在訓(xùn)練代碼中使用了fit()函數(shù)計(jì)算訓(xùn)練集的均值、方差等屬性,生成了訓(xùn)練模型number.h5。并利用evaluate()等函數(shù)對(duì)測(cè)試和識(shí)別結(jié)果進(jìn)行評(píng)估。
測(cè)試時(shí)中對(duì)視頻下所出現(xiàn)的人臉進(jìn)行識(shí)別再次用到了OpenCV 的CascadeClassifier 類中的人臉檢測(cè)器haarcascade_frontalface_alt2.xml,使用條件判斷語(yǔ)句對(duì)檢測(cè)到的人臉進(jìn)行識(shí)別。
訓(xùn)練的好壞直接影響識(shí)別的準(zhǔn)確度,因此,在訓(xùn)練模型中使用了Adam 優(yōu)化算法,通過調(diào)試學(xué)習(xí)率提高測(cè)試準(zhǔn)確率,Adam 算法中參數(shù)配置如下:
(1)learning_rate 字面理解為學(xué)習(xí)速率。在速率校正之前會(huì)加快初始學(xué)習(xí)速度,前期取值為0.3。較小的值(例如1.0e-5)在培訓(xùn)期間降低學(xué)習(xí)速度,后期調(diào)試時(shí)取值為0.1~0.001,通過不斷的訓(xùn)練,learning_rate 的取值逐漸減小,經(jīng)過若干次調(diào)試后,最后一次取值為0.001。
(2)beta1 為一階矩指數(shù)衰減率,取0.9。
(3)beta2 為二階矩指數(shù)衰次減率,取0.999。
(4)epsilon 的值非常小,防止在實(shí)現(xiàn)中被0 除,此處取值是常規(guī)的10e-8。
第一次訓(xùn)練時(shí)(角度、光線正常)learning_rate 值較高,取值0.3,識(shí)別準(zhǔn)確率平均為79.61%。經(jīng)過若干次調(diào)試后,調(diào)試learning_rate 值并考慮到環(huán)境、人臉角度變化等因素,如表1 所示,得出learning_rate 取值為0.01~0.001 之間較為合適。
表1 調(diào)試learning_rate 和環(huán)境因素運(yùn)行結(jié)果的變化
分別在角度、光線、距離上進(jìn)行調(diào)試運(yùn)行效果如圖6 所示,在識(shí)別框的內(nèi)側(cè)的上方顯示是否是本人,如果是本人顯示“me”,如果不是本人則顯示“other”,通過識(shí)別框的顯示范圍可以看出識(shí)別效果較好,能夠準(zhǔn)確的捕捉人臉的位置。
圖6 調(diào)試后運(yùn)行效果
通過實(shí)驗(yàn)過程可以體會(huì)到OpenCV 和卷積神經(jīng)網(wǎng)絡(luò)相結(jié)合的方式實(shí)現(xiàn)人臉識(shí)別是眾多方法中比較快速、基礎(chǔ)的方法,該方法實(shí)現(xiàn)簡(jiǎn)單但也存在一些不足,比如在檢測(cè)環(huán)節(jié),圖片的色彩比較豐富、人臉部分顏色較暗、圖片不夠清晰等都會(huì)影響檢測(cè)的準(zhǔn)確度。另外,訓(xùn)練的次數(shù)為了達(dá)到預(yù)期效果,需要不斷的調(diào)整參數(shù),因此在后期的優(yōu)化中,可以考慮一些基于PyTorch 的方法。