夏瀚笙,沈 峘,胡 委
(南京航空航天大學 能源與動力學院,江蘇 南京 210016)
近年來,隨著國內汽車保有量的增長,交通事故發(fā)生的頻率也在逐年增加。其中,駕駛員在駕駛過程中注意力不集中是導致交通事故發(fā)生的主要原因之一。駕駛員注意力不集中主要有兩個方面,分別是疲勞駕駛和分心駕駛。疲勞駕駛是駕駛員在感到疲倦的情況下仍然駕駛,駕駛員沒有足夠的精神狀態(tài)。與疲勞駕駛不同,駕駛員在分心駕駛時,仍然具有良好的精神狀態(tài),但是忙于其他事情,例如打電話,發(fā)短信,喝水等。如果駕駛員的駕駛狀態(tài)可以由車載設備檢測到,并及時地提醒駕駛員注意安全,則可以很好地避免事故的發(fā)生。
多年來,對駕駛員異常行為識別的研究一直是個熱門的方向。早期的研究[1-5]主要集中在識別駕駛員是否疲勞駕駛。采用的方式是要求駕駛員佩戴傳感器以獲得駕駛員的生理信息,例如血壓,心率和腦電波等。這些方法成本較高并且準確率低。更重要的是,侵入式的研究方法,會對駕駛員的駕駛行為造成干擾。隨著計算機視覺技術的發(fā)展,越來越多的研究人員圍繞計算機視覺的方法展開研究。非侵入式的,不會影響駕駛員的駕駛體驗,同時成本大大降低??衫冒惭b在車輛儀表盤上的相機來收集駕駛員的圖像,然后通過圖像的分析,判斷駕駛員狀態(tài)是否出現(xiàn)異常。
文獻[6]通過結合AdaBoost與核相關濾波算法進行人臉檢測及跟蹤,然后采用級聯(lián)回歸方法定位特征點,提取眼睛和嘴巴部分,再利用卷積神經(jīng)網(wǎng)對眼睛和嘴巴狀態(tài)進行識別,從而進行疲勞駕駛識別。文獻[7]基于膚色模型對駕駛人人臉進行檢測,然后利用基于PCA的人臉局部特征來識別駕駛員特征,判斷駕駛員是否有疲勞駕駛。
相比于疲勞駕駛,分心駕駛則更為常見,近年來,有關分心駕駛行為的研究逐漸增多。文獻[8]使用Faster R-CNN網(wǎng)絡[9]來檢測駕駛員的雙手位置,并判斷駕駛員手中是否拿著手機。文獻[10]建立以徑向基為核函數(shù)的駕駛人分心狀態(tài)判別SVM模型,采用遺傳算法(GA)優(yōu)化SVM模型懲罰參數(shù)C和核函數(shù)參數(shù)g。文獻[11]提出了基于反向雙目的駕駛狀態(tài)檢測方法。根據(jù)Hough算法進行車道線檢測和識別,計算車輛偏航率;同時采用多點透視算法對駕駛員頭部姿態(tài)進行估計;再建立基于高斯隸屬度函數(shù)模糊判斷規(guī)則,根據(jù)車輛偏航率與駕駛員頭部姿態(tài)對駕駛員駕駛狀態(tài)進行識別。
在著名的機器學習競賽網(wǎng)站Kaggle上,State Farm公司舉辦了一個關于分心駕駛識別的競賽。參加比賽的隊伍中,toshi-k隊伍利用檢測器檢測出駕駛員的身體輪廓,然后按照檢測出來的身體輪廓將圖片裁剪,再利用深度卷積網(wǎng)絡進行識別。Soteria公司提出的Soteria系統(tǒng)將VGG16網(wǎng)絡[12]的全連接層改為全局均值池化(global average pooling,GAP)以減少網(wǎng)絡參數(shù),同時防止因訓練數(shù)據(jù)不足而導致過擬合。
圖1為State Farm數(shù)據(jù)集的駕駛員行為示例??梢杂^察到,當駕駛員手握方向盤,同時正視前方時,他很大可能正專注于駕駛,如圖1(a)所示;當駕駛員低著頭,并且稍微抬起胳膊,他很有可能是在看手機、發(fā)消息,如圖1(b)所示;當駕駛員抬起胳膊,靠近耳朵,他很有可能是在打電話,如圖1(c)所示;當駕駛員抬起手靠近嘴巴時,他很有可能是在喝水或飲料,如圖1(d)所示。
因此,正確地識別駕駛員是否存在分心行為,關鍵在于卷積神經(jīng)網(wǎng)絡理解駕駛員的姿態(tài)行為。為此,文中提出一種使用駕駛員的人體關鍵點位置信息來幫助卷積神經(jīng)網(wǎng)絡識別駕駛員分心駕駛的方法。首先介紹Alpha Pose系統(tǒng),并利用該系統(tǒng)獲取駕駛員的人體關鍵點坐標位置。然后根據(jù)駕駛員上半身的9個關鍵點坐標,利用高斯公式生成9張關鍵點的熱力圖。最后基于VGG16網(wǎng)絡和ResNet50網(wǎng)絡[13],探討8種將熱力圖和卷積層的輸出特征融合的方式。
圖1 駕駛員行為示例
Alpha Pose系統(tǒng)是由上海交通大學提出的一個開源的多人姿態(tài)估計系統(tǒng),如圖2所示。
圖2 Alpha Pose系統(tǒng)
Alpha Pose系統(tǒng)采用的是自上而下的形式,由四部分組成,即Faster RCNN網(wǎng)絡、空間變換網(wǎng)絡(spatial transformer network,STN)[14]、PyraNet[15]以及姿態(tài)極大值抑制模塊。Faster RCNN用于檢測人的位置,輸出的是人的位置框坐標??臻g卷積網(wǎng)絡用來調整Faster RCNN得到人的位置框。PyraNet是Stacked Hourglass網(wǎng)絡[16]的改進版,用來獲取人體關鍵點的坐標。姿態(tài)極大值模塊用來消除Faster RCNN檢測出來的多余人體框位置,獲取最終的人體關鍵點坐標。
通過Alpha Pose系統(tǒng),可以精確地得到輸入圖片中人物的人體關鍵點的坐標位置。分心駕駛行為主要依據(jù)的是駕駛員上半身的姿態(tài),因此,文中只使用Alpha Pose系統(tǒng)獲得駕駛員上半身的9個關鍵點位置,分別是:頭頂、頸部、胸膛、左肩、右肩、左肘、右肘、左腕、右腕。
為了將關鍵點的位置信息融入到卷積網(wǎng)絡,需要根據(jù)9個關鍵點的坐標位置,由高斯公式生成9張熱力圖。高斯公式如下所示:
Response=exp(-((x-i)2+(y-j)2)/2σ2)
(1)
其中,x,y是熱力圖中每個像素點的坐標;i,j是對應的關鍵點的坐標;σ是關鍵點響應的范圍。熱力圖中所有像素點的值在[0, 1]之間,距離關鍵點的位置越近,響應值越大。
根據(jù)高斯公式生成的9張熱力圖,如圖3所示。
圖3 熱力圖
在深度卷積網(wǎng)絡中,隨著卷積層數(shù)的增加,卷積層學習到的特征也逐漸從低階發(fā)展到高階。例如,在常見的分類卷積網(wǎng)絡中,網(wǎng)絡的第一個卷積層學習到的可能是邊、角、曲線等低階特征,而第二個卷積層學習的則是第一個卷積層輸出的低階特征的組合,如半圓、矩形等。因此,將姿態(tài)信息(即熱力圖)和卷積網(wǎng)絡的不同層的特征圖進行融合,產(chǎn)生的效果也不一樣。文中以VGG16網(wǎng)絡和ResNet50網(wǎng)絡為基礎網(wǎng)絡,嘗試8種結構將熱力圖融合到不同的卷積輸出層中,以獲得最好的實驗效果。VGG16網(wǎng)絡結構和ResNet50網(wǎng)絡結構如圖4所示,實驗中需要將最后一個全連接層的輸出數(shù)改為10。
輸入:224×224(RGB)Conv1.conv3-64 conv3-64Pool1(Max)Conv2.conv3-128 conv3-128Pool2(Max)Conv3.conv3-256 conv3-256 conv3-256Pool3(Max)Conv4.conv3-512 conv3-512 conv3-512Pool4(Max)Conv5.conv3-512 conv3-512 conv3-512Pool5(Max)FC4 096 FC4 096 FC1 000
(a)VGG16網(wǎng)絡
(b)ResNet50網(wǎng)絡
圖4 VGG16網(wǎng)絡模型和ResNet50網(wǎng)絡模型
圖4中,Conv1.表示網(wǎng)絡第一階段,Conv2.表示網(wǎng)絡第二階段,以此類推。Conv3-64表示卷積操作,其中卷積核大小為3×3,輸出通道數(shù)為64,以此類推。Pool表示池化操作,其中Max是最大值池化,Average是均值池化。FC表示全連接層。
基于VGG16的4種結構分別是:
結構a:9張熱力圖和3通道的RGB圖像串接,通道數(shù)變?yōu)?2,作為Conv1.的輸入。
結構b:9張熱力圖經(jīng)過1×1的卷積,輸出尺寸為112×112、通道數(shù)為64的特征圖,和相同尺寸的Pool1的輸出特征圖相加,作為Conv2.的輸入。
結構c:9張熱力圖經(jīng)過1×1的卷積,輸出尺寸為56×56、通道數(shù)為128的特征圖,和相同尺寸的Pool2的輸出特征圖相加,作為Conv3.的輸入。
結構d:9張熱力圖經(jīng)過1×1的卷積,輸出尺寸為28×28、通道數(shù)為256的特征圖,和相同尺寸的Pool3的輸出特征圖相加,作為Conv4.的輸入。
基于ResNet50的4種結構分別是:
結構e:9張熱力圖和3通道的RGB圖像串接,通道數(shù)變?yōu)?2,作為Conv1.的輸入。
結構f:9張熱力圖經(jīng)過1×1的卷積,輸出尺寸為112×112、通道數(shù)為64的特征圖,和相同尺寸的Conv1.的輸出特征圖相加,作為Pool1的輸入。
結構g:9張熱力圖經(jīng)過1×1的卷積,輸出尺寸為56×56、通道數(shù)為64的特征圖,和相同尺寸的Pool1的輸出特征圖相加,作為Conv2.的輸入。
結構h:9張熱力圖經(jīng)過1×1的卷積,輸出尺寸為56×56、通道數(shù)為256的特征圖,和相同尺寸的Conv2.的輸出特征圖相加,作為Conv3.的輸入。
損失函數(shù)采用的是Softmax損失,如式2所示:
(2)
其中,N是批量的大小,n是樣本類別數(shù);xi表示第i個樣本的特征向量,yi為其對應的標簽;Wj是類別j類別對應的權值,bj是類別j對應的偏置,Wyi是類別yi對應的權值,byi是類別yi對應的偏置。
State Farm是State Farm公司在Kaggle上發(fā)布的一個競賽數(shù)據(jù)集。它包含81個駕駛員,共102 150張圖。所有的圖片尺寸都是640×480像素。駕駛員的行為分為10個類別,分別是:安全駕駛、左手發(fā)信息、右手發(fā)信息、左手打電話、右手打電話、調收音機、喝水或飲料、向后拿東西、化妝或者抓耳撓腮、和乘客說話。
該數(shù)據(jù)集的圖片都是從視頻上截取的視頻幀,同一個駕駛員所對應的圖片高度相關。因此為了驗證實驗的準確性,訓練和測試數(shù)據(jù)需要按照駕駛員來分,同一個駕駛員對應的所有照片只能是在訓練集和測試集中選其一。
文中選擇26個駕駛員對應的照片用做測試集,約占總的圖片數(shù)的22%,剩下的55個駕駛員對應的照片作為訓練集,約占總的圖片數(shù)的78%。
文中實驗均在Caffe框架上進行。訓練過程中,所有圖片首先被縮放到224×224尺寸。然后做數(shù)據(jù)增廣,包括隨機旋轉(最大旋轉角30度),隨機水平翻轉。
訓練參數(shù)上,每一批量的訓練樣本數(shù)為128,動量為0.9,權重衰減為0.000 5,使用在ImageNet上訓練好的VGG16模型進行微調,總共訓練15個epoch,初始學習率為0.01,分別在5個epoch和10個epoch的時候下降一次,下降因子為0.1。
8種網(wǎng)絡結構的實驗結果如表1所示。
表1 4種網(wǎng)絡結構的實驗結果對比
將Toshi-k的方法和Soteria系統(tǒng)的方法在同樣的數(shù)據(jù)集上進行訓練和測試,結果如表2所示。
在VGG16網(wǎng)絡結構中,結構a和結構b相比于原始的VGG16網(wǎng)絡不但沒有提升,反而有所下降。結構c的提升最明顯,結構d略有提升。原因在于人體關鍵點的信息屬于高階特征,在VGG16網(wǎng)絡結構中,如果直接將熱力圖信息和原圖或者Pool1層輸出的特征圖進行融合,反而會對后面網(wǎng)絡的特征學習造成干擾。而到Pool3時,由于輸出的通道數(shù)有256個,遠大于熱力圖的9個通道數(shù),同時特征圖的變小,導致姿態(tài)信息對網(wǎng)絡的幫助效果很小。
同樣,在ResNet50網(wǎng)絡結構中,結構e和結構f相比于原始的ResNet50,性能下降。結構g性能提升明顯,結構h性能略有提升。因為直接將熱力圖信息和原圖或者Conv1.階段輸出的特征圖進行融合,會對后面網(wǎng)絡的特征學習造成干擾。而到Conv2.階段,雖然輸出的特征圖尺寸沒變,但是通道數(shù)有256個,減弱了姿態(tài)信息對網(wǎng)絡的效果提升。
可以看出,文中提出的結構g性能要優(yōu)于Soteria系統(tǒng)和Toshi-k方法。
由于駕駛員是否出現(xiàn)分心駕駛行為和駕駛員的姿態(tài)密切相關,因此文中提出通過在VGG16網(wǎng)絡中添加駕駛員的姿態(tài)信息,來幫助識別駕駛員的分心行為。為了驗證方法的有效性,在State Farm數(shù)據(jù)集上進行了實驗驗證,盡管實驗結果比較理想,但是文中的工作仍有一些不足之處。首先,訓練的樣本量較少,沒有充分利用深度網(wǎng)絡的學習能力,特別是有全連接層的網(wǎng)絡,在訓練的時候需要謹慎調參,防止過擬合;其次,數(shù)據(jù)集拍攝的角度是在駕駛員的右側,左邊有時遮擋很嚴重,影響了識別的效果。因此,接下來的工作可以圍繞增加數(shù)據(jù)量以及數(shù)據(jù)的復雜程度,嘗試ResNet101等更為深層的網(wǎng)絡來提高識別的效果。