孔英會(huì), 郄天叢, 張帥桐
(華北電力大學(xué)電子與通信工程系, 保定 071003)
表情識(shí)別在很多場(chǎng)景有應(yīng)用需求?;趥鹘y(tǒng)的機(jī)器學(xué)習(xí)表情識(shí)別方法中,最重要的是表情特征的提取,選取的特征必須能夠盡可能地表征人臉面部表情,以便能夠識(shí)別出各種人臉表情。Zhang等[1]使用34個(gè)基準(zhǔn)點(diǎn)的幾何位置作為面部特征來(lái)表征面部圖像;Acevedo等[2]提出了一種在人臉上尋找關(guān)鍵點(diǎn),然后把關(guān)鍵點(diǎn)連成一個(gè)三角區(qū)域來(lái)提取特征的方法;文獻(xiàn)[3]運(yùn)用可變形組件模型(deformable part model, DPM),在CK+、Jaffe數(shù)據(jù)集上取得了較好的效果。這些特征雖然易于提取和計(jì)算,但是傳統(tǒng)表情特征的提取方法存在諸多局限,比如不同類別的表情之間具有很大的相似度,而同一類別的表情之間又有很大的差異性等,識(shí)別效果受到局限。
近些年,卷積神經(jīng)網(wǎng)絡(luò)在圖像分類和識(shí)別等領(lǐng)域取得了重大進(jìn)展,2014年Google團(tuán)隊(duì)提出的Inception網(wǎng)絡(luò),在ImageNet數(shù)據(jù)集上的Top-5準(zhǔn)確率達(dá)到了94.1%,而后續(xù)提出的極限版本Xception網(wǎng)絡(luò),在Top-5正確率更是達(dá)到了94.5%。卷積神經(jīng)網(wǎng)絡(luò)在表情識(shí)別領(lǐng)域也取得一定成果,文獻(xiàn)[4]采用了VGG-Face網(wǎng)絡(luò)進(jìn)行表情識(shí)別實(shí)驗(yàn),在CK+數(shù)據(jù)集上達(dá)到了91.3%的準(zhǔn)確率;文獻(xiàn)[5]提出了網(wǎng)中網(wǎng)殘差網(wǎng)絡(luò)模型(NIN _ResNet)對(duì)表情圖像做分類識(shí)別研究,在fer2013和CK+數(shù)據(jù)集上取得了較好的效果;文獻(xiàn)[6]受Xception網(wǎng)絡(luò)啟發(fā)引入了深度可分離卷積模塊,設(shè)計(jì)了一個(gè)14層的卷積神經(jīng)網(wǎng)絡(luò),在fer2013數(shù)據(jù)集上達(dá)到71%的準(zhǔn)確率。雖然上述方法中的表情識(shí)別準(zhǔn)確率較高,但是網(wǎng)絡(luò)模型的參數(shù)非常多,參數(shù)量均達(dá)到了上億,這樣得到的識(shí)別模型也就非常大,給移動(dòng)端的部署帶來(lái)了巨大的挑戰(zhàn)。針對(duì)移動(dòng)端深度學(xué)習(xí)模型的研究也取得了一些研究成果,文獻(xiàn)[7]將MobileNet-V1神經(jīng)網(wǎng)絡(luò)部署在Android手機(jī)上,實(shí)現(xiàn)了垃圾分類;文獻(xiàn)[8]將改進(jìn)后的 MobileNet網(wǎng)絡(luò)與SSD(sigle shot multiBox detector)目標(biāo)識(shí)別框架相結(jié)合起來(lái)構(gòu)成一種新的識(shí)別算法,并移植到了IOS(iphone operation system)移動(dòng)端設(shè)備上,能夠?qū)Τ枪馨讣M(jìn)行目標(biāo)識(shí)別,且網(wǎng)絡(luò)在一定程度上降低了參數(shù)數(shù)量,減小了模型大??;文獻(xiàn)[9]提出了mini_Xception網(wǎng)絡(luò)架構(gòu)進(jìn)行表情分類并取得了較高的識(shí)別率,最后一層加入了全局平均池化,減少了參數(shù)的數(shù)量,模型所需空間更小,該模型對(duì)于移動(dòng)端應(yīng)用提供了更好的支持。
隨著信息時(shí)代的到來(lái),智能家居已經(jīng)走入了生活,并已經(jīng)有了相當(dāng)?shù)陌l(fā)展規(guī)模,近些年出現(xiàn)的有智能監(jiān)護(hù)系統(tǒng)、人臉身份驗(yàn)證系統(tǒng)、家居自動(dòng)化系統(tǒng)等。而智能家居系統(tǒng)中,情緒識(shí)別的研究也取得了一定的成果,文獻(xiàn)[10]提出了一個(gè)虛擬人類情感模型,并將其運(yùn)用于智能家居系統(tǒng),通過(guò)識(shí)別家人表情來(lái)掌握家人滿意度和舒適度;文獻(xiàn)[11]將表情識(shí)別算法移植到嵌入式設(shè)備中,設(shè)計(jì)了一款老年護(hù)理機(jī)器人。但是,有關(guān)智能家居的表情識(shí)別研究依舊停留在個(gè)人電腦端,而移動(dòng)終端家居表情識(shí)別的研究幾乎是空白,在智能手機(jī)普及的今天,研究移動(dòng)終端家居表情識(shí)別,具有重要意義。
針對(duì)情感化的智能家居應(yīng)用需求,提出了一種基于深度學(xué)習(xí)模型的移動(dòng)端表情識(shí)別方法,并進(jìn)行了系統(tǒng)設(shè)計(jì)。通過(guò)Vitamio 框架獲取遠(yuǎn)程視頻,采用輕量級(jí)模型mini_Xception進(jìn)行表情識(shí)別以適應(yīng)移動(dòng)端需求,將訓(xùn)練好的模型移植到Android手機(jī)之中,進(jìn)行了實(shí)驗(yàn)測(cè)試,結(jié)果表明設(shè)計(jì)的系統(tǒng)可實(shí)現(xiàn)實(shí)時(shí)遠(yuǎn)程表情識(shí)別,及時(shí)了解家人狀況,為智能家居應(yīng)用提供技術(shù)支持。
mini_Xception網(wǎng)絡(luò)架構(gòu)是Xception網(wǎng)絡(luò)的改進(jìn)版,主要是對(duì)Xception網(wǎng)絡(luò)進(jìn)行了壓縮,使之變得更為輕量級(jí)。Xception網(wǎng)絡(luò)是Google公司在2016年提出的一種網(wǎng)絡(luò)結(jié)構(gòu),也是繼Inception后提出的對(duì)Inception V3的另一種改進(jìn),主要是采用深度可分離卷積來(lái)替換原來(lái)InceptionV3中的卷積操作。而mini_Xception網(wǎng)絡(luò)正是引入了深度可分離卷積的思想,這樣不僅提升了分類的正確率,也增強(qiáng)了網(wǎng)絡(luò)對(duì)諸如人臉表情這類細(xì)微特征的學(xué)習(xí)能力。
Inception結(jié)構(gòu)由Szegedy等[12]在2014年引入,被稱為GoogLeNet(Inception V1),之后被優(yōu)化成多種模型諸如InceptionV2、InceptionV3以及最新的Inception-ResNet。自從首次推出,Inception無(wú)論是對(duì)于ImageNet的數(shù)據(jù)集,還是Google內(nèi)部的數(shù)據(jù)集,都是表現(xiàn)最好的模型之一。有著多分支、不同卷積核大小的Inception模塊是Inception系列網(wǎng)絡(luò)的基本構(gòu)成單元。圖1所示為InceptionV3模塊。
圖1 InceptionV3模塊Fig.1 The model of InceptionV3
InceptionV3引入Factorization into small convolutions的思想,將一個(gè)較大的二維卷積拆成2個(gè)較小的一維卷積,比如將7×7卷積拆成1×7卷積和7×1卷積,一方面節(jié)約了大量參數(shù),加速網(wǎng)絡(luò)運(yùn)算能力并且減輕過(guò)擬合現(xiàn)象;同時(shí)增加一層非線性變換,擴(kuò)展模型的表達(dá)能力。
標(biāo)準(zhǔn)卷積是卷積神經(jīng)網(wǎng)絡(luò)最基本的運(yùn)算方式,是卷積神經(jīng)網(wǎng)絡(luò)的基礎(chǔ),如圖2所示。假設(shè)輸出特征圖大小為DF×DF×N,輸入特征圖大小為DF×DF×M,其中DF是輸出特征圖的空間寬和高,輸出是N個(gè)通道,輸入是M個(gè)通道,卷積核尺寸為DK×DK,故標(biāo)準(zhǔn)卷積計(jì)算量大小為DF×DF×DK×DK×M×N,參數(shù)量大小為DK×DK×M×N。
圖2 標(biāo)準(zhǔn)卷積Fig.2 Standard convolution
深度可分離卷積由兩層組成,如圖3所示。它將標(biāo)準(zhǔn)卷積分解為一個(gè)深度卷積和一個(gè)1×1的逐點(diǎn)卷積,深度卷積與逐點(diǎn)卷積如圖3所示。先通過(guò)DK×DK×M的卷積核對(duì)之前輸入的M個(gè)特征通道卷積,但是這里DK×DK×M的每個(gè)DK×DK都只對(duì)輸入的M通道中對(duì)應(yīng)的那個(gè)進(jìn)行相應(yīng)的卷積。最后輸出是M個(gè)通道的輸出,然后接上一個(gè)點(diǎn)卷積將輸出映射為N個(gè)通道,這里卷積核大小變成了1×1。
圖3 深度可分離卷積Fig.3 Depthwise separable convolutions
從圖3中可以看出,深度卷積的計(jì)算量大小為DF×DF×DK×DK×M,參數(shù)量為DK×DK×M;逐點(diǎn)卷積的計(jì)算量為DF×DF×M×N,參數(shù)量大小為M×N。而深度可分離卷積計(jì)算量為深度卷積與逐點(diǎn)卷積之和,即DF×DF×DK×DK×M+DF×DF×M×N,其參數(shù)量大小也是深度卷積與逐點(diǎn)卷積之和,即DK×DK×M+M×N。進(jìn)一步可以得到深度可分離卷積計(jì)算量與標(biāo)準(zhǔn)卷積的計(jì)算量之比:
(1)
同時(shí),還可以得到深度可分離卷積和標(biāo)準(zhǔn)卷積參數(shù)量之比:
(2)
由此可以看出,深度可分離卷積操作計(jì)算量、參數(shù)量都發(fā)生了下降,將其運(yùn)用到卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)中,可以大大降低網(wǎng)絡(luò)的計(jì)算量和參數(shù)量,節(jié)省CPU的運(yùn)算空間。
使用深度可分離卷積替代Inception模塊能夠改善Inception網(wǎng)絡(luò)性能,即用深度可分離卷積堆疊來(lái)構(gòu)建模型,由此得到一個(gè)完全基于深度可分離卷積的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),稱其為Xception,意指“極致”Inception[13],結(jié)構(gòu)如圖4所示。其主要是對(duì)每個(gè)輸入通道先獨(dú)立進(jìn)行空間卷積,然后再使用1×1大小的濾波器進(jìn)行逐點(diǎn)卷積,最后將通道輸出映射到新的通道空間,將深度可分離卷積操作引入Xception網(wǎng)絡(luò)結(jié)構(gòu)中,使得參數(shù)由原來(lái)InceptionV3的23萬(wàn)降為了22萬(wàn);在ImageNet數(shù)據(jù)集測(cè)試上,Xception也比Inceptionv3的準(zhǔn)確率稍高;同時(shí),Xception引入了ResNet的殘差模塊顯著加快了Xception的收斂,并獲得了更高的正確率。
圖4 Xception模塊Fig.4 The model of Xception
雖然Xception的參數(shù)相比于InceptionV3有了下降,但是對(duì)于移動(dòng)端應(yīng)用來(lái)說(shuō),參數(shù)量還是比較大,若在移動(dòng)端上直接采用Xception網(wǎng)絡(luò)模型,手機(jī)CPU運(yùn)算起來(lái)會(huì)比較慢,識(shí)別速度也會(huì)變慢,所以需要對(duì)Xception模型進(jìn)行簡(jiǎn)化。mini_Xception[13]是一個(gè)全卷積神經(jīng)網(wǎng)絡(luò),模型架構(gòu)如圖5所示,它包含4個(gè)深度可分離卷積模塊,在每個(gè)卷積層之后采用了批量歸一化層,批量歸一化層可以加速網(wǎng)絡(luò)訓(xùn)練和收斂,此外采用ReLU作為激活函數(shù);每個(gè)卷積層之后連接最大池化層,最后一層卷積層之后沒(méi)有采用全連接層,而是采用了全局平均池化層,這樣可以防止網(wǎng)絡(luò)出現(xiàn)過(guò)擬合并降低了參數(shù);之后再接softmax層來(lái)進(jìn)行表情分類。
圖5 mini_Xception網(wǎng)絡(luò)結(jié)構(gòu)圖Fig.5 mini_Xception network structure
該模型架構(gòu)不僅引入了深度可分離模塊實(shí)現(xiàn)了降低參數(shù),還對(duì)Xception網(wǎng)絡(luò)進(jìn)行壓縮,由原先的36個(gè)卷積層變成了7個(gè)卷積層,使得模型參數(shù)進(jìn)一步降低到60 000個(gè),參數(shù)量比Xception網(wǎng)絡(luò)降低了391倍。此外,該模型架構(gòu)在FER-2013表情數(shù)據(jù)集上進(jìn)行了測(cè)試,在表情識(shí)別任務(wù)中獲得了66%的準(zhǔn)確率,模型的權(quán)重可以存儲(chǔ)在855 KB的文件中。在I5-4210M CPU上表情識(shí)別耗時(shí)僅僅在0.22 ms左右,可以看出此模型在空間需求和運(yùn)行速度方面比較適合移動(dòng)端設(shè)備應(yīng)用場(chǎng)景。
設(shè)計(jì)的遠(yuǎn)程表情識(shí)別系統(tǒng)由數(shù)據(jù)采集、傳輸、識(shí)別終端三部分組成,系統(tǒng)結(jié)構(gòu)如圖6所示,其中識(shí)別終端是系統(tǒng)的核心部分,通過(guò)手機(jī)APP實(shí)現(xiàn)遠(yuǎn)程視頻獲取、人臉檢測(cè)和表情識(shí)別功能,表情識(shí)別基于深度學(xué)習(xí)方法,識(shí)別模型是mini_Xception,人臉檢測(cè)采用OpenCV自帶的局部二值模式(local binary pattern,LBP)人臉檢測(cè)器;數(shù)據(jù)采集采用??低暪酒煜碌奈炇浦悄軘z像機(jī),型號(hào)為CS-C2C-1A1WFR,分辨率為1 920×1 080,C2C這款型號(hào)的網(wǎng)絡(luò)攝像機(jī)具有體積小、輕便、高清、易安裝和易使用的優(yōu)點(diǎn);數(shù)據(jù)傳輸通過(guò)路由器和互聯(lián)網(wǎng)云端來(lái)完成,傳輸協(xié)議為RTMP協(xié)議。
圖6 系統(tǒng)結(jié)構(gòu)圖Fig.6 System structure
工作過(guò)程如圖7所示。主要包括模型準(zhǔn)備和移動(dòng)端遠(yuǎn)程識(shí)別兩部分:首先,將表情數(shù)據(jù)集輸入 mini_Xception 網(wǎng)絡(luò)進(jìn)行訓(xùn)練,得到.hdf5表情識(shí)別模型文件,由于Android手機(jī)不支持.hdf5模型,所以還需要將.hdf5模型文件轉(zhuǎn)換為Android手機(jī)支持的.pb模型文件,通過(guò)編寫python程序即可完成模型的轉(zhuǎn)換,這樣生成了最終的模型文件,文件名為model.pb,此模型文件可往Android手機(jī)上進(jìn)行移植;然后從螢石云官網(wǎng)上獲取自己的螢石云攝像頭的RTMP播放鏈接,并將vitamio庫(kù)導(dǎo)入到Android手機(jī)中實(shí)現(xiàn)遠(yuǎn)程取流播放,從而實(shí)現(xiàn)調(diào)用遠(yuǎn)程攝像頭的表情識(shí)別;最終將項(xiàng)目編譯成APK,導(dǎo)入Android手機(jī)生成 APP,通過(guò)APP實(shí)現(xiàn)移動(dòng)端表情識(shí)別。
圖7 工作流程圖Fig.7 Work flow diagrams
在表情數(shù)據(jù)集上,傳統(tǒng)的表情有七種,分別是高興、平靜、生氣、吃驚、恐懼、厭惡和悲傷,針對(duì)家居環(huán)境完成三類表情的識(shí)別,分別為悲傷、平靜、高興。通過(guò)對(duì)公共數(shù)據(jù)集圖片的選取,以及通過(guò) Google、Baidu、實(shí)地拍攝等方式制作了表情數(shù)據(jù)集,其中高興圖片8 989張,悲傷圖片6 077張,平靜圖片6 198張,共包含21 264張人臉圖片。其中訓(xùn)練集17 010張、驗(yàn)證集 2 155 張、測(cè)試集2 099張,數(shù)據(jù)庫(kù)中的圖片均為灰度圖片,并將所有的人臉圖像經(jīng)過(guò)眼睛定位、校準(zhǔn)、剪切,最后歸一化到64×64像素。
Vitamio是一種運(yùn)行于Android與IOS平臺(tái)上的全能多媒體開發(fā)框架,支持RTMP傳輸協(xié)議,采用H.264視頻壓縮標(biāo)準(zhǔn),能夠流暢播放720P甚至 1 080P 高清MKV、FLV、MP4、MOV、TS、RMVB等常見格式的視頻,還可以在Android與IOS上跨平臺(tái)支持MMS、RTSP、RTMP、HLS(m3u8)等常見的多種視頻流媒體協(xié)議,包括點(diǎn)播與直播。Vitmaio在Android應(yīng)用層上通過(guò)API接口提供了視頻播放的相關(guān)類,其中videoview類負(fù)責(zé)視頻的解碼與播放,mediacontroller類負(fù)責(zé)視頻的控制頁(yè)面,包括開始、暫停、進(jìn)度條等。通過(guò)VideoView類實(shí)現(xiàn)遠(yuǎn)程視頻獲取,主要工作包括設(shè)置網(wǎng)絡(luò)URL地址、獲取RTMP視頻流并播放、設(shè)置控件監(jiān)聽,以進(jìn)一步完成表情識(shí)別。關(guān)鍵代碼如下:
private void initData() {
String path="rtmp://rtmp01open.ys7.com/openlive/09cd5738650a4da1b9b2932648857c63.hd"; //螢石RTMP播放鏈接
mVideoView.setVideoPath(path);
mVideoView.setMediaController(new MediaController(this));
mVideoView.setOnPreparedListener(this);
mVideoView.setOnErrorListener(this);
mVideoView.setOnCompletionListener(this);
}
實(shí)現(xiàn)效果如圖8所示。
圖8 監(jiān)控視頻播放Fig.8 Monitoring video playing
預(yù)處理是人臉檢測(cè)之前對(duì)圖像進(jìn)行灰度化處理的過(guò)程,人臉檢測(cè)是通過(guò)一定的算法判斷一幅圖像中是不是有人臉的出現(xiàn),一旦發(fā)現(xiàn),需要將人臉區(qū)域給標(biāo)記出來(lái)。
2.2.1 預(yù)處理
由于移動(dòng)端平臺(tái)中央處理器(CPU)運(yùn)算能力較弱,為了保證人臉圖像中人臉大小、位置及人臉圖像質(zhì)量的一致性,需要在人臉檢測(cè)之前對(duì)攝像頭獲取的圖像進(jìn)行預(yù)處理,這樣能夠降低移動(dòng)設(shè)備的計(jì)算量。預(yù)處理過(guò)程主要是進(jìn)行圖像灰度化操作[14],主要作用把三通道的彩色圖像,轉(zhuǎn)化為單通道的灰度圖像,將彩色圖像轉(zhuǎn)換為灰度圖可以更加簡(jiǎn)單具體地表現(xiàn)出圖像中的信息,主要代碼如下:
MatOfRect matOfRect=new MatOfRect();
Mat mGray=new Mat();
Mat mColor=new Mat();
Utils.bitmapToMat(mBitmap, mColor);
Imgproc.cvtColor(mColor,mGray,Imgproc.COLOR_RGBA2GRAY);
2.2.2 LBP人臉檢測(cè)
LBP(local binary pattern)是一種用來(lái)描述圖像局部紋理特征的算子,它具有計(jì)算簡(jiǎn)單、對(duì)線性光照變化不敏感及較強(qiáng)的魯棒性等特性,適用于實(shí)時(shí)人臉檢測(cè)。人臉檢測(cè)是表情識(shí)別最為關(guān)鍵一步,檢測(cè)的結(jié)果對(duì)接下來(lái)的表情識(shí)別過(guò)程具有重要意義。
圖9 LBP編碼示意圖Fig.9 LBP encoding schematic
OpenCV庫(kù)中提供了基于LBP特征的級(jí)聯(lián)檢測(cè)器,通過(guò)detectMultiScale方法即可完成檢測(cè)。下載好OpenCV4Android SDK之后,可以在它的sdk/etc目錄下找到lbpcascades文件夾,里面存有l(wèi)bpcascade_frontalface.xml文件,導(dǎo)入LBP檢測(cè)器代碼如下所示:
String modelName=MyUtils.copyFile(this, "lbpcascade_frota-lface.xml", "model");
cascadeClassifier=new CascadeClassifier(modelName);
初始化加載之后,就可以調(diào)用detectMultiScale方法設(shè)置好的相關(guān)參數(shù)以實(shí)現(xiàn)人臉檢測(cè),代碼如下所示:
//人臉檢測(cè)
cascadeClassifier.detectMultiScale(mGray,matOfRect, 1.1, 5, 0
,new org.opencv.core.Size(100, 100)
,new org.opencv.core.Size(1000, 1000));
看著老媽容光煥發(fā)地從學(xué)?;貋?lái),一進(jìn)家門就用自以為很溫柔、很有愛的眼神盯著我,盡量克制高昂情緒地說(shuō):“這學(xué)期表現(xiàn)不錯(cuò),繼續(xù)保持??!”我就知道,她又在家長(zhǎng)會(huì)上被“眾星”捧成“月亮”了。
定義一個(gè)faces集合用于臨時(shí)存儲(chǔ)檢測(cè)到的人臉圖像,將人臉圖像保存為Mat格式,然后將人臉圖像存儲(chǔ)為bitmap類即可完成人臉圖像臨時(shí)存儲(chǔ)?;贚BP特征的人臉檢測(cè)器實(shí)現(xiàn)的人臉檢測(cè)效果如圖10所示。
圖10 人臉檢測(cè)效果圖Fig.10 The effect of face detection
訓(xùn)練好的模型文件為hdf5格式,還需要將.hdf5模型文件轉(zhuǎn)換為Android手機(jī)支持的.pb文件,轉(zhuǎn)換完成后的模型名稱為model.pb。將生成的model.pb模型文件以及l(fā)abel.txt標(biāo)簽文件放到工程的asset文件夾下,即可完成模型的移植工作,導(dǎo)入模型和標(biāo)簽文件的代碼如下所示:
private static final String MODEL_FILE="file:///android_asset/model.pb";
private static final String LABEL_FILE="file:///android_asset/labels.txt";
將上面人臉檢測(cè)保存的bitmap類送入classifier表情分類器中進(jìn)行表情識(shí)別,把識(shí)別結(jié)果以及存到results數(shù)組中,將results結(jié)果呈現(xiàn)在APP的結(jié)果區(qū)域resultsView中,結(jié)果區(qū)域顯示內(nèi)容為每個(gè)人臉的表情的類別和置信度,主要代碼如下所示:
final List
for (final Classifier.Recognition recog: results)
{
item_str+=recog.getTitle()+":"+String.format("%.3f",recog.getConfidence())+" | ";
}
resultsView.setResults(results);
按照?qǐng)D6構(gòu)建實(shí)驗(yàn)系統(tǒng),實(shí)現(xiàn)終端表情識(shí)別,并對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行分析。代碼主要基于 Tensorflow 1.13、Keras 2.0深度學(xué)習(xí)框架,主要使用的編程語(yǔ)言為python 3.5與java;APK編譯環(huán)境為 Android Studio 3.0.0,移動(dòng)端測(cè)試平臺(tái)為華為P10,手機(jī)CPU型號(hào)為麒麟960,運(yùn)行內(nèi)存為4G,搭載的Android系統(tǒng)為Android 9.0;PC端GPU采用的是雙塊NVIDIA GeForce 1080 Ti,CPU為Intel i7-i7-6700k,操作系統(tǒng)為Ubuntu 16. 04、Windows 10。
在訓(xùn)練之前,還需要對(duì)mini_Xception神經(jīng)網(wǎng)絡(luò)進(jìn)行調(diào)參,在尺寸的設(shè)定上,GPU對(duì)2的冪次可以發(fā)揮更佳的性能,因此設(shè)置成16、32、64、128等數(shù)值時(shí)往往要比設(shè)置為整10、整100的倍數(shù)時(shí)表現(xiàn)更優(yōu),而迭代次數(shù)(epoch)的設(shè)定也會(huì)對(duì)準(zhǔn)確率有一定的影響,由于數(shù)據(jù)集所涵蓋的圖片數(shù)量比較大,故將尺寸其設(shè)置為32,迭代次數(shù)設(shè)為1 000。主要參數(shù)設(shè)置如表1所示,訓(xùn)練的曲線圖如圖11所示。
表1 網(wǎng)絡(luò)模型部分參數(shù)設(shè)置
圖11 準(zhǔn)確率以及損失曲線圖Fig.11 Accuracy and loss curve
由于設(shè)置的性能改進(jìn)值為50,也就是說(shuō)在50次迭代內(nèi)準(zhǔn)確率都沒(méi)有改善,訓(xùn)練就自動(dòng)停止,最終迭代120次。訓(xùn)練集的準(zhǔn)確率達(dá)到了0.84,驗(yàn)證集準(zhǔn)確率在0.79,模型文件名稱為mini_XCEPTION.107-0.79.hdf5。
由于OpenCV-3.3.0庫(kù)中包含基于Haar-like和LBP兩種特征的人臉檢測(cè)器,檢測(cè)器文件分別為haarcascade_frontalface_alt2.xml(快速的Haar)及l(fā)bpcascade_frontalface.xml(快速的LBP),對(duì)這兩種特征的人臉檢測(cè)器的檢測(cè)速率進(jìn)行對(duì)比,選取1 275幀含有人臉的視頻進(jìn)行測(cè)試,表2是兩種人臉檢測(cè)算法運(yùn)行于Android 9.0平臺(tái)的性能測(cè)試結(jié)果。
表2 人臉檢測(cè)器對(duì)比
通過(guò)表2可以看出,基于LBP特征的檢測(cè)器的檢測(cè)速率要快,比Haar-like特征快了將近一倍,可以看出,選取的LBP人臉檢測(cè)器在實(shí)時(shí)性表現(xiàn)較好。
將表情分類模型與移動(dòng)端常用的兩種圖像分類模型MobileNet、InceptionV3進(jìn)行對(duì)比。對(duì)于MobileNet模型,有兩個(gè)指標(biāo),分別為寬度乘數(shù)α、分辨率乘數(shù)ρ,設(shè)置這兩個(gè)參數(shù)可以調(diào)整模型大小,本文設(shè)置其寬度乘數(shù)α=0.25,分辨率乘數(shù)ρ=128和225,寬度乘數(shù)α越小,MobileNet模型就越小。
對(duì)比結(jié)果如表3所示??梢钥闯觯疚哪P蛢H有0.25 MB,比InceptionV3和MobileNet訓(xùn)練的模型都要??;同時(shí),本文模型的驗(yàn)證集準(zhǔn)確率達(dá)到了0.79,比MobileNet和InceptionV3兩種模型的準(zhǔn)確率要高。
表3 模型性能對(duì)比
將三個(gè)模型分別移植到Android手機(jī)上進(jìn)行識(shí)別速率以及CPU占用率對(duì)比測(cè)試,從表3中可以看出,mini_Xception網(wǎng)絡(luò)的識(shí)別速率達(dá)到了8 f·s-1,比InceptionV3模型和MobileNet模型實(shí)時(shí)性要好一些。mini_Xception模型CPU占用率也比InceptionV3和MobileNet低,在Android手機(jī)上運(yùn)行不會(huì)影響手機(jī)的流暢性。
首先打開螢石云官方的APP對(duì)攝像機(jī)進(jìn)行WiFi配置,搭建測(cè)試環(huán)境的網(wǎng)絡(luò)帶寬為20 MB/s,待配置成功后,螢石云攝像機(jī)會(huì)提示W(wǎng)iFi連接成功;接下來(lái)將本工程打包成APK安裝到手機(jī)上即可運(yùn)行。
為了綜合測(cè)試設(shè)計(jì)的移動(dòng)端遠(yuǎn)程表情識(shí)別系統(tǒng),分別對(duì)視頻采集中光照和距離條件變化進(jìn)行了實(shí)驗(yàn)。測(cè)試采用的視頻流為1 280×720格式的高清視頻,測(cè)試結(jié)果如表4、圖12、圖13所示,其中,圖12與圖13左右兩列為不同光照與距離獲取的圖像幀,從表4中可以看出高興的準(zhǔn)確率為85%,悲傷的準(zhǔn)確率為63%,平靜的準(zhǔn)確率為96%,三種表情的平均正確率為81%。
表4 表情識(shí)別準(zhǔn)確率
圖12 不同光照下效果Fig.12 Recognition effects under different lighting conditions
從圖12的結(jié)果可以看出,系統(tǒng)表情識(shí)別的功能不會(huì)受光照的影響,因?yàn)槲炇茢z像機(jī)自帶夜視功能,可以看出對(duì)光照的魯棒性較強(qiáng)。從圖13可以看出,若視頻流格式為1 280×720高清格式,在離攝像機(jī)2 m以內(nèi)的距離下表情識(shí)別不會(huì)受到影響,人臉距離攝像頭若超過(guò)2 m,則會(huì)受到影響;若視頻流為640×480標(biāo)清格式,人臉距離攝像頭0.3 m之內(nèi)才不會(huì)受到影響,超過(guò)0.3 m識(shí)別結(jié)果會(huì)受到影響。所以本系統(tǒng)在家庭環(huán)境下部署時(shí),選擇高清視頻格式,且盡量將攝像機(jī)選擇部署在客廳的影視墻,或者臥室床頭正對(duì)的墻壁上,在這些地方是家人出現(xiàn)較多的地方,能更大程度地捕獲到人臉圖像,進(jìn)而識(shí)別家人的表情。
圖13 不同距離效果Fig.13 Recognition effects under different distance
針對(duì)通過(guò)手機(jī)實(shí)現(xiàn)遠(yuǎn)程表情識(shí)別問(wèn)題,設(shè)計(jì)并實(shí)現(xiàn)了一種基于深度學(xué)習(xí)的移動(dòng)端遠(yuǎn)程表情識(shí)別系統(tǒng)。系統(tǒng)先導(dǎo)入Vitmaio框架實(shí)現(xiàn)遠(yuǎn)程視頻流播放,再將LBP檢測(cè)算法導(dǎo)入到Android手機(jī)之中實(shí)現(xiàn)人臉檢測(cè),最后將mini_Xception訓(xùn)練好的模型移植到Android手機(jī)之中實(shí)現(xiàn)表情識(shí)別,并在Android平臺(tái)中進(jìn)行了實(shí)驗(yàn)和測(cè)試數(shù)據(jù)對(duì)比,得出以下結(jié)論。
(1)系統(tǒng)表情識(shí)別的準(zhǔn)確率達(dá)到81%,識(shí)別速率達(dá)到了8 f·s-1,基本滿足家居環(huán)境的要求。
(2)系統(tǒng)利用 Android手機(jī)以及網(wǎng)絡(luò)攝像機(jī)實(shí)現(xiàn),成本低且便攜性高,將其運(yùn)用在家庭環(huán)境中來(lái)識(shí)別家人的表情,具有很大的實(shí)用價(jià)值。