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