馬雪婷,費樹岷
(東南大學自動化學院,江蘇南京,210096)
隨著機動車輛的大幅度增長,道路交通安全事故頻發(fā)。研究表明疲勞駕駛是引發(fā)道路交通事故的重要原因之一[1-2],如果能夠在交通事故發(fā)生前檢測出駕駛員疲勞駕駛行為并及時給出提醒則可以減少事故發(fā)生。因此研究駕駛員疲勞狀態(tài)檢測對于提高道路交通安全具有極為重要的意義。
目前應(yīng)用于檢測疲勞駕駛的方法主要有以下三類:第一類是使用駕駛員的生理指標如腦電信號特征進行檢測[3-4];第二類是使用駕駛員的行車數(shù)據(jù)如轉(zhuǎn)向力、制動力等物理量進行檢測;這兩類檢測方案主要缺陷是安裝佩戴設(shè)備會降低駕駛員的駕駛舒適度,而且設(shè)備價格昂貴不利于疲勞駕駛檢測產(chǎn)品的推廣和應(yīng)用。第三類檢測方法是基于駕駛員面部行為信息的計算機視覺技術(shù)。
深度卷積神經(jīng)網(wǎng)絡(luò)在圖像分類、目標檢測、場景分割等計算機視覺任務(wù)頗有成效,人臉包含豐富的信息,因此可將人臉特征信息和深度學習相結(jié)合,而且不會干擾駕駛員的正常駕駛。徐[5]等人提出了基于AdaBoost算法檢測人臉實現(xiàn)疲勞駕駛狀態(tài)的檢測;唐[6]等人提出了基于卷積神經(jīng)網(wǎng)絡(luò)模型定位人臉關(guān)鍵點,利用最大類間方差法對人眼嘴部進行最小二乘法橢圓擬合進行狀態(tài)判別;文獻[7]利用基于shuffle-channel思想的MTCNN模型和PFLD深度學習模型分別檢測駕駛員人臉圖像和檢測人臉關(guān)鍵點,再用多特征融合的策略判定疲勞狀態(tài)。 然而深度學習由于其本身龐大的結(jié)構(gòu)規(guī)模,擁有較多參數(shù)冗余,如何提高檢測方法的準確性和實時性依然是疲勞駕駛檢測的研究重點。
針對以上問題,本文提出了一種基于面部特征和深度學習的疲勞駕駛狀態(tài)檢測算法。首先使用改進的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)(CascadeCNN)快速檢測人臉,然后利用輕量級特征提取最小單元確定面部關(guān)鍵點位置,采用基于眼睛縱橫比和嘴唇縱橫比的方法確定疲勞和清醒狀態(tài),最后通過支持向量機(SVM)的方法進行疲勞駕駛狀態(tài)的判定。實驗借助Python和Caffe深度學習框架實現(xiàn)疲勞檢測,并將該算法與其他算法的性能作比較,展示了該算法在識別精度和檢測速度上的優(yōu)越性。

圖1 疲勞駕駛狀態(tài)檢測算法框架
Li[8]等人受到AdaBoost算法[9]級聯(lián)結(jié)構(gòu)的啟發(fā),提出一種由粗到精的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)(CascadeCNN),很大程度上提高了人臉檢測速度,由于網(wǎng)絡(luò)數(shù)量較多,故訓練難度較大。文獻[10]提出了使用全局平均池化層的結(jié)構(gòu)來代替?zhèn)鹘y(tǒng)的全連接層的結(jié)構(gòu)可以大大的減少網(wǎng)絡(luò)結(jié)構(gòu)參數(shù)量,所以本文提出了一種以邊界框回歸代替CascadeCNN中的人臉分類網(wǎng)絡(luò)與邊界框矯正網(wǎng)絡(luò)來減少級聯(lián)的卷積神經(jīng)網(wǎng)絡(luò)數(shù)量,并引入全局池化層代替全連接層。使用本文的網(wǎng)絡(luò)對人臉圖像的處理結(jié)果如圖2所示。藍色邊界表示由該網(wǎng)絡(luò)檢測到的人臉區(qū)域,顯然比采用傳統(tǒng)的非極大值抑制算法綠色邊界檢測的更準確。

