方浩杰,董紅召,林少軒,羅建宇,方勇
(1.浙江工業大學 智能交通系統聯合研究所,浙江 杭州 310014;2.杭州金通科技集團股份有限公司,浙江 杭州 310014)
利用駕駛員面部圖像進行疲勞狀態分析具有非接觸、易實現、低成本等優點[1-2].人臉關鍵點算法的應用較廣泛,目前已有的人臉關鍵點算法包括MCTNN[3]、PFLD[4]、TCDCN[5]等,諸多學者在此基礎上進行改進與應用.Chen等[6-7]提出利用人眼狀態檢測算法提取疲勞參數,開展多特征加權融合.Adhinata等[8]提出結合FaceNet算法與k-最近鄰(K-NN)或多類支持向量機(SVM),計算眨眼頻率.上述方法要求輸入圖像盡可能正臉向前,人臉的五官出現圖像中,但駕駛員在行駛過程中會出現大幅度的轉頭、低頭、仰頭等姿勢動作,人臉關鍵點算法針對此類圖像無法精確定位眼睛、嘴巴區域,存在較大的偏移[9].在疫情防控下,服務行業的駕駛員要求全程佩戴口罩,例如公交駕駛員、出租車駕駛員,利用人臉關鍵點算法無法精確定位嘴部區域,導致后續疲勞參數計算失準,無法準確判斷駕駛員的疲勞狀態.
諸多學者提出其他面部疲勞狀態識別方法,Liu等[10-11]提出基于卷積神經網絡和長短時記憶的駕駛員疲勞實時檢測方法,計算嘴部、眼部疲勞參數.Wei等[12]提出基于sobel算子的邊緣檢測,提取人眼狀態信息.Noman等[13]提出利用支持向量機提取眼睛區域,使用CNN網絡進行眼睛狀態分類.Worah等[14-16]采用CNN模型檢測眼睛狀態,計算閉眼時間與眨眼頻率.上述方法大部分采用多個模塊檢測,整體網絡尺寸較大,導致檢測速度較慢.為了解決檢測速度慢的問題,目標檢測網絡廣泛用于駕駛疲勞檢測.Yu等[17-18]提出基于SSD的檢測網絡,檢測眼部、嘴部疲勞參數.Xiang等[19-20]提出利用YOLOv3模型對人眼進行檢測.該類方法未考慮駕駛員因扶口罩、揉鼻子手部動作導致的臉部特征遮擋,當前算法均無法在戴口罩時進行打哈欠檢測,最重要的是單一或獨立的疲勞特征檢測方法無法綜合評判駕駛員疲勞狀態,誤判率高.
針對上述問題,本文提出疫情防控下駕駛員多特征融合的疲勞狀態檢測方法.建立模擬駕駛平臺,利用移動端設備采集佩戴口罩和未佩戴口罩情況下的圖像數據.針對駕駛員頭部姿勢、手勢遮擋的問題,對YOLOv5目標檢測算法進行改進,提高被遮擋目標和小目標的檢測精度.結合人臉關鍵點算法,對眨眼和打哈欠幀數進行補償計算.融合多種疲勞參數進行歸一化處理,開展疲勞等級劃分.在公開數據集與自制數據集上,開展眨眼、打哈欠次數及疲勞狀態等級的驗證.
該方法主要包含3個部分,分別是改進的YOLOv5目標檢測算法、疲勞參數補償方法以及多特征融合的疲勞狀態檢測方法.數據集的采集及實驗均在模擬駕駛平臺上開展,該平臺由六自由度汽車性能虛擬仿真實驗平臺、駕駛仿真系統及模擬駕駛軟件組成.實驗招募20位志愿者進行模擬駕駛,模擬駕駛時長為55 min.為了更加逼近實際服務行業駕駛員的駕駛情況,為模擬駕駛員設置多種內置場景及任務,例如模擬疫情防控期間乘客上車掃乘車碼,敦促乘客規范戴口罩.
將YOLOv5目標檢測模型作為基礎網絡,并在此基礎上進行改進,改進后的模型結構如圖1所示.圖中,m為檢測層的深度.從圖1可知,模型結構由主干網絡(backbone)、加強特征提取網絡(neck)、檢測網絡(head)3部分組成.Conv模塊中的激活函數選擇Swish函數,將CIOU損失函數作為邊界框回歸損失.

