代少升,黃向康,黃 濤,王海寧,梁 輝
(1.重慶郵電大學(xué) 通信與信息工程學(xué)院,重慶 400065;2.東北大學(xué) 計算機科學(xué)與工程學(xué)院,沈陽 110167)
隨著智能手機在日常生活中的頻繁使用,駕駛途中的打電話行為越來越多。研究表明,開車打電話會導(dǎo)致駕駛?cè)俗⒁饬ο陆?0%,如果通話內(nèi)容很重要,則駕駛?cè)说淖⒁饬陆?7%[1]。因駕駛員打電話導(dǎo)致的道路交通事故報道不時見諸新聞[2],而且開車時打電話亦是違反交通法的行為,因此能實時準確地對駕駛員打電話行為進行檢測并預(yù)警具有很大的市場需求[3]。
目前,對駕駛員打電話行為檢測的方法主要分為兩種:一種是基于手機信號檢測,另一種是基于機器視覺檢測?;谑謾C信號檢測是通過監(jiān)測手機信號的變化來確定駕駛員是否在打電話,因為接打電話時的手機功率相較于待機狀態(tài)更強。Rodriguez[4]等人通過在固定區(qū)域安裝天線,監(jiān)控行駛中車輛上的手機信號來判斷駕駛員打電話行為,但此方法容易受到乘客手機信號的干擾,誤檢率較高。
基于機器視覺的檢測方法是通過分析采集到的駕駛室視頻,運用圖像處理算法監(jiān)測是否存在打電話行為[5]。王丹[6]通過將駕駛員行為分解為一系列包含時序關(guān)系的原子動作,如手部動作、頭部姿勢等多項信息,再由此來綜合判斷打電話動作,但檢測結(jié)果在頭部偏轉(zhuǎn)和光照比較強烈時誤差較大。吳晨謀等人[7]基于人體三維姿態(tài)估計的方法,獲取駕駛員上半身的8個骨骼節(jié)點的三維坐標(biāo),對駕駛員的行為識別分析,以此判斷駕駛員是否接打電話。李兆旭等人[8]提出的基于局部二值模式(Local Binary Pattern,LBP)特征和極端梯度提升(eXtreme Gradient Boosting,XGBoost)級聯(lián)分類器的手機檢測算法,對手機的識別率達到不錯的檢測效果,但非駕駛員的打電話行為以及車內(nèi)其他位置的手機都會對檢測結(jié)果產(chǎn)生干擾,無法準確判別是否出現(xiàn)駕駛員打電話。張波等人[9]綜合灰度共生矩陣(Gray-level Co-occurrence Matrix,GLCM)與方向梯度直方圖(Histogram of Oriented Gradient,HOG)提取圖像特征確定手部位置,最后運用模式邏輯判別打電話行為。王盡如[10]采用支持向量機(Support Vector Machine,SVM)算法來進行檢測,但該方法受駕駛環(huán)境影響較大,誤判率比較高。熊群芳等人[11]采用漸進校準網(wǎng)絡(luò)算法和改進YOLOV3算法判斷駕駛員是否處于打電話狀態(tài),雖然該方法能達到較高的檢測準確率,但多層卷積神經(jīng)網(wǎng)絡(luò)算法中包含大量的矩陣運算,只適用于配備GPU等計算加速模塊的PC端使用?,F(xiàn)有檢測方法都存在一定缺陷,包括檢測準確率低、無法檢測免提接聽電話行為、對設(shè)備性能要求較高、檢測速度慢等問題。
為解決上述缺陷,本文采用改進多任務(wù)卷積神經(jīng)網(wǎng)絡(luò)(Multi-task Convolutional Neural Network,MTCNN)算法檢測人臉[12],并根據(jù)人臉坐標(biāo)通過淺層卷積神經(jīng)網(wǎng)絡(luò)進行手持電話行為檢測,同時根據(jù)臉部關(guān)鍵點由級聯(lián)形狀回歸算法得到嘴巴特征點及其寬高比來進行講話行為判別,然后使用交叉驗證法訓(xùn)練優(yōu)化模型,最終將兩種行為的檢測結(jié)果相“與”的方法進行駕駛員打電話行為判別。另外,此套方案已成功加載至CEVA DSP硬件平臺,進一步驗證了算法在實際駕駛場景下的檢測效果。
本文所采用的駕駛員打電話行為檢測方法可同時檢測聽筒和免提接聽兩種狀態(tài),并融合手持電話與講話兩種行為的檢測結(jié)果,作為最終的打電話行為判別結(jié)果。其檢測流程如圖1所示。
圖1 算法流程圖
針對DSP端的處理器性能、內(nèi)存大小等限制[13],本文使用優(yōu)化后的級聯(lián)卷積神經(jīng)網(wǎng)絡(luò)算法來檢測圖像中的人臉及面部關(guān)鍵點,其中框架采用的是基于NCNN的卷積神經(jīng)網(wǎng)絡(luò)架構(gòu)。NCNN框架是騰訊公司專門為移動端設(shè)計優(yōu)化的一個高性能神經(jīng)網(wǎng)絡(luò)前向計算框架,它具有純C++實現(xiàn)利于跨平臺、計算速度快、內(nèi)存占用低、無需借助GPU加速以及自帶庫體積小等優(yōu)點,利于ARM、DSP等嵌入式平臺開發(fā)使用[14]。
人臉檢測算法采用級聯(lián)卷積神經(jīng)網(wǎng)絡(luò)算法,該算法借鑒MTCNN(Multi-task Convolutional Neural Network)人臉檢測算法[15],將MTCNN算法改進后用于駕駛員人臉檢測。其檢測順序如下:對輸入圖像做相鄰幀對比→圖像金字塔→P-Net(Proposal Network)→人臉框初步判別→R-Net(Refine Network)→人臉框二次判別→O-Net(Output Network)→人臉框信息與面部5個特征點坐標(biāo)。
相比較于MTCNN檢測算法,改進后的人臉檢測算法針對駕駛室環(huán)境做了特殊處理,主要包括以下幾點:
(1)由于開車過程中駕駛員的臉部位置一般移動較少,因此本文將新一幀的待檢測圖像與上一幀圖像在人臉框區(qū)域進行差異度對比,若重復(fù)度大于85%,則延續(xù)使用上一幀圖片的人臉檢測結(jié)果,否則重新進行人臉檢測。
(2)由于駕駛座位前后可調(diào)整范圍較小,因此在攝像頭所采集圖像中駕駛員人臉大小變化不大,所以圖像金字塔的構(gòu)建本文只使用三層縮放,縮放比例依次為上一層的0.8倍,來減少多層縮放導(dǎo)致的計算量增加。
(3)在前兩層級聯(lián)CNN網(wǎng)絡(luò)后分別加入人臉檢測框判別,只有當(dāng)本層網(wǎng)絡(luò)的檢測結(jié)果中包含疑似人臉框時才進行之后的運算,否則便終止此幀圖像的檢測流程,開始新一幀圖像的檢測,如此便能減少大量非必要的運算,降低算法冗余度。
通過上述步驟加速優(yōu)化后的人臉檢測算法相較于MTCNN算法既保證了人臉檢測的高準確率,同時使檢測速度平均提升了7倍,極大限度地提高了檢測效率。
本文采用淺層卷積神經(jīng)網(wǎng)絡(luò)[16]S-CNN進行特征提取并判別檢測手持電話行為,其中不僅包括正常的聽筒接聽電話狀態(tài),還包括免提接聽狀態(tài)。該方法首先根據(jù)前一部分檢測到的人臉框坐標(biāo)及大小裁剪臉部兩側(cè)及下方區(qū)域作為手持電話行為待檢測區(qū)域,然后對待檢測圖像通過S-CNN進行特征提取以及行為分類判別。
待檢測區(qū)域指的是用于判別駕駛員手持電話行為的圖像區(qū)域。駕駛員在打電話過程中可能會采取兩種方式:一種是聽筒接聽,此方式一般手握電話靠近耳旁進行通話;另一種是免提接聽,此方式一般會手握電話于臉部下方區(qū)域接聽電話。故本文通過裁剪兩側(cè)耳旁及臉部下方區(qū)域圖像來進行手持電話行為檢測。根據(jù)第一部分人臉檢測框的坐標(biāo)及大小,裁剪出的手持電話行為待檢測區(qū)域如圖2中紅框區(qū)域所示。
圖2 手持電話行為待檢測區(qū)域
對此區(qū)域圖像,本文參考AlexNet[17]和VGG[18]等網(wǎng)絡(luò)來構(gòu)建輕量級卷積神經(jīng)網(wǎng)絡(luò),旨在減少卷積參數(shù)及計算量;同時,由于卷積神經(jīng)網(wǎng)絡(luò)的淺層網(wǎng)絡(luò)所提取到的特征圖,感受野更加關(guān)注的是圖像中形狀、紋理等特征。而手持電話行為含有豐富的邊緣特征信息,手機與手部相結(jié)合的形狀特征明顯,這對于手持電話行為的判別非常重要。由于光線變化或車輛后排物體的影響,可能導(dǎo)致手持電話的顏色及大小與所處背景相近,進而提取出的候選區(qū)域可能不是手持電話圖像而是背景圖像,為此,我們將待檢測區(qū)域圖像均調(diào)整為32 pixel×32 pixel大小送入網(wǎng)絡(luò),將非手持物品行為的圖像剔除。
針對32 pixel×32 pixel的輸入圖像,對其進行多層卷積、池化等操作,并將全部卷積層的輸出特征進行可視化顯示,以觀察各層的處理效果及最終的分類結(jié)果。經(jīng)過可視化后發(fā)現(xiàn),卷積層第1層是各種邊緣探測器的集合,幾乎保留了原始圖像中的所有信息,而隨著層數(shù)的加深,卷積層所提供的特征越來越抽象,即視覺可觀察到的信息越來越少,關(guān)于類別的信息越來越多,但訓(xùn)練參數(shù)也更多,計算量與過擬合風(fēng)險增加。最終,本文采用5個卷積層與2個全連接層構(gòu)建一個輕量級卷積神經(jīng)網(wǎng)絡(luò)S-CNN分類器,對于其中的每個卷積層,分別對上層通道的圖像四周補0,采用卷積核大小均為3×3,通過設(shè)置不同的步長提取邊緣信息,對于下采樣操作設(shè)置步長為2,其他為1,激活層均采用ReLu函數(shù)。該網(wǎng)絡(luò)的結(jié)構(gòu)圖如圖3所示,每一卷積層運算后的可視化二維特征圖如圖4所示。
圖3 S-CNN網(wǎng)絡(luò)
圖4 S-CNN網(wǎng)絡(luò)各卷積層可視化二維特征圖
由于是二分類任務(wù),因此損失函數(shù)采用的是Sigmoid交叉熵損失,其計算公式如式(1)所示:
(1)
S-CNN網(wǎng)絡(luò)經(jīng)過數(shù)據(jù)集訓(xùn)練后,在測試視頻中的檢測效果如圖5所示,包括聽筒和免提兩種接聽狀態(tài)。
圖5 手持電話行為檢測效果圖
針對駕駛員講話行為,本文主要利用嘴巴寬高比的變化來檢測[19]。首先,根據(jù)人臉檢測所得到的基本特征點,其中主要用到左右嘴角特征點和鼻尖特征點,裁剪獲取嘴巴區(qū)域的圖像,并通過級聯(lián)形狀回歸算法[20-21]來得到嘴巴的全部特征點,得到的特征點預(yù)測形狀如圖6所示,其中包括三種狀態(tài):正常狀態(tài)、講話狀態(tài)和打哈欠狀態(tài)[22]。
圖6 不同狀態(tài)嘴巴特征點預(yù)測圖
之后根據(jù)特征點計算嘴巴的寬高比,其中寬高比計算中,寬是嘴角兩點的距離,高是上下嘴唇相對應(yīng)的8組特征點距離的均值。然后統(tǒng)計一段時間內(nèi)的寬高比變化,如圖7所示為某段測試視頻提取到的寬高比變化圖。
圖7 嘴巴寬高比變化統(tǒng)計圖
通過統(tǒng)計分析大量的嘴巴寬高比數(shù)據(jù)可知,在正常、講話以及打哈欠三種狀態(tài)下的嘴巴寬高比變化不同。通過研究三種狀態(tài)的寬高比變化模型得出,正常狀態(tài)下的嘴巴寬高比值一般較小,并且僅有輕微的波動;打哈欠狀態(tài)下會出現(xiàn)很高的峰值,一般大于1,且無頻繁波動;而講話狀態(tài)下最為復(fù)雜,嘴巴寬高比值相較于正常狀態(tài)下的平均高度一般更高但又不會大于打哈欠狀態(tài),而且波動范圍更大、更加劇烈。
因此,針對上述發(fā)現(xiàn),本文提出了兩種方案進行實驗,來對比分析找出最優(yōu)的駕駛員講話狀態(tài)檢測方案。第一種方案,通過設(shè)定固定閾值來區(qū)分三種狀態(tài),其中包括上、下兩個閾值,判別方法為:連續(xù)30幀圖片的嘴巴寬高比均值高于上閾值為打哈欠,低于下閾值的為正常狀態(tài),只有當(dāng)圖像的嘴巴寬高比值處于上下域值之間時才為講話狀態(tài)。第二種方案,通過對連續(xù)多幀圖像的寬高比振蕩差值來判斷。正常狀態(tài)下的寬高比值振蕩幅度非常小,浮動的峰谷差值基本都在0.03以內(nèi);而講話狀態(tài)下的卻比較激烈,峰谷差值大多數(shù)都大于0.05,但最大不會超過0.5;打哈欠狀態(tài)下的振蕩更加劇烈,其差值一般超過0.5,甚至大于1。因此,針對正常、打電話及打哈欠三種狀態(tài),設(shè)置連續(xù)20幀圖像的寬高比峰谷差值波動范圍分別為[0,0.04]、(0.04,0.5)、[0.5,∞)。
針對上述兩種方案,本文進行了大量的實驗。通過對不同性別、年齡的人物,在白天和夜晚兩種情形下進行測試得出結(jié)論,方案二的效果要明顯好于方案一,后者的檢測平均準確率可達到90%以上,而前者的平均準確率卻不到70%。方案一在實驗過程中,始終難以確定出最合適的閾值范圍,經(jīng)過分析其原因在于不同的人在正常狀態(tài)下的嘴巴閉合形狀不一樣,而且說話過程中會出現(xiàn)寬高比均值低于正常狀態(tài)的情況。綜上所示,本文采用方案二的方法進行駕駛員講話行為判別。
在得出上述兩種行為的判別結(jié)果后,便可以得到最終的駕駛員打電話行為判別結(jié)果。采用的方式是通過兩者相“與”運算進行判別,即只有當(dāng)駕駛員既存在手持電話行為,同時又存在講話行為時,才可判斷其正處于一邊開車一邊打電話的狀態(tài),從而對駕駛員發(fā)出警告。如果其中一種行為并未被檢測到,便不會發(fā)出警告,如此既能避免由于某一種行為的誤檢而導(dǎo)致的誤報,又能保證免提通話一樣能夠被檢測到。
本實驗訓(xùn)練模型所使用服務(wù)器為64位Ubuntu 16.0系統(tǒng),配備了Intel Xeon Silver 4215處理器,128 GB內(nèi)存,2張GeForce RTX 2080Ti顯卡,每張顯卡顯存11 GB。
本文系統(tǒng)最終運行在聯(lián)詠公司NT96687平臺上,此平臺由控制核心和運算核心兩部分組成。控制核心使用的是Dual Core ARM Cortex-A53芯片,主要實現(xiàn)圖像的采集、存儲和傳輸?shù)荣Y源調(diào)度以及檢測結(jié)果的顯示和報警功能。運算核心承擔(dān)著本文算法實現(xiàn)的主要部分,使用的是CEVA DSP XM4芯片,CPU為DualCEVA DSP XM4,RAM 4 GB,ROM 16 GB,OS為FreeRTOS V9.0。
實驗數(shù)據(jù)集由兩部分組成:一部分為中科院亞洲人臉數(shù)據(jù)集CAS-PEAL,它由1 040個個體(包括595名男性和445名女性)的30 900張圖像組成,此部分為正常環(huán)境下非打電話圖片數(shù)據(jù)集;另一部分為駕駛環(huán)境下,使用紅外攝像頭采集的107位駕駛員在不同角度和光照條件下的打電話數(shù)據(jù)集,其中包含6 470張打電話圖片和13 510張正常駕駛圖片,稱為駕駛員打電話行為數(shù)據(jù)集(Driver's Calling Behavior Dataset,DCBD)。以上數(shù)據(jù)集組成了本次實驗的數(shù)據(jù)集,如圖8所示。
實驗中,人臉檢測部分使用了上述數(shù)據(jù)集的全集。此外,負樣本由車載環(huán)境下采集的非人臉圖像的55 000張圖片組成。確定了人臉坐標(biāo)及檢測區(qū)域后,打電話行為判別使用DCBD作為數(shù)據(jù)集,其中的正樣本為打電話圖片,負樣本使用正常駕駛圖片。本文通過交叉驗證法將數(shù)據(jù)集的80%作為訓(xùn)練集,另外的20%作為測試集,多次訓(xùn)練測試以達到最優(yōu)的檢測效果。
為了驗證模型的檢測效果,將算法部署在車載NT96687平臺上,通過DSP運算核心的向量處理單元(Vector Process Unit,VPU)、矩陣運算及卷積等操作來加速算法運行,并完成檢測任務(wù)。測試數(shù)據(jù)為12名駕駛員在偏僻道路上的駕車行駛途中,通過紅外攝像頭實時采集視頻進行檢測。在上述實際場景下,本文算法在某段駕駛視頻中的檢測效果統(tǒng)計如圖9所示。
圖9 實際駕駛場景檢測結(jié)果統(tǒng)計
本文算法的整體檢測效果采用檢測平均準確率(mean Average Precision,mAP)、平均召回率(Average Recall,AR)、特效度(Specificity,SP)以及平均檢測速度(ms/frame)作為評價標(biāo)準,其中AR和SP的計算公式分別如公式(1)和公式(2)所示:
(1)
(2)
式中:TP代表真正正樣本,F(xiàn)N代表假負樣本,TN代表真正負樣本。各類算法的檢測性能指標(biāo)對比如表1所示。
表1 檢測算法對比
由表1可以看出,本文算法在權(quán)衡檢測精度和速度上要優(yōu)于其他算法。在實際駕駛環(huán)境下,本文的平均檢測準確率雖然比YOLOV3少了0.2%,但特效度卻達到了98.8%,表明算法的誤報率很低,極少出現(xiàn)沒有打電話的情況下發(fā)出警報,從而避免影響駕駛員的正常駕駛行為。此外,本文算法的檢測速度相比較于其他算法縮短了至少一倍,在對比其他各類算法中檢測速度最快,對駕駛員的打電話行為檢測效果更好,實時性更強。
本文提出了一種基于深度學(xué)習(xí)的駕駛員打電話行為檢測算法,可同時對聽筒和免提接聽兩種狀態(tài)進行檢測,相比較于其他只對聽筒接聽進行判別的算法更具實用性,而且融合手持電話與講話行為共同判別駕駛員打電話行為,相比較于以往的檢測方法具有更高的檢測精度,能極大程度地防止誤報。經(jīng)過在駕駛環(huán)境下的實驗,分別與Haar+AdaBoost、LBP+XGBoost、HOG+SVM、YOLOV3等算法在檢測準確率和速度上進行對比,結(jié)果表明,本文所提的檢測方法在實際駕駛環(huán)境下具有更好的檢測效果,在提升檢測精度的情況下,檢測速度也有很大的提升,在嵌入式平臺下的平均檢測速度僅在230 ms/frame左右,可對實際駕駛場景下的駕駛員打電話行為進行準確、及時的預(yù)警。