戴詩琪, 曾智勇
(福建師范大學 數學與信息學院, 福州 350108)
隨著社會經濟飛速發展, 城市道路的大規模建設,機動車保有量呈指數增加, 公路通車里程逐年增長, 交通事故的發生率日益增高. 同時隨著現代人生活節奏加快, 熬夜現象嚴重、缺乏鍛煉、飲食不規律等等因素造成了現代人容易疲勞精力差, 隨之出現的疲勞駕駛成為造成交通事故的主要原因之一. 如何有效地預防疲勞駕駛已經成為世界性的難題, 國內外有不少學者采用不同技術進行了研究, 現有的疲勞駕駛檢測算法按疲勞特征可以分為兩大類: 基于生理特征的算法和基于行為特征的算法. 其中生理特征包括生理信號特征和生理反應特征, 文獻[1–5]提出了基于腦電信號(EElectroEncephaloGram, EEG)的睡眠檢測模型, 結果表明, EEG能夠正確地區分清醒狀態和睡眠狀態, 但腦電信號容易受到噪音的干擾并且難以收集. 眼電信號(ElectroOculoGram, EOG)[6]相對于EEG而言更易于收集并且可以免疫輕微的噪音,但仍需安裝頭部設備進行采集. 文獻[7]運用遠程視頻CCD相機進行實時的圖像采集, 監視眼瞼運動、面部朝向和視線方向三種生理反應特征. 此外, 行為特征包括駕駛人行為特征和車輛行為特征, Baronti等人[8]將分布式壓力傳感器嵌入方向盤里面測量手握方向盤的壓力以及位置, 集合每個元件的測量數據統計分析進行疲勞預警, 這種傳感器結構簡單且成本較低, 在實際應用中取得了初步的成果, 缺點是會受到駕駛人的個人習慣的干擾. 文獻[9–11]利用一個攝像頭捕捉道路前方路況, 參照路上的白線判斷車輛行駛是否規范, 從而判斷車輛是否處于失控狀態. 這類方法不需要駕駛人直接接觸檢測裝置, 并且在汽車現有裝置的基礎上對設備需求較低, 實用性很強, 易于推廣, 但會受到路面條件和車輛型號的限制.
隨著近年來深度學習[12–19]在目標檢測等領域的巨大成功, 深度學習技術也推動了疲勞駕駛檢測的研究.Zhu X等人[20]提出了一個基于EOG的疲勞檢測回歸模型, 該模型使用卷積神經網絡(Convolutional Neural Network, CNN)進行無監督的學習特征表達, 代替人工設計特征提取的過程, 并在后處理中使用LDS (Linear Dynamic System)算法減少不利的干擾. 文獻[21]利用CNN提取手部位置的判別信息, 從而無監督的學習和預測安全和不安全的四種駕駛姿勢. 文獻[22]提出了一種基于CNN的計算眨眼頻率的眼睛狀態識別方法, 采用紅外視頻檢測提升了駕駛員佩戴太陽鏡情況的準確率, 但疲勞參數過于單一. 研究表明, 使用深度網絡直接從圖像中學習視覺特征表示, 相較于手工設計的特征對光照、姿勢等條件變化具有更好的魯棒性,預測精度顯著提高.
以上的疲勞駕駛檢測算法都取得了一定的效果與進展, 但仍然存在很大的局限性: 基于生理信號特征的檢測算法雖然具有較高的精度, 但需要駕駛人與檢測設備有直接的身體接觸以采集信號, 可能干擾到駕駛員的駕駛操作而且設備成本太高, 更適用于實驗室環境, 不適于實際應用; 基于行為特征的檢測算法不需要駕駛人直接接觸檢測裝置, 并且在汽車現有裝置的基礎上對設備需求較低, 實用性很強, 易于推廣, 但會受到駕駛人個人習慣、路面條件和車輛型號的限制, 在雨雪天氣或路面情況不理想時檢測的準確率較低. 在保證一定的準確率和良好的實時性的情況下, 基于計算機視覺處理生理反應特征的算法更易于推廣. 但是人工設計的特征分辨能力較差, 同時, 單一依靠某一個視覺特征可能遇到困難, 如駕駛人戴眼鏡時眼鏡反光可能造成攝像頭無法捕捉眼球運動, 此外, 眼睛的開閉程度可能因人而異, 不規則的頭部運動可能產生誤報等等. 本文利用深度學習方法提取眼睛部位的視覺特征, 建立視覺模型, 以提升視覺特征的辨別能力, 然后采用PERCLOS[23]算法結合打哈欠的頻率判斷駕駛員是否疲勞, 減少單一特征的誤檢率. 實驗結果表明, 本文提出的基于深度學習的疲勞駕駛檢測方法是有效的.

