何廷全,俞山川,張生鵬,蘭棟超,李 剛
(1. 廣西新發展交通集團有限公司,廣西 南寧 530029; 2.招商局重慶交通科研設計院有限公司,重慶 400067; 3. 長安大學 電子與控制工程學院,陜西 西安 710064; 4. 長安大學 能源與電氣工程學院,陜西 西安 710064)
根據2020年世界衛生組織的報告,全世界每年大約有135萬人死于交通事故。全世界各地,大多數國家道路交通事故造成的經濟損失約等于國內生產總值的3%。其中,造成重大交通事故的主要原因之一就是駕駛人的分神駕駛行為[1]。駕駛人分神駕駛行為包括開車時打電話、玩手機、喝水以及和他人交談等行為,駕駛人會在開車時無意中發生這些行為。這些行為對交通安全帶來極大的危害,例如,分神駕駛可能導致車輛異常變道,這可能導致嚴重的交通事故[2]。同時,近年來車載電子設備的普及,如車載導航系統、智能手機的使用,增加了駕駛人分神駕駛的頻率。因此,對駕駛人分神駕駛行為進行深入研究是非常有必要的。通過圖像分析方法,對駕駛人分神駕駛行為進行監測并同時發出預警信息,能夠及時的提醒駕駛人專心駕駛,減少由分神駕駛造成的交通事故。
在過去的研究中,研究者為了檢測駕駛人的分神駕駛行為,提出了一些基于駕駛人生理參數和駕駛狀態的方法[3-4]。通過觀測駕駛人生理參數的方法雖然具有很好的準確性,但是依賴大量的檢測儀器,這些儀器不僅會干擾駕駛人,同時儀器成本較高、安裝復雜。因此,基于駕駛人生理參數的檢測方法只適用于一些特殊駕駛環境,不能夠普及到大眾。除此之外,曾杰等[5]開發了一套基于仿生機器人的駕駛人危險駕駛檢測系統的測試技術,利用機器人模擬人的疲勞、打電話等動作,來測試檢測系統的性能,對新開發的測試系統評估提供了便利的方法。
近年來,隨著機器視覺和機器學習的快速發展,基于圖像處理的方法也被應用于檢測駕駛人分神駕駛行為?;趫D像的檢測方法主要是通過車載攝像頭采集駕駛人圖像對駕駛人的身體動作、眼睛、面部表情等部位提取關鍵信息來判斷駕駛人的駕駛狀態。文獻[6]提出了一種基于視頻的檢測方法,通過分析駕駛人的面部與眼睛特征,判斷視線方向和面部姿勢來判斷駕駛人是否存在分神駕駛行為。文獻[7]基于駕駛模擬環境,分析駕駛人的眼部特征來檢測駕駛人眼睛凝視時長和眨眼睛次數,建立了基于隨機森林的分神駕駛識別模型,可以達到較好的準確率。深度學習同樣被用來識別分神駕駛行為,文獻[8]利用預訓練深度模型,結合支持向量機分類器來檢測駕駛人分神駕駛行為。文獻[9]利用視覺幾何組(Visual Geometry Group,VGG16),VGG19以及Inception模型對駕駛人分神駕駛行為進行檢測和分類。在VGG模型的基礎上,文獻[10]加入了正則化技術,提高了分神駕駛檢測和分類的精度。文獻[2, 11]中通過微軟研發的Kinect相機采集到駕駛人的駕駛行為圖像,提出了基于卷積神經網絡CNN模型的分神駕駛行為檢測系統。同時,結合高斯混合模型GMM分割算法對原始圖像進行分割,該方法基于CNN的分神駕駛行為分類器的平均分類精確度可以達到91%。
然而由于深度學習技術的不斷發展,對于駕駛人分神駕駛行為的檢測與分類精度有了更高的要求。同時上述基于深度學習的分神駕駛行為檢測和分類模型參數計算量大,冗余參數較多。
分神駕駛行為檢測的目的是通過一系列算法對駕駛人的分神駕駛行為進行識別和分類。根據識別結果對駕駛人行為進行判定,當判斷為危險駕駛行為后則發出報警,從而實現對駕駛人的實時提醒,保證安全駕駛。
本研究提出一種基于目標檢測模型的駕駛人常見分神駕駛行為檢測方法。構建一種改進YOLOv5模型的駕駛人分神駕駛行為檢測網絡,通過捕捉駕駛人在駕駛過程中的圖像信息進行分神駕駛行為檢測。駕駛人分神駕駛行為檢測算法的訓練及測試流程如圖1所示。

