吳士力,唐振民 ,劉 永
1.南京理工大學 計算機科學與工程學院,南京 210094
2.南京交通職業技術學院 汽車工程學院 長安福特實驗室,南京 211188
疲勞駕駛是一種非常嚴重的危險駕駛行為。據美國國家公路交通安全管理局估計,每年因疲勞駕駛導致的交通事故數占總體的20%,死亡率占總體的80%以上。疲勞駕駛識別方法主要有接觸式和非接觸式兩類。其中,基于腦電波等生理信息分析的接觸式方法雖然精度高,但應用成本較高,對駕駛員約束大,目前難以大范圍推廣[1]。非接觸式方法也可以分為兩種,一種是對車輛的行駛特征(如加減速、方向盤操控狀況與軌跡等)進行分析[2-5]。該類方法實現成本低,但復雜多變的交通環境會明顯影響其有效性。另一種是基于機器視覺技術對駕駛員頭部圖像進行分析。得益于機器視覺等人工智能技術的快速發展,該類方法的進步空間大、應用成本相對較低,已經成為該領域的研究熱點。Naz等根據人臉視頻中眼睛、嘴和頭部運動特征來識別駕駛員的疲勞狀態[6]。Mandal 等提出使用PERCLOS(單位時間內眼睛閉合所占比例)指標對駕駛員的眼睛狀態進行跟蹤分析,使用自適應整合算法評估疲勞駕駛的程度[7]。Omidyeganeh 等通過Viola-Jones 算法對視頻中駕駛員的人臉和嘴部進行檢測,然后使用反投影理論對駕駛員嘴巴運動特征進行提取分析來識別哈欠[8]。郭慧利等基于Adaboost算法對CCD攝像頭采集的圖像進行人臉檢測,采用灰度積分投影定位駕駛員的眼和嘴,并對其局部狀態進行監測,基于改進的D-S信息融合算法綜合判斷疲勞駕駛狀態[9]。劉明周等基于Adaboost 算法定位駕駛員面部和手部區域,通過尺度不變特征變換提取區域的SIFT特征點,將生成的特征向量輸入三層BP神經網絡模型對疲勞駕駛狀態進行分級[10]。上述方法具有較好的疲勞駕駛識別精度,但在實際運用時會受到光線、穿戴物遮擋等因素的干擾[11],影響其實際運用效果。
綜上所述,車輛操控行為分析和視頻分析各有優缺點,而如能將上述兩種方法進行有效融合,彌補各自缺陷,對提高疲勞駕駛分析與識別效果有積極意義[12]。本文嘗試在現有技術基礎上對駕駛員臉部狀態和車輛行駛狀態進行疲勞特征提取,通過改進的隨機森林算法對兩類特征進行融合建模,從而提高疲勞駕駛識別的準確率,并在真實道路環境下進行實驗以驗證其運行效果。
基于人臉特征點對瞇眼和哈欠進行檢測是識別疲勞狀態的有效手段[13-15]。機器學習工具箱軟件Dlib提供了常用的機器視覺分析開源庫函數(API)[16-17]。使用Dlib相關API可以實時提取人臉68個輪廓特征點(如圖1所示)及其坐標值。

圖1 人臉輪廓特征點位置
瞇眼一般意義上是指眼部在一段時間內保持閉眼狀態的行為。PERCLOS 值是識別瞇眼的常用指標,但其準確率對圖像的分辨率依賴性較強,其適用性還不夠理想[18]。Soukupová 提出了使用眼睛縱橫比值(EAR)來判斷眼睛的開閉狀態[19]。該方法基于眼部6個特征點的坐標來實現,式(1)為圖1 中左眼EAR 值的計算過程。

該方法只依賴圖像中的眼睛輪廓信息,計算過程簡潔。
由于疲勞時兩眼的動作基本保持一致,所以取左右眼EAR值的均值作為人眼的EAR值。圖2所示的是某視頻樣本中EAR值(歸一化后)的變化情況。