圖1 整體框架
HOG最早由Dalal和Triggs等人[24]在2005年提出, 利用梯度及梯度方向的統計信息來描述圖像. 因為梯度往往產生在邊緣處, 可以描述局部目標的形狀, 且梯度受到光照條件變化的影響較小, 同一個目標的梯度特征在或亮或暗的圖像中具有一致性. 與其它的圖像描述特征相比, HOG特征具有較好的光學不變性與幾何不變性, 尤其適用于目標檢測.
在進行人臉檢測時, 生成HOG特征的主要步驟如下:
(1) 首先采用Gamma壓縮法將由攝像頭捕獲的視頻幀圖像進行顏色空間歸一化處理, 減少顏色數據和光照因素的影響, 公式如下:



(3) 將輸入圖像劃分為若干個單元區域, 每個單元區域包含n×n個像素, 并將0°至360°劃分為N個方向區間, 統計每個單元區域像素的梯度方向并根據梯度值加權投影, 得到該單元區域的梯度方向直方圖.
(4) 將相鄰的K個單元區域組成單元塊, 把單元塊中所有單元區域的HOG合并得到特征向量, 并對其進行歸一化, 對光照等條件變化具有更好的魯棒性.
李瑞東傳世的武功是“李氏太極拳”,但實際上他所學過的武功極雜。他幼年時練的是少林拳,青少年時代跟隨河北饒陽戳腳門大師李老遂學了戳腳。青年時代與大刀王五結義金蘭,互換拳藝,得王五所傳教門彈腿,后來結識了楊露禪弟子王蘭亭。
(5) 按一定的步長L滑動單元塊遍歷整個圖像, 將所有單元塊的HOG特征合并形成最終的HOG特征向量描述整個圖像.
本文選用的單元區域大小為8×8像素(即n值為8), 方向區間N值為9, 單元塊大小為16×16像素(即K值為4), 滑動步長L為8, 當輸入圖像大小為128×128像素時, 則生成的HOG特征向量為((128-16)/8+1)2×4×9=8100維. 最后通過提取大量的已標定人臉樣本的HOG特征, 并使用SVM對其進行訓練生成人臉檢測器, 具體訓練算法如算法1.

算法1. 基于HOG特征的SVM分類訓練算法1. 輸入人臉訓練樣本及樣本中人臉的位置坐標,代表第副圖像的第個人臉包圍框的4維位置坐標(top, left, width, height); i 2. 對樣本圖像進行預處理后逐個掃描, 提取每幅圖片的HOG特征;3. 將已標定人臉的位置設為正樣本, 在其余位置隨機選取非人臉區域作為負樣本, 進行SVM訓練, 當loss小于設定值0.01時訓練結束, 表明SVM優化完成, 輸出訓練好的人臉檢測器模型detector.
圖2為使用detector進行人臉檢測的示例, 將由detector返回的最大人臉包圍框作為需采集駕駛員的人臉圖像.
在駕駛過程中, 駕駛員的面部會產生不同角度的旋轉, 為了提高識別的準確率, 本文使用2014年Kazemi和Sullivan[25]提出的面部標志估算算法檢測人臉特征點并對齊人臉. 首先選取人臉的68個特殊標志點模型,從眉毛外沿至下頜底部, 包括眼睛輪廓和嘴部輪廓等,如圖3所示. 然后利用該算法提出的基于梯度增強(radient boosting)的框架,通過優化損失函數和誤差的總和來學習回歸樹集合(Ensemble of Regression Trees,ERT), 檢測出臉部圖像中的68個關鍵點, 最后對齊人臉, 并根據關鍵點序號定位出所需要的眼部、嘴部圖像, 如圖4所示.

圖2 人臉檢測示例

圖3 68個面部標識點

