基于深度學(xué)習(xí)的人臉識別_第1頁
基于深度學(xué)習(xí)的人臉識別_第2頁
基于深度學(xué)習(xí)的人臉識別_第3頁
基于深度學(xué)習(xí)的人臉識別_第4頁
基于深度學(xué)習(xí)的人臉識別_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

基于深度學(xué)習(xí)的人臉識別主講人信息工程學(xué)院高政霞老師《實戰(zhàn)深度學(xué)習(xí)—原理、框架和應(yīng)用》前言①人臉驗證做的是1:1的比對,即判斷兩張圖片里的人是否為同一人。②人臉識別做的是1:N的比對,即判斷系統(tǒng)當(dāng)前見到的人,為事先見過的眾多人中的哪一個。人臉識別問題宏觀上分為兩類,一是人臉驗證(又叫人臉比對),二是人臉識別。人臉識別技術(shù)包括采集訓(xùn)練圖像數(shù)據(jù)集、人臉檢測和提取人臉特征等過程,人臉識別技術(shù)隸屬于生物識別技術(shù)的一種,主要用生物識別技術(shù)來進行區(qū)分,使用人臉特征等信息來進行識別。二十世紀(jì)八十年代國內(nèi)開始對人臉識別技術(shù)的研究,當(dāng)時主要研究主體是研究機構(gòu)和高校,經(jīng)歷了技術(shù)引進-專業(yè)市場導(dǎo)入-技術(shù)完善-技術(shù)應(yīng)用-各行業(yè)領(lǐng)域使用等五個階段。近年來廣泛應(yīng)用于安全防務(wù)、電子商務(wù)等領(lǐng)域,深度學(xué)習(xí)技術(shù)讓計算機人臉識別能力超越人類的識別程度。目錄contents訓(xùn)練圖像數(shù)據(jù)采集CNN人臉識別設(shè)計CNN模型搭建本章總結(jié)Part01Part02Part03Part0401訓(xùn)練圖像數(shù)據(jù)采集人臉識別的精準(zhǔn)度與數(shù)據(jù)集有很大的關(guān)系,數(shù)據(jù)集越符合規(guī)范精準(zhǔn)度越高,數(shù)據(jù)集越嘈雜越容易造成神經(jīng)網(wǎng)絡(luò)訓(xùn)練時向錯誤的方向傳播。例如,訓(xùn)練目的是識別狗狗,然后一半數(shù)據(jù)集是貓咪,在進行測試的時候,可能會造成貓咪也識別成狗狗。提供人臉數(shù)據(jù)庫的有PubFig:PublicFiguresFaceDatabase等網(wǎng)站。在接下來的案例中,選取PubFig:PublicFiguresFaceDatabase作為訓(xùn)練圖像數(shù)據(jù)集。它記錄了大量人臉數(shù)據(jù),里面包含了兩百個人的五萬八千多張圖像。但是它不太適合做這么簡單的人臉識別訓(xùn)練數(shù)據(jù)集,因為這些圖像都存在著姿勢、表情和光照的差異,作為僅僅識別人臉的訓(xùn)練數(shù)據(jù)集會不大合適,所以在這可以通過不斷的篩選使得人臉數(shù)據(jù)集逐漸的適合案例中構(gòu)建的神經(jīng)網(wǎng)絡(luò)。01訓(xùn)練圖像數(shù)據(jù)采集

訓(xùn)練圖像數(shù)據(jù)源PubFig數(shù)據(jù)集一共分為了兩大部分,一部分包含60個人的圖像,另一部分包含另外160個人的圖像。這兩部分?jǐn)?shù)據(jù)都分為了兩個文件記錄,一個儲存的是人的名字,另一個儲存的是這些人的圖像地址等信息。案例中使用的是包含60個人那部分的圖像,這60個人一共有16336張圖像。(1)加載人臉數(shù)據(jù)文件(2)下載與儲存圖像數(shù)據(jù)(3)訓(xùn)練圖像數(shù)據(jù)整理01訓(xùn)練圖像數(shù)據(jù)采集

爬取圖像數(shù)據(jù)集01訓(xùn)練圖像數(shù)據(jù)采集

