張悅欣 付曉峰



摘要:針對(duì)實(shí)時(shí)人臉表情識(shí)別模型訓(xùn)練慢、識(shí)別速度慢的問題,提出一種OpenCV和卷積神經(jīng)網(wǎng)絡(luò)結(jié)合進(jìn)行實(shí)時(shí)表情識(shí)別的方法。人臉表情是多個(gè)局部區(qū)域特征的集合,而卷積神經(jīng)網(wǎng)絡(luò)提取出的特征能更多地關(guān)注局部,因此采取卷積神經(jīng)網(wǎng)絡(luò)的方式進(jìn)行模型的訓(xùn)練。所提網(wǎng)絡(luò)在全連接層中加入了Dropout,能有效預(yù)防過擬合現(xiàn)象的發(fā)生,并且提升模型泛化能力。實(shí)驗(yàn)結(jié)果表明此模型的可行性,在fer2013數(shù)據(jù)集上的準(zhǔn)確率達(dá)到71.6%。基于以上方法再結(jié)合OpenCV構(gòu)建一個(gè)實(shí)時(shí)表情識(shí)別系統(tǒng),系統(tǒng)實(shí)時(shí)識(shí)別表情的速度為0.4s。所構(gòu)建的系統(tǒng)相比于現(xiàn)有的其他系統(tǒng),具有訓(xùn)練速度較快、準(zhǔn)確率較高、識(shí)別速度較快等優(yōu)點(diǎn)。
關(guān)鍵詞:OpenCV; 卷積神經(jīng)網(wǎng)絡(luò); 表情識(shí)別; 情感分類; 深度學(xué)習(xí)
Abstract:Aiming at the problems of slow training and slow recognition speed of real-time facial expression recognition model, a method for real-time expression recognition by combining OpenCV and convolutional neural network is proposed. Facial expression is a collection of features of multiple local regions, and the features extracted by the convolutional neural network can pay more attention to the locality. Therefore, this paper adopts the method of convolutional neural network to train the model. The network in this paper adds Dropout to the fully connected layer, which can effectively prevent the occurrence of overfitting and improve the model generalization ability. The experimental results show the feasibility of this model, and the accuracy rate on the fer2013 data set reaches 71.6%. Based on the above method and then combined with OpenCV to construct the real-time expression recognition system in this paper, the system's real-time expression recognition speed is 0.4s. Compared with the existing system, the system in this paper has the advantages of faster training speed, higher accuracy and faster recognition speed.
Key words:OpenCV; convolutional neural network; facial expression recognition; emotion classification; deep learning
面部表情是人們用來表達(dá)自己內(nèi)心情緒的方式之一,對(duì)比語言能更具象直觀地表達(dá)人類的心情。隨著人工智能技術(shù)和計(jì)算機(jī)技術(shù)的日益進(jìn)步,人們?nèi)找嫦蛲悄芑娜藱C(jī)交互方式[1]。如果計(jì)算機(jī)能認(rèn)識(shí)和識(shí)別人類的情感,將能更好地為人類服務(wù)。因此人臉表情識(shí)別在機(jī)器人、心理學(xué)、醫(yī)學(xué)、智能監(jiān)控及3D合成動(dòng)畫[2]等方面都有很大的應(yīng)用價(jià)值。
目前表情識(shí)別的應(yīng)用方法有LBP、SVM[3]和深度學(xué)習(xí)[4]等。近幾年來,深度學(xué)習(xí)逐漸走進(jìn)越來越多人的視線,成了人們研究的熱點(diǎn),卷積神經(jīng)網(wǎng)絡(luò)[5]也成為其中較為熱門的方法,并取得了越來越好的成績(jī),比如VGGNet[6]、CNN16等。但結(jié)合實(shí)時(shí)攝像進(jìn)行表情識(shí)別的仍然不是很多,用時(shí)存在識(shí)別時(shí)間較長(zhǎng)等問題。為了減少人臉識(shí)別的時(shí)間,本文使用了OpenCV中的haarcascade分類器[7],其中積分圖和AdaBoost級(jí)聯(lián)分類器的使用節(jié)省了大量時(shí)間,可提高檢測(cè)效率。
本文采用OpenCV的haarcascade分類器檢測(cè)人臉部分,利用卷積神經(jīng)網(wǎng)絡(luò)來提取人臉表情特征,設(shè)計(jì)了一個(gè)可以進(jìn)行實(shí)時(shí)人臉表情識(shí)別的系統(tǒng),還可進(jìn)行靜態(tài)圖片或視頻中的表情識(shí)別。
1 方法
卷積神經(jīng)網(wǎng)絡(luò)是包括卷積層、池化層、全連接層的深度神經(jīng)網(wǎng)絡(luò)[8]。卷積神經(jīng)網(wǎng)絡(luò)權(quán)值共享,卷積池化交替出現(xiàn)的層組織結(jié)構(gòu)方式能夠減少網(wǎng)絡(luò)參數(shù)并對(duì)輸入進(jìn)行降維,使提取出的特征具有高度不變性。本文采用4層卷積和4層池化交替,輸入數(shù)據(jù)集的訓(xùn)練圖片,輸出包含7個(gè)神經(jīng)元,對(duì)應(yīng)7種表情,分別為angry、disgust、fear、happy、neutral、sad、surprise。
人臉圖像具有豐富的表情數(shù)據(jù)信息,如:眼睛睜大、眉毛皺起、嘴巴張大、嘴角上揚(yáng)等,這些都是人心情通過面部的具象表達(dá)。為了提取出的特征能更多地關(guān)注局部,一般設(shè)定卷積神經(jīng)網(wǎng)絡(luò)內(nèi)的卷積核小于輸入圖像的大小,適合提取人臉多個(gè)局部區(qū)域特征。關(guān)于表情分類,本文先利用卷積神經(jīng)網(wǎng)絡(luò)提取相關(guān)特征,再通過分類器得到最后的分類結(jié)果。
1.1 表情識(shí)別模型構(gòu)建
卷積神經(jīng)網(wǎng)絡(luò)具有由卷積池化結(jié)構(gòu)提供特征提取的能力,其組織方式使其含有較少的訓(xùn)練參數(shù),能夠提取旋轉(zhuǎn)、位移不變形特征以及像素局部相關(guān)性。本文的卷積神經(jīng)網(wǎng)絡(luò)由4層卷積層、4層池化層、2層全連接層組成,接下來將詳細(xì)介紹本文所采用的卷積神經(jīng)網(wǎng)絡(luò)的組成。
1.1.1 卷積層
在特征提取的部分受到了ResNet[9]的啟發(fā),建立一個(gè)3*3的濾波器,設(shè)置步長(zhǎng)為1,步長(zhǎng)是指每次向前傳播的像素?cái)?shù),在輸入圖像數(shù)據(jù)的寬度和高度上向前移動(dòng),然后計(jì)算整個(gè)濾波器與輸入數(shù)據(jù)任意一處的內(nèi)積,就會(huì)得到一個(gè)卷積后的特征矩陣。在卷積層中,多個(gè)濾波器共同工作,輸出時(shí)將每個(gè)濾波器卷積后的數(shù)據(jù)疊加在一起輸出。
1.1.2 池化層
池化層主要有兩種類型:最大池化和平均池化,本文使用最大池化,設(shè)置窗口大小和步長(zhǎng)均為2。每次都從2*2的窗口中選取最大的數(shù)據(jù),同時(shí)滑動(dòng)2個(gè)步長(zhǎng)進(jìn)入新的窗口。對(duì)圖像進(jìn)行下采樣,丟掉其中75%的激活信息,選取其中最大地保存下來,去除一些噪聲信息,能夠有效降低數(shù)據(jù)的大小。
1.1.3 全連接層
卷積神經(jīng)網(wǎng)絡(luò)和輸入數(shù)據(jù)中的一部分連接,并且輸出的神經(jīng)元每個(gè)深度切片都共享參數(shù)。經(jīng)過了前面的卷積層和池化層之后,提取出圖片的特征圖,將特征圖中的全部神經(jīng)元轉(zhuǎn)變?yōu)槿B接層的樣子,直觀上即將一個(gè)3D的立方體排列組合,變成一個(gè)全連接層,然后通過幾個(gè)隱藏層,最后在輸出層輸出最終結(jié)果。為了防止過擬合現(xiàn)象的發(fā)生會(huì)引入Dropout,本文設(shè)置Dropout為0.25。
1.2 小卷積核
較大的卷積核能夠獲取更大的感受野,但是會(huì)導(dǎo)致計(jì)算量的明顯增加,計(jì)算性能也會(huì)因此降低。使用多個(gè)小卷積核[10]代替大卷積核可在相同感受野的情況下,減少所需的計(jì)算量。本文3層卷積層均使用3*3的卷積核結(jié)構(gòu),保留一層5*5的卷積核,在保留足夠感受野的同時(shí),減少計(jì)算量。
1.3 haarcascade分類器
haar分類器=haar-like特征+AdaBoost算法+級(jí)聯(lián)+積分圖快速計(jì)算。AdaBoost方法是一種迭代算法,在每一輪中添加一個(gè)新的弱分類器,直到達(dá)到一個(gè)預(yù)估的極小的錯(cuò)誤率。每一張訓(xùn)練樣本圖片都被初始賦予一個(gè)權(quán)重,表示它被其中一個(gè)分類器選入訓(xùn)練集的概率大小。如果某張樣本圖片已經(jīng)被選入正確的分類器,在選擇下一個(gè)訓(xùn)練集時(shí),它被選中的概率就降低;相反,如果某張樣本圖片沒有被準(zhǔn)確分類,它的權(quán)重就得到提高。
2 實(shí)驗(yàn)
2.1 圖片預(yù)處理
基于深度學(xué)習(xí)的方法需要大量樣本用來訓(xùn)練,本文采用fer2013表情庫(kù)作為實(shí)驗(yàn)對(duì)象,將其分為訓(xùn)練集和測(cè)試集,其中每張圖片的表情由一個(gè)0~6中的數(shù)字代表,0=angry,1=disgust,2=fear,3=happy,4=sad,5=surprise,6=neutral。訓(xùn)練集中一共28709張圖片,測(cè)試集3589張。在進(jìn)行網(wǎng)絡(luò)訓(xùn)練之前,先將圖片進(jìn)行預(yù)處理,得到48*48的人臉表情集。
2.2 表情分類
本文采用的卷積神經(jīng)網(wǎng)絡(luò)為4層卷積層、4層池化層、2層全連接層。導(dǎo)入已經(jīng)預(yù)處理完的圖片集,定義CNN結(jié)構(gòu),導(dǎo)入模型,開始訓(xùn)練模型。此過程大概需要一到兩個(gè)小時(shí),使用小卷積核替代大卷積核,減少了非常多的計(jì)算量。導(dǎo)入測(cè)試集進(jìn)行準(zhǔn)確率測(cè)試。使用混淆矩陣表示每類表情的精確準(zhǔn)確率,具體各表情識(shí)別結(jié)果準(zhǔn)確率如表1所示,混淆矩陣的行標(biāo)表示本文算法預(yù)測(cè)表情結(jié)果,列標(biāo)表示實(shí)際表情。
由表1可知該模型對(duì)happy、surprise兩類表情識(shí)別準(zhǔn)確率都達(dá)到了0.85,識(shí)別率較高,而對(duì)angry、fear、disgust類表情識(shí)別準(zhǔn)確率都在0.6以下,識(shí)別率較低。
再對(duì)本文網(wǎng)絡(luò)計(jì)算F1-score,F(xiàn)1-score是衡量分類問題的一個(gè)指標(biāo),最大為1,最小為0。由表1數(shù)據(jù)計(jì)算得到本文網(wǎng)絡(luò)的F1-score為0.64,記錄在表2中。
2.3 與其他算法比較
為驗(yàn)證本文所提方法的有效性,本文將分別與其他方法進(jìn)行準(zhǔn)確率、F1-score的比較。如表2所示,本文算法的準(zhǔn)確率對(duì)比其他算法有所提升,F(xiàn)1-score也較高。
3 實(shí)際應(yīng)用
實(shí)時(shí)進(jìn)行人臉表情識(shí)別,利用OpenCV自帶的haarcascade分類器,檢測(cè)人臉,可在正臉分類器的基礎(chǔ)上加上側(cè)臉及眼睛的分類器提高正確率,配合使用上述模型對(duì)已識(shí)別到的人臉進(jìn)行表情識(shí)別,連接攝像頭建立實(shí)時(shí)人臉表情識(shí)別系統(tǒng)。
3.1 實(shí)時(shí)人臉表情識(shí)別系統(tǒng)
本系統(tǒng)在Python3.6操作環(huán)境下運(yùn)行。圖1為本文設(shè)計(jì)的系統(tǒng)主界面,圖中4個(gè)按鈕分別指向4個(gè)不同功能的子界面。“攝像頭識(shí)別”指向連接攝像頭實(shí)時(shí)進(jìn)行人臉表情識(shí)別,如圖2(a);“圖片識(shí)別”指向靜態(tài)圖片中的人臉表情識(shí)別,如圖2(b);“視頻識(shí)別”指向動(dòng)態(tài)視頻中的人臉表情識(shí)別,如圖2(c)。
圖2(a)為攝像頭識(shí)別系統(tǒng)運(yùn)行界面,界面中的文件圖標(biāo)表示可選擇模型,默認(rèn)為上文訓(xùn)練出的模型,下面的攝像頭圖標(biāo)可打開攝像頭,右上的“用時(shí)”則表示一次識(shí)別所用的時(shí)間長(zhǎng)短,“識(shí)別結(jié)果”表示本次識(shí)別到的表情的輸出結(jié)果。
圖3為用此模型的識(shí)別結(jié)果舉例,用時(shí)在0.04s左右,時(shí)間較短。本文采用OpenCV中的haarcascade分類器識(shí)別人臉,haar-like特征通過積分圖來計(jì)算,積分圖是只需要遍歷一次圖像就可以求出圖像中所有區(qū)域像素和的快速算法,從而大大地加快了圖像特征值計(jì)算的速度;AdaBoost級(jí)聯(lián)分類器[14]是樹狀結(jié)構(gòu),每一級(jí)都是強(qiáng)分類器,當(dāng)檢測(cè)窗口成功遍歷全部的強(qiáng)分類器時(shí)才被認(rèn)為是正樣本,不然則為負(fù)樣本,由于每一個(gè)強(qiáng)分類器對(duì)負(fù)樣本的判斷準(zhǔn)確度都十分高,所以一旦發(fā)現(xiàn)通過分類器的為負(fù)樣本,就不再繼續(xù)調(diào)用下面的強(qiáng)分類器,節(jié)省了很多的檢測(cè)時(shí)間。圖示背景皆為復(fù)雜背景[15],通過實(shí)驗(yàn)得出,系統(tǒng)能夠準(zhǔn)確地將人臉從背景中檢測(cè)出來,并對(duì)人臉進(jìn)行實(shí)時(shí)跟蹤進(jìn)行表情檢測(cè)。
4 結(jié)論
本文利用不同于傳統(tǒng)的新型卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行模型的訓(xùn)練,對(duì)人臉表情進(jìn)行高效的分類,達(dá)到了較高的準(zhǔn)確率。并將其與攝像頭連接,可進(jìn)行實(shí)時(shí)的表情識(shí)別且識(shí)別速度較快。本文中描述的實(shí)時(shí)人臉表情識(shí)別系統(tǒng),能較好地實(shí)現(xiàn)計(jì)算機(jī)實(shí)時(shí)人臉表情識(shí)別的任務(wù),具有網(wǎng)絡(luò)容易訓(xùn)練、識(shí)別準(zhǔn)確度較高、系統(tǒng)實(shí)時(shí)性強(qiáng)、識(shí)別速度較快等優(yōu)點(diǎn),可以應(yīng)用于較多計(jì)算機(jī)系統(tǒng)的人機(jī)交互。同時(shí),該系統(tǒng)算法也有繼續(xù)研討、改良的意義,有一定的提升空間。
參考文獻(xiàn):
[1] 薛雨麗,毛峽,郭葉,等.人機(jī)交互中的人臉表情識(shí)別研究進(jìn)展[J].中國(guó)圖象圖形學(xué)報(bào),2009,14(5):764-772.
[2] 潘光良.機(jī)器人人臉表情識(shí)別技術(shù)研究[J].智能機(jī)器人,2019(1):50-52.
[3] 姚麗莎,徐國(guó)明,房波,等.結(jié)合LBP和SVM的視頻表情識(shí)別方法[J].山東理工大學(xué)學(xué)報(bào)(自然科學(xué)版),2020,34(4):67-72.
[4] 盧官明,何嘉利,閆靜杰,等.一種用于人臉表情識(shí)別的卷積神經(jīng)網(wǎng)絡(luò)[J].南京郵電大學(xué)學(xué)報(bào)(自然科學(xué)版),2016,36(1):16-22.
[5] 施宇楠,吳自萬,孫文.基于卷積神經(jīng)網(wǎng)絡(luò)的人臉表情識(shí)別研究[J].科學(xué)技術(shù)創(chuàng)新,2020(5):75-76.
[6] Simonyan K, Zisserman A. Very deep convolutional net-works for large-scale image recognition[C]. International Conference on Learning Representations, San Diego, USA: ICLR, 2015:1-5.
[7] 謝爾曼,羅森林,潘麗敏.基于Haar特征的Turbo-Boost表情識(shí)別算法[J].計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報(bào),2011,23(8):1442-1446,1454.
[8] 張立春,劉雅楠,曲柄光,等.深度學(xué)習(xí)下的人臉表情識(shí)別算法分析[J].電子元器件與信息技術(shù),2020:4(1):67-68.
[9] Hhen K,ZHANG X,REN S, et al. Deep residual learning for image recognition[C]. Computer Vision and Pattern Recognition(CVPR), Las Vegas:2016. 770-778.
[10] Chen Hang, QIU Xiaohui. Research on Emotional Recognition Based on Convolution Neural Network and Pooling Algorithm[J].Computer Technology and Development, 2019 (1):61-65.
[11] 張麗英,沈詩(shī)婕,瞿子文,等.基于痛苦表情識(shí)別的智能醫(yī)療監(jiān)護(hù)系統(tǒng)[J].國(guó)外電子測(cè)量技術(shù),2020,39(3):148-151.
[12] 夏成靜.基于數(shù)據(jù)增強(qiáng)和卷積神經(jīng)網(wǎng)絡(luò)的面部表情識(shí)別研究與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2020,16(3):213-215.
[13] Dong Feiyan. Application of Distributed Training of Convolutional Neural Network in Facial Expression Recognition[J].Software,2020(1): 160-164 .
[14] 朱健翔,蘇光大,李迎春.結(jié)合Gabor特征與Adaboost的人臉表情識(shí)別[J].光電子·激光,2006,17(8):993-998.
[15] 王金云,周暉杰,紀(jì)政.復(fù)雜背景中的人臉識(shí)別技術(shù)研究[J].計(jì)算機(jī)工程,2013,39(8):196-199,203.
【通聯(lián)編輯:唐一東】