圖1 試驗流程
對于目標檢測模型的訓練,圖像數據集的選取和制作非常重要。本研究的數據集來自于Kaggle組織的一場駕駛人危險駕駛行為圖像分類競賽。以往的分神駕駛數據集只包含幾類常見的分神駕駛行為,而Kaggle的數據集包含了9種不同的駕駛行為,具有更好的廣泛性。如圖2所示,顯示了9種常見的駕駛行為動作圖像。

圖2 九種常見的駕駛行為
選用原始數據集中5 000張駕駛人駕駛行為圖像,其中包含正常駕駛660張、右手玩手機556張、右手打電話558張、操作多媒體543張、左手玩手機545張、左手打電話550張、喝水545張、與他人交談525張、化妝等其他動作518張。
由于分神駕駛行為檢測僅關注駕駛人的行為動作,因此選取原始數據完成后,采用LabelImg軟件對駕駛人的駕駛行為進行標注。在駕駛室內,駕駛人的駕駛行為主要表現在上半身,能夠反映駕駛行為的主要特征是手部行為,面部方向。基于原始數據,對駕駛人上半身以及方向盤進行標注,并且給予相應的行為標簽。將所有的圖片順序打亂,把數據集分為訓練集、驗證集、測試集,比例為3∶1∶1。訓練集包含3 000張圖像,驗證集和測試集各包含1 000 張圖像。根據原始數據集的9種不同的駕駛行為,使用不同的標簽給不同的駕駛人動作進行標注。標注完成后生成對應的xml文件,包含了圖像中目標框坐標以及類別信息。本研究將利用上述數據集對目標檢測網絡進行訓練,最終得到分神駕駛行為檢測模型。
在現階段的研究中,基于深度學習的目標檢測模型可以分為兩階段檢測算法和單階段檢測算法。兩階段檢測算法的思路是,在第1階段生成可能包含所有目標物體的候選區域,第2階段在第1階段生成的候選區域中提取特征進入到分類和回歸網絡,最終得到檢測結果。而單階段檢測模型直接根據圖像中的特征對目標進行檢測和分類,最終得出預測結果。相比較單階段檢測算法,兩階段的檢測算法可以獲得更加良好的邊界框回歸,但是在獲取更高精度的結果的同時,兩階段檢測算法比單階段檢測算法的效率更低。文獻[12]中對現階段基于深度卷積網絡的各類目標檢測算法進行了綜述,表1總結了部分兩階段與單階段算法的性能表現。其中包了算法的類別、檢測速率、檢測時的GPU型號以及在計算機視覺挑戰賽(Visual Object Classes,VOC2012)和微軟構建的(Common Objects in Context,COCO)兩種數據集上的檢測指標結果,“-”代表無相關數據。通過觀察相關數據發現,單階段目標檢測算法在檢測速度上明顯優于兩階段算法。同時單階段算法經過不斷改進后,算法的檢測精度不斷提高,甚至超過了兩階段算法。

表1 部分目標檢測算法性能對比
本研究的分神駕駛行為只需要對駕駛室中的駕駛人動作進行準確的預測分類,每一張圖像或者視頻幀中一般只存在一個目標類別。同時,在駕駛人駕駛過程中需要對駕駛人進行實時監測和提醒,單階段檢測模型在可以保證精度的前提下保證更高的效率,而且對硬件設備要求更低,因此選用相對效率更高的單階段檢測模型來對駕駛人分神駕駛行為進行監測。
1.2.1 YOLOv5目標檢測網絡
YOLO(You Only Look Once)系列目標檢測算法,是單階段檢測算法中代表性的網絡。YOLOv5是YOLOv3及YOLOv4基礎上改進得到的最新產物,而且YOLOv5在COCO以及PASCAL VOC數據集上表現出較好的效果。相較于YOLOv4,YOLOv5在檢測精度降低很小的基礎上,提升了模型的訓練效率以及推理速度。
YOLOv5的整體架構由輸入(Input),骨干(Backbone),頸部(Neck),預測(Prediction) 4個部分組成,模型架構圖如圖3所示。輸入端主要包括3個部分,依次是自適應圖片縮放、馬賽克Mosaic數據增強、自適應錨框計算。由于該網絡的輸入圖像要求大小為608×608,為了適應不同尺寸的輸入圖像,需要自適應圖片縮放這一模塊來對原始圖片進行預處理。自適應圖片縮放將原始尺寸的圖片進行比例縮小或者放大,添加最少的黑邊,從而減少圖像縮放過程對原始特征的影響。Mosaic數據增強方法,是將4張圖片采用隨機排布、隨機裁剪、隨機縮放的方式進行拼接,豐富圖像背景數據,增加網絡訓練的魯棒性。同時,在批量歸一化(Batch Normalization)時一次計算4張圖像數據,提高模型訓練效率。而自適應錨框計算,是將預測框和真實框進行差值,反向更新預測框,通過多次迭代獲取更為精確的錨框。