圖1 改進后的YOLOv5網絡結構Fig.1 Improved YOLOv5 network structure
1)自適應錨框:由于頭部旋轉及手部遮擋,會導致眼部、嘴部標簽框形狀多變,眼部標簽框還會因為遠近的原因導致兩只眼睛的標簽框尺度不一,采用自適應錨框方法,錨框即為標簽框.在每次訓練前,對數據集中的標注信息進行核查,利用遺傳算法隨機對錨框變異,計算該數據集標注信息與錨定框的最佳召回率,并進行反復迭代覆蓋,當最佳召回率大于或等于0.98時,不需要更新錨定框.
2)增加檢測層:不同駕駛員的駕駛習慣不同,會對座椅進行調節;在駕駛過程中身體存在前傾或后仰動作,會導致檢測目標(人臉、眼睛、嘴巴)變大或縮小,需要提高模型多尺度(較大或較?。┠繕藱z測能力.通過增加結合層、卷積層、C3層的方法,整體分別多進行一次上采樣和下采樣,將主干網絡中包含較多小目標特征信息的同尺度特征層輸入結合層,進行特征融合操作,提高對小目標的檢測性能.
3)BiFPN網絡結構:在增加檢測層后,C3層、結合層、卷積層數量增加,整體網絡層數加深,但每一層網絡都會在一定程度上造成特征丟失,因此對于不同層級進行特征融合尤為重要.當戴口罩時,打哈欠檢測區域需要對擠眼、挑眉、口罩變化等細節進行特征提取,且該區域的特征變化細微.將主干網絡多層計算結果一次或多次輸入Bi-FPN加強特征提取網絡,采用BiFPN自下而上的結構時,對2個同尺度特征層進行融合;采用自上而下的結構時,利用跳躍連接的方式對3個同尺度特征進行融合.利用BiFPN網絡,使得預測網絡對不同大小的目標更敏感,提升了整體模型的檢測能力,降低了漏檢率與誤檢率.
圖像識別流程:輸入圖像會在主干網絡進行特征提取,將獲取到的3個有效特征層輸入Bi-FPN加強特征提取網絡,將不同尺度的特征層進行融合.在檢測網絡獲得4個加強過的有效特征層,對特征圖上的特征點進行判斷,實現多尺度目標物檢測,確定目標物的類別和位置.
在目標檢測數據集的標注過程中,將完全閉眼的圖像數據標注為閉眼狀態,其余數據均標注為睜眼狀態.由于打哈欠是從閉嘴到張嘴打哈欠,再從張嘴狀態到閉嘴狀態,難以準確定義張嘴臨界狀態.取完整打哈欠過程中部X%的圖像標記為張嘴.在實驗過程中發現,駕駛員戴口罩時打哈欠會出現擠眼、挑眉、皺眉等神情,眼部附近區域會發現明顯變化,伴隨著口罩大幅度的張開.戴口罩的打哈欠圖像數據從完整時間序列的角度,對圖像的大面部撐開的口罩、眼部及附近區域進行標注,取完整過程中部Y%的圖像標記為打哈欠.圖像標簽的制作方法如圖2所示.

圖2 圖像標注的示意圖Fig.2 Schematic of image annotation
研究表明,P80指標與駕駛員眼部疲勞特征的相關性最高,即根據人臉關鍵點算法確定眼部各個關鍵點并計算眼瞼覆蓋度,當眼睛瞳孔的整體面部被眼瞼覆蓋超過80%時認為眼睛是閉合的.嘴部根據關鍵點定義張嘴與閉嘴.由圖像數據預處理方法的原理可知,當前閉眼、張嘴、打哈欠的圖像幀預測數量相較于人臉關鍵點算法偏少,因此提出疲勞參數補償方法.利用人臉關鍵點算法計算出駕駛員在正臉狀態下閉眼、張嘴的幀數,與當前的數據預處理方法進行比較,根據比值進行補償.
1)眼睛縱橫比.EAR為眼睛縱向界標與橫向界標之間的歐式距離比值,可以直接反映眼睛閉合程度.根據眼睛的6個關鍵點位置(見圖3(a)、(b)),EAR的計算公式為

