劉煒煌, 錢錦浩, 姚增偉, 焦新濤, 潘家輝
(華南師范大學 軟件學院, 佛山 528225)
根據美國國家公路交通安全管理局報告, 有22%到24%的交通事故是由駕駛員疲勞所引起的, 在駕駛途中駕駛員打瞌睡更會使發生車禍的風險提高4到6倍. 交通事故頻發, 嚴重威脅到人們的生命財產安全, 因此, 駕駛員疲勞檢測的研究有著重要意義.
目前已經有各種技術來測量駕駛員困倦. 這些技術可以大致分為三類:基于車輛的駕駛模式、基于司機的心理生理特征、基于計算機視覺技術. 駕駛員疲勞檢測近年來一直是計算機視覺領域的一個活躍的研究課題. 相較于借助腦電設備采集腦電數據[1,2]進行駕駛員疲勞檢測, 它為檢測駕駛員狀態提供了非侵入性的機制, 對比檢測車輛運行狀況、方向盤狀況[3,4]的方法, 計算機視覺技術有更好的檢測效果. 在現有的基于計算機視覺技術的駕駛員疲勞檢測技術中, 有人通過模板匹配、幾何特征定眼睛、嘴巴, 計算眨眼率和嘴部動作頻率作為判斷疲勞駕駛的依據[5], 也有人主要針對眼鏡遮擋以及光照變化, 采取級聯回歸定位特征點,提出了一種更具魯棒性的算法[6].
人臉包含了非常重要的信息. 作為駕駛員疲勞指標之一, 臉部動態地表示困倦的特征是打哈欠, 這種行為通常與大腦中缺氧有關. 在這種情況下, 人類的自然反應就是張大嘴巴, 試圖呼吸更多的氧氣, 這是可以用作疲勞預警的一個面部特征. 另一個面部特征是眨眼率, 眨眼率表示一段時間內眨眼的次數. 在昏昏欲睡的狀態下, 一個人的眨眼率會改變, 這個特征可以用來表示疲勞水平.
基于計算機視覺技術的駕駛員疲勞檢測是通過安裝在儀表板上或鏡子下方的低成本攝像頭獲得駕駛員圖像, 包含駕駛員的臉部, 身體的上部, 手部, 座椅的后部或車輛的其他內部部件, 從中獲取重要信息如人臉等進行判斷.
本文提出了一種使用多任務級聯卷積網絡(Multi-Task Cascaded Convolutional Networks, MTCNN)提取嘴部、左眼區域, 結合嘴部、左眼區域的光流圖, 使用卷積神經網絡(Convolutional Neural Network, CNN)提取特征進行駕駛員疲勞檢測的方法, 在NTHU-DDD數據集上取得了不俗的效果.
真實駕駛視頻中的駕駛員嗜睡檢測是具有挑戰性的, 因為人臉可能受到許多因素的影響, 包括性別、面部姿勢、面部表情、光照條件等, 但是車內低成本攝像頭只能拍攝低分辨率視頻, 因此需要一個高性能的人臉檢測器. 即使有了特定的臉部, 定位嘴部、眼部區域也是非常重要的, 這些區域是駕駛員疲勞的面部特征重要區域.
基于人臉正臉的Haar特征的AdaBoost人臉檢測算法[7]在實際復雜多變的環境下效果并不好, 而且無法確定眼部、嘴部區域. MTCNN[8]被稱為最快和最精確的人臉檢測器之一. 利用級聯結構, MTCNN可以實現聯合高速化的人臉檢測和對齊. 作為臉部檢測和對齊的結果, MTCNN獲得了臉部邊界坐標和包含左眼, 右眼, 鼻子, 左唇端和右唇端的位置的五個界標點. 本文使用MTCNN進行人臉檢測和關鍵點對齊任務
MTCNN由3個網絡結構組成(P-Net, R-Net, ONet), 當給定一張照片的時候, 將其縮放到不同尺度形成圖像金字塔, 以達到尺度不變. 第一階段, 淺層的CNN快速產生候選窗體;第二階段, 通過更復雜的CNN篩選候選窗體, 丟棄大量的重疊窗體;第三階段,使用更加強大的CNN, 實現候選窗體去留, 同時顯示五個面部關鍵點定位.

圖1 本文的算法流程圖
Proposal Network (P-Net):該網絡結構主要獲得了人臉區域的候選窗口和邊界框的回歸向量. 并用該邊界框做回歸, 對候選窗口進行校準, 然后通過非極大值抑制來合并高度重疊的候選框.
Refine Network (R-Net):該網絡結構還是通過邊界框回歸和非極大值抑制來去掉假陽性區域, 但是是由于該網絡結構和P-Net網絡結構有差異, 多了一個全連接層, 所以會取得更好的抑制假陽性的作用.