圖2 眼部行為的EAR值
觀察圖2可知,人眼在各種狀態下的EAR值都存在明顯波動,這是由人眼眼皮的生理特征導致的。樣本中睜眼時EAR 值大約在0.5~0.9 范圍內波動,瞇眼時EAR值大約在0~0.3 范圍內波動,其差別較為明顯。雖然眨眼時EAR值的波動范圍(大約為0.1~0.4)和瞇眼時EAR均值的波動范圍有部分重疊,但眨眼的持續時間(大約為2~3 個樣本點)明顯小于瞇眼時間(大約為50 個樣本點)。因此需要從EAR 值的幅值(縱向)和時間(橫向)兩個維度去分析眼部狀態。由于在駕駛過程中EAR值是以數據流的形式存在,為了簡化計算過程,本文將單個時間窗內所有EAR值的均值來表征相應時域內EAR值的大小情況。時間窗的長度一般根據經驗和分析要求來設定,如時間窗長度太小容易造成把正常眨眼誤識別為瞇眼;時間窗長度太大會降低瞇眼識別的敏感度和實時性。圖3 所示的是對圖2 中EAR 值取時間窗長度為20個樣本點時的EAR均值情況。

圖3 眼部行為的EAR均值
由圖3 可知,瞇眼狀態對應的連續兩個時間窗(范圍為第81~120 個樣本點)內的EAR 均值都低于0.3,而睜眼和眨眼時的EAR均值均遠大于0.3。

圖4 所示的是某視頻樣本中嘴部行為的MAR 值(歸一化后)變化情況。
哈欠最主要的外觀特征是嘴部保持一定時間的大幅度張開狀態[20]。鑒于嘴部和眼部輪廓運動狀態的相似性,本文嘗試將瞇眼識別方法用于哈欠行為識別,得到MAR值。

圖4 嘴部行為的MAR值
取20 個樣本點為滑動時間窗長度,則圖4 中MAR值的均值情況如圖5所示。

圖5 嘴部行為的MAR均值
觀察圖5 可知,哈欠時MAR 均值在連續兩個時間窗內(范圍為第241~280 個樣本點)大于0.9,明顯高于說話與唱歌時的MAR均值。
相關研究結果表明,駕駛員在疲勞駕駛狀態下的變速和轉向操控活躍程度會出現間斷性大幅下降的情況[21],因此本文提取車輛加減速和轉向行為的活躍度作為疲勞駕駛行為特征值。為了降低正常駕駛狀態下車控數據正常波動產生的干擾,采用先求取車控數據流的局部變化趨勢,再計算活躍度的辦法。實現思路是基于線性擬合提取數據流的變化趨勢,然后根據擬合線段的斜率變化情況以及各樣本點與擬合線段間的殘差和,計算相應的車控行為活躍度值。
基于分段線性表示的殘差累計算法(Cumulative Sum of Errors,CUSUM)是數據流線性擬合的有效方法[22-23],其基本思路是將數據流T={yt1,yt2,…,ytn}按時間順序分割成k(k<n) 個彼此相連的子段Si={ytx,ytx+1,…,ytx+l},l<n-x,i=1,2,…,k,即T={S1,S2,…,Sk},Si∩Sj=?,i≠j,i,j=1,2,…,k;然后使用最小二乘法對各子段進行線性擬合,通過擬合過程中累積的殘差值來評估擬合線段的有效性,其過程如下。
設ti時刻信號yti的線性擬合值為:

其中,ks是當前擬合線段的斜率,ts是該線段的起始時間,bs是ts時刻該線段在y軸上的截距,則ti時刻擬合分段的殘差為eti=yti'-yti,則ti時刻的累積殘差為在任意時刻ti,將累積殘差值cusumti和閾值th1 和th2(通常設th2=3th1)進行比較:
若|cusumti|≤th1,則認為當前擬合分段合理;
若th1 <|cusumti|<th2,則把ti時刻以后產生的數據存儲在緩存中;
若|cusumti|≥th2,則需要對緩存中的數據進行重新擬合,然后將cusumti重置為0,并清空緩存。
基于所得擬合線段yt',通過式(4)獲得數據流T在某時域內(樣本點數量為p)的活躍度AT:

