劉煒煌, 錢錦浩, 姚增偉, 焦新濤, 潘家輝
(華南師范大學(xué) 軟件學(xué)院, 佛山 528225)
根據(jù)美國國家公路交通安全管理局報告, 有22%到24%的交通事故是由駕駛員疲勞所引起的, 在駕駛途中駕駛員打瞌睡更會使發(fā)生車禍的風(fēng)險提高4到6倍. 交通事故頻發(fā), 嚴(yán)重威脅到人們的生命財產(chǎn)安全, 因此, 駕駛員疲勞檢測的研究有著重要意義.
目前已經(jīng)有各種技術(shù)來測量駕駛員困倦. 這些技術(shù)可以大致分為三類:基于車輛的駕駛模式、基于司機(jī)的心理生理特征、基于計算機(jī)視覺技術(shù). 駕駛員疲勞檢測近年來一直是計算機(jī)視覺領(lǐng)域的一個活躍的研究課題. 相較于借助腦電設(shè)備采集腦電數(shù)據(jù)[1,2]進(jìn)行駕駛員疲勞檢測, 它為檢測駕駛員狀態(tài)提供了非侵入性的機(jī)制, 對比檢測車輛運行狀況、方向盤狀況[3,4]的方法, 計算機(jī)視覺技術(shù)有更好的檢測效果. 在現(xiàn)有的基于計算機(jī)視覺技術(shù)的駕駛員疲勞檢測技術(shù)中, 有人通過模板匹配、幾何特征定眼睛、嘴巴, 計算眨眼率和嘴部動作頻率作為判斷疲勞駕駛的依據(jù)[5], 也有人主要針對眼鏡遮擋以及光照變化, 采取級聯(lián)回歸定位特征點,提出了一種更具魯棒性的算法[6].
人臉包含了非常重要的信息. 作為駕駛員疲勞指標(biāo)之一, 臉部動態(tài)地表示困倦的特征是打哈欠, 這種行為通常與大腦中缺氧有關(guān). 在這種情況下, 人類的自然反應(yīng)就是張大嘴巴, 試圖呼吸更多的氧氣, 這是可以用作疲勞預(yù)警的一個面部特征. 另一個面部特征是眨眼率, 眨眼率表示一段時間內(nèi)眨眼的次數(shù). 在昏昏欲睡的狀態(tài)下, 一個人的眨眼率會改變, 這個特征可以用來表示疲勞水平.
基于計算機(jī)視覺技術(shù)的駕駛員疲勞檢測是通過安裝在儀表板上或鏡子下方的低成本攝像頭獲得駕駛員圖像, 包含駕駛員的臉部, 身體的上部, 手部, 座椅的后部或車輛的其他內(nèi)部部件, 從中獲取重要信息如人臉等進(jìn)行判斷.
本文提出了一種使用多任務(wù)級聯(lián)卷積網(wǎng)絡(luò)(Multi-Task Cascaded Convolutional Networks, MTCNN)提取嘴部、左眼區(qū)域, 結(jié)合嘴部、左眼區(qū)域的光流圖, 使用卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network, CNN)提取特征進(jìn)行駕駛員疲勞檢測的方法, 在NTHU-DDD數(shù)據(jù)集上取得了不俗的效果.
真實駕駛視頻中的駕駛員嗜睡檢測是具有挑戰(zhàn)性的, 因為人臉可能受到許多因素的影響, 包括性別、面部姿勢、面部表情、光照條件等, 但是車內(nèi)低成本攝像頭只能拍攝低分辨率視頻, 因此需要一個高性能的人臉檢測器. 即使有了特定的臉部, 定位嘴部、眼部區(qū)域也是非常重要的, 這些區(qū)域是駕駛員疲勞的面部特征重要區(qū)域.
基于人臉正臉的Haar特征的AdaBoost人臉檢測算法[7]在實際復(fù)雜多變的環(huán)境下效果并不好, 而且無法確定眼部、嘴部區(qū)域. MTCNN[8]被稱為最快和最精確的人臉檢測器之一. 利用級聯(lián)結(jié)構(gòu), MTCNN可以實現(xiàn)聯(lián)合高速化的人臉檢測和對齊. 作為臉部檢測和對齊的結(jié)果, MTCNN獲得了臉部邊界坐標(biāo)和包含左眼, 右眼, 鼻子, 左唇端和右唇端的位置的五個界標(biāo)點. 本文使用MTCNN進(jìn)行人臉檢測和關(guān)鍵點對齊任務(wù)
MTCNN由3個網(wǎng)絡(luò)結(jié)構(gòu)組成(P-Net, R-Net, ONet), 當(dāng)給定一張照片的時候, 將其縮放到不同尺度形成圖像金字塔, 以達(dá)到尺度不變. 第一階段, 淺層的CNN快速產(chǎn)生候選窗體;第二階段, 通過更復(fù)雜的CNN篩選候選窗體, 丟棄大量的重疊窗體;第三階段,使用更加強(qiáng)大的CNN, 實現(xiàn)候選窗體去留, 同時顯示五個面部關(guān)鍵點定位.
圖1 本文的算法流程圖
Proposal Network (P-Net):該網(wǎng)絡(luò)結(jié)構(gòu)主要獲得了人臉區(qū)域的候選窗口和邊界框的回歸向量. 并用該邊界框做回歸, 對候選窗口進(jìn)行校準(zhǔn), 然后通過非極大值抑制來合并高度重疊的候選框.
Refine Network (R-Net):該網(wǎng)絡(luò)結(jié)構(gòu)還是通過邊界框回歸和非極大值抑制來去掉假陽性區(qū)域, 但是是由于該網(wǎng)絡(luò)結(jié)構(gòu)和P-Net網(wǎng)絡(luò)結(jié)構(gòu)有差異, 多了一個全連接層, 所以會取得更好的抑制假陽性的作用.
圖4 O-Net
相比于基于局部區(qū)域的卷積神經(jīng)網(wǎng)絡(luò)(Regionbased Convolutional Neural Network, RCNN)系列通用檢測方法, MTCNN更加針對人臉檢測這一專門的任務(wù), 速度和精度都有足夠的提升.
只確定出關(guān)鍵點的坐標(biāo)是不夠的, 需要確定眼部、嘴部區(qū)域. 人臉面部器官的分布遵循一定的規(guī)律.根據(jù)“三庭五眼”規(guī)律, 人臉橫向分為三個等分, 額頭到眉毛是上庭, 眉毛到鼻頭是中庭, 鼻頭到下巴是下庭;人臉縱向分為五個等份, 以一個眼睛長度為一等份, 兩眼間距為一等分, 眼睛到太陽穴也是一個等分. 由此可知, 眼睛寬度與嘴巴寬度大致相等.
考慮到嘴部、眼部在打哈欠、眨眼等動作時大小會在一定范圍內(nèi)變化, 本文以眼部坐標(biāo)為中心、左右唇端距離為長度, 確定一個矩形框, 作為眼部區(qū)域;以左唇端、右唇端中點為中心、左右唇端距離為長度,確定一個矩形框, 作為嘴部區(qū)域.
圖5 三庭五眼
圖6 MTCNN檢測人臉與關(guān)鍵點定位
作為駕駛員疲勞的指標(biāo), 打哈欠、眨眼等并不是一種靜態(tài)狀態(tài), 而是一種動態(tài)動作, 因此只有靜態(tài)的圖像是不夠的. 光流是利用圖像序列中像素在時間域上的變化以及相鄰幀之間的相關(guān)性來找到上一幀跟當(dāng)前幀之間存在的對應(yīng)關(guān)系, 包含了連續(xù)幀之間的動態(tài)信息. 不同于使用長短時記憶網(wǎng)絡(luò)(Long Short Term Memory Network, LSTM)、3D卷積神經(jīng)網(wǎng)絡(luò)(3D Convolutional Neural Networks, 3DCNN)這類使用連續(xù)幀進(jìn)行動作識別, 本文使用光流圖中包含的動態(tài)信息代替連續(xù)幀所提供的動態(tài)信息. 本文將靜態(tài)信息與動態(tài)信息中的特征融合, 相較于只使用靜態(tài)圖像, 可以更好地進(jìn)行駕駛員疲勞檢測.
真實的三維空間中, 描述物體運動狀態(tài)的物理概念是運動場. 在計算機(jī)視覺的空間中, 計算機(jī)所接收到的信號往往是二維圖片信息. 由于缺少了一個維度的信息, 所以其不再適用以運動場描述. 光流場就是用于描述三維空間中的運動物體表現(xiàn)到二維圖像中, 所反映出的像素點的運動向量場.
光流是空間運動物體在觀察成像平面上的像素運動的瞬時速度, 是利用圖像序列中像素在時間域上的變化以及相鄰幀之間的相關(guān)性來找到上一幀跟當(dāng)前幀之間存在的對應(yīng)關(guān)系, 從而計算出相鄰幀之間物體的運動信息的一種方法. 假設(shè)每一個時刻均有一個向量集合 (x,y,t), 表示指定坐標(biāo)(x,y)在t點的瞬時速度. 設(shè)I(x,y,t)為t時刻(x,y)點的像素亮度, 在很短的時間?t內(nèi),x和y分別增加?x,?y, 可得:
同時, 考慮到兩幀相鄰圖像的位移足夠短, 即:
因此可得:
因:
最終可得出結(jié)論:
這里的vx,vy是x和y的速率, 或稱為I(x,y,t)的光流.
Farneback算法是一種計算稠密光流的方法. 它首先用二次多項式來逼近兩個幀的每個鄰域, 這可以用多項式展開變換來有效地完成, 然后通過觀察一個精確的多項式如何在平移下進(jìn)行變換, 從多項式展開系數(shù)中導(dǎo)出一個估算光流的方法. 通過這個稠密光流,可以進(jìn)行像素級別的圖像配準(zhǔn), 所以其配準(zhǔn)后的效果也明顯優(yōu)于稀疏光流配準(zhǔn)的效果.
在汽車行駛途中, 由于攝像頭是固定在車上的, 駕駛員臉部光流是由場景中駕駛員臉部運動所產(chǎn)生的,本文通過Farneback算法計算前后兩幀眼部、嘴部的稠密光流反映駕駛員臉部動態(tài)變化.
圖7中, (a)、(b)是視頻中連續(xù)的兩幀, 視頻中駕駛員正在打哈欠;(c)表示位移矢量場的水平分量;(d)表示位移矢量場的垂直分量;(e)是使用Farneback光流算法計算出的稠密光流的特寫.
圖7 Farneback光流計算相關(guān)圖像
CNN避免了對圖像的復(fù)雜前期預(yù)處理, 可以直接輸入原始圖像, 以其局部連接和權(quán)值共享的特殊結(jié)構(gòu)提取特征, 在語音識別和圖像處理方面有獨特的優(yōu)越性.
視頻可以分成空間與時間兩個部分, 空間部分指獨立幀的表面信息, 關(guān)于物體、場景等;而時間部分信息指幀與幀之間的光流, 攜帶著幀與幀之間的運動信息. 參考文獻(xiàn)[10]所提出的網(wǎng)絡(luò)結(jié)構(gòu)由兩個深度網(wǎng)絡(luò)組成, 分別處理時間與空間的維度. 將視頻分幀送入第一個卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練來提取靜態(tài)特征, 同時將從視頻中提取出的光流圖送進(jìn)另外一個卷積神經(jīng)網(wǎng)絡(luò)來提取動態(tài)特征. 最終將兩個網(wǎng)絡(luò)Softmax層輸出的分?jǐn)?shù)進(jìn)行一個融合.
由于在自然狀態(tài)下, 人的左眼和右眼的運動狀態(tài)是一致的, 因此參考文獻(xiàn)[11]提出了一種只將人臉的嘴部區(qū)域與左眼區(qū)域輸入進(jìn)網(wǎng)絡(luò)進(jìn)行駕駛員嗜睡檢測的算法. 與輸入人臉相比, 這個算法不僅簡化了輸入, 而且取得了更好的效果.
本文的算法首先對駕駛員進(jìn)行人臉檢測.MTCNN的三個網(wǎng)絡(luò)均設(shè)置了一個閾值, 這個閾值代表非極大值抑制中的人臉候選窗口的重疊程度. 在設(shè)置嚴(yán)格的閾值的情況下, MTCNN在駕駛員低頭, 即嘴部未出現(xiàn)的情況下不會檢測到人臉. 如果MTCNN未檢測到人臉, 則判斷駕駛員處于打瞌睡狀態(tài). 如果檢測到人臉, 則將左眼、嘴部區(qū)域進(jìn)行截取, 送入疲勞檢測網(wǎng)絡(luò), 結(jié)合眼部、嘴部光流圖, 判斷駕駛員在非打瞌睡狀態(tài)的時候, 是處于普通、講話還是打哈欠狀態(tài). 不同于使用LSTM、3DCNN從視頻上截取的連續(xù)幀來進(jìn)行動作識別, 本文使用CNN對原始圖像提取靜態(tài)特征、對光流圖提取動態(tài)特征, 對一個短時間的動作變化進(jìn)行分類.
疲勞檢測網(wǎng)絡(luò)包含四個子網(wǎng), 第一個子網(wǎng)是左眼光流特征提取子網(wǎng), 第二個子網(wǎng)是左眼特征提取子網(wǎng),第三個子網(wǎng)是嘴部光流特征提取子網(wǎng), 第四個子網(wǎng)是嘴部特征提取子網(wǎng). 經(jīng)過嘴部、眼部檢測后得到的嘴部、左眼區(qū)域和經(jīng)過計算得到的嘴部光流圖、左眼光流圖對應(yīng)輸入進(jìn)四個子網(wǎng), 經(jīng)過數(shù)層卷積、池化后, 首先將左眼與左眼光流圖子網(wǎng)融合, 得到進(jìn)一步的左眼區(qū)域特征, 再將嘴部與嘴部光流圖子網(wǎng)融合, 得到進(jìn)一步的嘴部區(qū)域特征, 然后融合后的兩個子網(wǎng)再融合輸入進(jìn)全連接層, 得到全局區(qū)域的特征, 經(jīng)過降維, 再輸入Softmax層進(jìn)行分類, 得到最終結(jié)果. 為了避免過擬合, 在每個卷積層添加了L2正則項, 在全連接層前添加了Dropout層.
NTHU-DDD數(shù)據(jù)集是臺灣國立清華大學(xué)所開發(fā)的數(shù)據(jù)集, 被用于2016年亞洲計算機(jī)視覺會議的視頻駕駛員瞌睡檢測國際研討會. 數(shù)據(jù)集在模擬駕駛場景下使用主動紅外照明來采集正常駕駛, 打哈欠, 瞌睡、講話等各種視頻數(shù)據(jù), 整個數(shù)據(jù)集(包括訓(xùn)練、驗證、測試數(shù)據(jù)集)包含36個不同種族的戴/不戴眼鏡、在白天/夜晚的照明條件下的數(shù)據(jù). 數(shù)據(jù)集包含了很豐富的各種情景下的正常、瞌睡、講話、打哈欠的人臉數(shù)據(jù), 可以提高本文算法的魯棒性.
本文將數(shù)據(jù)集分為兩部分. 一部分視頻具有打瞌睡動作與正常動作, 用于打瞌睡檢測;一部分視頻有正常、講話、打哈欠動作, 用于疲勞檢測網(wǎng)絡(luò). 輸入進(jìn)兩個網(wǎng)絡(luò)的圖片都先壓縮成50×50大小.
圖9中四幅示例圖像均來自于實驗數(shù)據(jù), (a)是打瞌睡圖像, (b)是正常圖像, (c)是打哈欠圖像, (d)是講話圖像.
表1是幾種不同的方法進(jìn)行打瞌睡檢測的對比實驗結(jié)果, 可以看出, 采用文獻(xiàn)[10]的方法, 使用全局圖像結(jié)合光流圖進(jìn)行檢測的效果并不好. 不對圖像進(jìn)行預(yù)處理, 直接輸入全局圖像, 輸入圖像會包含許多無用的信息, 這會帶來噪聲. 人打瞌睡的特征最重要的表現(xiàn)就是頭會低下來, 而實際攝像頭拍攝出來的640×480圖像中駕駛員臉部只占200×150左右, 進(jìn)行壓縮后送入CNN的圖像中攜帶的人臉信息將會更少, 將很難從中學(xué)習(xí)到特征. 直接以MTCNN是否檢測到人臉作為打瞌睡檢測的標(biāo)準(zhǔn)效果更好. 從表 2實驗結(jié)果可知, 在測試集中, 大部分正常狀態(tài)都可以被正確檢測, 相對來說打瞌睡的檢測正確率稍低, 這是因為在測試集中, 有些稍稍低頭的狀態(tài)也被標(biāo)記為打瞌睡, 這種狀況是比較難以識別的.
圖8 疲勞檢測網(wǎng)絡(luò)
表3是使用兩種不同方法進(jìn)行疲勞檢測的對比實驗結(jié)果. 采用參考文獻(xiàn)[11]的方法, 使用嘴部以及左眼作為網(wǎng)絡(luò)的輸入, 沒有使用到幀與幀之間的動態(tài)信息,效果不如結(jié)合光流圖的算法好. 對于一個短時間的動作變化識別任務(wù), 僅僅使用靜態(tài)圖像是不夠準(zhǔn)確的, 如打哈欠與講話時, 人都是張著嘴的, 靜態(tài)圖像無差異,而光流圖則能體現(xiàn)差異. 結(jié)合包含動態(tài)信息的光流圖可以獲得更好地效果. 從表 4的實驗結(jié)果可知, 講話和打哈欠這兩種在靜態(tài)圖像中很相似的圖像, 結(jié)合光流圖后可以有很好的區(qū)別效果.
圖9 數(shù)據(jù)集示例圖像
表1 打瞌睡檢測準(zhǔn)確率對比實驗(%)
圖10 稍稍低頭的打瞌睡圖像
表3 疲勞檢測對比實驗(%)
本文提出了一種基于多面部特征融合的駕駛員嗜睡檢測技術(shù), 不僅避免了對駕駛員身體造成侵入性, 準(zhǔn)確率高, 而且將卷積神經(jīng)網(wǎng)絡(luò)與光流圖結(jié)合應(yīng)用到視頻理解中, 取得了不俗的效果. 從實驗結(jié)果可以看出,本文的算法具有更高的魯棒性和準(zhǔn)確率, 對于各種不同情景如不同膚色、有無眼鏡、不同光照等均適用,尤其可以很好地區(qū)分在靜態(tài)圖像中相似的講話、打哈欠兩種動作.
表4 使用左眼、嘴部結(jié)合光流圖測試疲勞檢測結(jié)果