圖4 O-Net
相比于基于局部區域的卷積神經網絡(Regionbased Convolutional Neural Network, RCNN)系列通用檢測方法, MTCNN更加針對人臉檢測這一專門的任務, 速度和精度都有足夠的提升.
只確定出關鍵點的坐標是不夠的, 需要確定眼部、嘴部區域. 人臉面部器官的分布遵循一定的規律.根據“三庭五眼”規律, 人臉橫向分為三個等分, 額頭到眉毛是上庭, 眉毛到鼻頭是中庭, 鼻頭到下巴是下庭;人臉縱向分為五個等份, 以一個眼睛長度為一等份, 兩眼間距為一等分, 眼睛到太陽穴也是一個等分. 由此可知, 眼睛寬度與嘴巴寬度大致相等.
考慮到嘴部、眼部在打哈欠、眨眼等動作時大小會在一定范圍內變化, 本文以眼部坐標為中心、左右唇端距離為長度, 確定一個矩形框, 作為眼部區域;以左唇端、右唇端中點為中心、左右唇端距離為長度,確定一個矩形框, 作為嘴部區域.

圖5 三庭五眼

圖6 MTCNN檢測人臉與關鍵點定位
作為駕駛員疲勞的指標, 打哈欠、眨眼等并不是一種靜態狀態, 而是一種動態動作, 因此只有靜態的圖像是不夠的. 光流是利用圖像序列中像素在時間域上的變化以及相鄰幀之間的相關性來找到上一幀跟當前幀之間存在的對應關系, 包含了連續幀之間的動態信息. 不同于使用長短時記憶網絡(Long Short Term Memory Network, LSTM)、3D卷積神經網絡(3D Convolutional Neural Networks, 3DCNN)這類使用連續幀進行動作識別, 本文使用光流圖中包含的動態信息代替連續幀所提供的動態信息. 本文將靜態信息與動態信息中的特征融合, 相較于只使用靜態圖像, 可以更好地進行駕駛員疲勞檢測.
真實的三維空間中, 描述物體運動狀態的物理概念是運動場. 在計算機視覺的空間中, 計算機所接收到的信號往往是二維圖片信息. 由于缺少了一個維度的信息, 所以其不再適用以運動場描述. 光流場就是用于描述三維空間中的運動物體表現到二維圖像中, 所反映出的像素點的運動向量場.
光流是空間運動物體在觀察成像平面上的像素運動的瞬時速度, 是利用圖像序列中像素在時間域上的變化以及相鄰幀之間的相關性來找到上一幀跟當前幀之間存在的對應關系, 從而計算出相鄰幀之間物體的運動信息的一種方法. 假設每一個時刻均有一個向量集合 (x,y,t), 表示指定坐標(x,y)在t點的瞬時速度. 設I(x,y,t)為t時刻(x,y)點的像素亮度, 在很短的時間?t內,x和y分別增加?x,?y, 可得:

同時, 考慮到兩幀相鄰圖像的位移足夠短, 即:

因此可得:

因:

最終可得出結論:

這里的vx,vy是x和y的速率, 或稱為I(x,y,t)的光流.
Farneback算法是一種計算稠密光流的方法. 它首先用二次多項式來逼近兩個幀的每個鄰域, 這可以用多項式展開變換來有效地完成, 然后通過觀察一個精確的多項式如何在平移下進行變換, 從多項式展開系數中導出一個估算光流的方法. 通過這個稠密光流,可以進行像素級別的圖像配準, 所以其配準后的效果也明顯優于稀疏光流配準的效果.
在汽車行駛途中, 由于攝像頭是固定在車上的, 駕駛員臉部光流是由場景中駕駛員臉部運動所產生的,本文通過Farneback算法計算前后兩幀眼部、嘴部的稠密光流反映駕駛員臉部動態變化.
圖7中, (a)、(b)是視頻中連續的兩幀, 視頻中駕駛員正在打哈欠;(c)表示位移矢量場的水平分量;(d)表示位移矢量場的垂直分量;(e)是使用Farneback光流算法計算出的稠密光流的特寫.