其中,c為時域內擬合線段的個數,km為某擬合線段的斜率,為時域內所有擬合線段斜率的均值。AT值越大表明時域內數據流的活躍度越大,反之越小。將上述算法分別應用于油門踏板位置信號與方向盤轉角信號數據流(其采用等間隔采樣方式生成,采樣頻率為10 Hz),由式(4)得到油門操控活躍度Aap和方向盤操控活躍度Asw。圖6所示的是某測試樣本的活躍度變化情況。

圖6 操控活躍度計算過程
觀察圖6(a)可知,駕駛員分別在樣本點 36~60 和85~165 區域內進行了加速操作,樣本點時域 30~50 和140~160 區域內的活躍度值Aap分別達到了75.5 和93.6,而在樣本點區域60~80 內駕駛員沒有任何油門動作,所以活躍度值Aap為0。觀察圖6(b)可知,駕駛員在樣本點時域70~90范圍內沒有明顯的轉向操作,活躍度值Asw為0.3,明顯低于轉向操作期的活躍度值。此外,由于車輛上普遍采用制動開關來獲取駕駛員的制動行為,而其信號類型為開關量,所以不需進行線性擬合。
基于上述工作生成表征駕駛員疲勞駕駛狀態的10維特征向量,其物理意義如表1所示。

表1 疲勞駕駛行為特征
表1 中的SWP(Sleep Wake Predictor)是衡量駕駛員生理疲勞狀態的重要特征之一,其值基于人在每天各時段的清醒狀態圖來計算[24],具體的計算方法為:

為了降低交通環境對疲勞駕駛識別的干擾,并降低系統計算量,采用兩階段模式生成疲勞特征向量。第一階段只監測駕駛員人臉疲勞部分特征,當檢測到疑似疲勞時才進入第二階段,該階段生成時域內所有疲勞駕駛特征,并調用指定模型實現疲勞駕駛識別,整個算法過程為:


其中th_ear和th_mar分別為瞇眼和哈欠閾值。
疲勞駕駛是一種狀態的漸變過程,一般可以根據其程度分為清醒、輕度疲勞、重度疲勞三種狀態。因此,疲勞駕駛識別本質上是一個分類問題。文獻[25]對現有主流分類器在疲勞駕駛領域的應用性能進行了研究,發現隨機森林算法的準確率、魯棒性較好,計算效率高,且能夠適應小樣本的訓練環境。
隨機森林在結構上由若干決策樹組成,決策樹的質量和數量都對其性能有重要影響。決策樹的常用訓練思路是采用Bootstrap算法生成樣本集,再隨機抽取出特征子集,然后基于信息熵對節點進行分裂。應用隨機策略雖提高了模型的泛化能力,但沒有考慮特征的重要性,使得重要性較小的特征也可能被優先選中,從而會影響建模精度[26]。文獻[27]提出了通過增加重要特征被選中的機率來提高隨機森林性能的方法,但是該方法會減少待選特征的數量,不利于準確率的提高。而對于隨機森林的規模問題,合適的決策樹數量能讓隨機森林在準確率和計算效率間取得較好的平衡,樹的數量太少會降低隨機森林的分類精度,過多會影響識別效率,一般依賴經驗和反復實驗來確定[28]。
本文提出一種基于特征權重的隨機森林構建方法(Random Forest based Weights of Features,RFWF),該方法基于特征在森林中的權重來控制樹的構建和數量,以此提高疲勞駕駛狀態識別的有效性。
設疲勞駕駛特征向量ti=(tij),j=1,2,…,w,由表1取w=10 。其組成的樣本集T={(ti,ci)},i=1,2,…,m,ci為ti對應的疲勞駕駛狀態類別,用tij對應隨機森林中樹τ上的節點nj,則是該節點相對于疲勞駕駛狀態類別c的先驗概率。其中Nc是類別為c的樣本總數,Nd為符合tij>Tha的疲勞樣本數量,Tha為閾值。基于pi(c)可得節點ni的熵為:

