高尚兵,張瑩瑩,王 騰,張秦濤,劉 宇
(1.淮陰工學院 計算機與軟件工程學院,江蘇 淮安 223003;2.江蘇省物聯網移動互聯網技術工程實驗室,江蘇 淮安 223001)
全球每年在交通事故中受傷的人數超過1 000萬人[1],許多交通事故是分心駕駛導致,中國交通年鑒的統計數據顯示,我國大部分的交通事故是由于駕駛員的駕駛行為不當或者行為違規造成的,根據美國高速公路安全管理局(national highway traffic safety administration,NHTSA)發布的調查結果顯示,因駕駛員分心而導致的交通事故人員傷亡占死亡人數的64.4%[2]。無論國內外,在駕駛員行車過程中對其行為進行識別都非常重要,識別的實時性和準確性則是輔助駕駛安全的要素之一,可以在一定程度上減少交通事故的發生。因此,駕駛員分心行為檢測在自動駕駛領域和計算機視覺方向上都有廣闊的研究前景[3]。
盡管駕駛員分心行為識別是人類動作識別[4]的一個通用問題,但是由于駕駛員分心時體態差異細微,目前用于人體動作識別的方法并不適用于駕駛員分心識別。雖然很多研究都致力于對各種分心行為進行檢測,且具有一定的效果[5-6],但是大多都采用CNN結構對駕駛員行為進行檢測[7],一方面模型較大而且檢測精度不高;另一方面通過CNN結構更多提取到的是局部特征,不能全面地檢測駕駛員行為,而有些研究者通過加大卷積核尺寸來擴大感受野,這會加重網絡負擔。
提出了一種基于BiViTNet的駕駛員行為識別方法,具體貢獻如下:①大部分的CNN結構為了擴大感受野而選用更大尺寸的卷積核,參數量和計算量也隨之成倍地增加,因此筆者提出了雙分支并行的輕量級神經網絡,將基于CNN的局部特征和基于ViT的全局特征相結合,以增強表示學習;②采用雙分支并行結構,CNN Branch和ViT Branch可以最大限度地保留局部特征和全局表示;③為了使網絡更貼合實際,數據集來自于交通監管平臺的車內多視角監控視頻,不僅基于真實的駕駛環境,而且多視角監控相對于單一攝像頭所采集的數據而言更加全面。
駕駛員分心行為檢測已經得到了廣泛的關注,過去幾年研究者已經提出了多種方法。
根據數據采集方式的不同,可以分為接觸式傳感器識別法和非接觸式傳感器識別法[8]。接觸式傳感器識別法需要駕駛員佩戴特殊的設備來采集駕駛員的生理信息和肢體運動狀態,這種方法可能會對駕駛員的正常駕駛行為造成一定的干擾。非接觸式傳感器識別法主要通過相機、壓力傳感器等來采集數據,分析駕駛員的駕駛狀態,這種方法具有良好的部署便利性。采用的是非接觸式傳感器識別法,通過單目相機采集駕駛數據。
根據所采用的算法不同,可以分為傳統機器學習方法和深度學習方法。在之前的研究中,很多研究者通過傳統機器學習的方法對駕駛員分心行為進行檢測,YAN Chao等[9]通過金字塔方向梯度直方圖和隨機森林分類器對駕駛員的分心行為進行檢測。
近年來,由于卷積神經網絡已在多個領域取得了巨大成功,很多研究者也將其用在駕駛員分心行為檢測任務上,PENG Xishuai等[10]先通過VGG-19網絡從采集的駕駛數據中提取單一時刻的語義信息,再通過LSTM(long short term memory)網絡對駕駛員的分心行為進行檢測;HU Yaocong等[11]使用多流卷積網絡來提取不同尺度的特征,并將這些特征進行融合最后進行分心行為檢測。雖然在深度學習方法研究中,有針對全局與局部相融合的方法,但未有人將其用于駕駛員分心行為檢測領域。
以上方法雖然都基本可以對駕駛員的分心行為進行檢測,但是仍存在一些問題:①所采用的數據集一般來自于實驗條件下,跟真實駕駛場景下的數據有一定的誤差,所以數據應該盡量貼近真實駕駛環境;②大多數網絡的參數量和計算量比較大,很難達到實時檢測的要求;③檢測的準確率不高也是普遍存在的問題。因此,筆者提出一種能精確識別多種駕駛員分心行為的輕量級神經網絡BiViTNet。
CNN和Transformer在特征獲取方面存在一定的差異,前者具有局部性,而后者具有全局交互特性,將兩者結合可以綜合局部和全局的視覺表征信息,從而提高網絡對特征的學習和表達能力。因此,BiViTNet結合CNN和Transformer,采用雙分支并行結構,如圖1。
第1個分支采用卷積結構,重點關注局部特征,該分支主要包含3個模塊,分別是Stem模塊、殘差過渡模塊和局部感知模塊;第2個分支采用ViT結構,雙分支在保留局部特征和全局表示的同時進行雙向特征交互,最后將兩個分支的特征進行融合。特征融合時,采用add函數,讓每一維度下的特征信息量增加,這有助于最后的分類。

