白中浩,王韞宇,張林偉
(1.湖南大學(xué),汽車車身先進(jìn)設(shè)計制造國家重點實驗室,長沙 410082;2.福建工程學(xué)院,福建省汽車電子與電驅(qū)動重點實驗室,福州 350118)
近年來,有超過1/5的交通事故是由駕駛員分心導(dǎo)致的[1]。此外,在實現(xiàn)完全自動駕駛(L5級)之前,依然要求駕駛員保持專注,隨時準(zhǔn)備在緊急情況下重新控制轉(zhuǎn)向盤[2-3]。因此,通過對駕駛員行為進(jìn)行實時監(jiān)控,減少駕駛員分心,對于交通安全來說尤為重要。
解決駕駛員駕駛分心狀態(tài)問題的一種方法是開發(fā)駕駛員監(jiān)測系統(tǒng),在這樣的監(jiān)測系統(tǒng)中,正確檢測駕駛員分心行為至關(guān)重要,這也是本文的重點。駕駛員分心檢測可以檢測駕駛員分心行為,并識別造成分心的原因,進(jìn)而警告駕駛員不要分心或采取預(yù)防措施。另一方面,在緊急情況下,有助于判斷駕駛員是否具有接管車輛的能力,可通過警告駕駛員停止分心行為,集中注意力投入到車輛駕駛中,減少意外事故的發(fā)生。這使駕駛員分心檢測系統(tǒng)成為車輛智能化的一個重要組件。此外,分心檢測還可用于駕駛員意圖分析中,為實現(xiàn)完全自動駕駛(L5級)奠定基礎(chǔ)。
近年來,眾多學(xué)者使用壓力傳感器、接近傳感器、深度相機(jī)、單目攝像頭等對駕駛員分心行為進(jìn)行檢測[4-8]。其中,從成本和使用便利性等方面考慮,單目視覺攝像頭是目前使用最廣泛的傳感器。目前,駕駛員分心檢測算法大多基于對駕駛員局部身體部位的感知,Seshadri等[9]通過檢測駕駛員頭部姿態(tài)的變化,使用原始像素和梯度方向直方圖(HOG)特征與AdaBoost分類器相結(jié)合,對使用手機(jī)這類分心行為進(jìn)行檢測,在自制數(shù)據(jù)集上獲得了較好的效果。Abouelnaga等[10]模仿Kaggle上分心駕駛比賽數(shù)據(jù)集,制作了類似的圖片數(shù)據(jù)集,通過人臉、手部定位和皮膚分割排除冗余信息,然后基于卷積神經(jīng)網(wǎng)絡(luò)和遺傳算法對駕駛員分心行為進(jìn)行分類,取得了84.64%的準(zhǔn)確率[11]。Baheti等[12]提出了基于改進(jìn)VGG-16的算法,不僅可檢測駕駛員分心行為,還可識別出原因,獲得了更高的識別精度。Ou等[13]通過在ImageNet上預(yù)訓(xùn)練的ResNet-50模型進(jìn)行遷移學(xué)習(xí),以解決駕駛員分心行為數(shù)據(jù)不足的問題,并證明了其在光照變化下具有較強(qiáng)的魯棒性。
目前,由于數(shù)據(jù)集的限制,大多算法都是基于圖片的駕駛員行為識別,這是對實時檢測駕駛員分心行為的一種挑戰(zhàn)。首先,本文中模仿Kaggle數(shù)據(jù)集的分類,從拍攝角度、駕駛員體型、光照、干擾物等方面,制作了駕駛員分心駕駛視頻片段數(shù)據(jù)集。然后,基于人體姿態(tài),通過對駕駛員行為分析,設(shè)計了駕駛員姿態(tài)估計圖。最后,基于圖卷積網(wǎng)絡(luò)(graph convolution network,GCN),提出了一種融合駕駛員骨架信息與關(guān)鍵物體信息的駕駛行為檢測算法,在SrateFarm數(shù)據(jù)集和自制數(shù)據(jù)集上均取得了較好的效果。
圖是一種數(shù)據(jù)形式,不像圖像、視頻和信號數(shù)據(jù)那樣的網(wǎng)格化數(shù)組結(jié)構(gòu)。一個圖的頂點(邊)與頂點(邊)之間的鄰居數(shù)是不同的,且對于兩個頂點(邊)之間的任何給定連接都不需要幾何解釋。它可用于表示社交網(wǎng)絡(luò)、通信網(wǎng)絡(luò)和蛋白分子網(wǎng)絡(luò)等,圖中的節(jié)點表示網(wǎng)絡(luò)中的個體,連邊表示個體之間的連接關(guān)系。將深度學(xué)習(xí)中常用于圖像的卷積神經(jīng)網(wǎng)絡(luò)應(yīng)用到數(shù)據(jù)上,Kpif等[14]提出了圖卷積網(wǎng)絡(luò)(GCN),它為通過骨架信息來進(jìn)行動作識別提供了一個嶄新的思路。Yan等[15]第一個將圖卷積網(wǎng)絡(luò)應(yīng)用于動作識別中,提出了ST-GCN行為分類的方法,并在兩個大型動作數(shù)據(jù)集上表現(xiàn)出極好的效果。Zhang等[16]設(shè)計了圖邊緣卷積神經(jīng)網(wǎng)絡(luò)(GECNN),并融合了圖邊緣卷積神經(jīng)網(wǎng)絡(luò)與圖卷積神經(jīng)網(wǎng)絡(luò)的結(jié)果,在圖卷積網(wǎng)絡(luò)基礎(chǔ)上取得了不錯的提升。
與二維卷積網(wǎng)絡(luò)不同,圖卷積沒有固定空間順序排列的領(lǐng)域像素,須根據(jù)節(jié)點周圍的領(lǐng)域在圖標(biāo)記過程中定義空間順序。人體不同關(guān)節(jié)點的運動大致可分為向心運動、離心運動和靜止,因此本文中將關(guān)節(jié)點vti的領(lǐng)域集B(vti)劃分為3個子集:第1部分連接空間位置上比該關(guān)節(jié)點更遠(yuǎn)離人體頸部的相鄰關(guān)節(jié)點,包含離心運動特征;第2部分連接更靠近頸部相鄰關(guān)節(jié)點,包含向心運動特征;第3部分連接自身關(guān)節(jié)點,包含靜止特征。將1個圖分為了3個子圖,包含3種不同的運動特征,卷積核也從1個變成了3個,3個卷積核分別表達(dá)了不同的特征,使用每個卷積核對每個圖分別卷積,最后進(jìn)行加權(quán)平均得到最終的結(jié)果。
根據(jù)Yan等[15]的研究,在單幀駕駛員圖卷積模型中,將卷積神經(jīng)網(wǎng)絡(luò)模型類比到圖卷積網(wǎng)絡(luò)模型中:
在空間上,使用GCN來提取相鄰關(guān)節(jié)的局部特征,在時間上,采用時間卷積網(wǎng)絡(luò)(temporal convolutional network,TCN)來學(xué)習(xí)時間中關(guān)節(jié)變化的局部特征。將空間圖卷積網(wǎng)絡(luò)擴(kuò)展到時間上,使鄰域信息包含關(guān)節(jié)點的時間信息。
式中:Γ 為相關(guān)聯(lián)的幀數(shù)范圍;q為相鄰某一幀;l ST(vqj)為vti的鄰域。
本文采用圖卷積神經(jīng)網(wǎng)絡(luò)單層最終形式:
本文的算法是一個分類問題,將駕駛員行為分為正常駕駛行為和分心駕駛行為,在分心駕駛行為中又具體分為玩手機(jī)、喝水等9種分心行為。該算法的流程主要分為駕駛員姿態(tài)估計、物體檢測和行為識別,行為識別算法通過圖卷積提取駕駛員動作特征,同時融合關(guān)鍵物體信息的方法,獲得最終的分類結(jié)果。本文中的駕駛員行為識別算法整體框架如圖1所示。
(1)首先輸入為包含駕駛員的視頻片段,通過Openpose[17]對視頻中駕駛員進(jìn)行姿態(tài)估計,獲取每幀圖像駕駛員的關(guān)節(jié)點信息,包含點的位置坐標(biāo)和置信度。由于不同幀下關(guān)節(jié)點坐標(biāo)差異很大,須對駕駛員關(guān)節(jié)點坐標(biāo)進(jìn)行歸一化處理,將不同骨架序列縮放至統(tǒng)一的尺度特征。
(2)然后根據(jù)得到的骨架序列圖,按照時空姿態(tài)運動規(guī)律,構(gòu)建駕駛員時空圖,交替地使用圖卷積網(wǎng)絡(luò)和時間卷積網(wǎng)絡(luò),對空間和時間維度進(jìn)行變換,最后使用平均池化進(jìn)行下采樣,并用全連接層對特征進(jìn)行分類。
(3)同時使用Yolo-V3[18]對視頻片段中感興趣物體進(jìn)行識別,獲得物體類別信息和位置信息,通過物體信息對駕駛員行為進(jìn)行再判斷,得到最終分類結(jié)果。
圖1 算法流程圖
動作識別算法主要基于駕駛員的姿態(tài)特性。人體的骨架和關(guān)節(jié)軌跡對于照明變化和場景變化具有較強(qiáng)的魯棒性,且由于高度精確的深度傳感器或姿勢估計算法,不容易受圖像人數(shù)、人員體型、外觀和背景干擾的影響。本文中使用的人體姿態(tài)估計的方法是Openpose,該方法是美國卡耐基梅隆大學(xué)(CMU)基于卷積神經(jīng)網(wǎng)絡(luò)和監(jiān)督學(xué)習(xí)并以caffe為框架開發(fā)的開源庫,具有極好的魯棒性和實時性。在Openpose中,訓(xùn)練的人體COCO模型(圖2左)有18個關(guān)節(jié)點。
圖2 駕駛員姿態(tài)估計圖
考慮到駕駛員在正常駕駛情況下,攝像頭一般只能捕捉到駕駛員上半身圖像,且駕駛員動作重要信息大多表現(xiàn)在上半身。同時由于駕駛環(huán)境導(dǎo)致遮擋,下半身部分關(guān)鍵的檢測不可避免地會受到較強(qiáng)的干擾噪聲(錯誤檢測或未檢測到),從而對駕駛員的分心行為檢測造成巨大的干擾。為消除下半身對肢體捕捉的影響,本文設(shè)計的駕駛員姿態(tài)估計圖只考慮對上半身12個關(guān)節(jié)點進(jìn)行姿態(tài)估計(圖2):①頸部,②右肩,③右肘,④右手腕,⑤左肩,⑥左肘,⑦左手腕,⑧右眼,⑨右耳,⑩左眼,○1左耳,○12鼻子。
人類的運動起源于關(guān)節(jié),關(guān)節(jié)連接著兩塊骨頭,而兩塊骨頭的形狀、長度和位置決定了人體在實踐中如何運動。大多數(shù)情況下,駕駛員的動作取決于頭部和手部的運動,而有些關(guān)節(jié)點,如頸部位置是相對固定的,沒有明顯的坐標(biāo)變化。當(dāng)識別一個動作時,應(yīng)更關(guān)注產(chǎn)生動作的主要關(guān)節(jié)點。相對于次要關(guān)節(jié)點,主要關(guān)節(jié)點相對人體質(zhì)心的運動軌跡會對動作的識別產(chǎn)生很好的效果,同時還能排除次要關(guān)節(jié)點細(xì)微變化產(chǎn)生的噪聲干擾。在設(shè)計駕駛員的姿態(tài)估計圖時,不僅基于人體基礎(chǔ)骨架的連接,同時添加了如下關(guān)節(jié)點連接:即頸部分別與右手腕、左手腕、右耳、左耳的連接(圖2右)。
綜上所述,對駕駛員骨架模型可構(gòu)建時空圖G=(V,E),其中駕駛員關(guān)節(jié)點矩陣集合V={vti|t=1,…,T,i=1,…,N},T為幀數(shù),N為一幀內(nèi)關(guān)節(jié)點數(shù),該集合包含了駕駛員在時間和空間上的所有關(guān)節(jié)點。E表示圖中的邊集,邊集分為空間和時間上的邊集:空間上,在每一幀中按照本文設(shè)計的駕駛員姿態(tài)估計圖(圖2右)構(gòu)建空間邊集Es={vtivtj};時間上,不同幀之間同一關(guān)節(jié)點連接構(gòu)成駕駛員骨架關(guān)系的時序邊集Eτ={vtiv(t+1)i},代表一個特定的關(guān)節(jié)隨時間推移的運動軌跡。
圖1上半部分展現(xiàn)了基于圖卷積的駕駛員分心檢測網(wǎng)絡(luò)結(jié)構(gòu)(Dri-GCN)。通過Openpose提取每幀駕駛員上半身12個關(guān)節(jié)點坐標(biāo)(x,y)和置信度S,用元組(x,y,S)表示每個關(guān)節(jié)點,駕駛員骨架圖用包含12個元組的數(shù)組表示。由于圖卷積網(wǎng)絡(luò)模型不同節(jié)點之間共享權(quán)重,因此不同節(jié)點上的輸入數(shù)據(jù)比例須保持一致。在實驗過程中,由于不同幀之間關(guān)節(jié)點坐標(biāo)變化很大,須先將一個關(guān)節(jié)在不同幀下的位置特征進(jìn)行歸一化。
每個輸入序列皆可表示為(C,T,V)的張量。其中C表示關(guān)節(jié)點特征數(shù),為3;T為視頻序列長度,取300幀,長度不足300幀的視頻序列進(jìn)行循環(huán)填充得到;V表示估計關(guān)節(jié)點數(shù)量,為12。采用式(4)將所得張量與人體骨架圖的鄰接矩陣相乘,以進(jìn)行空間卷積。時間卷積采用大小為1×Kt的卷積核進(jìn)行卷積。模型由9層時空圖卷積組成,前3層輸出通道數(shù)設(shè)為64,中間3層輸出通道數(shù)設(shè)為128,最后3層輸出通道數(shù)設(shè)為256,其中第4、7層的時間卷積層為池化層。最后將輸出的256個通道數(shù)的輸出進(jìn)行平均池化,并用全連接層(FCN)對特征進(jìn)行分類,分類得到每類動作的置信度,根據(jù)置信度得到初步分類結(jié)果。
通過提取身體骨架信息來識別駕駛員行為,可過濾掉眾多冗余信息,但與此同時,許多關(guān)鍵信息也會被過濾掉,這些關(guān)鍵信息對于駕駛員某些動作的識別至關(guān)重要。通過“人+物”這種多信息模式的融合(Dri-GCN+obj),可更加精確地對駕駛員行為做出判斷,同時可以排除某些駕駛員行為的誤判。
使用Yolo-V3對駕駛員場景中的關(guān)鍵目標(biāo)進(jìn)行檢測。圖3為目標(biāo)檢測效果圖,該模型在COCO數(shù)據(jù)集上進(jìn)行訓(xùn)練,包括33萬張圖像,150萬個對象實例和80個對象類別,Yolo-V3網(wǎng)絡(luò)模型融合了3個不同的層,在小目標(biāo)檢測有非常好的效果。本文感興趣的目標(biāo)主要是與駕駛員動作相關(guān)的目標(biāo)(手機(jī)、水杯、瓶子),在識別時,目標(biāo)分類設(shè)為手機(jī)、水杯、瓶子和未檢測到感興趣目標(biāo)4類??紤]到非目標(biāo)物體的噪聲干擾,根據(jù)閾值去除可能性較低的目標(biāo),采用非極大值抑制方法(NMS)去除冗余目標(biāo)的影響。
圖3 目標(biāo)檢測效果圖
將關(guān)鍵目標(biāo)檢測結(jié)果與Dri-GCN結(jié)果進(jìn)行融合,對駕駛員行為進(jìn)行再判斷。通過檢測目標(biāo)范圍的感興趣目標(biāo),判斷駕駛員的某種分心行為,如檢測到水杯則判斷為喝水,然后與Dri-GCN檢測結(jié)果對比分析是否一致,如果一致則認(rèn)為分類結(jié)果正確。否則與Dri-GCN第2置信度檢測結(jié)果對比分析判斷是否正確,如果錯誤則與第3置信度結(jié)果對比。如果Dri-GCN前3置信度結(jié)果與感興趣目標(biāo)檢測結(jié)果不符,則認(rèn)為目標(biāo)檢測發(fā)生錯誤,依然采用Dri-GCN檢測結(jié)果。通過融合目標(biāo)檢測結(jié)果與駕駛員姿態(tài)信息識別結(jié)果,能更準(zhǔn)確判斷駕駛員分心行為。
為評估本文算法的效果,在StateFarm數(shù)據(jù)集和自制數(shù)據(jù)集上對ST-GCN、Dri-GCN和Dri-GCN+obj 3種模型訓(xùn)練后進(jìn)行測試。
3.1.1 StateFarm數(shù)據(jù)集[10]
StateFarm是Kaggle上檢測駕駛員分心競賽使用的數(shù)據(jù)集,同時也是第一個公開可用的駕駛員行為分類數(shù)據(jù)集。在StateFarm中,有來自26個人(不同種族的男性和女性的混合),其中每個人有10種行為(安全駕駛、用右手發(fā)短信、用右手打電話、用左手發(fā)短信、用左手打電話、調(diào)收音機(jī)、喝水、手從后面拿東西、整理頭發(fā)和化妝、和乘客說話)共260個剪輯(22 424個圖像)。研究人員提出的許多方法都是基于單個圖像分類,而本文的實驗是基于視頻的行為識別,因此將每個剪輯中的圖片制作成一個視頻,由于圖片數(shù)量有限,幀率為5 fps。
3.1.2 自制數(shù)據(jù)集
受到StateFarm的分心駕駛員競賽的啟發(fā),本文設(shè)計了一個遵循相同行為的類似視頻數(shù)據(jù)集,如圖4所示。在其他數(shù)據(jù)集中,都是將攝像頭安裝在副駕駛門檻梁上或駕駛員頭頂,這會造成副駕駛乘員對駕駛員拍攝產(chǎn)生遮擋或?qū)е屡臄z駕駛員不完整。因此,最終決定將攝像頭固定在車內(nèi)后視鏡上。本文設(shè)計的數(shù)據(jù)集由30位志愿者組成,包含不同身高和體型的駕駛員,在兩臺不同的車上和不同駕駛場景下進(jìn)行收集,如光線較強(qiáng)或較暗,同時模擬真實駕駛環(huán)境,在拍攝范圍內(nèi)添加了干擾物(后排乘客和旁邊行人)。該數(shù)據(jù)集共300個視頻剪輯,每個剪輯為3~10 s,幀率為30 fps。
圖4 自制數(shù)據(jù)集駕駛員行為示例
實驗平臺為Xeon E5 2620 V4,2.1 GHz,32 GB內(nèi)存,GTX 1070Ti 8 GB,實驗基于Ubuntu16.04LTS系統(tǒng),配套環(huán)境為CUDA8.0,CUDNN6.0。
訓(xùn)練過程中先將視頻分辨率調(diào)為340×256,然后通過Openpose將駕駛員姿態(tài)信息提取出來,歸一化后輸入GCN網(wǎng)絡(luò)進(jìn)行訓(xùn)練,實驗參數(shù)設(shè)置如下:網(wǎng)絡(luò)模型通過隨機(jī)梯度下降(SGD)進(jìn)行優(yōu)化,初始學(xué)習(xí)率設(shè)為0.01,動量為0.9,總共訓(xùn)練60個epoch,第20、30、40、50epoch學(xué)習(xí)率迭代下降0.1。訓(xùn)練過程中,前30個epoch迭代損失下降較快,迭代30個epoch后損失開始緩慢下降,到60epoch時基本達(dá)到收斂。
表1為3種模型在StateFarm上的測試結(jié)果,其中通過改進(jìn)的Dri-GCN達(dá)到了84%的準(zhǔn)確率,比ST-GCN提高了8個百分點,而通過融合目標(biāo)信息后,準(zhǔn)確率能達(dá)到90%。
表1 駕駛員行為分類在StateFarm上的結(jié)果 %
將數(shù)據(jù)集隨機(jī)分割成3種不同的訓(xùn)練/測試樣本,訓(xùn)練集和測試集的樣本數(shù)量比例為7∶3。本實驗分別對3種分割方式進(jìn)行評估,評價指標(biāo)為識別準(zhǔn)確率,并取3次結(jié)果的平均值作為最終結(jié)果。表2示出3種模型在3種不同分割方式上的識別率。由表看出,本文提出的方法Dri-GCN比ST-GCN平均提高了8.14個百分點,而融合物體信息后比STGCN平均提高了15.59個百分點。
將在自制數(shù)據(jù)集上的實驗結(jié)果用分類混淆矩陣表示,以描述不同種類行為的識別率。矩陣行表示正確的行為,列表示預(yù)測的行為,混淆矩陣的主對角線數(shù)值表示正確識別率,其他數(shù)值為錯誤識別率。矩陣外的行、列序號1~10分別代表第3.1節(jié)中所述的10種行為。
圖5~圖7分別為ST-GCN、Dri-GCN和Dri-GCN+obj在本文數(shù)據(jù)集上的混淆矩陣。由圖可見,3種方法在大多數(shù)行為方面都取得了不錯的效果,但小部分相似度較高的動作會產(chǎn)生較大的識別誤差。從圖5可見,ST-GCN在正常駕駛時,駕駛員的一些細(xì)微動作可能會被識別為其他動作,正常駕駛正確識別率僅為59.3%。而29.7%和7.3%的正常駕駛行為分別被誤識別為左手發(fā)短信和打電話,看反光鏡之類的正常駕駛行為也可能被誤識別為和乘客說話。而對于整理頭發(fā)與化妝這類手上動作和右手打電話、喝水也會產(chǎn)生較大的混淆,其中喝水和整理頭發(fā)與化妝的準(zhǔn)確率僅為66.7%和22%。由圖6看出,本文設(shè)計的Dri-GCN考慮到手和頭部相對質(zhì)心的運動,對人體行為感興趣點精確定位,在區(qū)分正常行駛的一些細(xì)微動作方面取得了不錯的效果,識別率提高了37個百分點,整理頭發(fā)與化妝的識別率提高了48.7個百分點。
圖5 ST-GCN實驗結(jié)果
圖6 Dri-GCN實驗結(jié)果
圖7 Dri-GCN+obj實驗結(jié)果
ST-GCN和Dri-GCN對喝水動作的識別效果都比較差,單純從手部軌跡來看,其與打電話具有極高的相似度,易產(chǎn)生混淆。從圖7看出,在Dri-GCN上加目標(biāo)識別后,通過對范圍內(nèi)水杯的識別,可以非常精確地區(qū)分喝水與其他動作,從而大幅度提高喝水動作的識別率,識別率達(dá)到100%。同時,通過對手機(jī)和水杯的識別,可使一些誤判為玩手機(jī)或喝水的動作得到更加準(zhǔn)確的判斷,如整理頭發(fā)和化妝的識別率提高到了92.7%。
綜上所述,本文設(shè)計方法在檢測駕駛員分心,并識別分心原因方面取得了較好的效果,同時檢測速度主要取決于駕駛員姿態(tài)估計速度,總速度約為20 fps,基本上能滿足實時性檢測要求。
針對分心駕駛問題,提出一種基于單目視覺的駕駛員分心判別模型,并識別駕駛員分心原因,主要得出如下結(jié)論。
(1)設(shè)計主要關(guān)注駕駛員頭部和雙手的姿態(tài)估計圖,并基于圖卷積網(wǎng)絡(luò)提取姿態(tài)估計圖在時間與空間上的信息特征,能有效提高駕駛員分心行為的識別準(zhǔn)確率。
(2)確定“人+物”多信息融合的方式對駕駛員分心原因進(jìn)行再識別,如通過水杯等關(guān)鍵物體識別能提高喝水等相應(yīng)動作的識別率,并排除其他動作的誤識別。
(3)制作了幀率為30 fps的駕駛員分心行為視頻數(shù)據(jù)集,并將本文算法在5 fps的StateFarm數(shù)據(jù)集和30 fps的自制數(shù)據(jù)集上進(jìn)行了驗證,平均準(zhǔn)確率分別達(dá)到了90%和93%,檢測速度約為20 fps,基本滿足實時性和準(zhǔn)確性的要求。