爬取圖像數(shù)據(jù)集加載人臉數(shù)據(jù)文件包括了personName.txt和url.txt兩個文件,personName.txt文件儲存了所有人臉圖像的名字,url.txt文件儲存了人名、圖片序號、URL地址、人臉坐標(biāo)和MD5校驗碼。在擁有這兩個文件的前提下可以通過personName.txt創(chuàng)建文件夾以儲存即將下載的圖片,然后讀取url.txt文件。加載url.txt文件,獲取需要用到的數(shù)據(jù),并把數(shù)據(jù)進行另外存儲。01加載人臉數(shù)據(jù)文件01訓(xùn)練圖像數(shù)據(jù)采集

爬取圖像數(shù)據(jù)集加載url.txt文件和personName.txt文件后,開始編寫爬蟲以爬取需要的圖像數(shù)據(jù)。由于需要長時間爬取,雖然圖像數(shù)據(jù)集來源于很多的網(wǎng)站,但為防止它們同一個網(wǎng)站的圖像聚集而導(dǎo)致爬蟲在此網(wǎng)站被封,所以要模擬瀏覽器、設(shè)置代理IP和動態(tài)頭部,防止爬蟲被網(wǎng)站封殺。通過urllibs的requests獲取圖片,獲取圖片后需要對圖片進行臉部截取,截取后使用OpenCV進行人臉檢測,檢測圖像是否包含人臉,是否符合人臉識別的需要,因為不是每一張圖片網(wǎng)站都能很完美地標(biāo)注人臉的位置。02下載與儲存圖像數(shù)據(jù)01訓(xùn)練圖像數(shù)據(jù)采集

爬取圖像數(shù)據(jù)集下載好圖像后就會發(fā)現(xiàn),下載的圖像并不能全部滿足需求,比如一開始爬取到圖像按照人臉坐標(biāo)截取后發(fā)現(xiàn)并不是每張截取到的圖片都有人臉。首先要做的就是針對下載好的圖片做一個篩選,篩選出從正面截取、不戴墨鏡、頭發(fā)不遮掩和能準(zhǔn)確看出五官的圖像。由于爬取時間長使得url.txt文件的部分URL失效或鏈接無響應(yīng),最后獲取到的圖像有10173張圖像,最后經(jīng)過篩選只取了6031張人臉圖像。03訓(xùn)練圖像數(shù)據(jù)整理02CNN人臉識別設(shè)計在進行卷積神經(jīng)網(wǎng)絡(luò)人臉識別時,先獲取足夠訓(xùn)練圖像數(shù)據(jù)集,然后進一步對圖像進行規(guī)范化。在獲取足夠的訓(xùn)練圖像數(shù)據(jù)后,開始搭建卷積神經(jīng)網(wǎng)絡(luò),使用的是Keras函數(shù)庫搭建卷積神經(jīng)網(wǎng)絡(luò)模型。激活函數(shù)的存在是為解決非線性方程數(shù)據(jù),一般遇見的激活函數(shù)有Relu、Sigmoid和Maxout等激活函數(shù)。在確定卷積神經(jīng)網(wǎng)絡(luò)激活函數(shù)后,需要確定卷積神經(jīng)網(wǎng)絡(luò)模型的卷積層數(shù),再進一步確定使用卷積層使用搭建,卷積核的行列數(shù)等都需要進一步確定?;赑ython實現(xiàn)CNN人臉識別,是使用Python實現(xiàn)神經(jīng)網(wǎng)絡(luò)搭建和圖片預(yù)處理等過程,再使用Keras接口調(diào)用Theano或Tensorflow后端進行訓(xùn)練。由此不難描繪出卷積神經(jīng)網(wǎng)絡(luò)人臉識別基本流程圖,如圖9-1所示。圖9-1CNN人臉識別基本流程圖02CNN人臉識別設(shè)計