圖3 人臉關鍵點位置的示意圖Fig.3 Diagram of face key point position
當駕駛員眼睛睜開時,EAR保持動態平衡,即處于小幅波動.當駕駛員眼睛閉合時,EAR會迅速下降,并在眼睛再次睜開時迅速恢復到動態平衡.在結合P80標準后,EAR可以直接反映眼睛的睜閉狀態.
2)嘴巴縱橫比.參考眼睛縱橫比的定義方法,根據嘴巴的8個特征點(見圖3(c)、(d)),嘴巴縱橫比MAR特征點的計算公式為
嘴巴縱橫比由嘴部內輪廓的8個特征點計算所得,可以直接反映嘴部的張開程度.由于駕駛員會與乘客進行頻繁交流,須設定MAR閾值區分打哈欠和正常說話時的嘴部張開幅度.
3)EAR和MAR閾值的確定.為了確定駕駛員正臉狀態下EAR和MAR的波動范圍,須計算駕駛員正臉狀態下EAR和MAR的最大值、最小值.參考perclos中的P80指標確定EAR和MAR閾值,閾值的計算公式為
式中:X1為眼瞼覆蓋瞳孔面積占比,X2為嘴巴張開程度與最大張度的比值.
4)參數補償.根據上述方法確定EAR和MAR閾值,完整截取駕駛員正臉狀態下的眨眼、打哈欠(未戴口罩)圖像序列幀.根據閾值確定閉眼和打哈欠幀數,將該幀數與目標檢測算法標簽設置幀數比較,計算比值.比值S的計算公式為
式中:F為目標檢測標簽幀數,f為P80指標下利用人臉關鍵點算法識別駕駛員睜眼或張嘴的幀數.
依次計算得出眨眼幀數補償參數SE、張嘴幀數補償參數SM.由于SM是未戴口罩情況,根據目標檢測標簽預處理方法可知,戴口罩情況下打哈欠幀數補償參數SY的計算公式為
結合上述方法,可以分析的數據包括眨眼幀數、眨眼頻率、張嘴幀數、打哈欠次數.連續閉眼幀數超過2幀計為眨眼一次,張嘴或打哈欠識別結果連續幀超過20幀計為打哈欠一次.眨眼頻率BF和打哈欠頻率YF表示單位時間內的眨眼次數和打哈欠次數.定義ECN為連續閉眼幀數超過10幀的次數.
結合補償參數,定義ECR為計算單位內閉眼幀數與總幀數的比例關系,能夠反映眼睛閉合持續時間占檢測時間的比值及駕駛員疲勞狀態,公式如下:
式中:tE為眼睛閉合幀數,TE為單位時間的總幀數.
根據單位時間內打哈欠幀數占總幀數的比例關系,定義MOR表示未佩戴口罩情況下單位時間內的張嘴幀數占比,定義MORM表示佩戴口罩情況下單位時間內的打哈欠幀數占比,公式如下:
式中:tM為張嘴的幀數,TM為單位時間的總幀數,tY為佩戴口罩情況下的打哈欠幀數,TY為單位時間內的總幀數.
根據上述計算方法,可以得到BF、YF、ECN、ECR、MOR、MORM.由于得到的多個疲勞參數指標量綱不同,若將疲勞指標進行綜合評判,則須對所得參數的結果進行標準化處理.利用最大最小標準化(min-max normalization)的方法進行數據歸一化處理,轉換公式為
式中:x′為歸一化處理后的數值,xi為實際檢測到的疲勞參數數值,xmin、xmax分別為駕駛員清醒狀態檢測視頻中疲勞參數的最小值和最大值.
單一疲勞特征難以綜合駕駛員的真實疲勞狀態,易受個體差異的影響,導致疲勞等級誤判.對各疲勞參數歸一化后進行融合,將融合的值定義為綜合疲勞指標Q,以此綜合反映駕駛員的疲勞狀態.綜合疲勞指標Q的公式為
式中:Vi為歸一化后的疲勞參數,Wi為各疲勞參數的權重.
基于pytorch深度學習框架,搭建改進后的YOLOv5模型.硬件配置如下:i5-12600KF CPU、GTX3070、32 GB內存.
數據集包括公開數據集NTHU及自制數據集.公開數據集NTHU整體上包含多個不同種族的受試者,受試者坐在座椅上,控制方向盤和踏板模擬駕駛汽車.視頻記錄多種光照條件下駕駛員正常駕駛、打哈欠、慢眨眼、入睡、大笑等模擬駕駛場景,對每段視頻進行疲勞狀態劃分(清醒、疲勞、重度疲勞).取場景幀率為30幀/s的AVI格式視頻.部分視頻圖像如圖4所示.

