樊 星,劉占文,林 杉,竇瑞娟
(1.長安大學 電子與控制工程學院,西安 710064;2.長安大學 信息工程學院,西安 710064)
疲勞駕駛是導致交通事故的重要因素之一,會給國家和個人的生命財產安全造成嚴重損失。疲勞是一種隨著時間的推移而積累的生理狀態,在事故發生前的一段時間內駕駛員就會出現相應的征兆[1]。若能提前發現疲勞狀態,使駕駛人放棄對車輛的控制,則能有效減少疲勞駕駛造成的交通事故。
現有疲勞駕駛檢測方法主要分為基于車輛行駛模式檢測、基于駕駛員生理特征檢測、基于駕駛員行為檢測3 類。車輛行駛模式包括轉向模式、制動模式和車輛在車道上的位置[2-3],對其檢測對路況和駕駛技能有很強的依賴性。駕駛員生理特征主要包括通過生物電信號獲得的腦電圖(EEG)、心電圖(ECG)和眼電圖(EOG)[4-5]。文獻[6]提出一種自適應多尺度熵特征提取算法,基于腦電數據檢測疲勞狀態。文獻[7]提取駕駛員心率變異性數據以實現疲勞駕駛的檢測。文獻[8]利用表頸腰部肌電信號EMG和頭部腦電信號EEG 判別駕駛員的疲勞狀態。文獻[9]通過采集眼瞼周圍皮膚上的肌電信號檢測眼瞼的閉合情況,從而達到疲勞檢測的目的。然而,生理信號采集需要駕駛員佩戴各種信號測量工具,這降低了駕駛員的駕駛舒適性,易對駕駛行為造成影響,不能大范圍推廣。
駕駛員行為監測隨著機器視覺技術的廣泛應用而成為研究的熱點,主要包括面部特征,如閉眼、頭部運動、打哈欠時間、凝視或面部表情。文獻[10]提出用Viola-Jones 算法檢測人臉表情和眼部位置,再利用眼跟蹤技術采集眨眼持續時間和眨眼頻率的特征來完成疲勞檢測。文獻[11]設計哈欠熱成像模型來檢測哈欠,以反映駕駛員的疲勞程度。文獻[12]通過結合駕駛員的面部幾何特征與手部運動特征來確定駕駛員的疲勞狀態。
近年來,深度卷積神經網絡(Deep Convolution Neural Network,DCNN)[13]在圖像分類、目標檢測、情感識別、場景分割等計算機視覺任務中取得了突破性成就。將人臉視覺特征與深度學習相結合,這種非接觸式的方法不會干擾駕駛員的正常駕駛,適用于實際駕駛環境下的疲勞駕駛檢測。文獻[14]提出三網絡并聯架構,使用AlexnNet[15]學習圖像特征,采用VGG FaceNet[16]提取人臉特征,再用FlowImageNet[17]提取行為特征。文獻[18]根據PFLD 深度學習模型進行人臉關鍵點檢測并通過多特征融合策略獲取駕駛人員疲勞狀態。Reddy 利用多任務級聯卷積網絡(Multitask Cascade CNN,MTCNN)[19]對人臉進行檢測和對齊,然后利用駕駛員嗜睡檢測網絡(Driver Drowsiness Detection Network,DDDN)[20]檢測駕駛員疲勞。
車載傳感器的廣泛應用使得人臉特征與深度學習相互融合,為疲勞駕駛檢測提供了一種有效方法。然而,駕駛員的面部特征易受角度、方向變化的影響。同時,深度學習架構的規模較大,且存在較多參數冗余,這增加了計算復雜度與時間復雜度。因此,如何提高檢測方法的準確性和實時性是疲勞檢測研究的重點。
針對上述問題,本文提出一種融合人眼特征與深度學習的疲勞駕駛檢測模型。采用端到端的學習架構進行人臉對齊,通過直接形狀回歸消除算法對人臉檢測的依賴性,減少關鍵點提取的時間消耗。在此基礎上,設計一個融合Ghost模塊和先驗約束的疲勞檢測網絡,將駕駛員疲勞狀態定量地標記為9 個等級,實現對疲勞狀態的細粒度檢測與識別。此外,通過少樣本學習來解決收集數據標注成本高、難度大的問題,從而以最小的代價對收集到的訓練數據進行標記。
駕駛員處于疲勞狀態時,眼部張角會發生變化,眨眼頻率也會降低,在所有面部特征中,眼部參數能夠更全面地揭示反映疲勞程度的信息。然而,眼部在典型人臉圖像中所占的區域很小,導致人眼檢測的高難度、低精度以及低實時性。基于人臉標志點的眼部區域提取是一種有效解決上述問題的方法。人臉圖像和相關面部形狀之間的高度非線性關系是人臉關鍵點檢測的主要難點,為了減少對級聯回歸的依賴性,本文在端到端學習框架中通過直接形狀回歸網絡(Direct Shape Regression Network,DSRN)[21]實現人臉關鍵點提取。DSRN 利用雙卷積層和傅里葉特征聚合層有效地解決了圖像與形狀之間高度非線性關系,再結合低階學習的線性層有效地處理了關鍵點之間的相關性,提高了性能。由DSRN 獲得的面部標志點包括面部邊界、眉毛、眼部、鼻子和嘴唇,如圖1 所示。