圖7 Farneback光流計算相關圖像
CNN避免了對圖像的復雜前期預處理, 可以直接輸入原始圖像, 以其局部連接和權值共享的特殊結構提取特征, 在語音識別和圖像處理方面有獨特的優越性.
視頻可以分成空間與時間兩個部分, 空間部分指獨立幀的表面信息, 關于物體、場景等;而時間部分信息指幀與幀之間的光流, 攜帶著幀與幀之間的運動信息. 參考文獻[10]所提出的網絡結構由兩個深度網絡組成, 分別處理時間與空間的維度. 將視頻分幀送入第一個卷積神經網絡進行訓練來提取靜態特征, 同時將從視頻中提取出的光流圖送進另外一個卷積神經網絡來提取動態特征. 最終將兩個網絡Softmax層輸出的分數進行一個融合.
由于在自然狀態下, 人的左眼和右眼的運動狀態是一致的, 因此參考文獻[11]提出了一種只將人臉的嘴部區域與左眼區域輸入進網絡進行駕駛員嗜睡檢測的算法. 與輸入人臉相比, 這個算法不僅簡化了輸入, 而且取得了更好的效果.
本文的算法首先對駕駛員進行人臉檢測.MTCNN的三個網絡均設置了一個閾值, 這個閾值代表非極大值抑制中的人臉候選窗口的重疊程度. 在設置嚴格的閾值的情況下, MTCNN在駕駛員低頭, 即嘴部未出現的情況下不會檢測到人臉. 如果MTCNN未檢測到人臉, 則判斷駕駛員處于打瞌睡狀態. 如果檢測到人臉, 則將左眼、嘴部區域進行截取, 送入疲勞檢測網絡, 結合眼部、嘴部光流圖, 判斷駕駛員在非打瞌睡狀態的時候, 是處于普通、講話還是打哈欠狀態. 不同于使用LSTM、3DCNN從視頻上截取的連續幀來進行動作識別, 本文使用CNN對原始圖像提取靜態特征、對光流圖提取動態特征, 對一個短時間的動作變化進行分類.
疲勞檢測網絡包含四個子網, 第一個子網是左眼光流特征提取子網, 第二個子網是左眼特征提取子網,第三個子網是嘴部光流特征提取子網, 第四個子網是嘴部特征提取子網. 經過嘴部、眼部檢測后得到的嘴部、左眼區域和經過計算得到的嘴部光流圖、左眼光流圖對應輸入進四個子網, 經過數層卷積、池化后, 首先將左眼與左眼光流圖子網融合, 得到進一步的左眼區域特征, 再將嘴部與嘴部光流圖子網融合, 得到進一步的嘴部區域特征, 然后融合后的兩個子網再融合輸入進全連接層, 得到全局區域的特征, 經過降維, 再輸入Softmax層進行分類, 得到最終結果. 為了避免過擬合, 在每個卷積層添加了L2正則項, 在全連接層前添加了Dropout層.
NTHU-DDD數據集是臺灣國立清華大學所開發的數據集, 被用于2016年亞洲計算機視覺會議的視頻駕駛員瞌睡檢測國際研討會. 數據集在模擬駕駛場景下使用主動紅外照明來采集正常駕駛, 打哈欠, 瞌睡、講話等各種視頻數據, 整個數據集(包括訓練、驗證、測試數據集)包含36個不同種族的戴/不戴眼鏡、在白天/夜晚的照明條件下的數據. 數據集包含了很豐富的各種情景下的正常、瞌睡、講話、打哈欠的人臉數據, 可以提高本文算法的魯棒性.
本文將數據集分為兩部分. 一部分視頻具有打瞌睡動作與正常動作, 用于打瞌睡檢測;一部分視頻有正常、講話、打哈欠動作, 用于疲勞檢測網絡. 輸入進兩個網絡的圖片都先壓縮成50×50大小.
圖9中四幅示例圖像均來自于實驗數據, (a)是打瞌睡圖像, (b)是正常圖像, (c)是打哈欠圖像, (d)是講話圖像.
表1是幾種不同的方法進行打瞌睡檢測的對比實驗結果, 可以看出, 采用文獻[10]的方法, 使用全局圖像結合光流圖進行檢測的效果并不好. 不對圖像進行預處理, 直接輸入全局圖像, 輸入圖像會包含許多無用的信息, 這會帶來噪聲. 人打瞌睡的特征最重要的表現就是頭會低下來, 而實際攝像頭拍攝出來的640×480圖像中駕駛員臉部只占200×150左右, 進行壓縮后送入CNN的圖像中攜帶的人臉信息將會更少, 將很難從中學習到特征. 直接以MTCNN是否檢測到人臉作為打瞌睡檢測的標準效果更好. 從表 2實驗結果可知, 在測試集中, 大部分正常狀態都可以被正確檢測, 相對來說打瞌睡的檢測正確率稍低, 這是因為在測試集中, 有些稍稍低頭的狀態也被標記為打瞌睡, 這種狀況是比較難以識別的.

圖8 疲勞檢測網絡
表3是使用兩種不同方法進行疲勞檢測的對比實驗結果. 采用參考文獻[11]的方法, 使用嘴部以及左眼作為網絡的輸入, 沒有使用到幀與幀之間的動態信息,效果不如結合光流圖的算法好. 對于一個短時間的動作變化識別任務, 僅僅使用靜態圖像是不夠準確的, 如打哈欠與講話時, 人都是張著嘴的, 靜態圖像無差異,而光流圖則能體現差異. 結合包含動態信息的光流圖可以獲得更好地效果. 從表 4的實驗結果可知, 講話和打哈欠這兩種在靜態圖像中很相似的圖像, 結合光流圖后可以有很好的區別效果.

圖9 數據集示例圖像

表1 打瞌睡檢測準確率對比實驗(%)

圖10 稍稍低頭的打瞌睡圖像

表3 疲勞檢測對比實驗(%)
本文提出了一種基于多面部特征融合的駕駛員嗜睡檢測技術, 不僅避免了對駕駛員身體造成侵入性, 準確率高, 而且將卷積神經網絡與光流圖結合應用到視頻理解中, 取得了不俗的效果. 從實驗結果可以看出,本文的算法具有更高的魯棒性和準確率, 對于各種不同情景如不同膚色、有無眼鏡、不同光照等均適用,尤其可以很好地區分在靜態圖像中相似的講話、打哈欠兩種動作.

表4 使用左眼、嘴部結合光流圖測試疲勞檢測結果