CNN人臉識別設(shè)計方案)。如圖9-2所示,在卷積神經(jīng)網(wǎng)絡(luò)圖像處理中神經(jīng)網(wǎng)絡(luò)會把輸入的圖像數(shù)據(jù)轉(zhuǎn)化為矩陣數(shù)據(jù),然后把矩陣數(shù)據(jù)逐個放入神經(jīng)元中進行卷積運算。最左邊的X1到Xn是經(jīng)過圖像數(shù)據(jù)轉(zhuǎn)化的矩陣數(shù)據(jù)。把矩陣數(shù)據(jù)拆分為無數(shù)份的,正是平常所說的卷積核。圖9-2人工單元神經(jīng)元的結(jié)構(gòu)圖9-2是一個人工單元神經(jīng)元的結(jié)構(gòu),其中,X1到Xn為神經(jīng)元的輸入,W1到Wn則是權(quán)值,b為偏置標(biāo)量,c為卷積值與偏置標(biāo)量b相加,a為神經(jīng)網(wǎng)絡(luò)輸出,卷積值由輸入數(shù)據(jù)和權(quán)值相乘求和而得,神經(jīng)網(wǎng)絡(luò)的輸出a是c經(jīng)過激活函數(shù)后輸出的數(shù)據(jù)。02CNN人臉識別設(shè)計

CNN圖像處理a=f(c),c等式最右邊的是計算過程的向量表達(dá)形式,其中W、X分別代表權(quán)值矩陣和輸入數(shù)據(jù)矩陣,WT為W的轉(zhuǎn)置矩陣,進行矩陣轉(zhuǎn)置后實現(xiàn)W和X的逐個元素相乘疊加,其本質(zhì)就是矩陣乘法。02CNN人臉識別設(shè)計

CNN圖像處理向量表達(dá)公式圖像預(yù)處理是將每一個人臉圖像分揀出來然后交給模型訓(xùn)練模塊,在進行模型訓(xùn)練和人臉識別前準(zhǔn)備工作。(1)人臉檢測(2)數(shù)據(jù)隨機分組(3)圖像數(shù)據(jù)標(biāo)準(zhǔn)化(4)CNN人臉識別顯示數(shù)據(jù)02CNN人臉識別設(shè)計

圖像預(yù)處理02CNN人臉識別設(shè)計

圖像預(yù)處理Python里的Dlib和OpenCV都是包含了圖像處理和機器視覺方面的開源函數(shù)庫,采用Python實現(xiàn)人臉識別可以使用這兩個函數(shù)庫,實現(xiàn)模型訓(xùn)練前的圖像預(yù)處理和模型測試時的人臉檢測。Dlib和OpenCV均包含了人臉檢測接口。由于Dlib有比OpenCV抗遮擋的特性,因此數(shù)據(jù)預(yù)處理方面使用的是Dlib函數(shù)庫。在攝像頭人臉檢測方面兩者性能類似,圖像裁剪可使用OpenCV函數(shù)庫。01人臉檢測數(shù)據(jù)儲存方式是放在一個大的文件夾中,所有圖片均放在以圖片上的人臉名字拼音為文件夾名的文件夾中,這就導(dǎo)致同一個人的照片集中在一處,呈類群居式的樣子。在進行模型訓(xùn)練的時候如果不進行隨機分組,將會出現(xiàn)一種每次訓(xùn)練的均是同一個人圖像的情況,容易出現(xiàn)過擬合的情況。Dropout是專門用于神經(jīng)網(wǎng)絡(luò)正規(guī)化的方法,將數(shù)據(jù)集打亂隨機分組train_test_split功能是從樣本中隨機地按比例選取訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù);train_data是進行訓(xùn)練的所有矩陣數(shù)據(jù);train_target是進行訓(xùn)練的數(shù)據(jù)標(biāo)簽集合;test_size是屬于樣本占比,小數(shù)為訓(xùn)練數(shù)據(jù)的百分比,整數(shù)為訓(xùn)練數(shù)據(jù)的具體數(shù)目;random_state是隨機數(shù)種子。02CNN人臉識別設(shè)計

圖像預(yù)處理02數(shù)據(jù)隨機分組02CNN人臉識別設(shè)計

圖像預(yù)處理圖像數(shù)據(jù)的標(biāo)準(zhǔn)化包括數(shù)據(jù)采集中的統(tǒng)一尺寸和統(tǒng)一轉(zhuǎn)化灰度圖,同時,把數(shù)據(jù)放入Theano或TensorFlow后端訓(xùn)練模型前也要進行數(shù)據(jù)的標(biāo)準(zhǔn)化。采集圖像數(shù)據(jù)時同時裁剪和灰度化使得后面模型訓(xùn)練以及進行人臉檢測和人臉識別時不需要進行這兩步操作,簡化了訓(xùn)練和識別過程。數(shù)據(jù)的標(biāo)準(zhǔn)化可以使得數(shù)據(jù)符合模型訓(xùn)練后端的數(shù)據(jù)要求。03圖像數(shù)據(jù)標(biāo)準(zhǔn)化02CNN人臉識別設(shè)計