圖4 眼部、嘴部定位
在定位眼睛和嘴部區域后, 分割上述局部區域, 然后建立眼睛的視覺特征模型. 傳統的基于深度學習的目標識別方法主要針對單張的靜態圖片, 使用CNN網絡提取特征, 將某一中間層作為特征描述然后利用softmax等分類器對其分類, 中間層的特征描述通常維數較高. 而在疲勞駕駛檢測過程中需要對視頻監控的連續多副圖像進行處理, 包含了更多的光照、遮擋等條件變化信息. 本文沒有采用傳統的損失函數而是采用基于三元組損失函數的深度卷積神經網絡學習眼睛特征. 傳統的損失函數主要計算最小化預測標記與真實標記之間的誤差, 它雖然可以保障類間分離, 但不能實現類內聚集. 三元組損失函數計算最大化不同類對象之間的歐式距離與同類對象之間的歐式距離的差值,這可以保障類間距離最大化, 類內距離最小化, 實現深度學習網絡類內聚集、類間遠離, 提高了深度網絡的分類能力. 區分睜眼和閉眼兩個狀態集合, 將獨立的樣本分類任務轉換為樣本間的距離度量學習任務, 保留了更多數據內部的關聯性信息, 直接通過兩幅圖像特征的歐式距離來判斷兩幅圖像是否為同一類別, 去除使用中間層作為特征描述的間接性, 實現端到端的學習, 降低計算量, 提高系統的實時性, 網絡結構如圖5所示.

圖5 網絡結構
從圖5可以看出CNN結構的輸入尺寸大小為48×48, 輸出層為2維向量, 表示2個類別(眼睛閉合和眼睛睜開), 中間包含四個階段的卷積層、歸一化層、池化層的操作. 第一階段的卷積核大小分別為3×3和1×1, 池化層以3×3的大小平均池化對比歸一化的特征圖, 后續階段的相應操作與第一階段類似.

圖6 三元組示例
如圖6所示, 一個三元組包含三個樣本: 一個隨機選擇的眼睛樣本Anchor, 一個與隨機樣本相似的樣本Positive, 一個與隨機樣本不相似的樣本Negative, 核心思想為通過學習使得隨機樣本與相似樣本間的距離相差最小, 與不相似樣本間的距離相差最大, 公式為:


在式(7)中, 三元組分類損失對三個樣本特征的梯度分別為:

公式(7)的偏微分可表示為:

我們使用隨機梯度下降算法訓練上面描述的基于三元組損失深度卷積神經網絡模型, 具體訓練算法如算法2.

算法2. 基于三元組隨機梯度下降訓練算法輸入: 眼睛訓練樣本輸出: 網絡參數while t<T, do t=t+1for所有訓練三元組樣本D, 循環利用前向傳播算法計算 、和利用后向傳播算法計算、、 利用公式(11)計算for循環結束更新網絡權重參數while循環結束
利用深度卷積神經網絡判別單幀圖像的眼部開閉狀態后, 根據PERCLOS定義計算單位時間內眼睛閉合狀態所占時間的百分比. 計算公式如下:

t為單位時間內的視頻幀總數,為單位時間內眼睛閉合的幀總數.
在駕駛過程中駕駛員的嘴部通常有閉合、說話或唱歌、打哈欠三種狀態, 打哈欠的狀態下嘴部的張開程度將明顯并持續大于前兩種狀態, 因此在嘴部定位精確的情況下, 可直接根據嘴部圖像的寬高比判斷嘴巴的張開程度, 快速區分這三種狀態, 減小計算量. 具體判斷步驟如下:
(1) 設嘴部圖像的寬為w,高為h, 則其寬高比當m小于某一閾值T, 可判斷當前圖像幀為打哈欠;
(2) 當嘴巴的寬高比m值大于閾值T的視頻幀連續達到K幀時, 記作打哈欠一次, 即打哈欠從嘴巴張開到閉合結束為打哈欠一次, 統計單位時間內駕駛員的打哈欠次數記作
分別判斷眼部和嘴部的疲勞狀態后, 融合眼睛的疲勞參數與嘴部的疲勞參數, 分別賦于一定的權重計算最終的疲勞值F, 公式如下:

