郭克友,賀云霞,胡 巍
(北京工商大學(xué),北京 100048)
以據(jù)統(tǒng)計(jì),疲勞駕駛、酒駕等人為因素是引發(fā)交通事故的主要原因,這都與駕駛員的精神狀態(tài)和注意力集中程度密切相關(guān),因此對(duì)駕駛員駕駛狀態(tài)進(jìn)行有效檢測(cè)有利于防止交通事故的發(fā)生。對(duì)于駕駛員的注意力檢測(cè)大致可以分為三類:一是根據(jù)駕駛員的生理參數(shù)判斷,比如通過(guò)眼睛閉合時(shí)間占特定時(shí)間的百分率作為疲勞程度的衡量指標(biāo)[1,2];二是根據(jù)車輛行駛的狀態(tài)[3];三是根據(jù)駕駛員面部姿態(tài)估計(jì)[4],精確的人臉特征點(diǎn)定位可以估計(jì)出人臉偏轉(zhuǎn)的角度,遮擋、光照的明暗、較大的頭部旋轉(zhuǎn)和夸張的表情變化等因素都會(huì)影響特征點(diǎn)定位的準(zhǔn)確性。人臉特征點(diǎn)檢測(cè)的主流方法是先進(jìn)行人臉檢測(cè),檢測(cè)出人臉的邊界框,再預(yù)測(cè)出眼睛、鼻子、輪廓等關(guān)鍵點(diǎn)。
人臉特征點(diǎn)檢測(cè)方法大致分為三類。一是ASM[5](Active Shape Model)和AAM[6](Active Appearnce Model)基于模型的方法;二是2010年,Dollar提出CPR[7](Cascaded Pose Regression)基于回歸的方法;三是基于深度學(xué)習(xí)[8]的方法:2013年,Sun等人[9]首次將卷積神經(jīng)網(wǎng)絡(luò)應(yīng)用到人臉關(guān)鍵點(diǎn)檢測(cè);2016年,Zhang等人[10]提出一種多任務(wù)級(jí)聯(lián)卷積神經(jīng)網(wǎng)絡(luò)MTCNN(Multi-task Cascaded Convolutional Networks)用以同時(shí)處理人臉檢測(cè)和人臉關(guān)鍵點(diǎn)定位問題。香港中文大學(xué)的湯曉鷗教授團(tuán)隊(duì)提出TCDCN[11],同時(shí)進(jìn)行多任務(wù)學(xué)習(xí),通過(guò)性別、是否戴眼鏡和臉部姿態(tài)輔助定位特征點(diǎn)。
特征點(diǎn)提取這塊由于目前是基于深度神經(jīng)網(wǎng)絡(luò)的,計(jì)算量特別大,因此考慮對(duì)五特征點(diǎn)檢測(cè)的網(wǎng)絡(luò)進(jìn)行簡(jiǎn)化,達(dá)到節(jié)約時(shí)間的目的。針對(duì)DCNN三級(jí)預(yù)測(cè)比較復(fù)雜的問題,提出了一種優(yōu)化方式,將原來(lái)的檢測(cè)模型改為兩級(jí)檢測(cè)模型。選取五個(gè)固定點(diǎn)即眼角、鼻子、嘴角作為特征點(diǎn)進(jìn)行預(yù)測(cè),選用級(jí)聯(lián)卷積網(wǎng)絡(luò),將上一級(jí)的輸出作為下一級(jí)的輸入,在不同層選用不同大小的卷積濾波器,有效提高速度與精度,更快的檢測(cè)出人臉的特征點(diǎn)。然后運(yùn)用檢測(cè)出的人臉特征點(diǎn)像素坐標(biāo)輸入線性方程,計(jì)算得出單應(yīng)性矩陣,從而求出面部轉(zhuǎn)過(guò)的角度。通過(guò)實(shí)驗(yàn)證明了提出的方法在簡(jiǎn)化網(wǎng)絡(luò)的同時(shí)精度還有略微的提升,并且檢測(cè)出的特征點(diǎn)能進(jìn)行注意力檢測(cè)。
下面首先簡(jiǎn)要介紹原始的DCNN網(wǎng)絡(luò),然后重點(diǎn)介紹優(yōu)化和改進(jìn)方式。實(shí)驗(yàn)從兩方面展開,第一部分介紹優(yōu)化方式相比于原始DCNN的提升效果,接著用提出方法檢測(cè)出的特征點(diǎn)去計(jì)算面部轉(zhuǎn)角來(lái)證明所提出的方法可以用于注意力檢測(cè)。
DCNN的總體思想是有粗到細(xì)實(shí)現(xiàn)人臉關(guān)鍵點(diǎn)的定位,整個(gè)網(wǎng)絡(luò)結(jié)構(gòu)分為三層:level1、level2、level3,每層都包含多個(gè)神經(jīng)網(wǎng)絡(luò)模型。level1是粗略定位,分三層負(fù)責(zé)部分或全部關(guān)鍵點(diǎn)定位,每個(gè)關(guān)鍵點(diǎn)至少被預(yù)測(cè)兩次,取結(jié)果的平均值得到第一層粗定位的結(jié)果。Level2是將第一層的輸出五個(gè)特征點(diǎn)截成五張小圖像,分別輸入到level2中的十層網(wǎng)絡(luò)組,每個(gè)特征點(diǎn)被訓(xùn)練兩次,輸出兩次平均定位,以獲得準(zhǔn)確的定位。將level2輸出的五特征點(diǎn),裁剪成更小的五張圖像,輸入到level3中,level3的結(jié)構(gòu)與作用與level2一致,以獲得更精確的五特征點(diǎn)定位。
改進(jìn)過(guò)的五特征點(diǎn)檢測(cè)網(wǎng)絡(luò)是由兩個(gè)小網(wǎng)絡(luò)組成級(jí)聯(lián)網(wǎng)絡(luò),完成人臉邊界框內(nèi)的五個(gè)特征點(diǎn)回歸的任務(wù),五個(gè)特征點(diǎn)分別為左眼角(LE)、右眼的右眼角(RE)、鼻尖(N)、左嘴角(LM)和右嘴角(M)。具體流程如圖1所示:首先輸入已知人臉框圖的圖像輸入第一級(jí)網(wǎng)絡(luò),第一級(jí)網(wǎng)絡(luò)有1F、1EN和1NM三層深度神經(jīng)網(wǎng)絡(luò),將人臉邊界框resize到39×39尺寸后輸入1F網(wǎng)絡(luò),預(yù)測(cè)人臉出五個(gè)特征點(diǎn),再將人臉邊界框裁剪至31×39尺寸,圖像包括眼角和鼻尖輸入1EN,預(yù)測(cè)出三個(gè)特征點(diǎn),最后一層網(wǎng)絡(luò)1NM的輸入圖像包括鼻尖和嘴角,預(yù)測(cè)出鼻尖和嘴角三個(gè)特征點(diǎn),將三個(gè)深度卷積網(wǎng)絡(luò)預(yù)測(cè)出的特征點(diǎn)做均值處理,輸出人臉五個(gè)特征點(diǎn)的粗定位。第二級(jí)網(wǎng)絡(luò)包括十個(gè)淺層卷積神經(jīng)網(wǎng)絡(luò),分別表示為2LE1、2LE2、2RE1、2RE2、2N1、2N2、2LM1、2LM2、2RM1以及2RM2,由第一級(jí)網(wǎng)絡(luò)得到五個(gè)特征點(diǎn)的粗定位,以預(yù)測(cè)特征點(diǎn)位置為中心的局部位置裁剪至15×15的圖像作為第二級(jí)網(wǎng)絡(luò)各個(gè)淺層神經(jīng)網(wǎng)絡(luò)的輸入,2LE1表示第二級(jí)中預(yù)測(cè)左眼角的第一個(gè)卷積網(wǎng)絡(luò),以此類推,每個(gè)特征點(diǎn)會(huì)被訓(xùn)練兩次,對(duì)兩次訓(xùn)練輸出的特征點(diǎn)位置進(jìn)行平均處理,得出較精確的定位,第二級(jí)網(wǎng)絡(luò)是對(duì)第一級(jí)網(wǎng)絡(luò)預(yù)測(cè)的結(jié)果進(jìn)行微小的修改。
圖1 級(jí)聯(lián)DCNN結(jié)構(gòu)圖
第一級(jí)網(wǎng)絡(luò)需要從輸入的人臉框圖中直接檢測(cè)出五個(gè)特診點(diǎn),這是比較困難并且難以訓(xùn)練的任務(wù),卷積神經(jīng)網(wǎng)絡(luò)需要足夠的深度才能從全局出發(fā),形成更高層次的特征。通過(guò)結(jié)合低層提取的空間鄰近特征,高層神經(jīng)元可以從較大區(qū)域提取特征。除此之外,高層次的特征通常是高非線性的,可以通過(guò)在卷積層后添加激活函數(shù)用于增加從輸入到輸出的非線性。第一級(jí)深度神經(jīng)網(wǎng)絡(luò)選用vanilla CNN,其網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示,深度卷積神經(jīng)網(wǎng)絡(luò)由一個(gè)卷積核為5×5的卷積層,兩個(gè)卷積核為3×3的卷積層以及一個(gè)卷積核為2×2的卷積層和兩個(gè)全連接層組成,選擇最大池化。vanilla CNN是用來(lái)訓(xùn)練面部的特征點(diǎn),這是一個(gè)基于回歸面部特征點(diǎn)網(wǎng)絡(luò)的松散網(wǎng)絡(luò),選擇此模型是因其簡(jiǎn)單性。該網(wǎng)絡(luò)應(yīng)從輸入的人臉框圖中預(yù)測(cè)出五個(gè)特征點(diǎn),1F深度神經(jīng)網(wǎng)絡(luò)的檢測(cè)窗口大小為39×39,1EN和1NM的檢測(cè)窗口大小為39×31,將1F、1EN和1NM三張圖像分別輸入速度卷積神經(jīng)網(wǎng)絡(luò),經(jīng)過(guò)四個(gè)卷積層和兩個(gè)全連接層后進(jìn)行損失計(jì)算,四層卷積層使用的卷積核逐層遞減,即感受野逐層減少,池化層選用最大池化。經(jīng)過(guò)三個(gè)深度卷積網(wǎng)絡(luò)的訓(xùn)練,眼角和嘴角會(huì)被訓(xùn)練兩次,鼻尖會(huì)被訓(xùn)練三次,將訓(xùn)練輸出的特征點(diǎn)做均值處理即可得到五個(gè)特征點(diǎn)的粗定位。對(duì)于卷積層中的神經(jīng)元選用雙曲正切激活函數(shù)后的絕對(duì)值校正,此激活函數(shù)可以有效地提高性能。實(shí)踐研究表明,該方法在實(shí)際應(yīng)用中也是有效的。
圖2 第一級(jí)深度卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)圖
第二級(jí)是在局部位置精確特征點(diǎn)的位置,只需淺層的神經(jīng)網(wǎng)絡(luò)即可達(dá)到目的,所有卷積神經(jīng)網(wǎng)絡(luò)都共享一個(gè)較淺的網(wǎng)絡(luò)結(jié)構(gòu),如圖3所示。以2LE卷積神經(jīng)網(wǎng)絡(luò)為例,將第一級(jí)網(wǎng)絡(luò)所預(yù)測(cè)的左眼粗定位為中心,裁剪檢測(cè)窗口至15×15,經(jīng)過(guò)兩個(gè)卷積層和兩個(gè)全連接層后進(jìn)行損失計(jì)算,兩個(gè)卷積層選用的卷積核大小分別為4×4和3×3,池化層依舊為最大池化層。每一個(gè)特征點(diǎn)會(huì)經(jīng)過(guò)兩個(gè)淺層神經(jīng)網(wǎng)絡(luò)訓(xùn)練,最后對(duì)兩次訓(xùn)練輸出的特征點(diǎn)位置進(jìn)行平均處理,得出局部位置較精確的定位。對(duì)于卷積層中選用ReLU激活函數(shù)。
圖3 第二級(jí)淺層卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)圖
在同一特征圖上局部共享神經(jīng)元的權(quán)重可以提高網(wǎng)絡(luò)性能。傳統(tǒng)的卷積網(wǎng)絡(luò)基于兩個(gè)考慮共享同一特征圖上所有神經(jīng)元的權(quán)值。首先,假設(shè)相同的特征可能出現(xiàn)在圖像的任何地方。因此,能應(yīng)用于某一地方的過(guò)濾器,也能應(yīng)用于其它地方。其次,權(quán)值共享有助于防止梯度擴(kuò)散,由于共享權(quán)值的梯度是聚集的,這使得深層結(jié)構(gòu)的監(jiān)督學(xué)習(xí)更加容易。然而,全局共享權(quán)重在固定空間布局的圖像上效果并不好。比如在人臉檢測(cè)時(shí),雖然眼睛和嘴巴可能有像邊緣這樣的共同低級(jí)特征,但它們?cè)诟邔哟紊鲜欠浅2煌?。因此,?duì)于輸入包含不同語(yǔ)義區(qū)域的網(wǎng)絡(luò),在高層上局部共享權(quán)值對(duì)于學(xué)習(xí)不同的高層特征更有效。
第一級(jí)的三個(gè)網(wǎng)絡(luò)依次訓(xùn)練,先訓(xùn)練1F深度卷積神經(jīng)網(wǎng)絡(luò),再訓(xùn)練1EN深度卷積神經(jīng)網(wǎng)絡(luò),最后訓(xùn)練1NM深度卷積神經(jīng)網(wǎng)絡(luò)。卷積神經(jīng)網(wǎng)絡(luò)的訓(xùn)練流程是輸入圖像I(h,w),h和w分別為圖像的高和寬,C(s,n,p,q)定義為有n個(gè)特征圖、卷積核邊長(zhǎng)為s的卷積層,p、q為權(quán)值共享參數(shù)。卷積層的計(jì)算為式(1)。P(s)定義為池化區(qū)域邊長(zhǎng)為s的最大池化層,如式(2),進(jìn)行正切非線性處理和絕對(duì)值修正。經(jīng)過(guò)多層卷積與池化,最后進(jìn)入全連接層F(n),如式(3)
(1)
(2)
(3)
第二級(jí)是以第一級(jí)人臉特征點(diǎn)的預(yù)測(cè)位置為中心的局部位置作為輸入,只是對(duì)特征點(diǎn)的位置進(jìn)行微調(diào),輸入大小為15×15,提取低層特征,神經(jīng)網(wǎng)絡(luò)只有兩次卷積,為淺層的神經(jīng)網(wǎng)絡(luò),迭代次數(shù)不宜過(guò)大。第二級(jí)網(wǎng)絡(luò)與第一級(jí)網(wǎng)絡(luò)類似,十個(gè)淺層卷積神經(jīng)網(wǎng)絡(luò)依次訓(xùn)練,每個(gè)網(wǎng)絡(luò)迭代100,000 次。ω權(quán)重的學(xué)習(xí)率為0.01,b常數(shù)向量的學(xué)習(xí)率為0.02,通過(guò)隨機(jī)梯度下降進(jìn)行學(xué)習(xí)。學(xué)習(xí)率的更新策略為Poly,即每次反向傳播以后使用式(4)更新每次的學(xué)習(xí)率
(4)
其中base_lr為基礎(chǔ)學(xué)習(xí)率,iter為當(dāng)前迭代次數(shù),maxiter為迭代次數(shù),學(xué)習(xí)率曲線主要由power值控制。
首先用改進(jìn)的算法進(jìn)行五特征點(diǎn)檢測(cè),然后再用檢測(cè)出的特征點(diǎn)計(jì)算面部轉(zhuǎn)角來(lái)證明所提出的方法能用于注意力檢測(cè)。本實(shí)驗(yàn)用到的環(huán)境:Ubuntu16.04,caffe深度學(xué)習(xí)框架,opencv4.1.0。
本實(shí)驗(yàn)的訓(xùn)練集包含5590張LFW圖像和7876張來(lái)自網(wǎng)絡(luò)的圖像,所有的圖片都被標(biāo)記為5個(gè)面部標(biāo)記。將圖片中眼珠的標(biāo)記,改成眼角的標(biāo)記。刪除側(cè)臉與嚴(yán)重遮擋的圖像,剩下的面孔被隨機(jī)分割,其中8000張用于訓(xùn)練,1856張用于驗(yàn)證。測(cè)試集包括1521張BioID圖像、781張LFPW圖像和249張LFPW測(cè)試圖像。
針對(duì)人臉特征點(diǎn)檢測(cè),對(duì)測(cè)試集1856張圖片進(jìn)行測(cè)試,得到失敗率以及平均誤差,如表1所示。誤差為預(yù)測(cè)值與真實(shí)值間的橫向像素距離占輸入人臉框圖寬度的比例,當(dāng)誤差大于0.05時(shí),被定義為無(wú)效預(yù)測(cè)即預(yù)測(cè)失敗,失敗率為預(yù)測(cè)無(wú)效的圖片占測(cè)試集圖片的比例。平均誤差為所有測(cè)試集誤差的平均值。
與未改進(jìn)的DCNN[12]相比,只運(yùn)用了兩級(jí)網(wǎng)絡(luò)便達(dá)到了使用三級(jí)網(wǎng)絡(luò)的效果,甚至得到了更高的準(zhǔn)確率,改進(jìn)后的DCNN只需要訓(xùn)練兩級(jí)網(wǎng)絡(luò),大大縮短了訓(xùn)練的時(shí)間,并用相同的數(shù)據(jù)在MTCNN上進(jìn)行實(shí)驗(yàn)。結(jié)果對(duì)比如表2所示。
表1 人臉特征點(diǎn)檢測(cè)準(zhǔn)確率
表2 實(shí)驗(yàn)結(jié)果對(duì)比
在檢測(cè)出五個(gè)人臉特征點(diǎn)的基礎(chǔ)上,使用單應(yīng)性矩陣[13]計(jì)算人臉偏轉(zhuǎn)角度。面部轉(zhuǎn)向一般繞頭部中心軸轉(zhuǎn)動(dòng),此轉(zhuǎn)角與相機(jī)繞相機(jī)中心軸轉(zhuǎn)過(guò)的角度相同,因此可以轉(zhuǎn)化為兩個(gè)不同位置的相機(jī)對(duì)同一物體拍攝,運(yùn)用單應(yīng)性矩陣求兩個(gè)相機(jī)相對(duì)位置的問題。單應(yīng)性矩陣用于描述物體在世界坐標(biāo)系和像素坐標(biāo)系之間的位置映射關(guān)系,如式(5)。
(5)
其中M為相機(jī)的內(nèi)參矩陣,T為相機(jī)的外參矩陣,由旋轉(zhuǎn)矩陣的前兩列r1、r2和平移矩陣t組合而成。
本課題組對(duì)人臉偏轉(zhuǎn)角度誤差進(jìn)行實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果表明運(yùn)用單應(yīng)性矩陣計(jì)算出的角度與實(shí)際偏轉(zhuǎn)角度相差1-5°。本實(shí)驗(yàn)在計(jì)算角度誤差的基礎(chǔ)上,驗(yàn)證人臉偏轉(zhuǎn)角度的大小對(duì)單應(yīng)性矩陣計(jì)算角度準(zhǔn)確率的影響。
首先在正對(duì)駕駛員的位置固定相機(jī),用相機(jī)拍攝出駕駛員左右偏轉(zhuǎn)10°、20°、30°時(shí)的姿態(tài);其次用級(jí)聯(lián)卷積神經(jīng)網(wǎng)絡(luò)檢測(cè)出人臉五特征點(diǎn);然后選用眼角和嘴角四個(gè)特征點(diǎn),將八個(gè)點(diǎn)的像素坐標(biāo)帶入式(6)、(7),計(jì)算出單應(yīng)性矩陣H;最后鼻尖特征點(diǎn)用于驗(yàn)證單應(yīng)性矩陣的像素誤差,人臉檢測(cè)出的實(shí)際鼻子坐標(biāo)與單應(yīng)性矩陣計(jì)算出的坐標(biāo)點(diǎn)的誤差。
(6)
(7)
針對(duì)人臉轉(zhuǎn)角計(jì)算,實(shí)驗(yàn)以Y軸為中心軸做轉(zhuǎn)向?qū)嶒?yàn),在左右偏轉(zhuǎn)10°、20°、30°以及正視時(shí)定格,拍攝7張照片,照片的像素為1280×720。圖4為每偏轉(zhuǎn)10°拍攝的圖像,圖5為每偏轉(zhuǎn)20°拍攝的圖像,圖6為每偏轉(zhuǎn)30°拍攝的圖像,五角星代表根據(jù)單應(yīng)性矩陣計(jì)算出的鼻子像素點(diǎn),點(diǎn)代表級(jí)聯(lián)卷積神經(jīng)網(wǎng)絡(luò)測(cè)試的鼻子特征點(diǎn),兩點(diǎn)之間存在一定的誤差。表3列出了偏轉(zhuǎn)10°、20°、30°時(shí)單應(yīng)性矩陣計(jì)算出的鼻子像素點(diǎn)和改進(jìn)后DCNN的鼻子特征點(diǎn)之間的平均像素誤差,誤差率為平均像素誤差占輸入人臉框圖寬度的比例。針對(duì)人臉特征點(diǎn)的選擇對(duì)偏轉(zhuǎn)角度的影響,選擇利用眼角和眼珠分別作為特征點(diǎn)帶入單應(yīng)性矩陣計(jì)算人臉偏轉(zhuǎn)角度,對(duì)比偏轉(zhuǎn)誤差,如表4所示。
圖4 偏轉(zhuǎn)10°像素誤差圖
圖5 偏轉(zhuǎn)20°像素誤差圖
圖6 偏轉(zhuǎn)30°像素誤差圖
表3 像素誤差結(jié)果對(duì)比
表4 眼珠與眼角偏轉(zhuǎn)誤差結(jié)果對(duì)比
結(jié)果表明偏轉(zhuǎn)角度越大,由單應(yīng)性矩陣計(jì)算得出的鼻子像素點(diǎn)與人臉定位得出的鼻子特征點(diǎn)之間的誤差越大。由此可得,在駕駛員偏轉(zhuǎn)較小的角度時(shí),計(jì)算得出的誤差較小,當(dāng)駕駛員瞬時(shí)偏轉(zhuǎn)較大角度時(shí),根據(jù)單應(yīng)性矩陣求出的偏轉(zhuǎn)角度可能會(huì)存在較大誤差。相比于眼珠作為特征點(diǎn),眼角作為特征點(diǎn)所得的人臉偏轉(zhuǎn)角度誤差較小。
文中對(duì)傳統(tǒng)的級(jí)聯(lián)深度卷積神經(jīng)網(wǎng)絡(luò)檢測(cè)人臉五特征點(diǎn)做出了改進(jìn),將原先的三級(jí)級(jí)聯(lián)神經(jīng)網(wǎng)絡(luò)縮減為兩級(jí)級(jí)聯(lián)神經(jīng)網(wǎng)絡(luò),在縮短訓(xùn)練時(shí)間的同時(shí),略提高了檢測(cè)的準(zhǔn)確率。將檢測(cè)出的特征點(diǎn)運(yùn)用在單應(yīng)性矩陣計(jì)算人臉偏轉(zhuǎn)上也取得了較好的成果?;诩?jí)聯(lián)網(wǎng)絡(luò)人臉五特征點(diǎn)的檢測(cè)的輸入是已檢測(cè)出人臉的圖像,后期可加入人臉框的檢測(cè)。若當(dāng)駕駛員瞬時(shí)偏轉(zhuǎn)的角度過(guò)大時(shí),會(huì)導(dǎo)致計(jì)算的角度偏差較大。