圖1 用于人臉對齊的DSRN 體系結構Fig.1 DSRN framework for face alignment
在所有標記點中,共有12 個點與眼部特征相關,其中左眼和右眼分別為6 個。研究表明,局部人臉圖像可以提供與全局人臉圖像相似的特征[22],因此,本文只提取左眼相關特征進行疲勞檢測,標志點分布如圖2 所示。其中,A 和B 分別是上下眼瞼的內交點和外交點,C、E 為AB 線三等分點近內交點處與上下眼瞼的交點,D、F 為AB 線三等分點近外交點處與上下眼瞼的交點。則眼部的長度和寬度為:

圖2 基于左眼標志點的眼部區域提取Fig.2 Eye region extraction based on left eye landmarks

基于面部標志點提取的眼部區域為:

1.2.1 G-VGG16
基于眼部區域建立疲勞駕駛檢測模型,提取疲勞相關特征,并根據眼部狀態在一段時間內的變化來估計駕駛員的狀態。疲勞是一種隨著時間的推移而積累的生理狀態。當長時間無中斷駕駛時,駕駛員需要不斷地感知和識別其余交通參與者的行為狀態,導致精神長期高度緊張,產生疲勞,造成事故瞬間發生。疲勞檢測的實時性對其產生預警作用至關重要。
眼部結構簡單,淺層網絡即可對眼部特征提取分類。然而,駕駛員疲勞產生過程中存在過渡狀態,不能簡單地將其劃分為疲勞和清醒狀態。細化疲勞分類需要提取細粒度的眼部特征,選擇VGG16[23]作為基礎特征提取網絡。為了輕量化網絡以提高其實時性與移植性,受文獻[24]啟發,本文在VGG16 中引入Ghost 模塊,得到G-VGG16。傳統CNN 通過不同卷積核參數計算得到的特征圖具有高度相似性,導致特征圖冗余。Ghost 模塊在減少輸出通道的情況下,通過常規卷積運算生成固有特征圖,再基于固有特征圖,通過簡單的線性變換生成更多的相似特征圖,稱為Ghost 特征圖,最后得到與普通卷積方法生成特征圖數量相同的特征圖,如圖3 所示。

圖3 Ghost 模型架構Fig.3 Ghost model architecture
假設普通卷積的通道數為n,當前通道數為m,固有特征圖表示為Y′,則得到式(5)。

G-VGG16 在原有卷積運算的基礎上,采用線性變換生成合適的Ghost 特征圖,充分揭示了特征的內在關聯性。通過這種低成本的代換,有效地簡化了模型的參數量和運算量,可以在較短的響應時間內得到眼部的特征表示,從而降低模型的運行成本,提高其實時性和可移植性。
1.2.2 GP-VGG16 網絡
通過投影變換可以將特征從高維映射到低維,從而更緊湊。對眼部區域圖像進行二值化處理,并對二值化圖像進行垂直積分投影,獲得垂直積分投影曲線。觀察發現,眼部狀態的不同會導致其整體投影特征有所差異,如圖4 所示。由于受眼球灰度的影響,睜眼的積分投影特征圖具有主峰波形。相反,閉眼的積分投影特征圖是平坦的波形,而當眼部張度不同時,主峰的高度也會隨之變化。眼部積分投影波形變化的特征可以對眼部張開狀態進行有效預判。