圖3 YOLOv5整體架構
Backbone部分包含了集中(Focus)模塊和CSP(Cross Stage Partial)結構[13]。Focus模塊主要采用slice操作對輸入圖像進行裁剪,擴充輸入通道,經過卷積操作得到特征圖。Focus操作可以提升感受野,保證獲取更加完整的特征信息,同時可以提高計算速度。另一方面借用CSP網絡的思想,提升網絡的特征提取能力。Neck仍然采用FPN[14]加PAN[15]的結構,在YOLOv4的基礎上改進卷積操作,使用CSP2結構,充分融合位置信息和語義特征,提升網絡特征融合能力。圖中CBL為Yolov網絡結構中的最小組件,由Conv+Bn+Leaky_relu激活函數三者組成,CSP由卷積層和殘差模塊連接,Concat層的作用是將兩個及以上的特征圖按照在channel或num維度上進行拼接。輸出層輸出不同尺寸的特征圖,用來關注不同大小的目標以及特征信息,通過使用GIoU_Loss(Generalized Intersection of Union Loss)作為損失函數進行優化訓練,最終得出預測結果。
1.2.2 分神駕駛行為檢測問題分析
通常在解決圖像檢測實際問題時,需要根據具體的場景選擇和優化方法。YOLOv5在目標檢測領域已經有了非常良好的效果,但是針對本研究的分神駕駛行為檢測和分類問題,仍然存在部分缺陷。
(1)YOLOv5試驗使用的數據集為COCO等常用目標檢測數據集,原始模型采用K-Means聚類方法獲取,COCO數據集中包含幾十種類別,且錨框大小皆不相同。而本研究的對象為駕駛室里的駕駛人,標注的目標部分僅僅為駕駛人以及方向盤圖像信息,單張圖像一般只包含一個類別,原始的先驗錨框參數不適用于本研究。僅靠人獲取先驗錨框信息,如果錨框的大小設置不合理,在訓練和檢測過程就會產生一定的偏差。
(2)分神駕駛行為檢測和分類是要依據駕駛人的上半身整體動作進行綜合判斷,因此需要分析駕駛人整個上半身以及方向盤的圖像才能獲取更加客觀的信息。但是,在網絡獲取特征時,需要在整個標注圖中再獲取駕駛人的局部動作信息,這些動作往往會比較小。雖然在檢測過程中需要關注駕駛人整體信息,但是表現出來的危險駕駛動作僅僅體現在圖像局部區域,因此需要在檢測過程中提取局部信息的特征,如果在特征提取時忽略小目標的特征,容易發生誤判。
(3)算法的Backbone中含有較多的BottleneckCSP網絡結構,卷積過程中包含大量的參數,模型計算量較大。同時,在提取特征信息的過程中,大量的卷積操作可能忽略圖像的淺層特征,會造成局部信息的丟失,從而影響了最后的類別判定。
根據上述YOLOv5在分神駕駛行為檢測問題中存在的問題,對檢測算法進行了以下的優化來提升對分神駕駛行為檢測的精度:(1)針對錨框設定問題進行優化,原先的錨框由人為設定,設定的錨框大小不靈活,會出現丟失特征信息的情況。因此在模型的錨框設置階段借用DAFS(Dynamic Anchor Feature Selection)[16]的思想設置動態錨框。(2)對于Backbone中的BottleneckCSP網絡結構進行修改,減少卷積操作,從而保證更少的淺層特征丟失。同時,在主干網絡部分添加注意力機制,提高模型獲取局部感興趣區域信息的能力。
1.3.1 錨框設定問題的優化
本研究在YOLOv5模型的基礎上對錨框選擇進行優化。在DAFS中提到,原先的錨框改良模塊(anchor refinement module,ARM)利用背景和前景評分,利用二值化評分預測容易出現漏掉正確信息的情況,導致特征點錨框和感受野不匹配。因此,提出了在檢測器頭部之前添加了特征選擇操作,動態調整特征點,為每個回歸器和分類器選擇了合適的特征點,減少不匹配問題的出現。其次,將傳輸連接塊(transfer connection block,TCB)替換為雙向特征融合塊(bidirectional feature fusion,BFF),其主要目的是利用自上而下和自下而上的方式組合不同層的信息。根據這一思想,對YOLOv5的錨框選擇方式進行優化,如圖4所示。首先利用初始方法,產生初始錨框,然后在模型的輸入端添加ARM模塊,從而達到過濾錨框負樣本的效果,再根據真實值對錨框進行調節獲取先驗信息。其次,通過雙向特征融合塊將ARM與主干網絡進行連接,通過動態更新錨框生成模型訓練的先驗錨框。

