1.前言
作為一個(gè)在人臉識(shí)別領(lǐng)域有一定經(jīng)驗(yàn)的人,我在過去的項(xiàng)目中涉及了很多與人臉識(shí)別相關(guān)的任務(wù)。我整理了一些項(xiàng)目,但由于學(xué)業(yè)繁重,整理這些內(nèi)容一直是斷斷續(xù)續(xù)的。最近正值五一假期,我想利用這個(gè)時(shí)間來整理一篇關(guān)于人臉表情識(shí)別的文章。這項(xiàng)技術(shù)可以識(shí)別出人的基本情緒,例如開心、悲傷等,具有廣泛的應(yīng)用價(jià)值。
2.相關(guān)工作
以我有限的知識(shí)來講的話,基于人臉表情的情緒識(shí)別通常包括兩個(gè)主要任務(wù):人臉檢測(cè)和人臉表情分類。人臉檢測(cè)是指在輸入圖像中檢測(cè)和定位人臉的位置和大小,為后續(xù)的表情識(shí)別提供基礎(chǔ)數(shù)據(jù);人臉表情分類是指將輸入的人臉圖像分為多個(gè)情感類別,例如憤怒、厭惡、恐懼、開心、傷心、驚訝和中性等。
目前,人臉識(shí)別(?Facial Recognition, FR)精度已經(jīng)超過人眼,人臉表情識(shí)別作為FR技術(shù)的一個(gè)重要組成部分,在計(jì)算機(jī)視覺、人機(jī)交互和情感計(jì)算中有著廣泛的研究前景,包括人機(jī)交互、情緒分析、智能安全、娛樂、網(wǎng)絡(luò)教育、智能醫(yī)療等。人臉表情識(shí)別的主要框架分為三個(gè)步驟:圖像預(yù)處理、人臉檢測(cè)和表情分類,如圖所示。
本文采取Fer2013數(shù)據(jù)集,由35887張人臉圖片組成,該數(shù)據(jù)集包含28709個(gè)訓(xùn)練樣本,3859個(gè)驗(yàn)證樣本和3859個(gè)測(cè)試樣本。均為48×48的灰度圖像。
3.項(xiàng)目實(shí)現(xiàn)
3.1?OpenCV人臉檢測(cè)
基于OpenCV的人臉檢測(cè)算法是目前非常流行的一種實(shí)現(xiàn)方法,它通過使用級(jí)聯(lián)分類器(Cascade Classifier)來檢測(cè)圖像中的人臉。下面是一個(gè)基于Python的人臉檢測(cè)代碼示例:
import cv2
# 加載級(jí)聯(lián)分類器
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# 加載圖像并進(jìn)行灰度化處理
img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 進(jìn)行人臉檢測(cè)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
# 繪制矩形框標(biāo)識(shí)人臉位置
for (x,y,w,h) in faces:
cv2.rectangle(img, (x,y), (x+w,y+h), (0,0,255), 2)
# 顯示結(jié)果圖像
cv2.imshow('result', img)
cv2.waitKey(0)
人臉檢測(cè)就是用來判斷一張圖片中是否存在人臉的操作。如果圖片中存在人臉,則定位該人臉在圖片中的位置;如果圖片中不存在人臉,則返回圖片中不存在人臉的提示信息。人臉檢測(cè)是表情識(shí)別中必不可少的環(huán)節(jié),其檢測(cè)效果的好壞,將直接影響整個(gè)系統(tǒng)的性能優(yōu)劣。如圖所示,藍(lán)色矩形框代表了從圖片中檢測(cè)到的人臉圖像位置。?
?3.2Mini-Xception網(wǎng)絡(luò)
本文表情分類的網(wǎng)絡(luò)架構(gòu)采用Mini-Xception卷積神經(jīng)網(wǎng)絡(luò),其結(jié)構(gòu)如圖所示。其中包含4個(gè)殘差深度可分離卷積塊,每個(gè)卷積之后對(duì)卷積層進(jìn)行批量歸一化(BathNorm)操作及ReLu激活函數(shù)。最后一層采用全局平均池化層和softmax激活函數(shù)進(jìn)行預(yù)測(cè)。
?構(gòu)造的mini-Xception網(wǎng)絡(luò)模型,其優(yōu)點(diǎn)在于刪除了傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的全連接層并使用深度可分離卷積替代傳統(tǒng)的卷積層,顯著降低了訓(xùn)練參數(shù)量并縮短了訓(xùn)練時(shí)間,提高了模型的泛化能力。Mini-Xception網(wǎng)絡(luò)的Python實(shí)現(xiàn)如下,具體采用Keras框架實(shí)現(xiàn):
from keras.layers import Input, Conv2D, BatchNormalization, Activation, SeparableConv2D
from keras.layers import MaxPooling2D, GlobalAveragePooling2D, Dense, Dropout
from keras.models import Model
def mini_Xception(input_shape, num_classes):
# 定義輸入層
inputs = Input(shape=input_shape)
# 第一個(gè)卷積塊
x = Conv2D(8, (3, 3), strides=(1, 1), padding='same')(inputs)
x = BatchNormalization()(x)
x = Activation('relu')(x)
# 第二個(gè)卷積塊
x = SeparableConv2D(16, (3, 3), strides=(1, 1), padding='same')(x)
x = BatchNormalization()(x)
x = Activation('relu')(x)
x = SeparableConv2D(16, (3, 3), strides=(1, 1), padding='same')(x)
x = BatchNormalization()(x)
x = Activation('relu')(x)
# 第三個(gè)卷積塊
x = SeparableConv2D(32, (3, 3), strides=(1, 1), padding='same')(x)
x = BatchNormalization()(x)
x = Activation('relu')(x)
x = SeparableConv2D(32, (3, 3), strides=(1, 1), padding='same')(x)
x = BatchNormalization()(x)
x = Activation('relu')(x)
# 第四個(gè)卷積塊
x = MaxPooling2D(pool_size=(3, 3), strides=(2, 2), padding='same')(x)
x = Dropout(0.5)(x)
x = SeparableConv2D(64, (3, 3), strides=(1, 1), padding='same')(x)
x = BatchNormalization()(x)
x = Activation('relu')(x)
x = SeparableConv2D(64, (3, 3), strides=(1, 1), padding='same')(x)
x = BatchNormalization()(x)
x = Activation('relu')(x)
# 第五個(gè)卷積塊
x = MaxPooling2D(pool_size=(3, 3), strides=(2, 2), padding='same')(x)
x = Dropout(0.5)(x)
x = SeparableConv2D(128, (3, 3), strides=(1, 1), padding='same')(x)
x = BatchNormalization()(x)
x = Activation('relu')(x)
x = SeparableConv2D(128, (3, 3), strides=(1, 1), padding='same')(x)
x = BatchNormalization()(x)
x = Activation('relu')(x)
# 全局平均池化和輸出層
x = GlobalAveragePooling2D()(x)
outputs = Dense(num_classes, activation='softmax')(x)
# 創(chuàng)建模型
model = Model(inputs=inputs, outputs=outputs)
return model
4.實(shí)驗(yàn)結(jié)果與分析
4.1模型訓(xùn)練
本文的研究基于?Keras 深度學(xué)習(xí)框架搭建Mini-Xception模型,采用經(jīng)預(yù)處理的Fer2013表情數(shù)據(jù)集進(jìn)行模型訓(xùn)練。在訓(xùn)練結(jié)束后會(huì)將訓(xùn)練的模型保存為hdf5文件到指定文件夾下,訓(xùn)練過程結(jié)果輸出如圖。
?4.2 結(jié)果分析
隨著訓(xùn)練的不斷進(jìn)行,盡管其訓(xùn)練曲線不斷波動(dòng),但訓(xùn)練集和驗(yàn)證集的準(zhǔn)確率保持逐漸提升,最終兩條曲線均達(dá)到平穩(wěn)狀態(tài),得到的訓(xùn)練曲線如圖所示。
訓(xùn)練完成后,選取驗(yàn)證集準(zhǔn)確率最佳的模型參數(shù),最終在測(cè)試集進(jìn)行測(cè)試驗(yàn)證。本文利用混淆矩陣對(duì)模型在測(cè)試集上的效果進(jìn)行評(píng)估,其混淆矩陣的結(jié)果如圖所示。Mini-Xception 對(duì)Happy的識(shí)別率可達(dá)92%,而對(duì)Scared的識(shí)別度最低僅為56%,可能是因?yàn)椴煌砬榈臄?shù)量不均衡導(dǎo)致。在識(shí)別過程中可以觀察到,Sad和Scared, Angry和Disgust 的識(shí)別難度較大。
?4.3 應(yīng)用測(cè)試
為了更好應(yīng)用于日常的表情識(shí)別場(chǎng)景,檢測(cè)實(shí)際的表情識(shí)別性能,結(jié)合前面章節(jié)介紹的人臉檢測(cè)和表情識(shí)別算法,設(shè)計(jì)了實(shí)際場(chǎng)景下的表情識(shí)別過程,其識(shí)別過程如圖所示。
首先獲取圖像并進(jìn)行預(yù)處理,然后利用Haar級(jí)聯(lián)分類器檢測(cè)人臉位置,對(duì)人臉位置區(qū)域利用Mini-Xception進(jìn)行表情識(shí)別,最終將表情識(shí)別的結(jié)果顯示并輸出。根據(jù)以上流程,本文基于PyQt5設(shè)計(jì)了表情識(shí)別系統(tǒng)界面。該系統(tǒng)界面如圖19所示,其大致功能如下:
(1)可選擇模型文件后基于該模型進(jìn)行識(shí)別;
(2)打開攝像頭識(shí)別實(shí)時(shí)畫面中的人臉表情;
(3)選擇一張人臉圖片,對(duì)其中的表情進(jìn)行識(shí)別。文章來源:http://www.zghlxwxcb.cn/news/detail-529206.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-529206.html
5.參考文獻(xiàn)
- Zeng Z H, Pantic M, Roisman G I, et al. A survey of affect?recognition methods: audio, visual, and spontaneous expressions[J]. IEEE Transactions on Pattern Analysis and Machine?Intelligence, 2009, 31(1): 39-58.
- Ekman P, Friesen W V. Constants across cultures in the face?and emotion[J]. Journal of Personality and Social Psychology,?1971, 17(2): 124-129.
- Ojala T, Pietik?inen M, Harwood D. A comparative study of texture measures with classification based on featured distributions[J]. Pattern Recognition, 1996, 29(1): 51-59.
- Albiol A, Monzo D, Martin A, et al. Face recognition using HOG – EBGM[J]. Pattern Recognition Letters, 2008, 29(10): 1537-1543.
- Viola P, Jones M J. Robust Real-Time Face Detection[J]. International Journal of Computer Vision, 2004, 57(2):137-154.
- Neubeck A, Gool L. Efficient Non-Maximum Suppression[C]// International Conference on Pattern Recognition. IEEE Computer Society, 2006.
- Szegedy C, Liu W, Jia Y Q, et al. Going deeper with convolutions[C]//2015 IEEE Conference on Computer Vision and Pattern Recognition (CVPR), June 7-12, 2015. Boston, MA, USA. IEEE, 2015:1-9.
- Chollet F. Xception: deep learning with depthwise separable convolutions[C]//2017 IEEE Conference on Computer Vision and Pattern Recognition (CVPR), July 21-26, 2017. Honolulu, HI. IEEE, 2017: 1800-1807.
- Wang M, Liu B, Foroosh H. Design of Efficient Convolutional Layers using Single Intra-channel Convolution, Topological Subdivisioning and Spatial “Bottleneck” Structure[EB/OL]. [2020-03-15]. http://arxiv.org/abs/1608.04337.
- Ioffe S, Szegedy C. Batch normalization: Accelerating deep network training by reducing internal covariate shift[C]. 32nd International Conference on Machine Learning, ICML, 2015, 2015(1): 448-456.
- Goodfellow I J, Erhan D, Luc Carrier P, et al. Challenges in representation learning: a report on three machine learning contests[J]. Neural Networks, 2015(64): 59-63.
- Kingma D P, Ba J L. Adam: A method for stochastic optimization[J]. 3rd International Conference on Learning Representations, ICLR 2015 - Conference Track Proceedings, 2015: 1-15.
到了這里,關(guān)于基于人臉表情的情緒識(shí)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!