基于ResNet的人臉表情識別研究_第1頁
基于ResNet的人臉表情識別研究_第2頁
基于ResNet的人臉表情識別研究_第3頁
基于ResNet的人臉表情識別研究_第4頁
基于ResNet的人臉表情識別研究_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

緒論1.1研究背景及意義在日常工作和生活中的溝通交流時,人們用很多方式表達情感,比如肢體動作、聲音、語言以及面部表情等。其中,人臉面部表情所攜帶的表達人類內心情感活動的信息最為豐富、易于感知。據(jù)研究表明,人類的面部表情所攜帶的內心活動的信息在所有的上述的形式中比例最高,大約占比55%[1]。上世紀70年代,美國著名心理學家保羅?艾克曼經(jīng)過大量實驗之后,將人類的基本表情定義為悲傷、害怕、厭惡、快樂、氣憤和驚訝六種[2]。研究學者在深入研究的過程中逐漸將中性表情也加入基本面部表情中,使得現(xiàn)今以七種基礎面部表情研究人臉表情識別。通過分析面部表情,可以了解一個人的喜怒哀樂。如,當一個人感到高興時,嘴角上揚成月牙形,面頰上抬形成皺紋,眼瞼收縮;當感到傷心時,表情呈現(xiàn)為:眉毛收緊,眉角和眼角下垂,嘴角下拉,也可能會有眼淚流出,緊咬牙齒;當感到生氣時,表現(xiàn)為眉毛豎起,眼睛瞪大,眉毛下垂,前額緊張,眼瞼和嘴唇緊繃;當感到驚訝時,表現(xiàn)有眉毛上抬,瞳孔收縮,嘴巴張開等。人臉表情是一種情感表達方式,也是最直接、最明顯的易被感知的信號,有效地表現(xiàn)情感與心理活動。由于情感是高級智能的重要組成部分,通過計算機識別分析面部表情進而分析人的心理活動有益于機器智能化,對人工智能的發(fā)展具有重要意義。此外,對于更便利的人機交互也具有重要意義,即讓機器人識別人臉表情進而與人類進行交互,從而做出相應的行為?;谏鲜鲈?,人臉表情識別在許多方面具有廣泛應用。如,心理咨詢師可以在治療過程中及時捕捉關鍵的表情信息,掌握更多信息有助于在咨詢者不愿進行語言交流時為更好的心理治療提供幫助。在傳統(tǒng)醫(yī)療中,也可以對病人的疼痛評估[3]做輔助作用,通過識別病人的面部表情,可以更準確評估不同病人的承受情況,選擇更加合適的治療方案,也可以在實時監(jiān)控中預估病人的病情危機狀況以便醫(yī)療人員及時做出反應。在傳統(tǒng)的教學課堂中,可能大部分學生不愿進行真實的課堂反饋情況下,通過實時監(jiān)控識別表情可以反映出學生們的學習狀態(tài)[4]以及個人表現(xiàn),對改進教學方法,管理課堂教學、重點關注學生心理狀況提供幫助。其也在輔助駕駛方面有著重要應用,可以檢測司機的表情判斷駕駛員的情緒、身體狀況判斷是否存在危險駕駛、疲勞駕駛[5]等情況,可向駕駛員發(fā)出警示,也方便交警對其具體情況進行關注與處理。在刑偵領域,可以根據(jù)嫌疑人的面部表情判斷心理活動,判斷是否說謊,有助于推進案件的真實進行。因此本文將基于殘差神經(jīng)網(wǎng)絡(ResNet)算法,設計并實現(xiàn)人臉表情識別系統(tǒng),能夠對單張圖片中的人臉部分進行人臉檢測以及表情識別,并將此功能擴展到攝像頭拍攝與視頻中。經(jīng)過測試,本系統(tǒng)的識別效果表現(xiàn)良好,能較為精準地對表情做出正確分類,感知情緒變化,不僅有助于心理學研究,還能改善人機交互體驗,提高工作效率,并可能在醫(yī)療和安全監(jiān)控等領域帶來革命性的變化。1.2國內外研究概況19世紀時,人們開始研究面部表情。其中重要的的是在十九世紀下半葉,生物學家達爾文在他的《人類和動物的表情》一書中闡述了表情原理,并從中總結出了人的面部表情和動物的面部表情之間的聯(lián)系和區(qū)別。Ekman和Friesen[6]在1971年提出了6種基本的面部表情分類,包括高興、悲傷、驚訝、生氣、恐懼和厭惡,他們描述了每一種表情所對應的面部變化情況,主要包括眉毛、眼睛、眼瞼、嘴唇等等是如何變化的,進而系統(tǒng)地建立了有上千幅不同表情的人臉表情圖像數(shù)據(jù)庫。這6種情感已經(jīng)被心理學家和生物學家所認可,變成一項前沿性的在計算機的人臉表情識別發(fā)展及相關領域的研究經(jīng)驗。1978年,Suwa[7]等人對一段人臉視頻動畫進行了表情識別的最初嘗試,提出了在圖像序列中進行面部表情自動分析。并且他們提出了面部表情關鍵點識別技術在連續(xù)幀的視頻進行實現(xiàn),這開啟了計算機視覺領域的人臉表情識別。然而,由于當時技術條件的限制,該領域的人臉識別技術遭遇停滯。1991年,K.Mase和A.Pentland[8]使用光流來判斷肌肉運動的主要方向,采用光流法技術進行人臉表情識別,這為自動人臉表情識別開創(chuàng)了新紀元。隨后,Samal和Ekman[9]等人發(fā)表了多篇重要文獻,進一步推動了人臉表情識別的發(fā)展。Mehrabian[10]經(jīng)過長時間的研究發(fā)現(xiàn)了人們在如此的信息交互與傳遞的過程中,絕大部分有效信息的交互是依據(jù)面部的細微表情變化來完成的,因此利用表情預測算法使用人機交互的智能方式精準的捕捉人類面部表情的信息,使用這種方法在很大程度上提升了人機交互的效率。Jain[11]等利用了單個基于深度學習的卷積神經(jīng)網(wǎng)絡模型用于人臉表情的檢測。同樣其中包含了卷積層和深度的殘差模塊,并最終經(jīng)實驗測試發(fā)現(xiàn)FCN和殘差塊的組合可以有效提升模型的識別效果。郭雙等[12]研究并制作了能夠檢測出駕駛人員主要的四種情緒工具,且具有優(yōu)秀的可信度和效度。陳展鵬等在特定的實驗條件下采集了不同情緒狀態(tài)下實驗人員的語音信號,同時優(yōu)化并提取了語音信號的相關特征,最終完成了一種兼具有兩種特征的情感識別檢測方法。嚴利鑫等[13]通過對不同年齡段和性別的駕駛人員采用分層多次抽樣的方式,分析年齡和性別等因素對駕駛人員的情緒影響,他們發(fā)現(xiàn)年長且駕駛年齡較短的駕駛員,在駕駛時更容易產(chǎn)生憤怒情緒。傳統(tǒng)的基于機器學習的人臉表情識別解決方法分為三步[14]:第一,數(shù)據(jù)預處理。預處理是對圖片降噪以及人臉檢測。人臉檢測一般用到HAAR分類器檢測。第二步是特征工程,主要對人臉特征進行提取。通過借助小波核函數(shù),特征提取工程可以更好的提取人臉表情的紋理特征。并且對局部特征進行增強。此外,為了確保有效進行特征提取,按照實際需要,可以在特征提取中強調多種追蹤方法。比如,LBP特征是一種可以完成描述圖像紋理特征的算子,其優(yōu)勢是在提取過程中能夠弱化外界實時的光照變化帶來的不確定影響,但是缺點是由于計算的簡便所以忽略了特征的不斷變化,尤其是外界的環(huán)境變化復雜的場景下。在光照不穩(wěn)定的復雜環(huán)境下,由于Gabor小波算子對光照變化不敏感使其可以很好地適應光照變化,對檢測圖像邊緣特征注意力機制強等優(yōu)秀特征。第三步是分類器進行分類,通常是優(yōu)化KNN算法,也可以將貝葉斯、SVM等其他算法進行融合使用,可以滿足不同的實際需求。人臉表情識別領域是不斷發(fā)展的,經(jīng)歷了從傳統(tǒng)方法到深度學習方法[14-15]的過渡,同時,人臉表情識別相關的數(shù)據(jù)集的采集也從實驗室受控環(huán)境(如JAFFE[16]數(shù)據(jù)集、CK+[17]數(shù)據(jù)集)走向自然非受控環(huán)境(如FER2013[18]數(shù)據(jù)集、SFEW數(shù)據(jù)集)。近些年基于卷積神經(jīng)網(wǎng)絡的計算機視覺領域隨著深度學習的快速發(fā)展取得了很大進展與突破。如,VGGNet、GoogleNet等模型也可以用于表情識別。這些框架對于很多人臉表情數(shù)據(jù)集以及真實自然環(huán)境下實時檢測人臉表情都具有很好的效果。1.3主要研究內容本文想要通過訓練一種在常見的比較表情識別模型性能的數(shù)據(jù)集基準上,通過訓練得到具有較高的準確率的模型,并且采用不同的人臉檢測方法來達到對單張人臉圖片進行表情識別的目的,該模型可應用在攝像頭與視頻中的人臉表情識別中。主要的實現(xiàn)模塊分為以下三部分:1.3.1人臉表情圖片的處理將需要預測的圖片輸入時,先將彩色圖片灰度化,選擇人臉檢測器檢測人臉,研究使用不同的人臉預測方法所得的結果,得到更好效果的人臉檢測效果,能夠盡可能多地識別所有人臉。之后將人臉圖片進行增強,并統(tǒng)一修改圖片大小。1.3.2人臉表情識別模型的搭建選擇FER2013、JAFFE、CK+數(shù)據(jù)集作為模型訓練與測試的數(shù)據(jù)集,研究使用殘差網(wǎng)絡(ResNet)模型來對人臉圖片的訓練與預測得到良好的表現(xiàn)。將處理好的人臉圖片傳入模型中進行預測得到最大可能的分類結果。1.3.3人臉表情識別系統(tǒng)的設計與實現(xiàn)對攝像頭實時拍攝采集到的人臉與動態(tài)視頻中的人臉做表情預測:按幀讀取圖片,對這一幀使用人臉檢測器。如果檢測到人臉,進行預測。在對視頻或攝像頭得到的多張圖片中,人臉表情的變化在很短時間不會突變,故每隔30ms取一張圖片進行讀取分析,在人眼看來,形成一系列的連續(xù)的視頻預測。1.4本文的組織框架第1章為緒論部分。主要介紹了課題的研究背景與意義,然后介紹了人臉表情識別技術的研究背景及現(xiàn)狀,并且對在不同階段該技術的發(fā)展進步做了一些簡要描述,最后點明了本文的研究主要內容。第2章為與課題相關的主要理論基礎的介紹。首先是包括卷積、池化、全連接層等的一些關于卷積神經(jīng)網(wǎng)絡的基礎知識,后面介紹了在卷積神經(jīng)網(wǎng)絡訓練過程中常用到的幾種損失函數(shù)與優(yōu)化算法,并且對其各自的特點做了一些描述。最后,介紹了在深度學習模型訓練過程中易出現(xiàn)的過擬合現(xiàn)象以及解決過擬合問題的一些方法。第3章為人臉表情圖片的預處理。首先介紹了圖像灰度化的原理與優(yōu)點,然后對兩種人臉檢測方法及其原理分別做了介紹,并且介紹了數(shù)據(jù)增強,最后選取了一些圖片,并對這些圖片進行人臉檢測與表情識別,對結果做了分析。第4章為基于ResNet的人臉表情識別模型構建。首先介紹了一些基礎知識,包括殘差網(wǎng)絡以及殘差塊,并且提出為什么要使用殘差網(wǎng)絡,它能夠解決網(wǎng)絡中存在的比如梯度消失或爆炸以及網(wǎng)絡退化等問題并且保證模型能夠通過加深網(wǎng)絡層數(shù)學習到更多更完整的樣本特征。同時介紹了本文所使用的網(wǎng)絡模型結構;然后介紹了FER2013數(shù)據(jù)集、JAFFE數(shù)據(jù)集以及CK+數(shù)據(jù)集,記錄了實驗過程與結果分析,對模型進行優(yōu)化使得最終的結果準確率提高了6%。第5章主要設計了基于人臉面部表情識別的界面,并將人臉檢測與表情識別功能加以擴展,并將這些功能在一個系統(tǒng)上得以實現(xiàn)。首先確定了系統(tǒng)的實現(xiàn)目標,然后對要解決的問題進行詳細分析,并詳細描述了對實現(xiàn)的功能的具體設計與實現(xiàn)過程。主要采用PyQt5工具包進行系統(tǒng)GUI界面的編寫,使用3.2章節(jié)所介紹的算法實現(xiàn)人臉檢測部分的功能,表情識別部分使用訓練好的ResNet網(wǎng)絡模型。第6章為總結與展望??偨Y了本文的研究并指出了不足之處,展望了未來的研究方向。2相關理論基礎介紹2.1卷積神經(jīng)網(wǎng)絡基礎近年來,隨著深度學習方法的重大突破,深度學習模型被廣泛運用到識別文字、圖像和聲音等領域。傳統(tǒng)的機器學習模型簡單,參數(shù)較少,逼近能力有限,而深度學習模型更加復雜,關注的模型功能更為強大,輸入數(shù)據(jù)經(jīng)過多次神經(jīng)網(wǎng)絡得到輸出,模型參數(shù)較多,更能全面地學習到數(shù)據(jù)中的規(guī)律和信息,擬合效果好。本文主要使用了卷積神經(jīng)網(wǎng)絡模型進行深度學習。2.1.1卷積層卷積神經(jīng)網(wǎng)絡的核心由卷積層組成。該層使用卷積運算來提取輸入數(shù)據(jù)的局部特征,并且允許網(wǎng)絡有效地學習空間層次結構,捕捉圖像中的邊緣、紋理和更高級的特征。在卷積層中,輸?張量和核張量通過互相關運算產(chǎn)生輸出張量[19]。在二維圖像中,如果輸入時的形狀為3*3(即高度與寬度都為3),并使用高度為2,寬度為2的卷積核,由于卷積核窗口(或卷積窗口)的形狀由內核的形狀決定,則窗口形狀為2*2。圖2-1二維互相關運算在具體運算過程中,從輸入張量的左上角開始,卷積窗口從上到下、從左到右滑動。對于卷積窗口滑動到的每一個位置,通過按元素相乘包含在該窗口中的部分張量與卷積核張量,并且將得到的張量再求和,就可以得到一個單一的標量值,該值就是這一位置的輸出張量值。2.1.2池化層池化層也可稱為下采樣操作,該層可以減小特征圖的空間尺寸大小、降低計算量,并且使網(wǎng)絡對于位置的變化更加魯棒,降低敏感度。池化操作通過適當?shù)貙μ卣鲌D進行抽象,來去除不重要的信息,一般使用適當綜合分析方法降低特征圖的分辨率或者對特性進行適當壓縮,這樣就可以減少參數(shù)數(shù)量并突出有效特征信息。具體地說,池化操作首先定義池化窗口的大小,然后,通過池化窗口將數(shù)據(jù)矩陣等分為多個子區(qū)域;最后,在每個子區(qū)域內按照某個規(guī)則采樣得到一個用于表示該子區(qū)域的元素。池化窗口也有步長,這一點與卷積核類似。池化窗口的步長定義為兩個相鄰池化窗口的水平或豎直位移的大小。一般池化操作是指相鄰池化窗口不重疊,并且此時池化步長等于池化窗口的大小;重疊池化操作如其名,是指相鄰池化窗口重疊,此時的池化步長只需要大于1即可。從子區(qū)域內進行采樣的規(guī)則主要有取最大值、取最小值和取平均值三種,對應的池化操作分別稱為最大池化、最小池化和均值池化。2.1.3全連接層在圖像分類模型中作為一種常用的神經(jīng)網(wǎng)絡層,全連接層也被稱為密集連接層,可譯為Dense。這一層的作用是將前一層(通常是卷積層或池化層)的輸出進行扁平化,并將其連接到輸出層或下一個隱藏層。這樣做的目的是將高維的特征表示轉換為一維向量,并將這些特征用于最終的分類任務。2.1.4激活函數(shù)在神經(jīng)網(wǎng)絡中的單一神經(jīng)元部分,每個節(jié)點從上一層神經(jīng)元接受其輸出值作為當前神經(jīng)元的輸入值,輸入層節(jié)點直接將輸入屬性值傳遞給下一層,下一層可能是隱藏層或是輸出層。激活函數(shù)描述的是在多層神經(jīng)網(wǎng)絡中的上層節(jié)點的輸出和下層節(jié)點的輸入之間存在的一種函數(shù)關系或一種映射,它又稱為激勵函數(shù)。在最原始的感知機中,每一層輸入都與上層輸出形成線性關系,使用的是線性函數(shù),并且隨著層數(shù)加深,各層之間仍然還是線性關系,這樣的模型只能擬合有限的映射關系。如果使用激活函數(shù),就可以給神經(jīng)元引入非線性因素,并且如果繼續(xù)增加神經(jīng)網(wǎng)絡的層數(shù),就可以使它可以逼近任何非線性函數(shù),能夠映射更多的關系。因此,神經(jīng)網(wǎng)絡可以應用到眾多的非線性模型上面,更好地擬合實際存在的關系。目前常見的激活函數(shù)有很多,比如Sigmoid函數(shù)、Relu函數(shù)和PReLU函數(shù)等。下面是這三種函數(shù)的簡單介紹。Sigmoid函數(shù)可以將一個實數(shù)映射到(0,1)的區(qū)間,實際使用時,將隱層神經(jīng)元輸出的范圍進行限制,并且它可以用來做二分類,也被稱為Logistic函數(shù)。如果數(shù)據(jù)特征的差異很復雜,或者其特征不是特別顯著時,效果比較好。Sigmoid函數(shù)為神經(jīng)網(wǎng)絡中的一個激勵函數(shù),它是一種光滑且嚴格單調的飽和函數(shù),表達式為:(2-1)Sigmoid函數(shù)的圖形如圖:圖2-2Sigmoid函數(shù)圖像ReLU函數(shù)譯為線性整流函數(shù)。該函數(shù)是指數(shù)學中的斜坡函數(shù),函數(shù)為。線性整流定義了其經(jīng)過線性變換之后的輸出結果是非線性,從而在神經(jīng)網(wǎng)絡中作為神經(jīng)元的激活函數(shù)。具體來說,來自上一層神經(jīng)網(wǎng)絡的輸入向量進入神經(jīng)元,使用線性整流激活函數(shù)的神經(jīng)元會輸出到下一層神經(jīng)元,或作為整個神經(jīng)網(wǎng)絡的輸出,這取決現(xiàn)神經(jīng)元在網(wǎng)絡結構中所處位置。該函數(shù)圖像如圖2-3(左)所示。PReLU函數(shù)譯為帶參數(shù)的線性整流函數(shù),是一種用于神經(jīng)網(wǎng)絡的非線性激活函數(shù)。它通過以下公式計算激活值:。其中,是可學習的參數(shù),可以根據(jù)需要進行調整。當大于或等于零時,PReLU函數(shù)保持輸入不變;當小于零時,它會縮放到最大值。這種設計使得PReLU有助于處理稀疏性和負值的存在問題。PReLU函數(shù)的圖像如圖2-3(右)所示。圖2-3ReLU函數(shù)與PReLU函數(shù)圖像2.2卷積神經(jīng)網(wǎng)絡訓練過程2.2.1損失函數(shù)在訓練過程中,每一個樣本原本有一個真實值,它經(jīng)過模型會得到一個預測值,這兩個值之間的差值稱為損失。將預測值與真實值之間的距離進行計算的函數(shù)就是損失函數(shù),該函數(shù)可以度量模型的質量,測量模型的優(yōu)劣程度。在實際的機器學習中,想要使預測值盡可能逼近真實值,就需要不斷更新模型的參數(shù),減小損失,選擇合適的損失函數(shù)可以使損失下降的梯度更快。常見的損失函數(shù)有:(1)均方誤差損失函數(shù)(MeanSquaredError,MSE)均方誤差損失函數(shù)定義為預測值與真實值之間的平方差的平均值,它的計算公式如下,它是最常用的回歸問題的損失函數(shù)。(2-2)其中是第i個樣本的真實值,是第i個樣本的預測值,樣本數(shù)量用n來度量。最后得到的MSE的值越小,那就表示模型的預測值與真實值的差距更小,其預測結果越接近真實的取值。(2)交叉熵損失函數(shù)(Cross-Entropy,CE)在分類問題中,也常用交叉熵損失函數(shù),它是用于分類問題中評估模型預測與真實標簽之間的差異的常用損失函數(shù)之一。該函數(shù)量化模型輸出的概率分布與真實標簽之間的差距,使得模型能夠更好地學習分類任務。在二分類問題中,假設我們有一個二分類模型,將輸入映射到預測值。實際標簽為=0或=1,如果選擇用交叉熵損失函數(shù)來衡量模型預測與真實標簽之間的差距,則可以用以下公式:(2-3)其中,為真實標簽,是模型對的預測值。當=0時,上式等價于,當=1時,上式等價于。這個函數(shù)的直觀解釋是,當模型的預測值越接近實際標簽時,損失越小。交叉熵損失函數(shù)可以使用Softmax函數(shù),使用概率分布來代替模型的預測值,并且在之后與真實標簽之間的差距進行比較來處理多分類問題。假設在某個實驗中有m個類別,則其中的一個樣本的真實標簽表示為,其中=1表示樣本屬于第i個類別,=0表示樣本不屬于第i個類別。模型的預測概率分布表示為,其中如果模型預測樣本屬于第i個類別,則其概率表示為。該函數(shù)的公式為(2-4)與二分類情況相似,當一個樣本的真實標簽是one-hot編碼時,交叉熵損失函數(shù)的計算只會依賴于模型對該樣本所屬類別的預測概率。(3)多分類交叉熵(CategoricalCross-Entropy,CCES)損失函數(shù)多分類交叉熵(CategoricalCross-Entropy,CCES)損失函數(shù)是用于多分類問題中的常用損失函數(shù)。其定義為:(2-5)其中,是第i個樣本屬于第j個類別的真實概率,是模型預測概率值,N和C分別為樣本數(shù)量和類別數(shù)量。在多分類問題中,模型的輸出通常表示為一個長度為C的向量,其每個元素對應類別的預測概率,因此我們需要將真實標簽轉化為獨熱編碼的形式。比方說,如果第i個樣本屬于第k個類別,則其真實標簽為=1,j=k,其他為0。多分類交叉熵損失函數(shù)的目標與上述函數(shù)的目標一致,希望能夠最小化模型預測概率分布與真實標簽之間的距離,以提高分類準確率。與二分類問題類似,對于正確預測的樣本,我們希望模型預測的概率越大越好;而對于錯誤預測的樣本,通過對數(shù)計算,我們會有深刻的懲罰。多分類交叉熵損失函數(shù)通常用于評估多分類模型性能。在模型訓練中,我們希望最小化多分類交叉熵損失函數(shù),通過梯度下降算法調整模型參數(shù)以使得多分類交叉熵達到最小值。多分類交叉熵損失函數(shù)的優(yōu)點是易于最小化和優(yōu)化,同時該函數(shù)跨越多個類別,相比其他損失函數(shù)如hingeloss,交叉熵更加靈活,不容易過擬合。不過也需要注意,網(wǎng)絡在最后一層需上一個Softmax層來進行歸一化,并將計算結果映射到[0,1]之間。2.2.2優(yōu)化算法在神經(jīng)網(wǎng)絡中,通過數(shù)據(jù)集不斷對模型進行訓練,為了不斷提升性能,需要更新神經(jīng)網(wǎng)絡參數(shù)并最小化損失函數(shù)。基于上述目的,需要使用優(yōu)化算法,它的性能直接影響模型的訓練效率。常見的幾種優(yōu)化算法如下:(1)隨機梯度下降優(yōu)化算法SGD(StochasticGradientDescent)在一個函數(shù)中,在給定點上升最快的方向是梯度的方向,相反,梯度的反方向就是函數(shù)在給定點下降最快的方向。為了最小化損失函數(shù),應該使梯度下降,即沿著梯度的反方向進行權重的更新,當找到函數(shù)值最小的點,全局的最優(yōu)解就可以有效的被找到。這個參數(shù)的更新過程可以描述為:(2-6)(2-7)傳統(tǒng)的梯度下降算法需要計算全部樣本的梯度,非常耗時,并且容易受到噪聲的影響。隨機梯度下降算法則可以使用一小部分樣本來計算梯度,從而大大提高了訓練速度和魯棒性。(2)自適應矩估計算法Adam(AdaptiveMomentEstimation)Adam優(yōu)化器的主要功能是根據(jù)梯度信息來更新神經(jīng)網(wǎng)絡參數(shù),從而最小化損失函數(shù)。它結合了隨機梯度下降算法和自適應學習率算法的思想,能夠快速收斂并且減少訓練時間。Adam優(yōu)化器具有很多優(yōu)點,它不需要手動調整學習率的大小就可以計算出每個參數(shù)的獨立自適應學習率,這樣可以使得找到的損失函數(shù)的最小值更準確;它可以調整動量參數(shù),使得上一次梯度和當前梯度對參數(shù)更新的影響達到平衡,從而避免過早陷入局部極小值;它還對參數(shù)的更新進行了歸一化處理,即都有一個相似的量級,有助于提高訓練效果;此外,該優(yōu)化器還可以在更新時對參數(shù)進行正則化,提高深度神經(jīng)網(wǎng)絡的訓練效果和泛化能力。2.3過擬合現(xiàn)象在機器學習中,模型訓練最理想效果就是充分提取訓練樣本的共性特征,同時盡可能避免提取其個性特征,從而使訓練出來的模型具有盡可能廣泛的普適性,即最佳的泛化性能。然而,模型的訓練通常基于最小化訓練誤差。在這種情況下,對于固定數(shù)量的訓練樣本,隨著訓練地不斷進行,訓練誤差會不斷減小,甚至趨于零。如果模型訓練誤差太小,就會使訓練出來的模型基本上完全適應于訓練樣本的特點。此時,訓練模型不僅擬合了訓練樣本的共性特征,而且也擬合了訓練樣本的個性特征,這實際上降低了訓練模型的泛化性能,并不斷增加泛化誤差。這種同時擬合訓練樣本的共性特征和個性特征的現(xiàn)象,在機器學習領域通常稱為模型訓練的過擬合現(xiàn)象[20]。如果模型容量與訓練樣本數(shù)量不匹配,如因為訓練樣本數(shù)量較少從而導致模型的某些參數(shù)失去約束,就會導致模型產(chǎn)生過擬合現(xiàn)象。因此,除了對模型容量進行約束之外,還可以通過增加訓練樣本數(shù)量的方式解決模型過擬合問題。樣本增強便是一種基于擴充訓練樣本集的正則化策略。所謂樣本增強就是通過適當方式從已有樣本中產(chǎn)生一個或多個虛擬樣本,以滿足模型訓練的需要。顯然,通過樣本增強產(chǎn)生的虛擬樣本需要滿足一定的合理性,即既要與現(xiàn)有樣本保持一定差異,又要服從與現(xiàn)有樣本一致的總體概率分布。否則,使用這些虛擬樣本不但不能減輕過擬合現(xiàn)象,反而會進一步降低模型的魯棒性。在很多應用場合,對虛擬樣本的合理性進行判斷是一件非常困難的事情。然而,計算機視覺領域的處理對象是直觀圖像,可通過觀察方式直觀判斷虛擬樣本的合理性。因此,樣本增強目前主要用于計算機視覺領域。圖像作為計算機視覺領域的處理對象,通常包含很多不改變原始信息表達的可變因素。例如一幅貓的圖像,若改變其亮度或對其進行旋轉,則圖像中目標物體依舊是貓。故可通過改變圖像中可變因素產(chǎn)生虛擬樣本。最常見的樣本增強方法包括旋轉、翻轉和加噪等。這些方法雖然較為簡單,但卻能產(chǎn)生很多有效的虛擬樣本,實現(xiàn)對訓練樣本集合的有效擴充。2.4小結本章節(jié)介紹了與課題相關的一些關于卷積神經(jīng)網(wǎng)絡的基礎知識。首先是包括卷積、池化、全連接層等的簡要介紹,后面介紹了在卷積神經(jīng)網(wǎng)絡訓練過程中常用到的幾種激活函數(shù)與優(yōu)化算法,并且對其各自的特點做了一些描述。最后,介紹了在深度學習模型訓練過程中易出現(xiàn)的過擬合現(xiàn)象以及解決過擬合問題的一些方法。3人臉表情圖片的預處理3.1圖像灰度化 圖像灰度化[21]的目的是為了簡化矩陣,提高運算速度。在彩色圖像中,由于各顏色間的色相和飽和度都不一樣,所以常常會出現(xiàn)一些混合色。如果不能很好地解決這一問題,那么彩色圖像在使用時就會出現(xiàn)失真。彩色圖像中的每個像素顏色都由R、G、B三個取值范圍都在0~255之間的分量來決定,這樣一個像素點的變化范圍就會有2563種顏色。而如果使三個分量取值相同,就可以得到灰度圖像,它是一種特殊的彩色圖像。這樣一個像素點的變化范圍只有256種。進行圖片識別時只需要使用灰度圖像里的信息即可,彩色圖片的信息數(shù)量太大會使計算量很大,因此圖像灰度化可以提高運算速度。該處理方式主要有以下幾種:(1)分量法分量法是指將彩色圖像中的三分量的亮度作為三個灰度圖像的灰度值并根據(jù)應用需要選取一種灰度圖像。(3-1)(2)最大值法選擇彩色圖像中的三分量亮度的最大值,將其作為灰度圖的灰度值。(3-2)(3)平均值法將彩色圖像中的三分量亮度求平均得到一個灰度值。 (3-3)(4)加權平均法根據(jù)重要性和其他指標,對具有不同權重的三個組成部分進行加權平均。并根據(jù)以下公式對三個分量進行加權可以獲得更合理的灰度圖像。(3-4)在實際進行灰度化時,主要使用OpenCv進行灰度化,其原理如下:OpenCV中灰度化是一個簡單的圖像處理操作,其目的是將彩色圖像轉換為灰度圖像。灰度化通常通過乘法操作將彩色圖像的三個顏色通道轉換為單一的亮度通道。灰度化的公式如下:(3-5)其中、、分別代表原圖像的紅、綠和藍的色彩通道的像素值。3.2人臉檢測 3.2.1基于Haar特征的cascade分類器 Haar特征Haar特征是一種用于物體識別的數(shù)字圖像特征,因其與哈爾小波變換相似而得名,可以將其用于人臉檢測和行人檢測等目標檢測任務。Haar特征通過將圖像劃分成不同大小、形狀的小矩形區(qū)域來提取特征,通過對眼睛、臉頰、鼻梁和嘴巴的顏色對比來反映圖像的灰度變化情況。它的特征模板包含白色、黑色兩種矩形,如圖3-1,主要有以下幾種。其特征值是白色矩形像素和減去黑色矩形像素和。并可以將這些特征值作為分類器的輸入,用于檢測人臉的位置、大小和方向等信息。它分為三類:邊緣特征、線性特征、中心特征和對角線特征。Haar特征的計算相對較快,并且在處理大量數(shù)據(jù)時表現(xiàn)穩(wěn)定,使其成為計算機視覺領域中受歡迎的特征提取方法之一。圖3-1Haar-Like特征模板級聯(lián)分類器在提取到特征后,需要對多個圖像特征進行識別,這個時候需要用到分類器。這個部分主要使用的是級聯(lián)分類器。人臉表情識別是指,計算機程序對輸入的人臉圖像進行檢測與判斷,從而識別出其對應的人臉是什么表情。表情識別程序像人眼一樣,在“看到”一張人臉后,能夠分辨出這個人的表情是開心、傷心還是驚訝等。但是,如果要實現(xiàn)人臉表情預測,第一步是要判斷當前圖像內是否出現(xiàn)了人臉,是否能將人臉部分進行割取,圖片中出現(xiàn)人臉才能判斷這張人臉是什么表情分類。在人臉檢測中的主要任務是構造一個分類器,它應該能夠區(qū)分包含人臉實例和不包含人臉實例的部分。這些包含人臉圖像實例被稱為“正類”,和不包含人臉圖像的被稱為“負類”。舉一個實例,比如說當識別一個動物是不是狗,如果是狗,則為正類;如果不是狗是其他動物,則被認為是負類。在該任務中,如果直接進行判斷,可能需要根據(jù)多個條件來判斷每個動物,這可能非常繁瑣。然而如果先比較它們腿的數(shù)目,并且將有“四條腿”的動物判斷為“可能為狗”,這樣就可以縮小范圍,并對此內的對象繼續(xù)使用其他的條件進行比較,分析和判斷是否為狗。而將沒有“四條腿”的動物直接被否決,即不可能為狗,認為是負類。通過這種方式,只要比較腿的數(shù)目是否為四條,就能排除樣本集中大量的負類,即其它不是狗的動物。以上就是級聯(lián)分類器的思路,具體實現(xiàn)過程中,它是由多個簡單的分類器按照一定的順序級聯(lián)而成的大分類器。基本原理如圖3-2所示。圖3-2級聯(lián)分類器示意圖級聯(lián)分類器的優(yōu)勢在于在開始階段就能夠排除明顯不符合要求的實例(負類),而只需要進行非常簡單的判斷方法。且這些負類不再參與后續(xù)比較,有利于極大提高后面分類的速度。Haar級聯(lián)分類器 Haar級聯(lián)分類器是基于Haar-like特征,運用積分圖加速計算,并用分類器來進行人臉檢測,該分類器是用Adaboost算法訓練的強級聯(lián)分類器。進行人臉檢測時,首先將人臉所在的圖像通過適當?shù)姆绞角蟹殖珊芏嗖煌笮〉膱D像塊,然后使用分類器根據(jù)某種特征對每個圖形塊給出是否為完整單個人臉圖像的判定,如果某個圖形塊是完整的單個人臉圖像,則該圖像塊的位置就是一個人臉的位置,由此實現(xiàn)對圖像中單個或多個人臉的檢測或定位。將圖像切分成不同大小的圖像塊是為了能夠檢測出圖像中不同大小的人臉。在將整幅圖像切分為多個圖像塊之后,可分別判斷每一個小圖像塊是否為人臉區(qū)域,此時人臉檢測任務可轉化為對多個小圖像塊的二分類任務。對于給定的訓練樣本集S,在通過多種矩形算子求得圖像塊的多種Haar-Like特征后,就能使用每種Haar-Like特征分別構造弱分類器,因此每種Haar-Like特征對應著一個弱分類器。雖然根據(jù)某一類Haar-Like特征構造的弱分類器能達到一定的分類率,但其分類效果遠不能達到實際任務的需求,因此必須借助AdaBoost算法來組建強分類器從而提升模型性能。但是在實際場景當中,實際樣本多為負樣本,若直接使用構造好的強分類器進行人臉檢測,將會耗費大量時間檢測非人臉圖像。為了解決這一問題,可使用級聯(lián)分類器來實現(xiàn)快速人臉檢測。它的主要思想是,把通過上面的方法訓練好的多個強分類器按照由簡單到復雜的順序排列好,并將它們串聯(lián)起來。將切分好的不同的圖像塊按順序經(jīng)過級聯(lián)檢測器中的每一級,并且每經(jīng)過一級,就將被判別為非人臉的圖像塊及時丟棄,這樣就不會進行后面的多余的比較。最終將可以經(jīng)過全部級聯(lián)分類器檢測并未被排除的圖像塊分類為人臉圖像塊。通過級聯(lián)分類器實現(xiàn)自動人臉檢測的過程如圖所示:圖3-3級聯(lián)分類器基于Haar特征的cascade分類器在實際實驗中的使用在實驗中,對于一張樣例圖片,先默認加載彩色圖片將其讀取,然后將圖像灰度化。然后加載檢測人臉的模型文件(如下圖),直接使用OpenCV提供的訓練好的用于人臉定位的級聯(lián)分類器圖3-4級聯(lián)分類器-正面人臉檢測模型文件檢測出圖片中所有的人臉,設置人臉圖像塊的最小尺寸為30*30像素,忽略小于這個尺寸的目標。3.2.2BlazeFace人臉檢測器 BlazeFace[22]是一款輕量級且性能良好的人臉檢測器,專為移動GPU推理量身定制。它的速度非??欤哂泻軓姷膶崟r性能,被稱為“亞毫秒級的人臉檢測器”。它能夠應用于任何對性能要求極高的增強現(xiàn)實應用中。作者在MobileNet-SSD目標檢測框架下,做了一些改進,作者將其貢獻概括為:(1)受MobileNetV1/V2啟發(fā)但又不同于MobileNetV1/V2的專為輕量級檢測定制的緊湊型特征提取網(wǎng)絡。(2)從單次多盒檢測器SSD模型修改的對GPU更友好的anchor機制。(3)采用“tieresolutionstrategy”而非NMS(非最大抑制)處理重疊的預測結果。MobileNet-SSD目標檢測框架MobileNet-SSD是一種結合了MobileNet和SSD的目標檢測網(wǎng)絡模型。通過使用深度可分離卷積和特征金字塔網(wǎng)絡,MobileNet-SSD在保持高精度的同時,具有較低的計算和存儲成本。MobileNet模型是一種輕量化深度神經(jīng)網(wǎng)絡,它是Google為智能手機等嵌入式設備所研發(fā),具有一個高效的網(wǎng)絡架構,可以通過兩個超參數(shù)直接構建模型,使得模型非常小、低延遲且易滿足嵌入式設備要求,其核心思想是深度可分離卷積。深度可分離卷積是卷積神經(jīng)網(wǎng)絡中的一種算法,通過劃分空間維度和通道(深度)維度的相關性來改進標準卷積計算,減少卷積計算所需的參數(shù)數(shù)量,且已在一些研究中被證明可以提升卷積核參數(shù)的使用效率。該算法的原型可認為來自于Inception模塊,其卷積計算分為兩部分,首先對通道(深度)分別進行空間卷積(depthwiseconvolution),并對輸出進行拼接,隨后使用單位卷積核進行通道卷積(pointwiseconvolution)以得到特征圖。在應用方面,深度可分卷積被用于微型神經(jīng)網(wǎng)絡的搭建,也被用于優(yōu)化大規(guī)模卷積神經(jīng)網(wǎng)絡的結構。SSD是一種用于目標檢測的深度學習模型,它的全稱為SingleShotMultiBoxDetector?!癝ingleShot”可譯為“單發(fā)”,指的是指單個神經(jīng)網(wǎng)絡在一次前向計算中同時預測多個目標的位置和類別,“MultiBox”可譯為“多框”,指的是多個預測目標位置,它的主要思想是在整個圖像上應用多個卷積層,來預測的邊界框,這些邊界框具有不同尺度和長寬比,且通過非極大值抑制來獲得最終的檢測結果。該學習模型是基于經(jīng)典的VGG16分類網(wǎng)絡做為BaseNetwork,然后對其作出改進。BlazeFace模型結構BlazeFace模型主要從四個方面展開。(1)增大感受野在MobileNet架構中,作者使用5x5卷積核代替3x3卷積核,擴大感受野,而這種在深度可分離卷積中卷積核大小增大,對計算量增加是有限的。另外為了加強感受也Size的傳遞,作者提出了DoubleBlazeBlock模塊,如下圖所示:圖3-5BlazeBlock(left)anddoubleBlazeBlock(2)特征提取由于BlazeFace特定于垂類任務人臉檢測,而人臉尺度變換較小,因此BlazeFace定義更加輕量的特征提取網(wǎng)絡,輸入圖像尺寸為128x128,特征提取包括5個BlazeBlock和6個doubleBlazeBlock。網(wǎng)絡架構如下表:表3-1特征提取網(wǎng)絡結構(3)優(yōu)化anchor機制在8*8特征圖尺寸處停止而無需進一步下采樣(如下圖所示),并且將anchor做如下改進:將下面三層中的每個像素的兩個anchor替換為6個8*8的anchor。并且作者認為將anchor固定為1:1縱橫比足以進行精確的面部檢測。圖3-6優(yōu)化anchor機制(4)后處理算法在NMS中,anchor機制中特征提取器不能將分辨率降低到8*8以下。因此在與給定對象重疊時,只有一個勝出的anchor用于算法輸出,這導致在視頻中進行檢測時,人臉框抖動明顯。為了降低這種效應,作者不再使用NMS,代替使用一種blending策略,將邊界框的回歸參數(shù)估計為重疊預測之間的加權平均值。它幾乎不會產(chǎn)生之前NMS部分的成本。作者稱對于在視頻中的面部檢測任務,此調整導致準確度提高10%。BlazeFace的效果如下圖所示:圖3-7帶有面部邊界框和特征點的人臉圖片BlazeFace在實驗中的使用由于BlazeFace人臉檢測器面向移動端,其有前置與后置之分,后置攝像頭的像素更高,更適合拍攝靜態(tài)照片和視頻,在實際的實驗中,也選擇用于后置的模型類型。使用過程:根據(jù)模型類型初始化模型,使用訓練好的權重運行TensorFlowLite模型的解釋器,然后獲取輸入與輸出詳細信息,為模型生成錨點;準備用于推理的圖像,對圖像進行推理,根據(jù)檢測分數(shù)過濾分數(shù),提取過濾檢測的信息,使用非最大抑制過濾結果,更新fps計算器添加邊界框和關鍵點,如果識別到目標,將格式進行轉換并返回結果。3.3人臉圖像數(shù)據(jù)增強 將使用人臉檢測器檢測到的人臉部分的圖片進行處理,先對圖片進行縮放,然后對圖片數(shù)據(jù)進行數(shù)據(jù)增強,最后將圖片大小壓縮為統(tǒng)一大小為48*48像素,便于輸入到模型中進行預測。3.4人臉表情圖片預測及結果 在本章節(jié)中,由于使用了兩種人臉檢測的方法,故在對每種人臉檢測方法進行表情預測的同時比較這兩種方法的優(yōu)劣,由于時間關系,選取了210張圖片[23]進行分析。在網(wǎng)絡上隨機選取一些圖片,并且使用人眼識別做好標簽。對兩種人臉檢測器進行圖片預測的結果的準確率與測試集圖片的數(shù)量進行比較,如圖3-7,可看出識別準確率與數(shù)據(jù)集中各樣本類別的數(shù)量具有很大關系;同時對兩種人臉檢測器進行比較分析,可得到總體來說,BlazeFace優(yōu)于HaarCascade。圖3-8表情識別準確率百分比圖3-9表情識別準確的結果數(shù)量具體的分析報告如下:(各表情具有30張樣本圖片)表3-2人臉表情圖片預測及結果3.5小結本章節(jié)為人臉表情圖片的預處理。首先介紹了圖像灰度化的原理與優(yōu)點以及圖像灰度化處理的四種方式,然后對兩種人臉檢測方法及其原理分別做了介紹,并且對數(shù)據(jù)增強進行了簡要說明,最后從網(wǎng)絡上隨機選擇了210張圖片對人臉表情識別的檢測及結果做了分析。4基于Resnet的人臉表情識別模型構建4.1相關理論4.1.1殘差網(wǎng)絡(ResNet)的提出 在殘差網(wǎng)絡(ResNet)網(wǎng)絡提出之前,傳統(tǒng)的卷積神經(jīng)網(wǎng)絡都是通過將一系列卷積層與池化層進行堆疊得到的。從理論上來講,更深的深度學習網(wǎng)絡可以提高表現(xiàn)。低/中/高層特征和分類器進行集成得到深度網(wǎng)絡,并且隨著網(wǎng)絡層次的加深,可得到更豐富的特征層次。舉一個例子,如果網(wǎng)絡結構只有一層,但是要學習的特征非常復雜而無法完全學習;然而如果要分層進行學習,就需要有多層網(wǎng)絡。網(wǎng)絡的加深可以使每一層學習到更細化的特征,提供更好的表達能力。但是當堆疊到一定網(wǎng)絡深度時,就會出現(xiàn)兩個問題。梯度消失或爆炸問題。在網(wǎng)絡反向傳播過程中,由于不斷的累計鏈式求導法則,如果每一層的梯度都小于1,由于累乘效應,出現(xiàn)了某些參數(shù)的梯度非常小的現(xiàn)象。在使用這些梯度更新時,參數(shù)值基本沒有發(fā)生變化,因此就出現(xiàn)了網(wǎng)絡訓練幾乎停止,模型無法繼續(xù)優(yōu)化,即梯度消失的問題。與之剛好相反的是梯度爆炸,如果每一層的梯度都大于1,就可能會出現(xiàn)某些參數(shù)的梯度在累乘后變得非常大。使用這些梯度更新參數(shù)后,就會導致參數(shù)變化過大,從而使得損失函數(shù)震蕩。出現(xiàn)上述現(xiàn)象的原因之一是因為傳統(tǒng)神經(jīng)網(wǎng)絡模型多采用Sigmoid激活函數(shù)或tanh激活函數(shù)。由于這些激活函數(shù)的梯度在任何情況下的取值均小于1,故梯度值將會在深度網(wǎng)絡模型的訓練過程中逐層衰減并最終接近于0。現(xiàn)考慮一個簡單的多層神經(jīng)網(wǎng)絡如下圖:圖4-1一個簡單的多層神經(jīng)網(wǎng)絡假設該模型中各神經(jīng)元均采用Sigmoid函數(shù)作為激活函數(shù),第層與第+1層之間的連接權重為,第層神經(jīng)元的偏置為,則對于輸入的樣本數(shù)據(jù)X,該模型的最終輸出為(4-1)記模型第j層結點的輸出為,則目標函數(shù)為(4-2)其中,W為參數(shù)變量。此時J(W)關于的梯度為(4-3)上式中,均為函數(shù)的梯度,其取值情況如下圖所示,取值均小于1。由于為連乘模式,故神經(jīng)網(wǎng)絡模型前一層參數(shù)所對應的梯度取值必然比小,當神經(jīng)網(wǎng)絡模型足夠深時,該網(wǎng)絡前幾層的參數(shù)均會接近于0,從而出現(xiàn)梯度消失現(xiàn)象。圖4-2Sigmoid函數(shù)梯度取值情況解決上述問題的方法之一是使用Relu激活函數(shù),它的導數(shù)為1,這樣如果累乘最終還是1,就不會存在梯度消失或爆炸問題了。而且每層的網(wǎng)絡都可以得到相同的更新速度,有助于網(wǎng)絡的訓練加快。此外,在網(wǎng)絡中使用BN(BatchNormalization)層也可以解決該問題。隨著網(wǎng)絡深度加深,神經(jīng)網(wǎng)絡在做非線性變換前的激活輸入會逐漸偏移或者變化,訓練過程中收斂緩慢的原因通常是總體分布逐漸接近非線性函數(shù)的取值區(qū)間的上下限。因此,這導致低神經(jīng)網(wǎng)絡的梯度消失,最終使得深度神經(jīng)網(wǎng)絡收斂緩慢。BN就是通過一定的歸一化方法,將每層神經(jīng)網(wǎng)絡任意神經(jīng)元的輸入值的越來越偏的分布強行拉回到均值為0、方差為1的標準正態(tài)分布,使得激活輸入值落在非線性函數(shù)對輸入更敏感的范圍。輸入的這種小變化將導致?lián)p失函數(shù)的較大的變化,使梯度變大并避免梯度消失問題。此外,增加梯度意味著學習收斂速度快,這可以使訓練速度大大加快。第二,退化問題:隨著網(wǎng)絡層數(shù)加深,準確率逐漸飽和,然后出現(xiàn)急劇下降,具體表現(xiàn)為深層網(wǎng)絡的訓練效果反而不如淺層網(wǎng)絡好的現(xiàn)象,被稱為網(wǎng)絡退化。如果淺層網(wǎng)絡效果很好,那么網(wǎng)絡層數(shù)的增加即使不會引起精度上的提升,也不該使模型效果變差。但事實上非線性的激活函數(shù)會造成很多不可逆的信息損失。信息損失隨著網(wǎng)絡加深到一定程度會增加,最終就會造成網(wǎng)絡的退化。4.1.2殘差塊 ResNet就是提出一種讓網(wǎng)絡擁有恒等映射能力的方法,這種能力就是如果更換了更深層的網(wǎng)絡,它的性能或表現(xiàn)至少不會差于淺層網(wǎng)絡??紤]到網(wǎng)絡要學習一個的映射比學習的映射更難,則把網(wǎng)絡結構設計成,即完成了恒等映射的學習又降低了學習難度。其中,是殘差結構的輸入,該層網(wǎng)絡學習的映射用表示,而是整個殘差結構的輸出。圖4-3殘差塊隨著網(wǎng)絡的加深,殘差結構會使F(x)逼近于0,這樣做的目的在最優(yōu)淺層網(wǎng)絡的基礎上,深度網(wǎng)絡的精度不會下降。在淺層網(wǎng)絡中,并不容易找到最優(yōu)的網(wǎng)絡結構,但是對于ResNet來說,它可以通過增加深度找到最優(yōu)的淺層網(wǎng)絡,并且保證深層網(wǎng)絡不會發(fā)生網(wǎng)絡退化。總結來說,殘差神經(jīng)網(wǎng)絡引入了殘差塊,它們通過“跳躍連接”繞過一層或多層網(wǎng)絡,達到學習恒等映射的目的,從而解決深度網(wǎng)絡訓練中的梯度消失和表示瓶頸問題。4.1.3殘差網(wǎng)絡(ResNet)整體結構常用的幾種不同深度的殘差網(wǎng)絡(ResNet)結構[24]如表所示:表4-1殘差網(wǎng)絡結構本文使用的是ResNet18網(wǎng)絡模型,該具體結構如下:圖4-4ResNet18網(wǎng)絡模型結構4.2模型訓練及實驗結果分析 4.2.1實驗環(huán)境及參數(shù)設置 本次實驗所用的環(huán)境為:處理器為AMDRyzen73750HwithRadeonVegaMobileGfx2.30GHz,內存16GB,顯卡為NVIDIAGeForceGTX1660Ti。系統(tǒng)類型為64位操作系統(tǒng),基于x64的處理器,編程語言為Python3.10.9,深度學習框架是Keras2.10.0。Keras是基于Tensorflow深度學習框架的高級應用程序接口,這些接口可以將層定義為函數(shù),神經(jīng)網(wǎng)絡被定義為一系列順序化的函數(shù),一個接一個地被應用,封裝了很多深度學習的模塊以及經(jīng)典的網(wǎng)絡模型,便于搭建與學習網(wǎng)絡模型。它的優(yōu)點在于它的易用性,是最容易上手并快速運行的框架。它可用于快速設計原型、高級研究和生產(chǎn),具有以下三個主要優(yōu)勢:方便用戶使用、模塊化和可組合以及易于擴展。4.2.2數(shù)據(jù)集介紹及預處理數(shù)據(jù)集是機器學習中的基本概念之一,它是一組數(shù)據(jù)的集合,可用于訓練和測試機器學習模型。數(shù)據(jù)集包括輸入數(shù)據(jù)和對應的輸出標簽,也可以只包括輸入數(shù)據(jù)樣本??梢詫?shù)據(jù)集分為訓練集、驗證集和測試集,本文的實驗中以上三種數(shù)據(jù)集都有劃分和使用。下面是本文的實驗中所使用的數(shù)據(jù)集。(1)FER2013數(shù)據(jù)集該人臉表情數(shù)據(jù)集由35886張人臉表情圖片組成。這些圖片由三個集合組成,分別測試圖(Training)28708張,公共驗證圖(PublicTest)和私有驗證圖(PrivateTest)各3589張。每張圖片都是灰度圖,其大小固定為48×48像素。圖片中的所有人臉共有7種表情,在測試圖、公共驗證圖、私有驗證圖這三個圖集中,它們的具體表情對應的標簽和中英文如下表,該數(shù)據(jù)集的人為準確率是65%士5%。表4-2FER2013數(shù)據(jù)集表情標簽分布在實驗過程中,將測試圖(Training)作為訓練集,公共驗證圖(PublicTest)作為驗證集,將私有驗證圖(PrivateTest)作為測試集。(2)JAFFE數(shù)據(jù)集該數(shù)據(jù)庫包含213張由10位日本女模特構成的7種面部表情(6種基本面部表情+1個中性)的圖像,圖片為256*256灰度圖(已轉換為48*48),這7種表情分別是0