圖4 不同眼部狀態的積分投影特征圖Fig.4 Integral projection feature maps of different eye states
本文將積分投影得到的投影矢量調制作為先驗知識引入到疲勞狀態分類網絡中。將先驗信息看作一種特征映射直接附加到G-VGG16 卷積層的輸出中,在G-VGG16的輸出端增加concat層,將網絡特征提取結果與先驗知識相融合,如圖5所示,輸出前的最后一個卷積層可以有效提取包含先驗信息的眼部特征,這種增加離線計算,對輸入的眼部區域進行投影處理作為預處理的方法,可以提高眼部狀態識別的準確性和有效性。

圖5 本文疲勞駕駛檢測網絡整體框架Fig5 Overall framework of the proposed fatigue driving detection network
本文選用GP-VGG16 作為特征提取模型,并基于提取的眼部特征,建立眼部特征-疲勞等級模型。先將疲勞狀態劃分為9 個等級,再根據時間段內疲勞等級的變化來定量地估計駕駛員狀態。
現有公測數據集并不適用于本文模型,需要自己收集數據集進行訓練與測試。然而深度學習模型需要大量的標記數據和多次迭代來訓練參數,若訓練數據過少,在測試集上易出現過擬合現象,嚴重影響測試精度。因此,需要以最小的代價標記收集到的訓練數據。少樣本學習就是在訓練數據非常有限的情況下有效識別出新目標。現有方法通常采用數據增強和正則化以及元學習來緩解數據缺乏問題,本文通過端到端的少樣本學習框架實現從有限的樣本實例中對新類識別的自學習。
從訓練數據集的每一類中選取M個樣本,并根據KSS 表[25]手動標記。然后從這M個樣本中選擇K個樣本作為支持集S,剩余樣本作為查詢集Q,用于模擬在數據標注中將遇到的未標記集。基于支持集和查詢集訓練關系網絡(Relationship Network,RN)[26],再將所有的支持集和未標記數據集映射到RN 中,計算來自不同集合的2 幅圖像之間的相似度,對采集到的疲勞數據進行自適應標記。
RN 由2 個部分組成,一部分是用于提取圖像特征的嵌入模塊fφ,另一部分是用于計算2 個圖像相似性的關系模塊gφ,總體結構如圖6 所示。

圖6 RN 的整體架構Fig.6 Overall architecture of RN
首先通過嵌入模塊fφ分別得到支持集S 中樣本xi的特征圖fφ(xi)和查詢集Q 中樣本xj的特征圖fφ(xj);然后將fφ(xi)和fφ(xj)在深度維度中連接得到特征圖C(fφ(xi),fφ(xj)),連接特征圖通過關系模塊gφ輸出關系得分,以表示xi和xj之間的相似性,如式(6)所示。