若用tij分裂節點nk,其左右孩子的熵分別為El和Er。定義Q(i,k)=e-(El+Er)描述特征tij分裂節點nk的可行性(Q(i,k)值越大則可行性越大)。定義特征tij的初始權重為:

其中,Nt是樹τ中的節點數量。顯然,wτ(tij)值越大則表明用特征j進行分裂的效果越好。設δτ為用袋外數據(Out of Bag,OOB)在樹τ上的分類錯誤率,通過:

來衡量樹τ的分類效果,γτ值越大表示樹τ的分類錯誤越少。疲勞駕駛特征tij在隨機森林中的全局權重為:

基于ω(tij)對特征tij的重要性進行評估。通過閾值Thω將所有特征分為重要特征集合和非重要特征集合兩部分,別為其基數。在構建樹的迭代過程中對兩個集合進行更新,第n次迭代后可得特征集合其基數分別為則認為tj對節點的分裂是合適的。易知,獲得該合適分裂的最小概率就是從中挑選出至少一個特征的概率,并將其記為q,則r=1-q為中不包含特征的概率。由于在樹的構建過程中中也可能包含非重要特征,所以r的最大值為對于一個包含B棵樹的隨機森林F,令,則有:

設一棵有Nav個節點的樹τ,其所有節點都被合適分裂的概率為,定義:

來表征F中至少一棵樹τ中所有節點都被合適分裂的概率。則F中任一樹對(τx,τy)所有的Nav對節點中至少有一個疲勞駕駛特征tij在中的概率為:中隨機選擇的特征集合,如滿足特征

顯然ρ?1,則可得樹對(τx,τy)中至少有一對節點特征在中的概率為:

鑒于樹τ中節點被有效分裂的概率越高(即φF值越大),且非重要特征被分類的概率越低(即φp值越大),則森林F的分類精度越高。定義隨機森林F對疲勞駕駛狀態分類的準確率為:

其中ε為常數因子。
記 ΔB為隨機森林F中B的變化量,有 dφ≈由上述分析可知qu>0,qv<0,l>0,Δv<0,則只需使Δu≥0 ,且滿足成立,從而保證隨機森林F的分類正確率在訓練中不斷提高。
基于上述分析,RFWF算法的基本流程如下:

上述算法生成的隨機森林可以對采集的疲勞駕駛樣本進行狀態識別。
實驗平臺主要由中央控制單元、攝像頭和CAN 總線電纜等設備組成,其在實驗車上的安裝位置如圖7所示。

圖7 實驗平臺安裝位置
圖7 中,中央控制單元采用了英偉達Tx2 開發板平臺,攝像頭采用了500 萬像素紅外單目攝像頭,CAN 總線電纜與OBD接口相連。Tx2開發板通過USB接收攝像頭采集的駕駛員頭部圖像,采樣速率為10 幀/s;通過CAN總線讀取相關車輛行駛數據(如車速、油門踏板角度、方向盤轉角、制動狀態、行車時間等),采樣速率為10 Hz。為了便于測試和監控系統的疲勞駕駛識別效果,設計了圖形界面來展示系統工作過程,如圖8所示。

圖8 系統運行狀態顯示界面
圖8 中分別顯示了人臉特征點的實時提取效果以及車速、轉向角度和制動狀態(綠色表示無制動操作,紅色表示制動操作)共三種車輛行駛狀態信息。
招募了62 名駕駛員志愿者(男43 名,女19 名),年齡范圍為21~45 歲。實驗地點位于南京市江寧大學城福英路部分空曠路段。考慮到安全性,疲勞狀態采用人為模擬方式,共采集了900個清醒駕駛樣本(含450個干擾樣本,其中包含了唱歌、交談、揉眼睛等場景)、650個輕度和550 個重度疲勞駕駛樣本(參數如表2 所示),單個疲勞樣本的持續時間范圍為3~8 min。,可使 dφ>0