本文采用了ZJU[26]眨眼視頻數據集和CEW[27]眼睛數據集, ZJU包含20個人的共80個avi剪輯視頻,每個人包含四類片段: 正面視圖未戴眼鏡、正面視圖戴薄邊框眼鏡、正面視圖戴黑色框架眼鏡、向上的視角未戴眼鏡. 在眨眼的過程中手動選擇眼睛睜開、半開半閉、閉合的眼睛圖像, 并將左右眼分開存儲, 共產生7334幅圖像, 包括1574張閉眼樣本和5770張睜眼樣本. CEW包含2423幅人臉圖像, 其中1192幅為從網上收集的受試者雙眼閉合的圖像, 1231幅從LFW[28]選取的已標記人臉的睜眼圖像, 分別收集左右眼的圖像產生2384幅閉眼樣本和2462幅睜眼樣本. 將所有樣本圖像歸一化為48×48, 如圖7所示, 分別合并睜眼、閉眼樣本集(不區分左右眼), 然后分別從中劃分20%的樣本作為測試集, 其余為訓練集. 使用隨機選擇策略在訓練集中生成1000組三元組用于網絡迭代訓練, 本實驗Ubuntu環境下使用torch框架實現.

圖7 ZJU和CEW數據集示例
為了驗證本文提出的基于深度學習的防疲勞駕駛檢測方案能否達到預期效果, 分別從以下幾個方面進行了測試實驗.
2.2.1 眼睛狀態識別測試
表1為利用本文方法訓練的模型對測試集進行測試的結果, 可以看出對眼部狀態的識別準確率較為理想.

表1 本文方法眼睛狀態識別結果
表2 為利用傳統的CNN方法在相同測試集上的測試結果.

表2 傳統CNN方法眼睛狀態識別結果
表3為本文方法與傳統的CNN方法的對比, 可見本文方法在準確率與實時性上均有提升.

表3 眼睛狀態識別方法對比
2.2.2 疲勞狀態識別測試
本文采用YawDD[29]數據集作為疲勞檢測的標準數據集, 該數據集包含不同性別、不同種族的駕駛員在不同光照環境下拍攝的駕駛視頻, 如圖8所示.圖9為嘴部寬高比m值與連續視頻幀數K值的設定對準確率的影響.

圖8 YawDD數據集示例

圖9 m、K值尋優
圖10為計算疲勞值的權重w1、w2的設定對準確率的影響可以看出當只依靠眼部疲勞特征或只依靠嘴部疲勞特征時準確率均不如將兩個疲勞特征融合的設定.
本文選取了三個視頻測試者(女性、男性、戴眼鏡的男性)的視頻進行疲勞駕駛檢測, 每名測試者分別截取了其在正常狀態和模擬疲勞狀態的視頻進行測試,如圖11所示. 在正常狀態下測試者保持正常的說話或唱歌狀態以及眨眼頻率, 在模擬疲勞狀態下測試者模擬打哈欠、降低眨眼頻率并加深眨眼深度. 程序實時統計30 s單位時間測試者的PERCLOS值和打哈欠次數, 每間隔3 s計算一次疲勞值并發出預警, 如表4所示.

圖10 w1、w2值尋優

圖11 疲勞檢測示例
從表4可以看出在測試者的正常狀態下檢測出的PERCLOS值均低于0.4, 而疲勞狀態下相反, 在PPERCLOS值及打哈欠次數增高時, 預警次數也隨之增多, 兩種狀態下均未出現誤判.
疲勞特征的選擇是疲勞駕駛檢測的關鍵, 本文提出了一種基于深度學習的疲勞駕駛檢測方法. 該方法首先利用HOG特征檢測視頻中的人臉圖像, 然后利用特征點模型實現人臉器官的定位和分割, 接著使用深度卷積神經網絡學習眼睛區域的特征并實現眼睛閉合狀態的識別, 最后融合眼睛閉合狀態與嘴部閉合狀態實現疲勞駕駛檢測預警. 與其它的疲勞駕駛檢測方法相比, 該方法無需接觸駕駛員, 能夠自主提取更有判別力的眼部特征, 并且具有良好的實時性, 特征的融合也進一步提高了準確性. 在ZJU、CEW和YawDD數據集上與CNN的視覺特征的檢測方法的對比試驗和分析結果表明, 該方法具有更好的檢測性能.

表4 疲勞駕駛檢測結果