圖1 BiViTNet結構Fig.1 Structure of the BiViTNet
2.1.1 Stem模塊
CNN Branch整體基于特征金字塔架構[12],首先通過Stem模塊處理輸入,Stem模塊主要是用于提取圖像的初始局部特征。由于CNN Branch重點關注圖像的局部特征,所以不用像其他網絡那樣為了擴大感受野而采用大卷積核,因此一定程度上減少了參數量。Stem模塊均采用3×3的卷積并結合最大池化,將圖像大小縮放到原來的1/4。Stem模塊的結構如圖2。

圖2 Stem模塊結構Fig.2 Structure of the stem module
2.1.2 殘差過渡模塊
送入CNN Branch中的圖像經過Stem模塊處理之后進入Transition模塊。為了保證實時性且使參數量和運算成本都盡可能地比較低,Transition模塊采用深度可分離卷積,包括逐通道卷積(depthwise convolution)和逐點卷積(pointwise convolution)。
標準卷積的參數量(parameter,Ps)和計算量(Fs)為:
Ps=K2×M×N
(1)
Fs=Ho×Wo×M×K2×N
(2)
深度可分離卷積的參數量(PD)和計算量(FD)為:
PD=K2×M+M×N
(3)
FD=K2×Ho×Wo×M+Ho×Wo×M×N
(4)
所以,標準卷積和深度可分離卷積參數量的比值(P′)和計算量的比值(F)為:
(5)
(6)
式中:Ho和Wo分別為輸出特征圖的高和寬;M為輸入特征圖的通道數;K為卷積核尺寸;N為卷積核個數。通過式(5)和式(6)可以看出使用深度可分離卷積代替標準卷積操作,可以顯著降低參數量和計算量。
在Transition模塊中采用SiLU激活函數。除使用深度可分離卷積外,還采用了殘差結構,一方面可以保證長距離的信息不丟失,另一方面也可實現不同層級間的特征交互。Transition模塊的結構如圖3。
2.1.3 局部感知模塊
CNN Branch中的局部感知模塊(local sensing module,LSM)主要是為了高效低價地提取圖像的局部特征。LSM先使用1×1卷積,將經過最大池化后的特征圖從低維空間映射到高維空間中,以提取到更多信息。為了在獲取局部特征的同時減少參數量和計算量,LSM也采用深度可分離卷積。
LSM中并未使用更大的卷積核,也沒有使用更寬的網絡結構,而是簡單的單分支結構,這是因為CNN Branch只是用來獲取圖像的局部特征,只用1×1卷積和3×3卷積搭配就可以完成這一任務,所以不需要通過更大的卷積核或者更寬的網絡結構來擴大感受野范圍,同時這樣也可以降低網絡的參數量。CNN Branch不能捕獲到的全局信息則通過ViT Branch和雙向特征交互模塊去彌補。LSM的結構如圖4。

圖4 LSM結構Fig.4 Structure of the LSM
由于CNN Branch為了減少參數量,均采用1×1和3×3的卷積核,感受野比較小,所以ViT Branch建立全局依賴彌補CNN Branch的不足。
ViT是受Transformer的啟發[13],將其直接從NLP領域轉換到了CV領域。ViT塊的結構如圖5。ViT Branch的結構如圖6。

圖5 ViT結構Fig.5 Structure of the ViT