表2 疲勞樣本參數
閾值th_ear 和th_mar 取所有疲勞樣本中瞇眼狀態和哈欠狀態下的均值。分別用數字“0”“1”“2”作為清醒、輕度疲勞和重度疲勞三類樣本的標簽值。
按5∶1 比例隨機生成訓練樣本集和測試樣本集。圖9所示是某次訓練生成的任一單棵決策樹的結構,其中顯示了每個節點對應的特征及其閾值范圍。

圖9 決策樹結構
觀察圖9可知,人臉疲勞特征的重要性高于車輛操控行為特征,導致其對應節點先于后者分裂。
將RFWF 的準確率和樹的數量之間的對應情況與傳統隨機森林(RF)進行比較。為了便于分析多特征融合對疲勞駕駛識別的影響,使RF 中樹的數量與RFWF保持一致,將基于10維疲勞駕駛行為特征向量(見表1)生成的樣本輸入RFWF 和RF,得到的準確率值分別記為RFWF(10)和RF(10);從上述樣本中去除特征Aap、Asw、BS和SWP后得到6維駕駛行為特征向量樣本,輸入RFWF 和RF 后得到的準確率值分別記為RFWF(6)和RF(6),實驗結果如圖10所示。

圖10 RFWF與RF比較結果
觀察圖10 可知,基于10 維特征向量的疲勞駕駛識別精度明顯高于基于6維人臉疲勞特征的識別精度,這表明了多特征融合策略在疲勞駕駛識別領域的有效性。在10維特征向量樣本集上,RFWF的準確率隨著樹的數量的增加而提高,當樹的數量為74棵時,準確率達到最高值(91.7%)。RF 的準確率雖然也隨著樹的數量的增加而提高,但在達到90.1%后(65 棵)出現了下降,這主要是因為特征的隨機選取以及樹的數量的不確定性影響了其準確率。
按五折交叉法將RFWF 的運行性能和傳統隨機森林(RF)、SVM、徑向基神經網絡(RBF)、貝葉斯分類(BC)等模型進行比較。其中,RF模型采用的是融合SVM的隨機森林算法[29],SVM模型采用的是PSO-SVM算法[30],RBF模型采用的是SOM算法[31],BC模型采用的是基于PCA 的貝葉斯模型[32]??紤]到疲勞駕駛系統的實時性要求,除了準確率外還有必要考察其運行時模型的單次識別過程(即第二階段中do_fatigue_analysis 函數的運行時間)的耗時情況。測試結果如表3 所示(A0 為清醒狀態的平均識別準確率、A1 為輕度疲勞狀態的平均識別準確率、A2為重度疲勞狀態的平均識別準確率、Av為上述三種狀態的平均識別準確率)。

表3 各模型的疲勞駕駛識別結果
從測試結果看,基于隨機森林算法的疲勞駕駛識別平均準確率要高于其他幾種分類模型1 個百分點左右。得益于特征選取和樹的數量控制兩方面的優化,RFWF的平均準確率又比RF高出1.53個百分點。同時注意到,各模型對于清醒和輕度疲勞狀態的識別準確率明顯低于重度疲勞的準確率,這主要是因為重度疲勞特征較為明顯,而其余兩種狀態容易受到各種環境和事件因素干擾。從模型的運行耗時看,RFWF的運行耗時和其他分類器相比也處于較低水平,有利于疲勞駕駛識別系統的實時性。
本文提出一種融合了駕駛員臉部疲勞特征和車輛操控疲勞特征的疲勞駕駛識別算法。該方法對傳統隨機森林進行了優化,改進了其特征選取策略和樹的數量的評估方法,提高了模型的識別效果。在實車上采集的2 100 個樣本上的平均準確率均值達到92.06%,高于其他分類模型?;谒崴惴ㄔO計的車載疲勞駕駛系統能夠以較低的成本安裝在實車上,具有較好的應用前景。