圖2 使用本文研究網(wǎng)絡(luò)的人臉檢測圖
人臉關(guān)鍵點的位置在眼睛、嘴巴、鼻子以及人臉邊緣輪廓等。人臉關(guān)鍵點檢測是使用相應(yīng)的檢測算法對人臉圖像定位出關(guān)鍵點所在坐標。文獻[11]提出了一種三級級聯(lián)卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)由粗到精來定位關(guān)鍵點。文獻[12]提出卷積神經(jīng)網(wǎng)絡(luò)中卷積層占據(jù)了整個卷積神經(jīng)網(wǎng)絡(luò)約 90-95%的計算時間,故本文設(shè)計了一種基于深度可分離卷積結(jié)構(gòu)[13]的輕量級特征提取最小單元。該最小單元結(jié)構(gòu)首先使用逐點卷積以降維減少運算量,再使用深度卷積與逐點卷積結(jié)合提取特征,最后使用短連接結(jié)構(gòu)連接輸入與輸出特征到最后的單元輸出。
由圖3和圖4卷積操作計算深度可分離卷積如公式1所示。

圖3 逐點卷積操作圖

圖4 深度卷積操作圖

其中Y為輸出特征圖,K為卷積核,X為輸入特征圖,i,j為特征圖中像素點的位置,k,l為輸出特征圖的尺寸,m為輸入特征圖的通道數(shù)。使用這種卷積結(jié)構(gòu)與標準的卷積操作所減少的參數(shù)量比例如公式2所示。

其中K為卷積核尺寸,M為輸入特征圖的數(shù)量,N為輸出特征圖的數(shù)量。由公式2可知,當卷積層輸出的特征圖數(shù)量越多時,使用深度可分離卷積操作相對于標準卷積操作的參數(shù)壓縮率就越高。在使用3×3的卷積核時,網(wǎng)絡(luò)的參數(shù)量可以壓縮至標準卷積結(jié)構(gòu)的1/8~1/9。在單元輸出的最后添加短連接結(jié)構(gòu)[10]將輸入特征圖與輸出特征圖連接,解決深度卷積結(jié)構(gòu)梯度退化的問題,結(jié)構(gòu)如圖5所示。

圖5 短連接結(jié)構(gòu)
網(wǎng)絡(luò)輸入X與輸出Y的關(guān)系如公式3所示。

其中,H表示輸入特征圖經(jīng)過卷積網(wǎng)絡(luò)轉(zhuǎn)換后的信息,X表示原始特征圖的信息,而T和C分別為兩條支路的權(quán)重系數(shù)。使用該網(wǎng)絡(luò)得到的68點人臉關(guān)鍵點檢測結(jié)果如圖6所示。

圖6 68點人臉關(guān)鍵點定位效果圖
EAR即眼睛縱橫比,文獻[14]提出可以通過眼睛地標距離確定一個人是否眨眼,根據(jù)圖9標定的二維坐標點得出EAR值的計算公式如式4所示。


圖7 眼睛關(guān)鍵點坐標
當眼睛睜開的時候,EAR值基本保持不變,在小范圍內(nèi)上下浮動。當駕駛員疲勞駕駛時,人會不停地眨眼甚至閉合,考慮雙眼的動作基本一致,將雙眼的EAR值的均值作為人眼的EAR值[15],取0.3作為眼睛閉合的臨界閾值。當人進入疲勞狀態(tài)時,眨眼頻率會變高,故可通過眨眼頻率(即單位時間內(nèi)眨眼次數(shù))來判斷駕駛員眼部是否疲勞。眨眼頻率 fb如公式5所示。

式中NB表示時間T內(nèi)發(fā)生眨眼的次數(shù),由EAR值得出,N是時間T內(nèi)的總幀數(shù)。
MAR即嘴唇縱橫比,與EAR的測評原理相似。正常狀態(tài)下,人的嘴巴是閉合或者說話時的微張狀態(tài),然而當進入疲勞狀態(tài)時,便會不停地長大嘴巴打哈欠,故用MAR值表征嘴巴張開程度,根據(jù)圖8標定的二維坐標點計算公式如公式6所示。

圖8 嘴部的關(guān)鍵點坐標

通過打哈欠頻率(即單位時間內(nèi)打哈欠次數(shù))來判斷駕駛員嘴部是否疲勞。打哈欠頻率 fy如公式7所示。