圖4 錨框優化
1.3.2 針對主干網絡優化
(1)BottlenckCSP網絡結構優化
在YOLOv5的Backbone模塊中采用多個平靜層卷積殘差BottlenckCSP網絡結構,在卷積操作中會減少部分局部特征,從而失去有一部分關鍵的特征信息。在Backbone網絡的特征提取層進行了修改,修改后的BottlenckCSP網絡模塊如圖5所示。

圖5 BottlenckCSP網絡改進
將BottlenckCSP網絡結構數量(×3,×9,×9,×3)改為(×2,×6,×6,×2),從而保護局部特征信息不被丟失。同時針對多個卷積核導致的參數量大的問題也進行了相應的優化,將BottlenckCSP網絡的輸入特征映射與輸出特征直接連接,刪除掉模塊的分支卷積,減少了參數的數量,這樣做的目的是減少計算量的同時提取更多的淺層特征。
(2)注意力機制的融合
注意力機制模塊可以讓網絡模型更加注重具有關鍵特征信息的區域,排除掉一些無關信息,從而提升網絡的局部特征提取能力,進一步優化檢測效果。為了提升分神駕駛檢測網絡的檢測效果,本研究考慮將注意力機制應用到原始網絡。
本研究采用SEBlock(Squeeze-and-Excitation Networks)[17]的注意力機制模塊,將該模塊融合到YOLOv5框架。SEBlock結構圖如圖6所示。

圖6 SEBlock結構
圖6中,X為網絡的輸入,Ftr為一系列卷積操作,U∈RH×W×C為卷積操作的輸出,U=[u1,u2,…,uC]。SEBlock主要有3部分組成,Sequeez,Excitation,Scale。Sequeez操作將U輸出壓縮成Z∈R1×1×C,為了充分提取上下文信息,使用GAP(global average pooling)作用于每個通道實現通道選擇。Excitation利用非線性的Sigmoid激活函數保證非線性的情況進行通道選擇。Scale是將學習到的通道權重應用到原有的特征上。GAP有利于識別全局信息,而GMP(global max pooling)可以通過識別全局最大點來檢測目標的特征信息,針對局部小目標特征提取有更好的效果。在本研究的通道注意力機制模塊將二者同時使用。
本研究在原有的網絡添加通道注意力機制和空間注意力機制,添加方法如圖7所示。在CBL模塊添加通道注意力機制,CSP模塊卷積操作之后添加混合注意力機制,從而使模型更好地獲取重要的特征。

圖7 注意力機制的融合
提出了一種基于改進YOLOv5的分神駕駛行為檢測和分類模型YOLOv5_DD (YOLOv5_Distracted Driving),針對具體的分神駕駛行為檢測和分類問題對YOLOv5進行了優化。主要在錨框設定方式以及主干網絡進行了改進,使得模型更適合應用于分神駕駛行為檢測。在損失函數方面,仍然使用YOLOv5原有的損失函數對模型進行訓練優化。
試驗采用的計算機配置,CPU為Inter(R)Core(TM)i7-7800,GPU為NVIDIA1080Ti。基于Tensorflow的深度學習環境進行模型的訓練和測試。軟件環境Tensorflow版本為2.2,Python版本為3.8。
模型訓練時,按照1.1節中提到的數據集比例將數據隨機分為訓練集、驗證集、測試集。采用監督學習的訓練方式對模型進行訓練,經過多次訓練和測試,選取了模型訓練最終參數。學習率設置為1e-4,迭代次數設置為300,使用Adam優化器進行優化,圖8為模型訓練損失變化曲線。