圖6 ViT Branch結構Fig.6 Structure of the ViT branch
ViT Branch包含3個ViT塊,通過控制每個階段輸入的圖像塊大小和被劃分的圖象塊大小來獲得不同感受野范圍的特征信息,每個ViT塊的最后并不做分類,而是通過雙向特征交互模塊(bidirectional feature interaction module,BiFIM)串聯接入下一個ViT塊,并通過BiFIM模塊和ViT結合獲得不同層級的語義信息。最后,將ViT Branch和CNN Branch進行特征融合后再進行分類,這樣做可以最大限度地保留局部特征和全局表示,并實現局部與全局視覺表征信息的交互,較好地進行駕駛員分心行為檢測。
CNN Branch和ViT Branch之間通過雙向特征交互模塊BiFIM實現局部特征和全局表示之間的雙向融合。BiFIM包括兩部分,分別是特征對齊模塊(feature alignment module,FAM)和采樣模塊。由于經過Transformer后的特征維度和卷積后的特征維度不匹配,所以用FAM模塊在兩種特征維度間互相轉換并通過1×1卷積實現通道匹配;同時,還需要上下采樣以便于CNN Branch和ViT Branch特征的融合。因此,BiFIM一方面進行特征維度轉換以實現ViT塊的串聯,另一方面在CNN Branch和ViT Branch之間建立雙向特征交互。BiFIM的結構如圖7。

圖7 BiFIM結構Fig.7 Structure of the BiFIM
使用的數據來自實際場景下的車內多視角監控視頻,首先,將長監控視頻中的分心行為剪輯成短視頻,然后對這些短視頻逐幀截取,并從中選擇代表性的幀,最后對選取出的每一張圖片進行分心行為類別標注。在進行數據標注時為了不引起歧義,對于安全駕駛和左顧右盼這兩個類別分別人工選取代表性更強的幀進行制作,駕駛員視線保持正前方,操作符合規范的圖像標定為正常駕駛;駕駛員視線既不在正前方和左右后視鏡,也沒有觀察路況,而將頭探出窗外、低頭或向后扭頭的圖像標定為左顧右盼。筆者所采用的數據集分為5個類別,總共包括43 495張圖片,其中訓練集和驗證集按照7∶3的比例進行劃分。圖8為駕駛員分心行為數據集的示意圖,表1為自建的分心駕駛數據集詳細說明。

圖8 數據集示意Fig.8 Schematic diagram of the dataset

表1 數據集詳細信息Table 1 Details of the dataset
多視角的監控一方面雖然提升了數據的豐富度,相對于單一攝像頭所采集的數據更加全面,但是另一方面由于多視角的存在,需要網絡從不同的角度去判定同一分心行為,這就要求網絡提取更多更全面的特征,也給檢測帶來了很大挑戰。因此,結合CNN和ViT兩者的優勢,創建兩個分支,并在兩個分支之間進行不同維度特征的交互以同時關注局部特征和全局特征。以C2打電話為例的多視角監控如圖9。

圖9 多視角監控Fig.9 Multi-view monitoring
為了加快網絡的訓練過程,對數據集進行了預處理。首先,將圖像的大小統一轉換為224×224,然后使用縮放、裁剪、翻轉和增減對比度的方法進行數據增強。
為了評價BiViTNet的性能,使用以下4個指標對該網絡進行評估,分別是準確率(A)、精度(P)、召回率(R)和F1分數(F1),這4個評價指標的定義為:
(7)
(8)
(9)
(10)
式中:TN、TP、FN和FP分別為真反例、真正例、假反例和假真例。
本實驗使用的深度學習框架為Python3.8和pytorch 1.10,操作系統為Centos 8.0,GPU為Tesla V100,內存大小16 G。對模型設置動量為0.9,訓練批次大小為16,訓練輪次為64,初始學習率為0.001,學習率每隔10輪變為原來的0.5,并使用隨機梯度下降(SGD)和交叉熵損失函數對網絡進行訓練,更新網絡模型的權重。
BiViTNet網絡在訓練過程中的訓練集和驗證集的準確率和損失變化如圖10。從圖10中可以看出,當訓練達到50個迭代次數之后網絡開始趨于平緩收斂,在訓練的過程中不管是準確率還是損失都沒有過擬合;同時在訓練過程中,曲線基本上不表現噪聲,在整個上升和下降的過程中,除了最開始的3~4次迭代次外總體上表現平滑,這也說明了筆者搭建的BiViTNet模型具有較好的魯棒性,比較適合進行駕駛員分心檢測任務。