圖像預(yù)處理人臉識別數(shù)據(jù)可以簡單地分為兩種,一種是靜態(tài)圖像,一種是視頻圖像。靜態(tài)圖像可以直接加載圖像數(shù)據(jù),視頻數(shù)據(jù)是來源于普通攝像頭或者一段簡單的視頻圖像。然后使用卷積神經(jīng)網(wǎng)絡(luò)模型訓(xùn)練出來的數(shù)據(jù)進行對比判斷是誰的臉,判斷的概率大小是97.5%,即相似度達(dá)到97.5%就確認(rèn)是這個人,如果一直都沒有達(dá)到的就在人臉上顯示特殊標(biāo)記。04CNN人臉識別顯示數(shù)據(jù)03CNN模型搭建神經(jīng)網(wǎng)絡(luò)可以粗略分三層,輸入輸出和“黑盒”,黑盒的意思就是神經(jīng)網(wǎng)絡(luò)不可見部分。卷積神經(jīng)網(wǎng)絡(luò)模型的搭建主要是在于“黑盒”部分。在這里使用的是八層網(wǎng)絡(luò)結(jié)構(gòu),輸入層、兩層卷積層、兩層池化層、兩層全連接層和輸出層,使用的激活函數(shù)是ReLu函數(shù),使用的分類函數(shù)是Softmax函數(shù)。卷積神經(jīng)網(wǎng)絡(luò)的搭建使用的是Keras函數(shù)庫進行搭建,在Theano后端運行。03CNN模型搭建

CNN模型搭建(1)搭建卷積層(2)搭建池化層(3)選取激活函數(shù)(4)選取優(yōu)化器(5)自定義損失函數(shù)(6)設(shè)置參數(shù)調(diào)整學(xué)習(xí)效率(7)訓(xùn)練CNN模型(8)模型保存加載與評估(9)模型測試在用Keras搭建卷積神經(jīng)網(wǎng)絡(luò)前需要先安裝HDF5模塊使用keras.layers搭建卷積層有兩種方法一種是Conv1D,另一種是Conv2D,Conv1D主要用于自然語言處理,Conv2D主要用于計算機視覺,而且表面上Conv1D沒有給出卷積大小,Conv2D給出了。所以在此使用Conv2D搭建兩層卷積層。01搭建卷積層03CNN模型搭建

注意,在使用Keras搭建神經(jīng)網(wǎng)絡(luò)時,只需要給第一層輸入數(shù)據(jù),后面層數(shù)的數(shù)據(jù)均來自于上一層神經(jīng)網(wǎng)絡(luò),由于池化層是跟著卷積層添加到模型中的,所以池化層輸入來源于上一層輸出數(shù)據(jù)。只需要設(shè)置池化的核大小、池化的滑動步長和邊界模式。使用MaxPooling2D搭建兩層池化層。02搭建池化層03CNN模型搭建

激活函數(shù)解決的是線性方程不能概括的,例如,y=AF(Wx)函數(shù),在這里AF就充當(dāng)了激活函數(shù)的角色,基于Python使用Keras搭建的神經(jīng)網(wǎng)絡(luò)有ReLu、Sigmoid、Tanh等幾個比較火的激活函數(shù)。當(dāng)然激活函數(shù)也可以自己創(chuàng)建,但是必須得保證激活函數(shù)可以微分,因為誤差反向傳遞的時候只有可以微分的函數(shù)才可以把數(shù)據(jù)傳遞回去。少量層結(jié)構(gòu)中,可以選擇多種激活函數(shù),CNN推薦的激活函數(shù)是ReLu函數(shù),RNN推薦的激活函數(shù)可以是ReLu函數(shù)也可以是Tanh函數(shù)。在此搭建的是卷積神經(jīng)網(wǎng)絡(luò)模型,所以使用ReLu函數(shù)作為激活函數(shù)。03選取激活函數(shù)03CNN模型搭建