圖4 NTHU數據集的部分視頻圖像Fig.4 Partial video images of NTHU dataset
自制數據集是在模擬駕駛平臺采集各類情況下的駕駛圖像數據.建立的圖像數據包括駕駛員工作期間的大幅度轉頭、低頭、抬頭、前傾、后仰、歪頭情況下的睜眼閉眼和打哈欠圖像,該類均包含戴口罩與不戴口罩的圖像.為了提高駕駛員面部遮擋圖像識別的準確性,采集駕駛員扶口罩、揉鼻子數據集.部分數據集的圖片如圖5所示.

圖5 自制數據集圖像的示意圖Fig.5 Sketch of self-made data set image
在NTHU駕駛員疲勞檢測視頻數據集中截取數據樣本3 300張,自制數據集共計包含8 700幅分辨率為1 920像素×1 080像素的圖像數據.將其中10 000張作為訓練集,1 000張作為驗證集,1 000張為測試集數據集.利用標注工具,對數據集圖片進行標注及歸一化處理,避免與正常講話交流狀態混淆.在多次實驗后截取駕駛員未戴口罩時的打哈欠圖像中部的70%進行標注,將該段圖像數據的嘴部區域標注為張嘴,其余均標注為閉嘴狀態,即X= 70.由于戴口罩后嘴部區域特征被遮擋,在打哈欠的開始及結束部分圖像,不再大幅度撐開口罩,面部神情開始恢復平靜.觀察駕駛員在戴口罩情況下的打哈欠視頻流數據,截取戴口罩情況下打哈欠完整時間序列圖像中部50%的圖像數據,將該段圖像數據標注為打哈欠,即Y= 50.
標簽分別是未戴口罩(Um)、戴口罩(Ym)、睜眼(Oe)、閉眼(Ce)、張嘴(Om)、閉嘴(Cm)、打哈欠(Ya).將標簽框參數定義為(C,rx,ry,L,S),其中C為類別ID參數,rx和ry為目標中心點的橫、縱坐標,L為目標框的較長邊,S為目標框的較短邊.
模型訓練參數的輸入尺寸為640像素×640像素,BatchSize設置為16,迭代次數為300,優化器選擇隨機梯度下降(SGD)法.采用One Cycle方法對學習率進行調整,初始學習率為10-5,呈余弦變化衰退到10-7.為了提高臉部遮擋情況下的檢測能力及模型泛化能力,增加噪聲數據,提升模型的魯棒性,對輸入圖像數據進行Mosaic數據增強.對于傳入圖像進行隨機翻轉、縮放、裁剪等處理,將得到的圖像進行依次拼接.
為了驗證改進方法的有效性以及改進后模型與當前主流目標檢測算法的優劣效果,將其余算法設置相同的訓練參數進行驗證.訓練結果如表1所示,表中包括各模型參數量M、浮點運算次數FLOPs及各檢測類別的AP.AP表示某一檢測類精確率(precision)和召回率(recall)形成PR曲線下的面積,平均精度均值(mAP)是將所有類的AP求平均值.從表1可知,改進后的目標檢測算法的平均精度最高,達到99.4%,表明該模型相較于其他模型具有更加理想的檢測效果.Faster-RCNN模型在參數量、計算量上大幅度高于其他模型,平均檢測精度未見明顯的優勢,但是在面部檢測類別中對于是否戴口罩的檢測精度最高,可見對于大目標物體檢測具有優勢,但是對于眼部、嘴部目標變化多樣,尤其針對睜眼、閉眼類別的檢測精度較低.YOLOv3-tiny、SSD、YOLOv5均為端到端類型的目標檢測網絡,YOLO系列網絡的參數量和計算量更低,檢測精度更高.在YOLOv5-S基礎網絡上分別增加檢測層和BIFPN網絡結構,開展消融實驗,驗證改進方法的有效性.從表1可知,在增加檢測層后,對眼部、嘴部區域的檢測精度明顯提升,戴口罩情況下的打哈欠檢測精度也有了提高,但戴口罩的檢測精度有小幅下降.可見,在增加檢測層后,對小尺度的目標檢測性能和圖像中的細節特征提取性能有所提高.在增加BIFPN網絡結構后,模型的整體性能提升,尤其是對于戴口罩情況下的打哈欠檢測,可見特征層融合后,更多的圖像細節信息被保留下來.改進后模型的檢測效果如圖6所示.可知,該模型在駕駛員大幅度轉頭、低頭、手部遮擋、戴口罩等情況下,均可對眨眼、打哈欠進行識別.

