黃 新, 沈英超
(桂林電子科技大學(xué) 電子工程與自動化學(xué)院,廣西 桂林 541004)
汽車數(shù)量的日益增加致使城市交通擁堵問題越來越嚴(yán)重,交通事故發(fā)生率也隨之上升,其中,因疲勞駕駛導(dǎo)致的交通事故高達(dá)42%以上[1]。因此,如何有效地檢測和預(yù)防疲勞駕駛具有十分重要的現(xiàn)實意義。
現(xiàn)有的疲勞駕駛檢測方法大致分為主觀法和客觀法兩類。主觀法主要有Person疲勞量表、Cooper-Harper評估問卷、斯坦福睡眠量表等,該類方法易受駕駛員主觀思維的影響,具有較大的局限性??陀^法主要分為基于駕駛員生理特征檢測[2-3]、基于車輛信息檢測[4-6]、基于視覺特征檢測[7-9]三類。基于駕駛員生理特征的方法是通過檢測駕駛員的生理指標(biāo)如腦電圖、心電圖、肌電圖等特征來判斷疲勞,雖然檢測精確度較高,但存在設(shè)備昂貴、佩戴不方便等問題。基于車輛信息的方法是通過檢測車輛參數(shù)如速度、加速度、方向盤轉(zhuǎn)角等來判斷疲勞,易受車型、道路狀況以及駕駛員習(xí)慣等因素影響。基于視覺特征的方法是根據(jù)駕駛員的眨眼頻率、頭部偏移狀態(tài)以及嘴巴張合度等分析疲勞狀態(tài),具有直接檢測疲勞特征、非接觸式等優(yōu)點,但檢測結(jié)果易受光照、遮擋等復(fù)雜環(huán)境的影響。
隨著近年來深度學(xué)習(xí)[10-12]在目標(biāo)檢測領(lǐng)域的巨大成功,深度學(xué)習(xí)技術(shù)也推動了疲勞駕駛檢測的研究。Zhou等[13]提出一種基于深度學(xué)習(xí)的疲勞狀態(tài)識別算法,通過引入深信度網(wǎng)絡(luò)來模擬數(shù)據(jù)分布以及自適應(yīng)調(diào)整網(wǎng)絡(luò)學(xué)習(xí)率,從而提高個性化疲勞特征的適應(yīng)性。文獻(xiàn)[14]提出一種基于卷積神經(jīng)網(wǎng)絡(luò)(CNN)的計算PERCLOS和眨眼頻率的疲勞駕駛檢測方法,采用紅外視頻檢測提高了駕駛員佩戴太陽鏡情況下的準(zhǔn)確率。大量研究表明,相較于人工提取的特征,通過深度學(xué)習(xí)直接從圖像中學(xué)習(xí)的視覺特征表示能夠應(yīng)對光照、姿勢等變化,具有更好的魯棒性,檢測精度顯著提高。為此,提出一種基于深度學(xué)習(xí)的疲勞檢測新方法,該方法使用MTCNN和FEL網(wǎng)絡(luò)來實現(xiàn)人臉檢測和人眼定位,采用OC-Net網(wǎng)絡(luò)實現(xiàn)眼睛狀態(tài)判別,同時結(jié)合PERCLOS疲勞判斷準(zhǔn)則和眨眼頻率來判斷疲勞狀態(tài)。實驗結(jié)果表明,基于深度學(xué)習(xí)的疲勞檢測方法是有效的。
CNN是深度學(xué)習(xí)中最具代表性的模型,使用CNN對高維度和大數(shù)據(jù)量的圖像處理時具有較高的效率和準(zhǔn)確率。CNN的網(wǎng)絡(luò)結(jié)構(gòu)主要包括卷積層、池化層和FC層。
卷積層主要負(fù)責(zé)特征提取,將輸入的數(shù)據(jù)或特征圖通過過濾器進行卷積操作,再經(jīng)過非激活函數(shù)作用后輸出特征圖。卷積過程表達(dá)式為
(1)
其中:wi為權(quán)值;bi為偏置。
池化層的池化策略主要有最大池化(max pooling)、平均池化(average pooling)和隨機池化(stochastic pooling)。池化層能夠降低待處理數(shù)據(jù)量,從而加快計算和防止網(wǎng)絡(luò)過擬合。池化表達(dá)式為
(2)
全連接層主要負(fù)責(zé)將多次卷積和池化操作提取的高階抽象特征表示映射到樣本標(biāo)記空間,其表達(dá)式為
hw,b(x)=f(wTx+b)。
(3)
卷積神經(jīng)網(wǎng)絡(luò)的訓(xùn)練采用的是誤差逆?zhèn)鞑ニ惴╗15],將真實輸出和計算輸出的誤差逆向逐級傳播,通過梯度下降法對各網(wǎng)絡(luò)層損失函數(shù)(Loss)的權(quán)值和偏置進行優(yōu)化處理,從而使得誤差達(dá)到最小。損失函數(shù)定義為
(4)
其中:n為訓(xùn)練樣本數(shù);y為輸出真實值。L(w,b)值越小,則網(wǎng)絡(luò)訓(xùn)練所得的權(quán)值和偏置的值越好,模型的性能也越好。
疲勞駕駛檢測算法分為4步:
1)通過MTCNN網(wǎng)絡(luò)模型檢測出攝像頭實時獲取的畫面中的人臉圖像;
2)根據(jù)FEL網(wǎng)絡(luò)精確定位出眼睛區(qū)域;
3)將定位出的眼睛區(qū)域圖像輸入OC-Net網(wǎng)絡(luò)判斷眼睛的開閉狀態(tài);
4)根據(jù)PERCLOS算法求出單位時間內(nèi)眼睛閉合狀態(tài)所占比例,同時結(jié)合眨眼頻率實現(xiàn)疲勞駕駛檢測機制。
疲勞駕駛檢測算法流程圖如圖1所示。
圖1 疲勞駕駛檢測算法流程圖
MTCNN[16]算法是基于深度學(xué)習(xí)聯(lián)合檢測人臉邊界框和特征點,主要包含P-Net、R-Net、O-Net三個級聯(lián)網(wǎng)絡(luò)結(jié)構(gòu)。
1)P-Net(proposal network):通過全卷積網(wǎng)絡(luò)獲得候選窗和邊界框回歸向量,并用邊界框回歸向量對候選窗進行校準(zhǔn),用非極大值抑制(NMS)算法合并重疊窗體。
2)R-Net(refine network):將P-Net得到的候選窗作進一步篩選,同樣通過邊界框回歸向量校準(zhǔn)和NMS算法得到更精確的人臉候選區(qū)域。
3)O-Net(output network):其功能和R-Net類似,主要是對候選區(qū)域進行篩選,獲得最終人臉位置,同時定位雙眼、鼻子、嘴角兩側(cè)5個人臉特征點。
MTCNN網(wǎng)絡(luò)模型的主要任務(wù)是人臉檢測,只有通過第3層O-Net才能得到人臉特征點位置,且眼睛定位的準(zhǔn)確性受遮擋和頭部姿勢變化等因素的影響。因此設(shè)計FEL網(wǎng)絡(luò),以多任務(wù)學(xué)習(xí)(MTL)來提高眼睛定位的穩(wěn)健性。
傳統(tǒng)的MTL旨在通過共同學(xué)習(xí)來提高多個相關(guān)任務(wù)的泛化能力,且所有任務(wù)都具有相似的學(xué)習(xí)難度和收斂率。假設(shè)共有T個任務(wù),其損失函數(shù)可表示為
φ(wt)。
(5)
傳統(tǒng)的MTL主要是為了最大化所有任務(wù)的性能。本研究在優(yōu)化主要任務(wù)的同時,還需優(yōu)化其他輔助任務(wù)。因此,式(5)可重新定義為
(6)
其中:r為主要任務(wù);a為輔助任務(wù)。因眼睛定位為回歸問題,是否遮擋和頭部姿勢變化為分類問題。因此,分別用最小二乘法和交叉熵計算主要任務(wù)和輔助任務(wù)的損失函數(shù):
(7)
其中:第1項中f(xi;wr)=(wr)Txi為線性函數(shù);第2項為Softmax函數(shù),且
第3項為正則化項,主要用于控制權(quán)值比例,且w={wr,{wa}}。
盡管所有任務(wù)共享面部圖像作為輸入,但它們的輸出空間和決策邊界不同。因此,不同的任務(wù)具有不同的收斂速度。為了適應(yīng)不同學(xué)習(xí)能力和收斂速度的相關(guān)任務(wù),通過使用“early stop”標(biāo)準(zhǔn)[17]來促進學(xué)習(xí)收斂,即隨著網(wǎng)絡(luò)的不斷訓(xùn)練,某些輔助任務(wù)在達(dá)到其最高性能時不再對主要任務(wù)有利,因此結(jié)束其學(xué)習(xí)過程。early stop標(biāo)準(zhǔn)為
(8)
FEL網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示,輸入為40像素×40像素的灰度人臉圖像,特征提取階段包含4個卷積層、3個池化層和1個FC層。每個卷積層包含產(chǎn)生多特征圖的過濾器組,意味著在輸入映射中的每個位置應(yīng)用不同的過濾器集。選擇絕對切線函數(shù)為激活函數(shù)。
圖2 FEL網(wǎng)絡(luò)結(jié)構(gòu)
LeNet-5[18]模型是第一個成功應(yīng)用于數(shù)字識別問題的卷積神經(jīng)網(wǎng)絡(luò),在MNIST數(shù)據(jù)集上可以達(dá)到99.2%的準(zhǔn)確率。本研究所使用的眼睛狀態(tài)識別網(wǎng)絡(luò)(OC-Net)模型是LeNet-5的變體,其網(wǎng)絡(luò)結(jié)構(gòu)如圖3所示。
圖3 OC-Net網(wǎng)絡(luò)結(jié)構(gòu)
PERCLOS[19]疲勞判定原理是通過計算單位時間內(nèi)眼睛處于閉合狀態(tài)的時間來判定駕駛員的疲勞狀態(tài),其計算公式為
(9)
其中:n為閉眼狀態(tài)的圖片幀數(shù);N為視頻中連續(xù)若干幀獲取的眼睛圖片總幀數(shù)。R值可以很好地量化駕駛員閉眼的程度,當(dāng)其超過某一閾值(文獻(xiàn)[19]中給定為R2=0.075和R1=0.150)時,則初步認(rèn)為駕駛員進入疲勞狀態(tài)。為了進一步提高疲勞判定的準(zhǔn)確率,將其與眨眼頻率相結(jié)合來判斷疲勞狀態(tài),且眨眼頻率閾值設(shè)置為t1=10。因此,若R滿足R>R1和R2 FEL網(wǎng)絡(luò)訓(xùn)練和測試所使用的AFLW數(shù)據(jù)集為13 466張人臉圖像,其中5 590張來自于LFW[20],剩余的7 876張來自于網(wǎng)絡(luò)。隨機選取其中的10 000張作為訓(xùn)練集,剩余的作為驗證集。由于數(shù)據(jù)集中圖片標(biāo)簽額外包括鼻子和嘴角兩側(cè)的注釋,需手動修改數(shù)據(jù)集標(biāo)注,且輔助任務(wù)的基本事實也需要手動標(biāo)記,最后通過平移、旋轉(zhuǎn)等方法進一步增強訓(xùn)練集。 OC-Net網(wǎng)絡(luò)訓(xùn)練和測試的數(shù)據(jù)集分為ZJU數(shù)據(jù)集(圖4)和DDR數(shù)據(jù)集(圖5)兩部分。ZJU數(shù)據(jù)集是Song等[21]通過提取自然光環(huán)境下采集的20位測試人員的眼部圖像,并經(jīng)旋轉(zhuǎn)、對比度修改以及添加高斯噪聲后擴展的原始眼睛圖像數(shù)據(jù)集。DDR數(shù)據(jù)集是Zhao等[22]從實際行駛環(huán)境中采集的疲勞駕駛數(shù)據(jù)集。 圖4 ZJU數(shù)據(jù)集 圖5 DDR數(shù)據(jù)集 針對FEL網(wǎng)絡(luò)和OC-Net網(wǎng)絡(luò)進行相關(guān)實驗。其網(wǎng)絡(luò)訓(xùn)練以及結(jié)果測試均基于Python3.6和Tensorflow2.0。 3.2.1 FEL網(wǎng)絡(luò) 圖6 模型對比結(jié)果 為了檢驗相關(guān)輔助任務(wù)的影響,對FEL網(wǎng)絡(luò)模型進行變體,變體模型分別為FEL+pose、FEL+glasses、FEL+all。根據(jù)平均誤差評估其性能,平均誤差表示估計的眼睛位置與實際眼睛位置之間的距離,并相對于眼間距離進行歸一化。各網(wǎng)絡(luò)模型對比結(jié)果如圖6所示。從圖6可看出,利用相關(guān)任務(wù)方法可以優(yōu)化FEL網(wǎng)絡(luò),特別是FEL+all的表現(xiàn)遠(yuǎn)超過FEL。為了表明FEL網(wǎng)絡(luò)模型相較于級聯(lián)CNN可以獲得更好的檢測精度,用FEL+all和級聯(lián)CNN的公開二進制代碼進行比較,并采用AFLW圖像進行評估,結(jié)果如圖7所示。從圖7可看出,相較于級聯(lián)CNN,F(xiàn)EL網(wǎng)絡(luò)不僅可以獲得更好的檢測精度,而且還顯著降低了計算成本。級聯(lián)CNN與FEL網(wǎng)絡(luò)的性能比較如表1所示。 圖7 CNN、級聯(lián)CNN、FEL測試結(jié)果 表1 級聯(lián)CNN、FEL性能 圖8 OC-Net訓(xùn)練的眼睛狀態(tài)識別準(zhǔn)確率 3.2.2 OC-Net網(wǎng)絡(luò) 通過ZJU和DDR數(shù)據(jù)集訓(xùn)練OC-Net網(wǎng)絡(luò),眼睛狀態(tài)識別準(zhǔn)確率如圖8所示。從圖8可看出,隨著迭代次數(shù)的增加,網(wǎng)絡(luò)權(quán)值項和偏置項不斷優(yōu)化,識別準(zhǔn)確率不斷提高。當(dāng)?shù)螖?shù)達(dá)到一定數(shù)值后,識別準(zhǔn)確率呈緩慢上升狀態(tài)。使用網(wǎng)絡(luò)迭代104次后產(chǎn)生的model.ckpt文件對ZJU與DDR測試集進行測試,結(jié)果如表2所示。 表2 網(wǎng)絡(luò)迭代104次后對ZJU和DDR測試集的測試結(jié)果 從表2可看出,對于不同環(huán)境下的眼睛狀態(tài),OC-Net網(wǎng)絡(luò)模型都有較高的識別準(zhǔn)確率。使用Gabor、LBP、HOG[22]三種手工制作的人眼特征描述符,并用SVM對特征進行分類,將OC-Net與基于特征分析的方法進行對比,結(jié)果如表3所示。從表3可看出,OC-Net優(yōu)于其他基于手工制作特征的方法。 表3 不同特征識別方法下的AVE、AUC % 為了驗證本方法的有效性,將3個測試中視頻人工統(tǒng)計疲勞次數(shù)與本方法檢測的次數(shù)進行對比,結(jié)果如表4所示。從表4可看出,疲勞檢測方法的平均準(zhǔn)確率為97.18%,可以較好地實現(xiàn)駕駛員疲勞檢測。 表4 疲勞檢測結(jié)果 設(shè)計了一種基于深度學(xué)習(xí)的疲勞駕駛檢測方法。通過MTCNN網(wǎng)絡(luò)對駕駛員進行人臉檢測提取出面部圖像,將其送入FEL網(wǎng)絡(luò)進行人眼精定位,確定眼睛位置并截取眼睛圖像,將眼睛圖片送入OC-Net網(wǎng)絡(luò)實現(xiàn)狀態(tài)判定,通過PERCLOS算法和眨眼頻率來判定駕駛員疲勞狀態(tài)。實驗結(jié)果表明,本方法具有較高的檢測準(zhǔn)確率,可以達(dá)到實時檢測的效果,且對復(fù)雜環(huán)境具有較強的魯棒性。3 實驗結(jié)果與分析
3.1 數(shù)據(jù)集
3.2 實驗結(jié)果分析
4 結(jié)束語