其中:ri,j表示關系得分,C 表示分類類別數,本文中C為9。輸出關系得分為0~1,0 表示非常不同,1 表示完全相似。最后,根據關系得分判斷未標注樣本的類別。
目前用于疲勞檢測的公測數據集主要包括Drazy 數據集[27]、NTHU 駕駛員疲勞檢測數據集[28]、Closed Eyes in the Wild(CEW)數據集[29]和ZJU 眨眼數據集[30]。Drazy 數據集包含多種用于疲勞檢測的數據,但其只包含11 個受試者的數據,不適用于CNN 訓練的模型。NTHU 數據集、CEW 數據集和ZJU 數據集包含各種場景下的RGB 圖像和視頻,然而其疲勞程度分類標簽主要為疲勞、不疲勞兩類,與本文的實驗環境不同,這些局限性使得上述數據集很難應用于本文提出的模型。因此,本文在自己收集的自定義數據集上進行相應實驗。
實驗招募12 名年齡在25~35 歲的受試者(4 名女性和8 名男性),要求至少有2 年駕駛經驗,無視力矯正,健康狀況良好,無睡眠障礙,且在實驗前24 h 時內禁食咖啡和酒精。本文使用駕駛模擬器和攝像機記錄駕駛員的轉向數據和面部圖像。將人臉圖像作為疲勞狀態識別網絡的訓練數據集,轉向數據作為數據標注的輔助。
實驗采用天氣正常、交通參與者行為正常的全封閉標準公路作為測試駕駛環境。不同睡眠時間的參與者進入疲勞狀態的時間和最終的疲勞程度是不同的,為了收集到更全面的數據,將受試者按照要求的睡眠時間分為2 組,一組睡眠時間為8 h(允許0.5 h 的誤差),另一組睡眠時間為4 h(允許0.5 h 的誤差)。實驗時間為上午8 點至11 點,每位駕駛員在最高車速為80 km/h 的要求下模擬駕駛4 h,直到疲勞過度無法繼續駕駛時實驗停止。實驗共獲得48 h的測試視頻數據,將其劃分為2 880 個視頻片段,每個視頻片段包括1 500 張圖像。隨機抽取1 920 個視頻片段作為訓練數據集,其余數據集作為測試數據集。
為全面反映疲勞產生過程中的過渡狀態,本文根據KSS 將疲勞狀態分為9 個等級,如表1 所示,每個等級都有唯一的KSS 得分標簽ki,ki∈1,2,…,9。研究表明,受試者的KSS 得分ki在駕駛期間呈線性增加,當ki∈1,2,3,4,5,6,駕駛員處于正常狀態,當ki∈7 時,駕駛員處于過渡狀態,當ki∈8,9 時,駕駛員處于疲勞駕駛狀態[4]。假定狀態的閾值為0.4,即當駕駛員在測試區間保持某個狀態的時間超過40%時,視為駕駛員處于該狀態。根據文獻[31],駕駛員處于喚醒狀態和過渡狀態時可以正常控制車輛。因此,當疲勞駕駛檢測模型輸出的KSS 評分滿足ki∈1,2,…,7 時,判定駕駛員處于正常狀態,反之,駕駛員處于疲勞狀態。

表1 Karolinska 困倦量化表Table 1 Karolinska sleepiness scale
本文將駕駛員主觀評價與基于駕駛模擬器轉向數據的客觀評價方法相結合,實現駕駛員狀態的標注。首先要求駕駛員根據KSS 表在固定的時間間隔(5 min)報告其駕駛狀態。同時考慮到在從清醒到疲勞的整個駕駛狀態下,方向盤轉角的變化(CSWA)和方向盤轉角變化的速度(SSWAC)存在變化,選擇CSWA 和SSWAC 作為疲勞相關指標,對駕駛員報告的KSS 評分進行修正,得到最終的KSS 得分,作為疲勞駕駛檢測數據集中訓練集的標簽。
根據精確率、召回率、PRC、F1 值、準確度和運行速度對所提出的疲勞駕駛檢測模型的性能進行評估。
精確率P和召回率R表示為:

PRC 是由準確率和召回率組成的折線圖,F1是綜合識別率的評價指標,定義如下:

2.4.1 疲勞駕駛檢測框架有效性驗證
本文所有的訓練和評估任務都基于配置NVIDIA GeForce GTX TITAN X GPU、12 GB 內存的實驗平臺完成。采用隨機梯度下降(SGD)算法優化訓練疲勞駕駛檢測網絡,動量和權重衰減分別設置為0.9和0.000 1。比較VGG16、G-VGG16、GP-VGG16這3 種網絡結構的性能,以評估GP-VGG16 中該組成部分的有效性,實驗結果如表2 所示。可以看出,Ghost 模塊的引入使得VGG16 緊湊化、輕量化,同時保持了較高的檢測性能。而先驗信息補充了相似開合度的眼部區域在特征提取過程中丟失的細節信息,提高了檢測識別精度。在運行速度方面,G-VGG16 算法將計算時間縮短了約40%,雖然增加積分投影特征圖對時間消耗帶來了輕微影響,但GP-VGG16 較好地平衡了檢測精度和時間成本,對疲勞狀態的高精度實時檢測具有重要意義。

表2 不同檢測模型的性能比較Table 2 Performance comparison of different detection models
選取4名不同測試階段的參與者的部分測試樣本,結果如圖7 所示。其中:參與者1 為25 歲男性,睡眠時間8 h;參與者2 為32 歲女性,睡眠時間8 h;參與者3 為28 歲男性,睡眠時間4 h;參與者4 為35 歲男性,睡眠時間8 h。可以看出,不同的人經過同一段時間,或者同一個人在不同的時間段,其疲勞狀態存在差異。在睡眠充足的條件下,在駕駛3 h 后,處于過渡狀態的概率大于疲勞狀態的概率。而當睡眠不充足時,在駕駛2 h后,即出現疲勞。4 h 睡眠對照組的建立有效地擴展了疲勞狀態的數據樣本。圖7 中測試樣本的檢測指標如圖8 所示。實驗結果表明,本文提出模型具有較高的檢測精度,且對年齡和性別差異魯棒性較好。

