廖明明, 趙 波
(上海工程技術(shù)大學(xué) 機(jī)械與汽車工程學(xué)院, 上海 201620)
疲勞駕駛引起的道路交通事故是造成人員傷亡的重要原因之一[1]。 因此,研究疲勞檢測(cè)方法并開發(fā)自動(dòng)檢測(cè)預(yù)警系統(tǒng)具有重要意義。 疲勞檢測(cè)的方法可分為:基于生理、基于行為、基于視覺三種。 相對(duì)前兩種方法,基于視覺的方法有成本低、檢測(cè)精度高和非侵入的優(yōu)點(diǎn),是現(xiàn)在疲勞檢測(cè)的主流方法。視覺的疲勞檢測(cè)方法包括2 個(gè)步驟:人臉檢測(cè)、特征提取以及疲勞分析。
對(duì)于人臉檢測(cè),Viola 等人提出利用Haar 特征和Adaboost 訓(xùn)練級(jí)聯(lián)分類器進(jìn)行人臉檢測(cè),但是該方法在頭部姿態(tài)偏轉(zhuǎn)情況下的檢測(cè)精度有待提高[2]。 Zhang 等人[3]提出了一種多任務(wù)的卷積神經(jīng)網(wǎng)絡(luò)模型MTCNN,將人臉檢測(cè)分為3 層網(wǎng)絡(luò)進(jìn)行訓(xùn)練,從而提高了檢測(cè)的準(zhǔn)確率和魯棒性。 對(duì)于面部特征提取以及疲勞分析,眼部和嘴部包含豐富的信息,且不易受外界干擾和人為因素影響。 Ursulescu等人[4]使用眨眼檢測(cè)來檢測(cè)眼睛所表征的睡意,并測(cè)量每一次連續(xù)眨眼之間的持續(xù)時(shí)間。 在Bhone 的工作中[5],通過計(jì)算每幀圖像眼睛的縱橫比(EAR)判斷眼睛狀態(tài),如果低于閾值,則表明眼睛處于閉合狀態(tài)。 文獻(xiàn)[6]提出一種兩級(jí)神經(jīng)網(wǎng)絡(luò)的檢測(cè)方法。 該算法通過訓(xùn)練第一級(jí)網(wǎng)絡(luò)對(duì)人眼和非人眼進(jìn)行分類,用第二級(jí)網(wǎng)絡(luò)檢測(cè)眼睛特征點(diǎn)的位置,根據(jù)特征點(diǎn)來計(jì)算眼睛張開程度,用PERCLOS進(jìn)行疲勞狀態(tài)評(píng)估。 打哈欠被認(rèn)是疲勞的突出表現(xiàn)之一,大量研究致力于使用打哈欠來判斷疲勞狀態(tài)。Knapik 等人[7]利用熱圖像和平均溫度分析的方法對(duì)駕駛員打哈欠進(jìn)行檢測(cè),但是在駕駛員臉部快速運(yùn)動(dòng)的情況下可能會(huì)檢測(cè)失敗。 Yang 等人[8]提出使用三維卷積網(wǎng)絡(luò)以及雙向長(zhǎng)短期記憶網(wǎng)絡(luò)對(duì)嘴部進(jìn)行時(shí)空特征提取,采用SoftMax 對(duì)嘴部狀態(tài)進(jìn)行分類,然而低分辨率的圖形會(huì)降低該方法的有效性。Anund 等人[9]首先通過視頻捕捉設(shè)備獲取嘴部的圖像,然后輸入嘴部的開合特征,神經(jīng)網(wǎng)絡(luò)系統(tǒng)根據(jù)嘴部開合的持續(xù)時(shí)間來判斷疲勞。
為減小真實(shí)駕駛場(chǎng)景下光照變化、頭部姿態(tài)變化等不利因素的影響。 本文采用MTCNN 進(jìn)行實(shí)時(shí)人臉檢測(cè),并獲取眼部和嘴部區(qū)域。 在此基礎(chǔ)上,考慮到眼部和嘴部形狀以及動(dòng)態(tài)特征的差異,分別設(shè)計(jì)了眼部和嘴部狀態(tài)識(shí)別網(wǎng)絡(luò),有效地提高了檢測(cè)的準(zhǔn)確性。
提出的疲勞檢測(cè)方法包括數(shù)據(jù)采集及預(yù)處理、人臉檢測(cè)、口眼特征提取、疲勞狀態(tài)識(shí)別。 具體工作流程為:首先通過相機(jī)實(shí)時(shí)捕獲駕駛員圖像;然后將原始圖像灰度化處理并進(jìn)行直方均衡化。 接著使用MTCNN 進(jìn)行人臉檢測(cè),并定位眼睛和嘴部區(qū)域;然后,使用設(shè)計(jì)的SOE-Net 和SOM-Net 分別對(duì)眼睛和嘴部的狀態(tài)進(jìn)行識(shí)別;最后,根據(jù)PERCLOS 和持續(xù)張嘴時(shí)間(COMT)對(duì)眼部和嘴部的狀態(tài)進(jìn)行量化分析,再結(jié)合以上2 個(gè)疲勞判別準(zhǔn)則對(duì)駕駛員的疲勞狀況進(jìn)行綜合性評(píng)估。 算法流程如圖1 所示。
圖1 算法流程Fig.1 The flow chart of the algorithm
駕駛過程中駕駛室內(nèi)的光照強(qiáng)度發(fā)生變化會(huì)影響圖像的質(zhì)量,導(dǎo)致人臉的特征變得模糊。 這通常發(fā)生在某些特殊場(chǎng)景下(陰天、下雨天、晚上)。 為了提高檢測(cè)的準(zhǔn)確性,在對(duì)駕駛員面部進(jìn)行檢測(cè)之前,采用光照增強(qiáng)的方法對(duì)圖像進(jìn)行預(yù)處理,使用直方均衡化來提高圖像幀的亮度以及對(duì)比度。
相對(duì)于傳統(tǒng)的人臉檢測(cè)的算法,深度學(xué)習(xí)的算法具有精度高、魯棒性好的優(yōu)勢(shì)。 因此,本文采用目前比較先進(jìn)的MTCNN 來開展人臉檢測(cè)的工作。MTCNN 主要包括3 個(gè)子網(wǎng)絡(luò):P-Net、R-Net 和ONet,具體結(jié)構(gòu)如圖2 所示。 對(duì)此擬展開分述如下。
圖2 MTCNN 網(wǎng)絡(luò)Fig.2 MTCNN network
(1)P-Net。 利用邊界框的回歸向量校正候選窗口, 然后利用非極大抑制(non - maximum suppression, NMS)方法合并高度重疊的候選幀。 此外,為了解決多尺度目標(biāo)的問題,構(gòu)造了圖像金字塔,然后將不同大小的圖像依次送入級(jí)聯(lián)網(wǎng)絡(luò)中。
(2)R-Net。 主要通過邊界框回歸和非最大抑制消除假陽性樣本。 將P-Net 生成的候選人臉框架大小調(diào)整為24×24,輸出仍然是人臉分類和邊界框回歸的結(jié)果。
(3)O-Net。 對(duì)經(jīng)過R-Net 濾波后的候選框區(qū)域再次濾波,將圖像的大小調(diào)整為48×48,并計(jì)算特征點(diǎn)在每一幀人臉上的位置。
通過圖像的預(yù)處理極大地消除了較差光照條件對(duì)面部特征提取的影響。 MTCNN 具有很強(qiáng)的魯棒性,能夠適應(yīng)頭部姿態(tài)變化特殊的駕駛場(chǎng)景,其在駕駛員頭部左右、上下旋轉(zhuǎn)一定角度時(shí),也能實(shí)現(xiàn)精準(zhǔn)人臉定位。 通過MTCNN 網(wǎng)絡(luò)可以得到人臉5 個(gè)關(guān)鍵點(diǎn),可根據(jù)關(guān)鍵點(diǎn)獲得眼睛和嘴部區(qū)域。 檢測(cè)效果如圖3 所示。
圖3 MTCNN 檢測(cè)結(jié)果Fig.3 Detection results of MTCNN
通過MTCNN 定位得到眼部區(qū)域后,需要進(jìn)行眼部狀態(tài)的識(shí)別。 本文構(gòu)建了一個(gè)眼睛狀態(tài)識(shí)別網(wǎng)絡(luò)(SOE-Net)對(duì)眼睛狀態(tài)進(jìn)行分類,網(wǎng)絡(luò)結(jié)構(gòu)如圖4(a)所示。 首先需要將輸入圖像的大小調(diào)整為42×30;所有卷積層的卷積核大小均為3×3,無填充且步長(zhǎng)為1;所有池化層的卷積核大小均為2×2,步長(zhǎng)為2。 池化層可以在保留主要特征的同時(shí)減小圖像尺寸,并將圖像尺寸減小到原始圖像的一半,這極大減少了模型的參數(shù)量,可以有效防止模型過擬合。全連接層匯集了先前層提取的特征,然后通過Softmax分類器實(shí)現(xiàn)二分類任務(wù),即眼睛的睜開或閉合。Softmax 函數(shù)表達(dá)式為:
其中,pi為第i類的概率,zi為全連接層的輸出,zi公式為: 激活函數(shù)采用收斂速度較快ReLU 函數(shù),以減小反向傳播過程中梯度消失問題帶來的不利影響。網(wǎng)絡(luò)使用帶動(dòng)量的梯度下降法進(jìn)行訓(xùn)練。 損失函數(shù)為交叉熵?fù)p失函數(shù),具體表達(dá)式為:
其中,yi為樣本i的標(biāo)簽,正例為1,負(fù)類為0;pi表示樣本預(yù)測(cè)為正的概率。
構(gòu)建嘴部狀態(tài)識(shí)別網(wǎng)絡(luò)(SOM-Net)對(duì)提取的嘴部特征進(jìn)行分類,網(wǎng)絡(luò)結(jié)構(gòu)如圖4(b)所示。 與眼部狀態(tài)識(shí)別網(wǎng)絡(luò)不同,SOM-Net 的輸入圖像大小是48×48,并且加深了神經(jīng)網(wǎng)絡(luò)的層數(shù),采用3 層卷積層和3 層池化層的網(wǎng)絡(luò)。 相同的是,SOM-Net 采用ReLU 作為激活函數(shù),并且仍使用交叉熵?fù)p失函數(shù)來衡量模型的質(zhì)量。
圖4 面部特征識(shí)別網(wǎng)絡(luò)Fig.4 Network of facial feature recognition
駕駛員在疲勞的時(shí)候經(jīng)常會(huì)表現(xiàn)出眨眼頻率增加、閉眼持續(xù)時(shí)間延長(zhǎng)和持續(xù)張嘴等特征。 在前人研究中,根據(jù)眼睛和嘴部狀態(tài)來識(shí)別疲勞的常用指標(biāo)有:PERCLOS[10]、持續(xù)閉眼時(shí)間[11]、嘴巴張 合頻率[12]、持續(xù)張嘴時(shí)間[11]。 本文使用PERCLOS值進(jìn)行眼部狀態(tài)評(píng)估。PERCLOS為1,表示在單位時(shí)間內(nèi)持續(xù)閉眼的情況。 雖然嘴巴張合頻率能夠一定程度反映出駕駛員的疲勞狀況,但是在說話、唱歌、大笑的情況下可能會(huì)出現(xiàn)誤判,而用持續(xù)張嘴時(shí)間來評(píng)估能避免這類誤判。 所以結(jié)合PERCLOS和持續(xù)張嘴時(shí)間兩個(gè)指標(biāo)來進(jìn)行疲勞判定。 具體研究論述如下。
(1)PERCLOS。 正常情況下,一個(gè)司機(jī)每60 s平均會(huì)眨眼10 次,每2~6 s 眨眼一次,每次耗時(shí)0.2~0.4 s。PERCLOS是眼睛在特定時(shí)間段內(nèi)閉合幀數(shù)占總幀數(shù)的比率,能夠反映駕駛員疲勞程度,PERCLOS的計(jì)算公式可表示為:
其中,Nc是指在單位時(shí)間內(nèi)眼睛閉合狀態(tài)的總幀數(shù),Nt是指單位時(shí)間內(nèi)的總幀數(shù)。
(2)持續(xù)張嘴時(shí)間。 在疲勞的駕駛條件下,司機(jī)經(jīng)常表現(xiàn)出打哈欠的特征。 一般情況下,一個(gè)人打呵欠的時(shí)候,嘴巴會(huì)張大且會(huì)保持幾秒鐘。 提出的SOM-Net 能判斷嘴部是張開、還是閉合的狀態(tài)。在打哈欠、說話和大笑時(shí),人的嘴部均會(huì)變?yōu)閺堥_的狀態(tài),但研究表明,在正常情況下,司機(jī)打哈欠約5 s,然而在說話和大笑的場(chǎng)景下,人嘴部張開的時(shí)間很短且相對(duì)于打哈欠嘴張開的時(shí)間會(huì)很少。 因此,本文通過持續(xù)張嘴時(shí)間(COMT) 來判斷打哈欠,COMT表達(dá)式如下:
其中,F(xiàn)start表示開始閉合嘴部時(shí)圖像幀的序號(hào);Fend表示結(jié)束閉合嘴部時(shí)圖像幀的序號(hào);f表示采集圖像的幀率。
(3)疲勞狀態(tài)檢測(cè)。 對(duì)于PERCLOS的研究,Wierwille 等人[13]提出當(dāng)進(jìn)入疲勞時(shí),PERCLOS >0.15;Chu 等人[14]通將PERCLOS閾值設(shè)為0.25。本文通過實(shí)驗(yàn),為避免因強(qiáng)光導(dǎo)致的駕駛員瞇眼造成對(duì)疲勞誤判,將PERCLOS的閾值設(shè)定為0.4,這表示當(dāng)PERCLOS超過0.4 的時(shí)候,即視為駕駛員表現(xiàn)出疲勞的狀態(tài)。 對(duì)于嘴部張開持續(xù)時(shí)間,實(shí)驗(yàn)中視頻幀率為20 幀/s,每幀的時(shí)長(zhǎng)為50 ms,當(dāng)張嘴幀數(shù)連續(xù)超過80 幀(4 s)時(shí),駕駛員出現(xiàn)打哈欠的情況。為提高疲勞檢測(cè)準(zhǔn)確性,需要同時(shí)考慮到PERCLOS和持續(xù)張嘴時(shí)間(COMT) 兩個(gè)指標(biāo),所以提出一種疲勞判定的方案:當(dāng)PERCLOS≥0.4 或者COMT≥4 s,判定為疲勞狀態(tài);其它情況皆為正常非疲勞狀態(tài)。
本節(jié)將介紹實(shí)驗(yàn)配置及結(jié)果分析,主要包括疲勞特征識(shí)別網(wǎng)絡(luò)性能評(píng)估和整體疲勞檢測(cè)性能分析。 實(shí)驗(yàn)的硬件環(huán)境為:Intel(R) Core(TM) i7-9800X CPU(3.80 GHz),32 GB 內(nèi)存,RTX2080 顯卡,實(shí)驗(yàn)在Ubuntu 18.04 下進(jìn)行。
網(wǎng)絡(luò)訓(xùn)練的數(shù)據(jù)來源于自采集數(shù)據(jù)和YawDD[15]數(shù)據(jù)集截取的有效部分。 數(shù)據(jù)集內(nèi)容包括:清醒狀態(tài)、大笑、說話、打哈欠、瞌睡的駕駛場(chǎng)景。
從數(shù)據(jù)集中獲取眼睛和嘴部的圖片共16 500張作為實(shí)驗(yàn)樣本。 訓(xùn)練前需要將正負(fù)樣本進(jìn)行灰度處理,并將眼睛圖片歸一化尺寸為42×30,將嘴部圖片歸一化尺寸為48×48。
在訓(xùn)練過程中,學(xué)習(xí)率設(shè)為0.01。 為了提高評(píng)估模型的性能,防止過擬合,采用交叉驗(yàn)證法來劃分?jǐn)?shù)據(jù)集,訓(xùn)練集和測(cè)試集的比例為9 ∶1。 如圖5(a)所示,SOE-Net 在訓(xùn)練的最初損失率約為0.29,在經(jīng)過1 500 次迭代以后,損失值基本上穩(wěn)定在0.02。SOM-Net 訓(xùn)練的過程與SOE-Net 類似,如圖5(b)所示,在訓(xùn)練的最初損失率約為0.24,在經(jīng)過1 000次迭代以后,損失值基本上穩(wěn)定在0.01。
圖5 損失函數(shù)曲線Fig.5 Curves of loss functions
由實(shí)驗(yàn)結(jié)果可知,SOE-Net 在測(cè)試集的分類平均準(zhǔn)確率高達(dá)90.4%,結(jié)果見表1。 SOM-Net 在平均準(zhǔn)確率高達(dá)90.7%,結(jié)果見表2。
表1 眼睛狀態(tài)識(shí)別結(jié)果Tab.1 The result of eye state recognition
表2 嘴部狀態(tài)識(shí)別結(jié)果Tab.2 The result of mouth state recognition
為進(jìn)一步驗(yàn)證面部疲勞識(shí)別網(wǎng)絡(luò)的性能,使用自采數(shù)據(jù)集的3 段視頻樣本進(jìn)行測(cè)試。 視頻為實(shí)驗(yàn)人員在極度疲勞的狀態(tài)下采集的,用于進(jìn)一步驗(yàn)證SOE-Net 和SOM-Net 的泛化能力以及實(shí)時(shí)疲勞檢測(cè)的魯棒性,檢測(cè)結(jié)果見表3。
表3 疲勞檢測(cè)結(jié)果Tab.3 The result of fatigue detection
視頻1 中一部分疲勞檢測(cè)分析如圖6 所示。 由圖6 可知,在第80~220 幀,由于持續(xù)張嘴的時(shí)間超過4 s,所以被判定為打哈欠;而在第395 ~415 幀,持續(xù)張嘴的時(shí)間不超過4 s,為駕駛員說話的場(chǎng)景。在第600~700 幀,PERCLOS值達(dá)到了0.78,為駕駛員瞌睡的場(chǎng)景。
圖6 疲勞檢測(cè)分析Fig.6 Analysis of fatigue detection
本文提出了一種基于卷積神經(jīng)網(wǎng)絡(luò)的疲勞駕駛檢測(cè)方法,該方法通過融合了駕駛員眼部和嘴部的特征來判斷駕駛員疲勞狀況。 采用MTCNN 定位駕駛員臉部、眼部和嘴部區(qū)域;將眼部和嘴部的特征分別輸入SOE-Net 和SOM-Net 進(jìn)行狀態(tài)識(shí)別。 最后,結(jié)合PERCLOS和持續(xù)張嘴時(shí)間進(jìn)行疲勞判定。該方法能夠適應(yīng)光照變化和駕駛員頭部姿態(tài)變化的復(fù)雜駕駛環(huán)境。 在滿足實(shí)時(shí)檢測(cè)的需求的前提下,疲勞檢測(cè)的平均準(zhǔn)確率可達(dá)90.8%。 提出的神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu)簡(jiǎn)單,便于未來在移動(dòng)端部署。