蔡靖,杜佳辰,王慶,周泓任
(吉林大學(xué) 儀器科學(xué)與電氣工程學(xué)院,吉林 長春 130026)
Hinton 等人在研究深度卷積神經(jīng)網(wǎng)絡(luò)中通過引入ReLU 函數(shù)以及采用多GPU 訓(xùn)練等方式加快了網(wǎng)絡(luò)的訓(xùn)練速度并提高了網(wǎng)絡(luò)模型的準(zhǔn)確率[1]。LeCun 等人表明深度學(xué)習(xí)通過使用反向傳播算法來發(fā)現(xiàn)大型數(shù)據(jù)集中的復(fù)雜結(jié)構(gòu),以指示機(jī)器應(yīng)如何更改用于從前一層的表示計算每一層的表示的內(nèi)部參數(shù)。深度卷積網(wǎng)絡(luò)在處理圖像、視頻、語音和音頻方面取得了突破性進(jìn)展,而遞歸網(wǎng)絡(luò)則為文本和語音等順序數(shù)據(jù)帶來了光明[2]。隨著科學(xué)技術(shù),尤其是計算機(jī)技術(shù)方面的不斷進(jìn)步,人們對卷積神經(jīng)網(wǎng)絡(luò)的研究也不斷深入,面部表情識別技術(shù)也隨之得到了發(fā)展。同時,一些問題也隨之而來,例如:如何提高面部表情分類的準(zhǔn)確率,如何能夠在保證準(zhǔn)確率的前提下減少計算的參數(shù)量等。
Tang 等人[3]提出將卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN)中融入支持向量機(jī)(SVM),同時修改了全連接層中的計算損失值的方法,在表情數(shù)據(jù)集上的測試結(jié)果為71.2%,斬獲了當(dāng)年Kaggle 比賽的一等獎。崔鳳焦[4]將卷積神經(jīng)網(wǎng)絡(luò)、Adaboost 和支持向量機(jī)3 種模型算法結(jié)構(gòu)進(jìn)行相互比較和設(shè)計優(yōu)化,在Cohn-Kanade表情庫中實(shí)現(xiàn)了對人臉情緒的智能識別,平均識別率最高達(dá)到了74.92%。謝鑫等人[5]采用了耗時加長的杜鵑算法(CuckooSearch,CS)對ResNet50 模型進(jìn)行了變更改進(jìn),提高了準(zhǔn)確率并使算法不會在調(diào)參時陷入梯度消失或爆炸的問題,準(zhǔn)確率達(dá)到了74.3%。陳佳等人[6]提出一種基于卷積神經(jīng)網(wǎng)絡(luò)集成的表情識別方法,子網(wǎng)結(jié)構(gòu)在第一階段訓(xùn)練3 個子網(wǎng)絡(luò),采用Batch Normalization 方法和Dropout 層來加速網(wǎng)絡(luò)的收斂。接著去掉3 個子網(wǎng)絡(luò)的輸出層,使用SVM 進(jìn)行第二階段的訓(xùn)練,完成最終表情的預(yù)測,其準(zhǔn)確率達(dá)到了70.84%。
針對以上人臉表情識別準(zhǔn)確率較低的問題,本研究提出了一種基于VGG16 模型算法的人臉表情識別方法來對人臉進(jìn)行識別,并達(dá)到較好的準(zhǔn)確率。
卷積神經(jīng)網(wǎng)絡(luò)[7]是近些年發(fā)展起來,并引起人們廣泛重視研究的一種高效的識別算法,主要用于圖像目標(biāo)的識別,它的結(jié)構(gòu)和生物大腦的神經(jīng)網(wǎng)絡(luò)比較相似,其是由一系列功能不相同的層級所構(gòu)成的。卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)一般主要包括其特有的卷積層、池化層這兩部分及全連接層這第三部分。在卷積神經(jīng)網(wǎng)絡(luò)中,卷積層與池化層一般情況下都會呈多次交替地出現(xiàn),因此不同的模型具有不同的層級結(jié)構(gòu)。
卷積層是卷積神經(jīng)網(wǎng)絡(luò)的核心,主要功能就是對卷積進(jìn)行運(yùn)算,實(shí)現(xiàn)特征提取操作。卷積核(Convolutional Kernel)的功能就是對輸入矩陣進(jìn)行加權(quán)平均的一種權(quán)值定義函數(shù),卷積核在一個特征圖上不斷地移動,與輸入矩陣根據(jù)一定的規(guī)則相乘及求和便可直接得到其特征[8],可以直接通過一個卷積核實(shí)現(xiàn)對一個輸入矩陣進(jìn)行特征提取,這種特征提取方法是由低層次向高級提取[9],這樣做可以促使提取得到的特征更真實(shí)有效。卷積層可以滿足下列公式:
式中,yab為卷積核中的值,zab為輸入矩陣的值,xij為經(jīng)過卷積計算后得到的特征矩陣的值。
通過卷積運(yùn)算的到的特征值,可以判斷輸入?yún)^(qū)域內(nèi)是否含有所需要的特征。
池化層主要處理卷積層輸出的維度較大的特征,可以大大減小矩陣的尺寸,方便進(jìn)行后續(xù)處理。池化層可以在減少數(shù)據(jù)量的同時,避免發(fā)生過擬合。池化層將特征分為幾個較小的區(qū)域,取其最大值或平均值[9],得到的特征維度更小。目前常見的池化方法有:平均池化、最大池化、隨機(jī)池化、譜池化。
全連接層的作用是將上一層的各個局部特征綜合起來,其每個節(jié)點(diǎn)都與上一層的節(jié)點(diǎn)有連接,它通過權(quán)值矩陣組成一個全新的圖[9],變成全局特征。全連接層可以將特征矩陣轉(zhuǎn)換為單個的值,因此可以在減小數(shù)據(jù)量的同時,減小特征位置對分類帶來的影響。通過全連接層得到的向量,其中每個值代表樣本屬于每個類的可能性的大小[8],因此可以通過最后的輸出向量,判斷樣本的類別。
FER2013 數(shù)據(jù)集由Pierre Luc carrier 和Aaron Courville通過搜索相關(guān)的情感關(guān)鍵詞在網(wǎng)絡(luò)上爬取,這些圖像都是經(jīng)過人工標(biāo)注的。它分為三部分,其中測試集共有28 708 張表情圖片,公有驗(yàn)證集和私有驗(yàn)證集各3 589張,共35 886 張表情圖片。每張圖片是由大小為48×48像素的灰度圖組成,分為7 個類別,分別為快樂、驚訝、悲傷、憤怒、厭惡、恐懼、中性。
原始的數(shù)據(jù)集并沒有直接以圖片的形式給出,而是以保存在csv 格式文件中,使用pandas 解析csv 文件,得到j(luò)pg 文件并儲存到對應(yīng)文件夾下,然后將數(shù)據(jù)集分為訓(xùn)練集和測試集。
通過對FER2013 數(shù)據(jù)集進(jìn)行重新標(biāo)簽產(chǎn)生的FER-2013PLUS 數(shù)據(jù)集在模型訓(xùn)練中會有更高的準(zhǔn)確率。圖1展示了數(shù)據(jù)集中的幾個樣本。
圖1 解析后的jpg 格式數(shù)據(jù)集
VGG16 網(wǎng)絡(luò)結(jié)構(gòu)[10-12]如圖2 和表1 所示,輸入分辨率為224×224 的3 通道圖像進(jìn)入卷積層。在結(jié)束卷積操作后,由于數(shù)據(jù)經(jīng)過非線性函數(shù)的映射之后,存在著取值區(qū)間向極限飽和區(qū)逐漸靠攏的輸入分布,通過對所有輸入數(shù)據(jù)的歸一化處理,可以使得數(shù)據(jù)被強(qiáng)制地拉回至方差為1、平均值為0 的標(biāo)準(zhǔn)正態(tài)分布。最后再次進(jìn)入池化層,逐漸忽略局部特征信息。循環(huán)4 輪以上操作,在卷積操作全部完成后,人臉特征信息即可進(jìn)入全連接層,將包含有局部信息的特征圖(包括特征圖的高、寬、通道數(shù))全部映射到4 096 維度。VGG16 網(wǎng)絡(luò)結(jié)構(gòu)的卷積層的kernel 大小均為3×3,效果較好,其步長為1,填充方式為“same”填充,與其他填充方式相比,這種填充方法可以使每一次卷積以后得到的卷積結(jié)果的尺寸大小不會發(fā)生變化。池化層使用的是2×2 大小的池化核,填充方式與卷積層一樣也為“same”填充,激勵函數(shù)為ReLU。
圖2 VGG16 網(wǎng)絡(luò)
輸入大小為224×224×3 的圖片,經(jīng)過Conv1_1 和Conv1_2兩個卷積層,filter 為3×3,卷積結(jié)束后得到222×222×1的矩陣,再經(jīng)過矩陣填充得到224×224×1 的矩陣。由于第一層有64 個卷積核,原來的224×224×1 就變成了224×224×64。
池化層使用的卷積核是2×2×64,步長為2,第一層卷積結(jié)果經(jīng)過池化后到達(dá)第二層,得到的矩陣維數(shù)為原來的一半,變成了112×112×128;第二層經(jīng)過池化層,矩陣維數(shù)減半,進(jìn)入到第三層,由于第三層有256 個卷積核,那么得到56×56×256 的矩陣;同理,第四層有512 個卷積核,得到28×28×512 的矩陣;而第五層也只有512個卷積核,所以得到14×14×512 的矩陣。經(jīng)過第五次池化最終得到7×7×512 的矩陣,進(jìn)入到全連接層。
VGG16 的全連接層有3 層。其每一個節(jié)點(diǎn)都與上一層每個節(jié)點(diǎn)相連接,它可以把前一層的輸出特征都整體綜合起來。在VGG16 模型結(jié)構(gòu)中,第一層有4 096 個節(jié)點(diǎn),第二層也有4 096 個,第三層只有1 000 個節(jié)點(diǎn),最后再進(jìn)行softmax 成類別的數(shù)目。
如圖3 所示,圖中顯示了圖片經(jīng)過VGG16 各層卷積層和池化層后所提取出的結(jié)果,依箭頭方向分別為原始圖片、第一次卷積后的圖片、第一次池化后的圖片、第二次卷積后的圖片、第二次池化后的圖片、第三次卷積后的圖片、第三次池化后的圖片、第四次卷積后的圖片、第四次池化后的圖片、第五次卷積后的圖片、第五次池化后的圖片。
圖3 VGG16 訓(xùn)練圖
實(shí)驗(yàn)環(huán)境為Windows 10 操作系統(tǒng),采用Python3.7編程語言。實(shí)驗(yàn)過程依次是數(shù)據(jù)預(yù)處理、搭建神經(jīng)網(wǎng)絡(luò)模型、訓(xùn)練、測試、評估模型。
ResNet50、InceptionResNetV2、InceptionV3、VGG16 模型訓(xùn)練結(jié)果分別如表2~表5 所示。表6 為4 種模型的準(zhǔn)確率對比,可以看到準(zhǔn)確率分別為73%、78%、78%、79%。
表2 ResNet50 模型訓(xùn)練結(jié)果
表3 InceptionResNetV2 模型訓(xùn)練結(jié)果
表4 InceptionV3 模型訓(xùn)練結(jié)果
表5 VGG16 模型訓(xùn)練結(jié)果
表6 模型準(zhǔn)確率對比
另外,利用VGG16 模型搭建出用于識別人臉情緒的UI 界面,如圖4 所示。
圖4 UI 結(jié)果顯示
本文采用改進(jìn)后的FER2013 數(shù)據(jù)集分別對4 種網(wǎng)絡(luò)模型進(jìn)行訓(xùn)練,用于尋找進(jìn)行人臉表情識別的最佳模型。通過實(shí)驗(yàn)結(jié)果對比得知,VGG16 模型的準(zhǔn)確率相比于其他3 種模型準(zhǔn)確率更高。在網(wǎng)絡(luò)的搭建與訓(xùn)練過程中,發(fā)現(xiàn)不同的數(shù)據(jù)集和網(wǎng)絡(luò)結(jié)構(gòu)都會對模型的準(zhǔn)確率造成影響,后續(xù)可以在數(shù)據(jù)集的預(yù)處理以及損失函數(shù)的選擇等方向上進(jìn)行研究,以進(jìn)一步提高人臉識別模型的準(zhǔn)確率。