圖8 訓練損失變化曲線
由圖8可以看出,訓練過程損失在0到50迭代次數時迅速下降,最終趨于平穩。經過多次訓練,發現損失曲線會在200迭代次數以后趨于平穩,因此選用300迭代次數進行訓練,使得模型達到較好的訓練效果。
為了驗證模型的檢測效果,選取了幾種目標檢測和分類領域的典型指標進行評估。對于分神駕駛行為檢測和分類,注重檢測精度和召回率,以及分類準確率。因此選擇混淆矩陣,精確率(precision),召回率(recall)以及F1_Score對模型進行評估。式中,TP為預測正確,樣本為正的數量,FP為預測錯誤,樣本被預測為正,但樣本實際為負數的數量,FN為預測錯誤,樣本被預測為負,但樣本實際為正的數量,F1為F1分數,評價指標的計算公式如下:
(1)
(2)
(3)
模型訓練完成以后,在測試集對模型進行測試和評價。為了更好的評估模型的性能,使用各項評價指標對模型進行定量評估。如圖9所示,是模型在測試集上進行測試得到的結果,通過混淆矩陣的形式進行展示。

圖9 測試集分類結果混淆矩陣
通過觀察檢測結果混淆矩陣,誤檢和漏檢的類型是其他駕駛行為,由于其他駕駛行為數據中包含多種動作,可能會出現與其他8種行為相似的動作。觀察整體檢測結果,模型表現出較好的效果,下面通過具體的數值指標進行分析。在以上檢測結果的基礎上計算各個種類的性能指標。經過計算,每個行為的檢測精確率、召回率、F1分數以及對應的平均值如表2所示。

表2 九種駕駛行為檢測評價指標
由表2中數據所知,正常駕駛和其他行為的檢測精確率分別為91.97%,89.72%,這是因為某些動作特征可能不夠明顯造成的。同時,其他駕駛行為包含的動作種類較多,沒有固定的特征,因此造成檢測精度較低。模型在測試集檢測的平均精確率為95.30%,平均召回率為95.13%,平均F1分數為95.19%,整體表現出比較好的檢測效果。
為了驗證分神駕駛檢測模型的優勢,本研究對一些流行的目標檢測算法用相同的數據進行訓練和測試。對比試驗使用的方法有Faster-RCNN[18],SSD[19],YOLOv3,原始YOLOv5模型。各個模型檢測結果平均指標如表3所示。
如表3所示,將5種方法在本研究的數據集上進行了試驗,其中FPS是目標網絡每秒可以處理多少幀。結果表明,本研究提出的分神駕駛模型檢測精度明顯優于Faster-RCNN,SSD,YOLOv3,對YOLOv5進行優化后,檢測精度相對于YOLOv5也表現的更好。在檢測速度方面,本研究方法比原始YOLOv5速度稍慢,造成這一結果的原因是網絡在增加注意力機制后增加了推理時間,但是相比其他3種方法檢測速度仍然表現更好,滿足實時檢測的要求。模型大小方面,本研究方法相對于其他方法更小。綜合考慮各個方面,本研究方法在分神駕駛行為檢測上具有優越性。

表3 各個檢測模型測試平均指標對比
本研究針對駕駛人常見分神駕駛行為監測提出一種檢測方法。在YOLOv5模型的基礎上,針對分神駕駛行為檢測問題進行了優化,主要在錨框選擇部分和主干網絡部分進行改進得到本研究的分神駕駛行為檢測模型。對Kaggle危險駕駛行為數據進行再標注作為本研究的訓練數據集,對模型進行優化訓練。最終,通過試驗測試和對比,表明本研究的分神駕駛行為檢測模型具有更好的性能,同時可以到達實時檢測的目的。
雖然本研究方法的檢測性能表現出較好的性能,但仍然存在一部分問題。駕駛人在駕駛過程中可能會有更多的危險駕駛動作,本研究選用的數據只包含部分常見的類型。同時,本研究方法僅在實驗室電腦進行了試驗和測試。在接下來的研究中,將考慮對數據集進行擴充,同時將算法嵌入硬件設備,在實際駕駛過程中進行試驗測試。