圖7 不同參與者在不同駕駛階段的部分測試結果Fig.7 Some results of different participants at different driving stages

圖8 部分測試樣本檢測結果Fig.8 Results of some test samples
由于在對駕駛狀態進行分類時考慮了時間延續中出現的過渡狀態,分別對9 種不同狀態下的檢測效果進行驗證。如圖9 所示,可以看出:當ki∈8,9,即駕駛員處于疲勞駕駛狀態時,眼部狀態與清醒時有很大不同,檢測精度較高;同樣,當ki∈1,2 時,檢測精度較高;當ki∈5,6,7 時,在KSS 評分的分類中,屬于正常狀態和過渡狀態,但眼動狀態的差異相對較小,疲勞檢測的準確性降低。從總體上看,本文模型具有較高的檢測精度,能夠有效地檢測出駕駛員從清醒到疲勞的各個階段的狀態。

圖9 9 種不同狀態的檢測效果Fig.9 Detection effects of nine different states
2.4.2 與現有檢測網絡的對比
將本文提出檢測模型與Faster R-CNN[32]架構和DDDN 架構進行對比。在數據集和硬件配置都相同的情況下,不斷調整參數以使3 種網絡都達到最佳性能。圖10 是平均精度和平均召回率的統計結果。實驗結果表明,GP-VGG16 通過在傳統的卷積結構中引入Ghost 模型和先驗積分投影特征,對目前廣泛使用的疲勞檢測網絡進行了改進優化,平均精度比采用Faster R-CNN 和DDDN 的方法提高了2%左右,在疲勞檢測方面取得了較好的性能表現。

圖10 3 種對比度模型的P-R 曲線Fig.10 P-R curves of three contrast models
由于在測試過程中引入積分投影會帶來額外的處理時間損失,因此對測試時間和模型的大小進行對比實驗,結果見表3,表中最后一列顯示了整個系統的運行時間,包括眼部特征提取和疲勞檢測。可以看出,因為投影特征圖的特征易于提取,在網絡中加入積分投影的計算時間可以近似忽略。

表3 運行速度和模型尺寸對比Table3 Comparison of running speed and model size
2.4.3 與現有模型的比較
將本文提出的疲勞駕駛檢測方法與基于車輛行駛模式監測、基于駕駛員生理特征監測以及基于駕駛員行為監測中的典型方法進行測試對比,如表4 所示。可以看出:文獻[2]中基于行駛模式的疲勞駕駛檢測方法對駕駛員的駕駛風格和駕駛環境的差異非常敏感;文獻[7]的方法具有較高的實時性和穩定性,然而這種接觸式的檢測方法會影響駕駛員的駕駛舒適度,影響駕駛行為;文獻[11]中基于眨眼監測的方法受真實環境中的光照變化的影響而不穩定。對比發現,本文提出模型在準確性和實時性方面都是最好的,同時,利用少樣本學習方法減少了樣本標記過程中的時間和人力成本。

表4 本文模型與現有檢測模型的比較Table 4 Comparison of the porposed model with exsisted detection models
根據駕駛員疲勞狀態對其進行提前預警,可以有效減少交通事故的發生。本文提出一種融合人眼特征與深度學習的疲勞駕駛檢測模型。通過DSRN提取人眼特征點,融合Ghost 模塊和先驗約束設計GP-VGG16 網絡,基于眼部特征建立疲勞等級模型,對疲勞狀態進行定量分類。少樣本學習可以解決疲勞駕駛檢測模型建立過程中缺少標記數據的問題。實驗結果表明,本文模型能夠有效提高復雜駕駛環境中人臉特征提取的魯棒性,緩解特征提取過程中參數冗余的問題,減少模型訓練過程中圖像數據標注的成本,實現對駕駛員疲勞狀態高效、精準的檢測識別。下一步將研究如何降低檢測網絡對硬件設備的依賴性,使其得到更廣泛的應用。