圖10 訓練中的數據變化情況Fig.10 Data changes during training
為了更詳細地展示BiViTNet的效果,筆者分別取C0正常駕駛、C1左顧右盼、C2打電話、C3玩手機、C4抽煙這5種分心駕駛行為在4項評價指標上的表現做詳細分析,各項指標的數據如表2。

表2 驗證BiViTNet的評價指標Table 2 Evaluation index of verifying BiViTNet %
從表2中可以看出,C2類別代表的打電話無論是準確率、精度、召回率還是F1分數都是最高的。C1類別代表的左顧右盼相比于其他類別而言準確率較低,結合表1,可以發現C1類別和C3類別數目相近,因此這與所采集照片的數目關系不大,這可能是由于駕駛員左顧右盼與正常駕駛時的體態差異很小,只有頭部微小的扭動而身體其他部分幾乎沒有區別,多數要通過臉部的變化才能區分,因此十分容易和正常駕駛混淆。
在自建多視角駕駛員數據集的測試集上,采用相同的訓練策略,將筆者提出的方法和一些常見的網絡模型及方法進行比較。BiViTNet網絡與CNN網絡和ViT網絡對比的實驗結果分別如表3和表4。

表3 與CNN系列網絡的對比Table 3 Comparison with the CNN series network

表4 與ViT系列網絡的對比Table 4 Comparison with the ViT series network
從表3可以看出,與CNN系列網絡相比,筆者提出的BiViTNet模型具有一定的優勢,相比于CNN系列網絡中性能最高的MobileNet模型,筆者所提BiViTNet的準確率達到97.18%,相比于VGG、ResNet-50和DenseNet模型在計算量上有明顯的降低,計算量(multiply-accumulate operations,MAdds)更是達到了數量級的下降。
從表4可以看出,相較于經典的ViT模型和CrossViT模型,提出的BiViTNet模型展現出較好的實驗效果,ViT Branch的驗證準確率達到96.74%,整個模型的驗證準確率更高,而且在模型大小和參數量上都有明顯的降低,綜合性能較好。
為了便于觀察各類別的效果,將BiViTNet模型分別與DenseNet模型和CrossViT模型進行更細節的對比,如表5和表6。

表6 與CrossViT詳細對比Table 6 The detailed comparison with CrossViT %
從表5和表6的詳細對比可以看出,所提的BiViTNet模型在整體效果和各類任務上分別有不同程度的提升,準確率和召回率基本上都有所提高。相較于DenseNet模型,BiViTNet模型補充了全局視覺表征信息;相較于CrossViT模型,BiViTNet模型增強了捕獲局部特征的能力。因此,筆者所提模型信息表達更為全面,檢測效果也相對更好。單獨使用CNN Branch和ViT Branch進行消融實驗,效果如表7。

表7 雙分支消融對比Table 7 Comparison with dual branch ablation
從表7結果可以看出,兩個分支都具有較高的準確率,但是由于實驗是在沒有任何預訓練的基礎上進行的,而且數據集的規模也沒有特別大,所以ViT Branch的準確率要比CNN Branch略微遜色。由于BiFIM可以強化全局依賴,同時保留全局表示中的局部細節信息,所以通過BiFIM在兩個分支之間建立連接后,模型的準確率比單獨的任何一個分支都要高。所提出的BiViTNet模型達到了較好的實驗效果,準確率達到97.18%。
對于駕駛員分心行為檢測的任務,提出了BiViTNet,該網絡由兩個分支組成,兩個分支各自有不同的側重點,并不斷進行雙向特征交互,最后對駕駛員的分心行為進行檢測。實驗結果表明,BiViTN參數量和計算量都較低,準確率達到97.18%,兩個分支的結合可以有效地將局部和全局信息進行編碼,實現局部與全局視覺表征信息的交互,可以快速準確地進行駕駛員分心行為檢測,輔助駕駛員安全行車,同時也為進一步的研究打下了良好的基礎。BiViTNet雖然可有效提高檢測的準確率,但若是實驗數據的背景過于復雜可能會在一定程度上影響檢測效果,因此,在保證實時性的前提下,解決上述問題是未來研究工作的重點。