式中NY表示時間段T內(nèi)發(fā)生打哈欠的次數(shù),由MAR值得出,N是時間段T內(nèi)的總幀數(shù)。由文獻[16]可知,設(shè)定MAR的閾值為0.9,當大于此值時,便判定駕駛員打了一次哈欠。
SVM通過建立一個分類超平面作為決策平面,將正反例之間的間隔最大,將分類轉(zhuǎn)化為凸二次規(guī)劃問題進行求解。本文研究的疲勞駕駛狀態(tài)檢測屬于二分類問題,獲取的眼睛和嘴巴特征的數(shù)據(jù)沒有規(guī)律性屬于非線性分類問題,因此適合采用SVM算法作為模型的分類算法。本文通過計算視頻樣本中與標記為疲勞視頻的重疊幀數(shù)Nover,當Nover與視頻樣本總幀數(shù)Ntotal的比值不小于80%時,則標記該樣本為疲勞視頻,否則為清醒視頻。計算公式如式(8),(9)所示。

采用交叉熵作為疲勞識別網(wǎng)絡(luò)的損失函數(shù),計算公式如式10所示。


本文實驗采用普通的攝像設(shè)置FPS為30,處理器的型號是Intel Core i7-6700。采用基準人臉數(shù)據(jù)集WIDER FACE[17]進行訓練,其中50%作測試集,40%作訓練集,10%作驗證集。人臉關(guān)鍵點檢測模型使用300-W評測集[18],每幅圖像的每張臉有68個關(guān)鍵點,使用3148幅圖作為訓練集,689幅圖作為測試集。該模型在駕駛環(huán)境下的檢測效果圖如圖9,10所示。

圖9 駕駛環(huán)境下的人臉檢測效果

圖10 駕駛環(huán)境下的人臉關(guān)鍵點檢測效果
為了驗證該算法對于真實環(huán)境的檢測效果,在光照充足的環(huán)境下,采集10段分別為清醒狀態(tài)和疲勞狀態(tài)的視頻,每段時長1min。由文獻[19]可知,選擇綜合性能較好的120幀作為時間窗口長度。人的一次疲勞行為約為3~5秒,所以截取5s的視頻樣本足以覆蓋所有疲勞動作的時長。采用滑動窗口對采集到的視頻進行處理得到3928段視頻作為訓練和測試樣本,其中標記疲勞狀態(tài)樣本947個,清醒狀態(tài)2743個,正負樣本比例約為1:3,訓練集和測試集比例設(shè)為7:3。根據(jù)該模型的疲勞特征提取方法對整個樣本集進行特征提取,然后送入疲勞識別網(wǎng)絡(luò)。本文SVM模型選擇高斯核函數(shù),懲罰因子C為7,參數(shù)degree值6。當僅采用 fb和 fy作為檢測指標時,準確率僅為83.2%和69.7%,而采用二者融合時,準確率為96.68%,測試結(jié)果如表1所示。

表1 疲勞駕駛檢測結(jié)果
由表1結(jié)果可知,本文算法僅對第1982樣本狀態(tài)判斷錯誤,對于其他視頻樣本均判斷正確。
與基于生理信號檢測疲勞狀態(tài)的文獻[20]的識別率90%和基于AdaBoost算法的文獻[21]的識別率96.47%和基于卷積神經(jīng)網(wǎng)絡(luò)的文獻[22]的識別率95.5%相比,本文研究算法有更高的準確率和更快速的檢測時間。
本文采用改進的三級級聯(lián)卷積神經(jīng)網(wǎng)絡(luò)和深可分離的最小特征單元網(wǎng)絡(luò)作為人臉的檢測和臉部關(guān)鍵點的定位的網(wǎng)絡(luò)結(jié)構(gòu),對采集的真實場景的駕駛視頻的幀圖像進行人臉檢測、定位并識別出眼部和嘴部兩個關(guān)鍵部位,大大減少了傳統(tǒng)卷積神經(jīng)網(wǎng)絡(luò)的參數(shù)量,在保證網(wǎng)絡(luò)的準確率下,提高了網(wǎng)絡(luò)的運行速度。根據(jù)眼部和嘴部關(guān)鍵點坐標計算出EAR和MAR值,根據(jù)二值的大小確定眼部和嘴部疲勞狀態(tài),最后使用SVM分類算法進行疲勞駕駛狀態(tài)判定,算法的識別率達96.68%。與同研究方向的其他算法相比有較高的準確率和運行速度,此外該算法大幅度減少網(wǎng)絡(luò)參數(shù)量和較高的檢測精度,有利于在嵌入式平臺上移植開發(fā)。