施冬梅,肖 鋒
(1.蘇州信息職業(yè)技術(shù)學院計算機科學與技術(shù)系,蘇州215200;2.西安工業(yè)大學計算機科學與工程學院,西安710021)
我國交通事業(yè)蓬勃發(fā)展,隨之而來的是交通事故頻繁發(fā)生,據(jù)統(tǒng)計,這些事故中有69%的事故與駕駛員疲勞駕駛和不安全駕駛行為有關(guān)[1]。因此通過科技手段對駕駛員的駕駛行為進行檢測并分析是當今智能交通領(lǐng)域的研究熱點。疲勞駕駛和不安全駕駛行為的檢測,主要是采用學習算法首先定位視頻序列中的人臉和肢體,然后再對人眼、嘴巴等小目標進行識別,分析其狀態(tài),從而判斷是否安全駕駛。在視頻序列圖像的人臉識別深度學習算法中,卷積神經(jīng)網(wǎng)絡(convolutional neural networks,CNN)和遞歸神經(jīng)網(wǎng)絡(recurrent neural networks,RNN)是目前常用的神經(jīng)網(wǎng)絡結(jié)構(gòu),RNN結(jié)構(gòu)將時間的先后順序信息加入到了神經(jīng)網(wǎng)絡中,可以實現(xiàn)視頻時序圖像的識別。目前疲勞駕駛和不安全駕駛行為,主要通過生理參數(shù)[2-3]、車輛軌跡[4-5]、肢體動作特征[6]進行檢測,常見的生理參數(shù)檢測方法需要智能穿戴類檢測設(shè)備[7],且已有應用,但受限于人的心理、情緒變化,存在一定的誤差。車輛軌跡行為檢測方法受限于路面因素,也易造成誤判且有一定的滯后[8]。而肢體動作特征檢測方法主要采用機器視覺和深度學習算法判斷不安全行為[9-10],如通過閉眼時間比例(percentage of eyelid closure over the pupilover time,PERCLOS)[11]、眨眼頻率[12]、面部表情、肢體動作等特征進行檢測,學者關(guān)注較多。如利用多尺度同態(tài)濾波圖像增強算法[13],針對復雜環(huán)境下捕捉到的圖像進行增強,并通過視覺定位,分析駕駛員眼睛所處狀態(tài)[14]、嘴部動作,進而分析駕駛員的駕駛行為[15]。通過深度學習算法分析視頻時序語義信息,判斷駕駛員的不安全行為[16]。
在對時序信息建模時,為了防止梯度爆炸的問題,在RNN的結(jié)構(gòu)基礎(chǔ)上引入了長短時記憶(long short time memory,LSTM)的神經(jīng)網(wǎng)絡結(jié)構(gòu),LSTM的記憶和遺忘功能可以提高時序圖像的識別精度,因而LSTM模型通常被用來進行視頻行為以及人臉識別[17],廣泛用于考勤、安保等監(jiān)控領(lǐng)域。文獻[18]中利用單層的相關(guān)濾波器來預測目標位置,并使用LSTM自適應地學習確定最終目標位置。文獻[19]中將提取的卷積特征輸入到具有兩個不同方向的雙向LSTM中,正反兩個方向模擬演化過程,實現(xiàn)特征融合。文獻[20]中通過自適應語義注意模型,將兩個獨立的LSTM網(wǎng)絡集成后用于圖像目標捕捉。文獻[21]中提出了一種改進的基于雙流結(jié)構(gòu)的時空注意模型來識別視頻中的不同行為。文獻[22]中提出一種基于雙流特征的時空關(guān)注度長短時記憶網(wǎng)絡模型,用于行為識別。文獻[23]中提出了一個基于時空層次卷積長短期記憶網(wǎng)絡來模擬時空域的行為結(jié)構(gòu),用于行為識別?,F(xiàn)有視頻序列人體行為識別的難點在于目標動作僅占視頻序列中的一個小區(qū)域或者小部分,同時被識別人臉目標易被周圍的背景信息干擾,如噪聲、光線、遮擋等,因此從視頻序列中提取人臉或人體行為的有效時空信息,成為行為識別的關(guān)鍵問題。注意力機制是一種內(nèi)部資源分配機制,在深度學習模型中,引入注意力機制(attention mechanism,AM),加強對關(guān)鍵語義信息的提取,能提高算法的識別準確率[24]。目前描述LSTM模型應用文獻中,主要集中在人體行為識別、人臉識別、物體識別等方面,而利用LSTM模型結(jié)構(gòu)和注意力機制有機融合進行人臉與疲勞駕駛檢測的文獻比較少見。
本文中針對視頻圖像序列識別方法中的不足,將對LSTM方法進行改進,并引入注意力機制,設(shè)計了混合雙流通道AM?LSTM網(wǎng)絡結(jié)構(gòu),分為時間流和空間流兩個通道卷積神經(jīng)網(wǎng)絡,采用不同的網(wǎng)絡算法,以空間金字塔池化層(spatial pyramid pooling,SPP)代替?zhèn)鹘y(tǒng)的均值池化,統(tǒng)一特征圖的尺度變換,用SSD進行眼睛的定位,給出了眼睛狀態(tài)的檢測方法以及疲勞駕駛的判斷標準,本算法主要用于對駕駛員的疲勞狀態(tài)以及不安全駕駛行為進行檢測,發(fā)現(xiàn)異常及時報警提醒,減少交通事故的發(fā)生。
在人臉圖像識別中,CNN無須圖像預處理,就可以直接輸入原始圖像,進行卷積分類,因而得到了廣泛的應用。但CNN在處理時間序列圖像存在一定不足,而LSTM模型含有記憶單元ct、輸入門it、遺忘門ft和輸出門ot,能有效解決這一問題。本文中對基本LSTM結(jié)構(gòu)進行改進[25],在當前輸入增加單層卷積,假設(shè)xt為輸入,ht為隱含層的當前值,網(wǎng)絡函數(shù)記為f,則LSTM模型的卷積計算表示如下:
權(quán)矩陣;bf、bc、bo代表偏置;ht-1代表上一時刻狀態(tài)量,在這里使用tanh非線性函數(shù);σ為門函數(shù),σ輸出在0到1之間。為從復雜信息中選出目標關(guān)鍵信息,進一步在LSTM網(wǎng)絡結(jié)構(gòu)中的輸入門中引入注意力機制,構(gòu)成AM?LSTM結(jié)構(gòu),如圖1所示。
圖1 AM?LSTM網(wǎng)絡結(jié)構(gòu)
假設(shè)用殘差網(wǎng)絡對視頻序列每一幀圖像提取的目標特征為{xi},目標長度為n1,則注意力機制動態(tài)加權(quán)所有特征的總和為
第t個時間,特征xi的權(quán)重為,則特征向量xi所對應的權(quán)重計算如下:
式中:fatt表示使用多層感知機;ht-1表示上個時刻的狀態(tài);為一個中間變量。計算出權(quán)重之后,注意力機制開始對輸入序列進行選擇,得到選擇后的序列ht,本文中注意力機制采用的是自適應注意力模型,圖像描述框架如圖2所示。
圖2 注意力機制的圖像描述框架
由于駕駛圖像采集過程中,像人眼這樣的小目標,傳統(tǒng)的池化層會造成圖像部分信息缺失,所以在設(shè)計網(wǎng)絡結(jié)構(gòu)時,本文中以空間金字塔池化層代替?zhèn)鹘y(tǒng)的均值池化,把不同卷積層的特征圖轉(zhuǎn)換成固定大小的特征向量,實現(xiàn)對特征圖統(tǒng)一尺度變換。設(shè)計混合雙流通道AM?LSTM結(jié)構(gòu)算法進行疲勞駕駛行為檢測。雙流網(wǎng)絡分別使用圖像和光流場來表示時間流和空間流信息,雖然增加了一定的計算量,但可以降低復雜環(huán)境對時光流視頻序列產(chǎn)生的噪聲,提高了識別準確率。時間流基于VGG16+Inception網(wǎng)絡結(jié)構(gòu)采用SSD算法計算視頻序列中相鄰兩幀光流圖像,再提取多幀光流圖像時序信息,主要是針對人眼等小目標的檢測;空間流采用CNN方法對t幀時刻的RGB圖像提取空間特征,再經(jīng)過通道注意力和空間注意力模塊進行關(guān)鍵信息的記憶、對比分析與提取,進而實現(xiàn)特征融合,最后采用softmax分類,獲得駕駛行為狀態(tài)信息,混合雙流通道AM?LSTM如圖3所示。
圖3 混合雙流通道CNN+AM?LSTM網(wǎng)絡結(jié)構(gòu)
AM?LSTM模型的損失函數(shù)采用交叉熵函數(shù),再通過反向傳播方法訓練模型參數(shù)。根據(jù)前面的推導,可以通過前向傳播計算出在時刻t網(wǎng)絡的輸出向量y,總的誤差值L可定義如下:
式中:dit為輸出層第i個神經(jīng)元的期望輸出;yit為輸出層第i個神經(jīng)元的實際輸出;Y為輸出層神經(jīng)元的個數(shù)。在LSTM中,需要計算隱層輸出的誤差梯度δht和記憶狀態(tài)δct的誤差梯度,方法如下。
模型計算過程如下:初始化網(wǎng)絡權(quán)值,首先采用前向傳播,計算輸出值y和此時刻t的總誤差值;然后計算隱層單元的誤差梯度δht和記憶狀態(tài)δct;再計算遺忘門、輸入門、輸出門的權(quán)值更新ΔWf、ΔWi、ΔWo,最后更新權(quán)值Wf。
將AM?LSTM模型的時間步長設(shè)置為m,將最后一個時間步長的隱層狀態(tài)輸出看作最具特征代表性的高層語義特征,在AM?LSTM網(wǎng)絡中加一個soft max層,變成最終分類任務,針對最后的時間步長可以將公式修改為
式中:Wo表示隱含層到輸出層的權(quán)重矩陣;bo表示偏差;ym表示最終分類結(jié)果;hm表示步長達到m時的h狀態(tài)值。AM?LSTM模型的損失函數(shù)采用傳統(tǒng)的交叉熵函數(shù),通過反向傳播方法訓練參數(shù)。
當駕駛員處于疲勞狀態(tài)時,最能反映的就是眼睛和嘴巴,如打哈欠、瞇眼睛等,通過算法檢測人眼的開度、PERCLOS值和動作頻率來判斷疲勞程度。其中,PERCLOS值與疲勞駕駛的相關(guān)性最大。本文中采用PERCLOS標準,其含義是指在一個眨眼周期中,眼睛開度小于最大開度20%的時間與眼睛開度小于最大開度80%的時間的比值,以ρ表示:
式中:t1代表眼睛從眼瞼閉合至最大開度20%到完全閉合,再睜開至最大開度20%的時間;t2代表眼睛從眼瞼閉合至最大開度80%到完全閉合,再睜開至最大開度80%的時間。計算人眼開度時,首先要定位人臉,再利用SSD算法在人臉中搜索人眼,依據(jù)人眼上眼瞼與下眼瞼標定的特征點來計算人眼開度,人眼的檢測點位如圖4所示。
圖4 人眼檢測示意圖
每只眼睛有8個檢測點,每個點位對應一個坐標,用(xEi,yEi)表示,首先計算出睜開眼時E1和E5、E2和E4、E6和E8之間的距離,取平均值作為正常駕駛?cè)搜郾犻_基準值。
某人第i次眼睛睜開值可表示為
因為每個駕駛員人眼大小的狀態(tài)是不同的,同一輛車可能由多個駕駛員使用,針對不同人的眼睛大小、環(huán)境變化以及是否戴眼鏡等因素,實際的眼睛開度可用Eopen表示為
Eopen作為眼睛開度指標,考慮光照等環(huán)境因素,測試結(jié)果為人眼開度處于0.8到0.65定位為輕度疲勞,0.65到0.45為疲勞,0.45以下為重度疲勞。人在疲勞情況下眨眼頻率會變快,眨眼頻率可以通過把時間轉(zhuǎn)換為該檢測時段里的視頻幀數(shù)比例來表示:
FEopen作為一個閾值,是用來判斷疲勞狀態(tài)的依據(jù)。實際采用眼睛開度、PERCLOS值和眨眼頻率綜合來判斷疲勞狀態(tài),具體規(guī)則如表1所示。
表1 不同方法的疲勞狀態(tài)判斷值
本實驗是在主頻為4.0GHz Intel CPU、GeForce GTX 1080顯卡上實現(xiàn)的,軟件采用Python3.0、Matlab2016a和Tensor flow1.3框架。在駕駛行為檢測時,采用850 nm波長的近紅外攝像頭采集視頻序列,采樣率為30 fps,視頻大小統(tǒng)一為320×240。在LFW數(shù)據(jù)集中進行人臉圖像識別和在自建駕駛數(shù)據(jù)集進行駕駛行為檢測實驗。為便于分析測試數(shù)據(jù),根據(jù)測算數(shù)據(jù)繪制了ROC(receiver operating characteristic)曲線,ROC分析的是二元分類模型,根據(jù)分類結(jié)果和AUC(area under curve,AUC)面積判斷方法的好壞,AUC面積越大代表方法越好。
通過近紅外攝像頭分別采集駕駛員正常狀態(tài)下的視頻以及處于疲勞狀態(tài)下的視頻,每隔0.2 s采集一幀圖像,采集時間10 s,50幅圖像為一組數(shù)據(jù)。檢測結(jié)果如圖5所示。
從圖5可以看出,實測結(jié)果和表1的疲勞狀態(tài)判斷值很接近,驗證了本方法的可行性。正常狀態(tài)的Eopen的值較大,疲勞狀態(tài)下,PERCLOS值和FEopen值較大,說明閉眼時間明顯加大,或處于瞇眼狀態(tài)。
圖5 視頻序列圖像的眼睛開度示意圖
LFW數(shù)據(jù)集共有13 233張人臉圖像,都是來自于自然場景,每張圖像均給出對應的人名,共有5 749人,實驗時選取了1 000張圖像,其中800張用于訓練,200張用于測試。采用了CNN、SSD、LRCN、LSTM等方法進行ROC值和準確率實驗,結(jié)果如圖6所示。
從圖6可知,本方法的人臉目標識別的ROC曲線的真陽率和準確率分別達到了0.855和83.28%,比CNN方法分別提高了0.077和4.76個百分點,比LSTM方法分別提高了0.016和1.36個百分點,雖然增加了一定的計算量,但識別精度和成功率提高了。表2是不同方法在LFW數(shù)據(jù)集中的計算量對比。
圖6 不同方法在LFW數(shù)據(jù)集中的實驗結(jié)果
表2 不同方法計算效率對比
本方法在雙流LSTM網(wǎng)絡結(jié)構(gòu)的基礎(chǔ)上,增加了注意力模塊,使得網(wǎng)絡參數(shù)量略有增加,雖然訓練時間增加了1.4 s,F(xiàn)LOPS減少了0.132,但本方法的準確率提升1.36個百分點,在實施時,可以采用嵌入式DSP處理器和FPGA技術(shù),能滿足疲勞駕駛檢測數(shù)據(jù)處理的精度和實時性需求。
為驗證本文所提方法的準確度和實用性,實驗增加自建駕駛行為數(shù)據(jù)集,共采集到包括用手機、吃東西、雙手離開轉(zhuǎn)向盤、說話、扭頭、瞇眼睛、打哈欠、正常和其他違規(guī)動作在內(nèi)的10種情形,每種情況采集3個視頻,共30個視頻,編號S1-S30。訓練時,設(shè)置初始學習速率為0.001,Relu作為激活函數(shù),用隨機梯度下降方法優(yōu)化,網(wǎng)絡節(jié)點數(shù)為64。將訓練視頻數(shù)據(jù)未進行二次稀疏光流提取的光流圖分別以連續(xù)2幀、連續(xù)4幀、連續(xù)10幀采集光流圖輸入網(wǎng)絡中進行訓練。在自建駕駛數(shù)據(jù)集上和其他方法進行對比分析。
選取4種狀態(tài)的6個視頻序列對眼睛進行測試,編號為S16-S21樣本幀數(shù)為800,結(jié)果如表3所示。
表3 眼睛狀態(tài)測試結(jié)果
在自建數(shù)據(jù)庫中對5種不安全駕駛行為進行了測試,結(jié)果如表4所示。
表4 不同方法在自建數(shù)據(jù)庫中的測試結(jié)果
從表4可知,本方法采用了VGG16 Inception Net基礎(chǔ)網(wǎng)絡,融合了自適應注意力機制,用混合雙流通道改進了LSTM網(wǎng)絡結(jié)構(gòu),利用注意力機制加強關(guān)鍵語義信息的提取,網(wǎng)絡學習能力得到了增加,提升了視頻系列圖像識別準確率。最難檢測的疲勞狀態(tài),SSD方法只有68.75%,LSTM為70.78%,本方法達到了73.36%,分別提高了4.61和2.58個百分點。
為進一步驗證本文模型對不同駕駛行為的檢測能力,基于AM?LSTM結(jié)構(gòu)模型的檢測結(jié)果,分別對8種駕駛行為結(jié)果繪制了ROC曲線,如圖7所示。
圖7 不同方法的ROC曲線
從圖7的8種駕駛行為的ROC曲線總體走勢可以看出,采用了金字塔池化,融入了注意力機制的混合雙流通道的LSTM結(jié)構(gòu),具有較好的分類性能,尤其是對于用手機、說話、吃東西等AUC值達到了81%以上,疲勞駕駛中的打盹行為檢測也達到了72.7%。
在自建駕駛行為數(shù)據(jù)集中進行CNN、LRCN、SSD、AM?LSTM 4種方法的損失函數(shù)實驗分析,數(shù)據(jù)的前75%用于訓練,后25%用于測試,學習率設(shè)定為0.001。采用交叉熵損失函數(shù),利用Adam優(yōu)化器訓練模型,500次迭代的損失函數(shù)曲線如圖8所示。
圖8 4種模型訓練損失函數(shù)曲線
從圖8可以看到,4種模型的損失函數(shù)隨迭代次數(shù)增加逐漸減小并趨向0。CNN網(wǎng)絡損失函數(shù)值下降速度最慢,且最終的損失值大約為0.15。在剛開始階段,SSD的收斂速度比AM?LSTM快,這是因為網(wǎng)絡融入了注意力模塊,增加了計算量。但AM?LSTM的收斂速度逐漸加快,且最后收斂時的損失函數(shù)值要小于其他網(wǎng)絡。4種模型準確率曲線如圖9所示。
圖9 4種模型準確率曲線
從圖9看出,4種網(wǎng)絡的準確率隨著迭代次數(shù)增加均不斷升高。初始階段,LRCN網(wǎng)絡的準確率比AM?LSTM網(wǎng)絡準確率上升速度略快,但最終AM?LSTM網(wǎng)絡的準確率略高于其他網(wǎng)絡模型。
疲勞駕駛和駕駛員的違規(guī)行為是造成交通事故的主要來源,本文中針對駕駛安全問題,采用人工智能技術(shù)和深度學習理論,基于CNN和LSTM相融合的方法,并融入注意力機制,提出了改進的混合雙流CNN網(wǎng)絡,用于駕駛安全行為檢測。在網(wǎng)絡中采用金字塔池化代替?zhèn)鹘y(tǒng)池化層,統(tǒng)一圖像尺寸,在LSTM網(wǎng)絡中引入注意力機制,有效選取語義信息。在雙通道設(shè)計時,一個通道采用的是CNN算法,對視頻RGB圖像提取空間特征,一個通道采用SSD算法對視頻序列中相鄰兩幀計算光流圖像,用于對臉部眼睛等小目標的檢測,雙通道特征融合以后,分類,獲得檢測結(jié)果。在LFW數(shù)據(jù)集和自建駕駛行為數(shù)據(jù)集中進行了實驗,獲得了不同方法和不同駕駛行為的ROC曲線、正確率和損失函數(shù),測試結(jié)果表明本方法有較好的優(yōu)越性,能有效提高疲勞駕駛和不安全駕駛行為的檢測率。