表1 不同模型的性能比較Tab.1 Performance comparison of different models

圖6 本文改進后模型的檢測效果圖Fig.6 Checking effect chart of improved model
利用人臉關鍵點算法計算駕駛員在正臉狀態下閉眼、張嘴的幀數,與當前的數據預處理方法進行比較,根據比值進行補償.截取多位模擬駕駛員正臉狀態下的眨眼、打哈欠圖像,利用Dlib庫中的人臉關鍵點檢測器,計算駕駛員左、右眼的EAR并取均值.
結合式(3)、(4)計算,取X1為0.8,即表示眼睛閉合程度大于眼瞼覆蓋瞳孔的80%時視為閉眼.同理,X2取0.2,即嘴巴張開程度大于最大張度的80%時視為打哈欠動作.EAR的最大值和最小值分別為0.48、0.12,閾值為0.19;MAR的最大值和最小值分別為0.66、0.34,閾值為0.60.當EAR<0.19時視為閉眼,MAR> 0.60時視為打哈欠動作.
根據所得的閾值,結合式(5)計算各補償參數S.閉眼幀數的統計如表2所示.表中,Ne為眨眼次數,NPe為利用關鍵點方法識別的閉眼幀數,NTe為眼部目標檢測的標簽幀數,Re為NPe與NTe的比值.分別統計了眨眼次數為100、500、1 000時的關鍵點幀數與目標檢測標簽幀數,SE為1.31~1.34.通過增加眨眼樣本數量,可以提高SE的精準度,本次SE取1.32.

表2 閉眼幀數的統計Tab.2 Statistics of closed-eye frames
打哈欠幀數的統計如表3所示.表中,Nm為打哈欠次數,NPm為關鍵點方法識別打哈欠幀數,NTm為嘴部目標檢測標簽幀數,Rm為NPm與NTm的比值.分別統計20、40、100次關鍵點幀數與目標檢測標簽幀數,SM為1.210~1.220,本次SM取1.22.根據當前SM的計算結果可知,本次SY取1.71.

表3 打哈欠幀數統計Tab.3 Statistics of yawning frames
對模擬駕駛視頻中的眨眼和打哈欠次數進行人工核驗,與模型識別結果進行比較,結果如表4、5所示.表中,NDe、NDm分別為算法檢測眨眼、打哈欠次數,NAe、NAm分別為眨眼、打哈欠算法檢測與人工校驗吻合次數,NFe、NFm分別為眨眼、打哈欠算法檢測的誤檢次數,NLe、NLm分別為眨眼、打哈欠算法檢測的漏檢次數,Ae、Am分別為眨眼、打哈欠算法檢測的準確率.準確率(Acc)的計算公式為

表4 眨眼計數分析Tab.4 Blink count analysis

表5 哈欠計數分析Tab.5 Yawning count analysis
式中:TP為檢測計數與人工核驗吻合的次數,FN為檢測計數的漏檢次數,FP為檢測計數的誤檢次數.
根據實驗結果表明,利用該方法可以對戴口罩和不戴口罩的駕駛員進行眨眼和打哈欠計數檢測,在目前駕駛任務中眨眼準確率大于95%,打哈欠計數錯誤至多為1次.在當前的硬件條件中,單幀圖像檢測僅需0.01 s,滿足實時檢測的需求.
結合式(10)可知,歸一化處理后的數據均為無量綱的小數,且集中在[0, 1.0]區間內.各指標可以進行加權相加,綜合反映駕駛員的疲勞狀態.結合模擬駕駛中駕駛員不同疲勞程度下的各疲勞參數值以及現有研究中各參數指標反映駕駛員疲勞的可靠性程度,設置不同權重[25-26].NTHU駕駛員疲勞狀態檢測視頻中清醒狀態時的疲勞參數指標最小值和最大值及權重如表6所示,參數統計的時長為1 min.表中,Pmin、Pmax為疲勞參數的最小值、最大值,W為各疲勞參數的權重.若眨眼次數不在設定范圍中直接計為1,其余參數指標低于最小值則直接計為0,高于最大值直接計為1.