anger

生氣(30);

1

disgust

厭惡(29);

2

fear

恐懼(32);

3

happy

開心(31);

4

sad

傷心(31);5

surprised

驚訝(30);

6

normal

中性(30)。JAFFE數(shù)據(jù)集沒有測試數(shù)據(jù),需要自己劃分,實際使用交叉驗證法進行劃分。(3)CK+數(shù)據(jù)集CK+數(shù)據(jù)集包含123

個對象的327

個被標記的表情圖片序列,共分為0

anger

生氣(45);

1

disgust

厭惡(59);

2

fear

恐懼(25);

3

happy

開心(69);

4

sad

傷心(28);5

surprised

驚訝(83);

7contempt蔑視(18)七種表情。CK+數(shù)據(jù)集沒有測試數(shù)據(jù),需要自己劃分,實際使用交叉驗證法進行劃分。4.2.3實驗過程及結果分析使用一般的卷積神經(jīng)網(wǎng)絡進行訓練起初,選擇了一般的卷積神經(jīng)網(wǎng)絡進行訓練,它的網(wǎng)絡結構如下表所示:表4-3一般的卷積神經(jīng)網(wǎng)絡結構使用4.2.2小節(jié)中所介紹的三種數(shù)據(jù)集:FER2013數(shù)據(jù)集、CK+數(shù)據(jù)集、JAFFE數(shù)據(jù)集進行實驗,參數(shù)設置如下表:表4-4實驗初始參數(shù)設置FER2013數(shù)據(jù)集:使用一般的卷積網(wǎng)絡進行訓練,選擇SGD優(yōu)化算法,學習率設置如表4-4所示,選擇多分類交叉熵損失函數(shù)。訓練最終結果如圖4-5,訓練集訓練準確率為80.91%,測試集準確率為65.72%。在圖4-6中,左側圖片與右側圖片分別為FER2013數(shù)據(jù)集在訓練300個epoch過程中訓練集與驗證集的準確率與損失變化情況。圖4-5FER2013數(shù)據(jù)集訓練最終結果圖4-6FER2013數(shù)據(jù)集訓練過程曲線圖(2)JAFFE數(shù)據(jù)集:使用一般的卷積網(wǎng)絡進行訓練,選擇Adam優(yōu)化算法,學習率設置如表4-4所示,選擇多分類交叉熵損失函數(shù)。訓練最終結果如圖4-7,訓練集訓練準確率為100.00%,測試集準確率為83.72%。如圖4-8,左側圖片與右側圖片分別為JAFFE數(shù)據(jù)集在訓練300個epoch過程中訓練集與驗證集的準確率變化情況與損失變化情況。圖4-7JAFFE數(shù)據(jù)集訓練最終結果圖4-8JAFFE數(shù)據(jù)集訓練過程曲線圖(3)CK+數(shù)據(jù)集:使用一般的卷積網(wǎng)絡進行訓練,優(yōu)化器為SGD,學習率設置如表4-4所示,選擇多分類交叉熵損失函數(shù)。訓練最終結果如圖4-9,訓練集訓練準確率為99.66%,測試集準確率為100.00%。在圖4-10中,左側圖片與右側圖片分別為CK+數(shù)據(jù)集在訓練300個epoch過程中訓練集與驗證集的準確率與損失變化情況。圖4-9CK+數(shù)據(jù)集訓練最終結果圖4-10CK+數(shù)據(jù)集訓練過程曲線圖分析:該網(wǎng)絡模型在FER2013數(shù)據(jù)集上的表現(xiàn)有待提高,對于JAFFE數(shù)據(jù)集與CK+數(shù)據(jù)集訓練效果良好,可以提高JAFFE數(shù)據(jù)集的測試準確率。使用殘差網(wǎng)絡(ResNet)進行訓練對數(shù)據(jù)集使用殘差神經(jīng)網(wǎng)絡(更深層的網(wǎng)絡)得到具有更好性能的模型,訓練時都選擇Adam優(yōu)化算法,學習率設置為0.001,并且設置多分類交叉熵損失函數(shù)。訓練過程如下:(1)FER2013數(shù)據(jù)集:使用殘差神經(jīng)網(wǎng)絡進行訓練,訓練最終結果如圖4-11,訓練集訓練準確率為97.97%,測試集準確率為67.90%。圖4-11FER2013數(shù)據(jù)集訓練最終結果(2)JAFFE數(shù)據(jù)集:使用殘差神經(jīng)網(wǎng)絡進行訓練,訓練最終結果如圖4-12,訓練集訓練準確率為99.16%,測試集準確率為88.32%。圖4-12JAFFE數(shù)據(jù)集訓練最終結果(3)CK+數(shù)據(jù)集:使用殘差神經(jīng)網(wǎng)絡進行訓練,訓練最終結果如圖4-13,訓練集訓練準確率為99.83%,測試集準確率為99.49%。圖4-13CK+數(shù)據(jù)集訓練最終結果總結:通過使用殘差網(wǎng)絡模型訓練,對于FER2013數(shù)據(jù)集,它在測試時的準確率提升了2%。而對于JAFFE數(shù)據(jù)集,它的測試集準確率提升了5%。實驗結果分析雖然測試集準確率得到了一定的提高,但是由于測試集準確率非常高,出現(xiàn)了過擬合現(xiàn)象,故增加數(shù)據(jù)增強方法抑制過擬合:FER2013數(shù)據(jù)集:在小節(jié)使用的模型與參數(shù)的基礎上,對數(shù)據(jù)集增加一些數(shù)據(jù)增強的方法,訓練集訓練準確率為94.89%,測試集準確率為69.01%。圖4-14FER2013數(shù)據(jù)集訓練最終結果對FER2013測試集也進行數(shù)據(jù)增強可使測試集準確率達到71.88%。圖4-15FER2013測試集的準確率結果4.3小結本章節(jié)主要介紹了人臉表情識別模型構建與訓練的過程。首先介紹了殘差網(wǎng)絡以及殘差塊,并且提出殘差網(wǎng)絡,它能夠解決網(wǎng)絡中存在的比如梯度消失或梯度爆炸以及網(wǎng)絡退化等問題并且保證模型能夠通過加深網(wǎng)絡層數(shù)學習到更多更完整的樣本特征。然后介紹了本文所使用的網(wǎng)絡模型的結構;然后介紹了三個數(shù)據(jù)集,并且記錄了實驗過程,并對實驗結果做了分析,對結果進行優(yōu)化使得最終的FER數(shù)據(jù)集測試準確率提高了6%。表4-5FER2013數(shù)據(jù)集實驗數(shù)據(jù)5人臉表情識別系統(tǒng)的設計與實現(xiàn) 5.1系統(tǒng)目標要求該系統(tǒng)的目標是在基于殘差神經(jīng)網(wǎng)絡的訓練得到的一個具有較良好準確率的模型,能夠將設備采集到的單張圖片上的人臉表情進行預測分類,還可以將其應用到攝像頭實時拍攝與視頻中的人臉表情識別。5.2系統(tǒng)需求分析人臉表情識別系統(tǒng)的需求分析如下:(1)功能分析:實現(xiàn)對單張圖片、攝像頭拍攝中出現(xiàn)的、視頻中的單張或多張人臉進行檢測;并且能夠對這些人臉進行表情識別;使用可視化界面,在對單張圖片進行檢測時,能夠提供預測結果及其概率,并提供識別到的表情圖片,在對攝像頭拍攝、視頻中的人臉進行檢測時,能夠清晰地框出其人臉部分,在進行表情識別時,能夠清晰地展現(xiàn)出預測的表情結果。(2)性能分析:能夠準確地在目標圖片或幀中框出人臉部分,并且能夠準確地識別其表情;能夠快速地進行表情識別,快速響應并且顯示結果;系統(tǒng)應具有良好的魯棒性。5.3系統(tǒng)設計系統(tǒng)設計部分實現(xiàn)“選擇圖像”、“選擇攝像頭”、“選擇視頻”的功能。在“選擇圖像”模塊:(1)先以設置的目錄路徑打開文件系統(tǒng)以選擇圖片,讀取圖像數(shù)據(jù),將圖像轉為RGB顏色空間,并壓縮為320*240像素,并將圖片顯示在UI界面中的特定位置;(2)然后將圖片中出現(xiàn)的單張或多張人臉檢測出來,主要使用Haar級聯(lián)分類器或者BlazeFace檢測器進行檢測。對于每一張人臉,將檢測到的人臉區(qū)域進行標記,并將檢測到的人臉數(shù)據(jù)進行增強;(3)下一步是將圖片中的人臉區(qū)域輸入到訓練好的模型中進行預測,并且將預測結果線性加權,在原始的圖片中框出矩形區(qū)域,并且將預測結果轉為文字顯示在邊框周圍,將最終得到的有預測結果的圖片進行保存;(4)最后是顯示部分:根據(jù)預測結果得到結果的表情名稱與emoji圖片(壓縮為100*100像素)進行顯示,并將結果對所有分類的可能性繪制為一幅概率直方圖。在“選擇攝像頭”或“選擇視頻”模塊:先打開攝像頭/打開視頻,每隔30ms按幀讀取視頻,對于每一幀圖片,先將原圖像縮放,再將圖片進行灰度化,對這一張圖片進行人臉檢測,對檢測到的所有人臉,將每一張人臉圖片進行數(shù)據(jù)增強并壓縮為48*48像素大小,然后輸入到模型中進行預測,得到預測結果的文字,將人臉部分框出來,并且將預測的文字顯示到邊框上。5.4系統(tǒng)實現(xiàn)以PyQt5為GUI框架,Qt是一個跨平臺的C++開發(fā)庫,主要用來開發(fā)圖形用戶界面(GraphicalUserInterface,GUI)程序。PyQt中有非常多的功能模塊,開發(fā)中最常用的功能模塊主要有三個:QtCore、QtGui和QtWidgets。系統(tǒng)以PyQt5為框架設計了一個GUI界面,如下圖所示:圖5-1原始GUI界面(1)點擊“選擇圖像”,選擇一張測試圖片如圖5-2,系統(tǒng)對該張圖片進行處理,并將最終的結果顯示在系統(tǒng)界面如圖5-3,并且最終可將處理后的圖片進行保存,得到圖5-4的結果,在該結果中,人臉部分被框出來,并且識別到的表情“happy”被標記在框中。圖5-2測試圖片原圖圖5-3點擊“選擇圖像”選擇一張圖片后的界面圖5-4系統(tǒng)處理后的圖片(2)點擊“選擇攝像頭”,會將電腦的攝像頭打開,不斷對攝像頭收集到的實時圖片進行處理,將出現(xiàn)在界面中的人臉框出來,并將識別到的表情標注在框中。下圖為使用本人的筆記本攝像頭時截取到的一張?zhí)幚砗蟮膱D片,可以將人臉部分框出來,并將表情識別為“開心”。圖5-5點擊“選擇攝像頭”后的處理圖片(3)點擊“選擇視頻”,選擇一個樣例視頻進行處理,該視頻是一家五口人正在拍攝全家福的視頻片段,時長為12秒,系統(tǒng)可以對視頻全長進行處理,為進行效果展示,隨機截取兩張截圖。圖5-6為所取第一張,左圖為處理前的畫面,右圖為為經(jīng)過系統(tǒng)處理后的畫面圖,在該張圖片中,檢測到五張人臉,并且對這五張人臉的表情進行了正確識別,分別為“開心”、“開心”、“中性”“開心”“開心”(順序為從左到右,從上到下);圖5-7為所取第二幀,左圖為處理前的畫面,右圖為為經(jīng)過系統(tǒng)處理后的畫面圖,在該張圖片中,由于圖片中父親的臉(即圖中的左上方人臉)有遮擋且為測臉,故難以檢測,只檢測到四張人臉,并且對這四張人臉的表情進行了正確識別,分別為“開心”、“傷心”、“開心”、“開心”。圖5-6點擊“選擇視頻”后隨機截取到的第一張圖片(第3秒)圖5-7點擊“選擇視頻”后隨機截取到的第二張圖片(第11秒)5.5小結本章節(jié)主要設計了基于人臉面部表情識別的界面,并將人臉檢測與表情識別功能加以擴展,并將這些功能在一個系統(tǒng)上得以實現(xiàn)。首先確定了系統(tǒng)的實現(xiàn)目標,然后對要解決的問題進行詳細分析,并詳細描述了對實現(xiàn)的功能的具體設計與實現(xiàn)過程。主要采用PyQt5工具包進行系統(tǒng)GUI界面的編寫,使用3.2章節(jié)所介紹的算法實現(xiàn)人臉檢測部分的功能,表情識別部分使用訓練好的ResNet網(wǎng)絡模型。6總結與展望 6.1總結隨著計算機技術的不斷發(fā)展,深度學習也逐漸變成一種很受歡迎的算法,在諸多領域得到應用,如人臉識別、無人駕駛、醫(yī)療、刑偵等方面。在本篇文章中,在模型構建與訓練、人臉檢測與表情識別都使用到深度學習方法。在傳統(tǒng)的機器學習中,可以將機器學習視為尋找一種模型來擬合輸入與輸出的映射關系,并且,樣本特征的提取需要使用其他的機器學習方法,如分類器。隨著深度學習的發(fā)展,深度學習模型可以將提取樣本特征和模型訓練合并,省去一部分人力。具體來說,在人臉檢測部分可以看出其特點,在第一種方法,即使用基于Haar特征的Cascade分類器時,先在圖片中提取Haar特征,使用求得的每種特征分別構造弱分離器,然后借助Adaboost算法組建強分類器,借助級聯(lián)分類器的思想將訓練好的多個強分類器組織起來處理圖片數(shù)據(jù),并最終得到人臉圖像塊。在第二種方法,使用BlazeFace人臉檢測器,實際上,就是基于一個訓練好的改進的SSD模型預測器來提取人臉特征并且最終得到人臉圖像塊。從方法一到方法二可看作從傳統(tǒng)機器學習到深度學習的發(fā)展。此外,隨著數(shù)據(jù)集數(shù)量的增加,樣本特征也隨之增加,淺層的神經(jīng)網(wǎng)絡不能較好擬合數(shù)據(jù)集特征,故在增加神經(jīng)網(wǎng)絡層數(shù)的同時想要保證模型性能更優(yōu),引出了殘差結構,使用了殘差網(wǎng)絡優(yōu)化數(shù)據(jù)集的測試準確率。使用更復雜的模型易出現(xiàn)過擬合問題,可使用數(shù)據(jù)增強的方法解決過擬合。最終在人臉檢測部分使用BlazeFace檢測器,使用用FER2013數(shù)據(jù)集訓練好的殘差神經(jīng)網(wǎng)絡對單張圖片中出現(xiàn)的人臉表情進行識別,并且將其擴展到對攝像頭拍攝到的與視頻中的人臉表情進行識別,最終以人臉表情識別系統(tǒng)來呈現(xiàn)上述功能。6.2展望在人臉面部表情識別這個題目的整個研究過程中,從一開始的覺得很新奇到看起來很簡單,內容也不多,再到后面發(fā)現(xiàn)每一個點都包括許多與之相關的內容,都需要學習與理解大量與這個點相關的知識點,并且在不斷的學習過程中,更能意識到自己的不足以及未來還需要做好的工作。本人認為學習正是一個不斷發(fā)現(xiàn)的過程,需要長期的持續(xù)的持之以恒的努力。由于時間原因,有很多想要做但是沒有完成的方面以及在整個過程中不斷發(fā)現(xiàn)需要改進的方面如下所示:(1)最初選擇該題目時,在模型訓練部分,想過用傳統(tǒng)機器學習的方法,包括進行數(shù)據(jù)預處理、人臉特征提取,分類器三步,將其結果與深度學習方法使用卷積神經(jīng)網(wǎng)絡進行比較;(2)數(shù)據(jù)和特征決定了機器學習的上限,而模型和算法只是逼近這個上限而已。在力求得到良好性能的模型后,要能夠對數(shù)據(jù)集進行處理以提高其測試準確率。對于FER2013數(shù)據(jù)集,存在很多問題,比如圖像沒有被正確標記、一些圖片沒有人臉等問題;在FER2013訓練集中,標簽為happy的樣本圖片有7215張,而標簽為disgust的只有436張,表現(xiàn)出Fer2013數(shù)據(jù)集不同標簽的樣本數(shù)量不均衡,這嚴重影響了不同表情圖片的預測結果的準確率的不均勻性,如3.4小節(jié)分析所示。故需要對數(shù)據(jù)集進行處理,期望以此方法提高測試時的準確率。(3)在對攝像頭實時拍攝以及視頻的處理比較單一,只截取部分圖片進行單一的表情識別分類,忽略了這些圖片的聯(lián)系。在一個時間片內,一小段視頻內,多張有關聯(lián)的圖片形成序列,可以使用循環(huán)神經(jīng)網(wǎng)絡或者長短期記憶網(wǎng)絡來處理以生成更好的視頻理解,提高表情預測的準確率。(4)對人臉檢測方法的學習與理解其原理只是淺嘗輒止,希望后面能夠繼續(xù)通過學習理解其具體實現(xiàn)過程以及了解模型權重參數(shù)文件是如何生成的。(5)人臉檢測的方法還有很多,如HOG檢測器,使用dlib基于CNN的人臉檢測器、MTCNN算法等。在多學習的基礎上,如果能將不同的人臉檢測進行結合以提取各自的優(yōu)點,有希望得到更好的效果。(6)正如3.4小節(jié)的分析,本文章沒有考慮到交叉表情,則在識別如驚恐可能識別為驚訝或者恐懼,如對人臉的微小表情,有的人無表情(中性)的時候表現(xiàn)為微笑或者嚴肅;只考慮單分類問題易出現(xiàn)識別單一或者錯

溫馨提示

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

評論

0/150

提交評論