優(yōu)化器(optimizers)的目的是加速神經(jīng)網(wǎng)絡(luò)訓(xùn)練,最基礎(chǔ)的算法是隨機梯度下降算法。正常情況下是把訓(xùn)練數(shù)據(jù)不斷的放入神經(jīng)網(wǎng)絡(luò)中計算,這樣計算機資源會消耗很大。而SGD是把一個數(shù)據(jù)分成很多的小份,然后分批的放入神經(jīng)網(wǎng)絡(luò)中進行計算。每次計算使用批量數(shù)據(jù),雖然不能反映整體數(shù)據(jù)的情況,不過很大程度上加速了訓(xùn)練過程,而且不會丟失太多準(zhǔn)確率。當(dāng)隨機梯度下降算法還不能滿足時,可以選擇在參數(shù)上進行修改。常用的幾種優(yōu)化器分別是Momentum、AdaGrad、RMSProp和Adam。Momentum優(yōu)化器是由曲折線變?yōu)橄鄬ζ交木€,類似于給一個人安排下坡路;AdaGrad優(yōu)化器是在學(xué)習(xí)率上面進行更改,它的每一個參數(shù)的更新都會獲得不同的學(xué)習(xí)效率,和Momentum類似:相當(dāng)于一個人獲得一雙不適合的鞋子,走路疼,所以逼著它走直線,那么就會少走很多彎路;RMSProp類似于Momentum+AdaGrad;Adam能又快又好地達(dá)到目標(biāo)迅速收斂。所以在此優(yōu)化器使用Adam進行優(yōu)化。04選取優(yōu)化器03CNN模型搭建

在確定優(yōu)化器的情況下可以自定義損失函數(shù),并添加指標(biāo)來獲得想要看到的更多結(jié)果。05自定義損失函數(shù)03CNN模型搭建

在確定卷積層數(shù)、池化層數(shù)、全連接層數(shù)、激活函數(shù)、優(yōu)化器以及損失函數(shù)的情況,搭建好一個卷積神經(jīng)網(wǎng)絡(luò)模型,需要給各個關(guān)鍵位置設(shè)置參數(shù)。參數(shù)的設(shè)置基于神經(jīng)網(wǎng)絡(luò)模型的層數(shù),使用了兩層卷積結(jié)構(gòu)。其次就是每輪訓(xùn)練的樣本數(shù)(batch_size)的設(shè)置,batch_size太小容易造成神經(jīng)網(wǎng)絡(luò)不收斂,batch_size太大容易造成訓(xùn)練的計算機無法滿足計算負(fù)荷。濾波器的大小選擇也影響著神經(jīng)網(wǎng)絡(luò)模型的學(xué)習(xí)效率和測試精準(zhǔn)度,一般卷積層濾波器數(shù)量均會是上一層的兩倍。訓(xùn)練圖像數(shù)據(jù)集大小是6031*128*128*0,即6031張人臉圖像,每張圖像大小是128*128,并且每張圖片均經(jīng)過灰度化處理,不屬于三原色任何一種,只留下光強和暗影。06設(shè)置參數(shù)調(diào)整學(xué)習(xí)效率03CNN模型搭建

完整的神經(jīng)網(wǎng)絡(luò)模型見下頁完整的神經(jīng)網(wǎng)絡(luò)模型如下:06設(shè)置參數(shù)調(diào)整學(xué)習(xí)效率03CNN模型搭建

訓(xùn)練模型的目的是為使得模型可以識別人臉,識別圖像出現(xiàn)的人臉是屬于哪個文件夾里的,對應(yīng)的標(biāo)簽數(shù)據(jù)是什么,所以需加載訓(xùn)練文件,訓(xùn)練文件均貼著標(biāo)簽,標(biāo)簽就是文件夾名稱,然后讀取圖片,才能訓(xùn)練。左邊程序會根據(jù)輸入的訓(xùn)練圖像數(shù)據(jù)集的路徑獲取到所有圖像的向量集合,標(biāo)簽集合和子文件夾數(shù)。圖像的向量集合是一個模型訓(xùn)練預(yù)處理的一部分,同時標(biāo)簽集合也是模型訓(xùn)練中必不可少的部分?jǐn)?shù)據(jù),里面包含了文件夾的獨特標(biāo)記,可以用于后期的模型評估。07訓(xùn)練CNN模型03CNN模型搭建

模型訓(xùn)練,這是一個時間長久并能檢測模型是否符合的一個手段,在訓(xùn)練中你可以看到模型的整個訓(xùn)練過程,就是一個不斷學(xué)習(xí)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論