表6 綜合疲勞參數的最大值以及權重Tab.6 Maximum value and weight of comprehensive fatigue parameters
Q的取值在[0, 1.0]區間內.根據Q的不同,將狀態分為3個等級:清醒、疲勞、重度疲勞.綜合疲勞指標的權重和疲勞等級,將特征參數加權值與疲勞等級相對應,根據對應關系能夠判斷駕駛員的駕駛狀態.對應關系如表7所示.

表7 綜合疲勞指標與疲勞等級的對應關系Tab.7 Relationship between comprehensive fatigue index and fatigue grade
為了驗證模型識別及參數補償方法的可靠性,利用NTHU駕駛員疲勞檢測視頻數據集中的部分數據進行驗證.隨機選取3組數據,每組數據均包含清醒、疲勞、重度疲勞狀態.結合疲勞檢測模型計算單位時間(1 min)下的疲勞參數,對眨眼、打哈欠識別幀數分別乘以參數補償值,最終計算結果、綜合疲勞指標以及對應的疲勞狀態如表8所示.可知,利用提出的疲勞狀態識別方法及定義的疲勞指標,可以有效地識別駕駛員行駛狀況下的疲勞狀態;識別結果與真實狀態全部吻合,設置的閾值及劃分方法均合理,識別效果良好.

表8 NTHU數據集的不同疲勞狀態識別結果Tab.8 Different fatigue state identification results of NTHU dataset
根據工信部發布的第346批車輛產品公示清單可知,公交車、出租車服務業車輛與私家車均屬于M類.將上述方法及預警機制直接應用至本文的模擬駕駛.截取模擬駕駛實驗中的多段視頻,根據戴口罩情況分成2組,1組為未戴口罩,2組為戴口罩,計算單位時間(1 min)內的各疲勞參數.驗證結果如表9所示.表中,真實狀態由駕駛員的主觀反應及行駛狀態綜合判定,其中MORM與MOR兩者的差別僅為是否戴口罩,均為單位時間內打哈欠幀數占比,因此權重相同.從表9可知,識別結果與真實狀態均吻合,驗證了該綜合疲勞指標與疲勞等級劃分的魯棒性和可行性,對于未戴口罩和戴口罩的情況均可以進行疲勞狀態識別.

表9 模擬駕駛疲勞狀態的識別結果Tab.9 Recognition results of simulating driving fatigue state
(1)針對服務行業駕駛員在實際工作中會出現的大幅度轉頭、遮擋、仰頭、俯視等姿勢變化導致的眨眼、打哈欠檢測精度低及疫情防控下戴口罩后無法進行打哈欠檢測的問題,提出利用改進后的YOLOv5目標檢測算法對眨眼和打哈欠識別.通過增加檢測層及多層次特征層融合的方式,提高對單幀圖像眼部、嘴部區域及打哈欠檢測區域的目標檢測精度,將多幀檢測結果放在連續時間序列中,利用邏輯方法進行眨眼和打哈欠計數.根據實驗結果表明,利用該方法可以對戴口罩和不戴口罩的駕駛員進行眨眼和打哈欠計數檢測,在目前駕駛任務中眨眼準確率大于95%,打哈欠計數錯誤至多為1次.在當前硬件設備中,單幀圖像檢測僅需0.01 s,滿足實時檢測的需求.
(2)結合人臉關鍵點算法對疲勞參數進行補償,提高眨眼和打哈欠幀數的檢測準確率.對多種疲勞指標進行歸一化處理,賦予不同權重,綜合判斷駕駛員的疲勞狀態.公開數據集與自制數據集驗證結果表明,利用該方法可以準確判斷駕駛員疲勞狀態,對疫情防控下的駕駛員疲勞檢測具有重要意義.