(西南交通大學 機械工程學院, 成都 610031)
隨著我國經濟高速全面發展,鐵路運輸能力的快速提高,鐵路運輸在交通運輸的地位愈為重要。確保鐵路安全平穩成為鐵路運輸部門的一項重要工作。在眾多的鐵路安全事故中,人始終是影響鐵路行車安全的重要因素。文獻[1]總結了1990~2009年10年中重大列車事故原因,其中人為因素占總事故數目的64.76%。因此,對鐵路系統中的人加強監管就顯得極為重要,尤其是直接關系到整車安全的機車駕駛員。
當前,我國鐵路管理部門在原有安全監測設備基礎上重新設計,構建了機車車載系統、地面專家系統一體化的機車安全防護體系(6A系統)[2]。這套系統在每輛機車的機車駕駛室后方安裝了攝像頭以加強對駕駛員的監督。當列車開始行駛后,攝像頭會開啟并記錄駕駛室人員視頻信息。當列車停止運行后,鐵路管理人員會以人工瀏覽察看視頻的方式進行分析,用于司機的績效評定和事故后責任的分析。可見,當前的駕駛室視頻系統只能做到對駕駛員事先的心理提醒,無法對駕駛員在機車運行過程中不當行為進行實時提醒。隨著深度學習在圖像處理方面的發展應用,使用計算機實現自動司機行為識別已經成為了可能。搭建一種車載智能監控系統,實現實時司機行為識別,如檢測出問題便及時將圖片傳回地面鐵路管理人員,便成為一項極有意義的工作。
由此,本文融合目標檢測和關鍵點檢測兩種深度學習算法,創新實現了一種可以同時檢測司機人體關鍵點和手機的神經網絡,通過分析人體關節角度和人體關鍵點與手機目標的位置關系對司機行為進行了分類識別,并利用半精度加速和層級融合的方法對模型進行了加速和壓縮,最終將其成功的部署在嵌入式邊緣計算設備上,實現了較好檢測效果下的實時運行。
本文將需要檢測的司機行為分為以下幾類:1)離崗:駕駛室內未檢測到司機;2)使用手機:司機使用手機并處于打電話或者玩手機的狀態;3)進行手勢:司機做出右手向前方示意或者高舉右手握拳的規定行為;4)站立:司機處于站立狀態;5)坐:司機處于正常坐下狀態;6)瞌睡:司機趴在駕駛臺上或后仰在椅子上。
為能夠確保數據的多樣性, 我們采集多組列車駕駛室原始視頻數據進行抽幀提取訓練圖片以及測試圖片,標記其中出現司機人體關鍵點和手機目標框。針對司機人體關鍵點,根據實際需求,采用和AI Challenger數據集[3]相近的標注結構,標注每個人的目標框和人體的14個關節,分別為頭部、脖子、左右肩、左右肘、左右手腕、左右髖、左右膝和左右踝部,對于可見、可知不可見和不可知不可見的人體關鍵點分別以數字“0”、“1”、“2”進行區分,標注如圖1所示。

圖1 人體關鍵點標注
我們共提取了2 750張不同司機姿態的圖片,共標注了4 379個人體對象和1 139個手機目標。其中共有主司機目標3 015個,副司機目標1 299個,其他人員65個。司機站立姿態1 315個,正常坐姿2 734個,瞌睡330個。司機進行手勢對象1 590個。并將其按10∶1的比例隨機劃分為訓練集和測試集。
根據需求,本文中的模型需要同時檢測出人體關鍵點和手機目標框才可以進行司機是否使用手機的判別。傳統意義上這是兩類截然不同的圖像識別任務,需要分別運行人體關鍵點檢測網絡和目標檢測網路完成識別。然而同時運行兩種網絡并保持輸出結果的實時性,無疑需求強大的計算能力。在每臺機車上部署高性能主機耗價昂貴,而機車也未必能滿足計算機運行所需的穩定的環境和電力需求。而選擇遠程部署實時分析的方法,當前我國的網絡建設也很難滿足實時傳輸機車視頻的需求。因此,本文融合目標檢測和關鍵點檢測兩種深度學習算法,基于目標框檢測實現了一種可以同時檢測司機人體關鍵點和手機目標的神經網絡。
目標檢測算法可以分為單階段和雙階段兩類,單階段目標檢測通過神經網絡提取圖片特征,輸出長寬為原始圖片n分之一的特征圖,特征圖每個點回歸預測固定個數的目標框的中心點、長寬、置信度和類別,通過非最大抑制算法[4]得到最終的目標框和目標類別,如Yolo[5]和SSD[6]網絡。人體關鍵點檢測算法根據先檢測關鍵點再連接成人體還是先檢測出人體再檢測每個關鍵點可以分為自底而上和自頂而下兩種方式,其都是通過神經網絡對人體關鍵點位置進行直接預測。自頂而下一般具有相對較高的準確率,但是處理速度較低,而且當出現多人時,處理速度會出現明顯的波動,不利于實時檢測,近些年代表性的算法為Alphapose[8]。自底而上的處理速度較快,不受人數多少的影響,其經過神經網絡處理后分別得到兩張特征圖,分別為人體關鍵點的置信度和用作指示關鍵點的指向作為肢體連接的概率,通過最大匹配的方法連接各個人體關鍵點組成人體姿勢。近些年代表性的算法為Openpose[7]。
Pose proposal network[9]借鑒單階段目標檢測的思想,將人體姿態估計轉換為目標檢測問題,即將每個人體關鍵點標注的人體關節視為一個目標框,從圖像中直接回歸出包含人體關鍵點的目標框。將目標框的中心點視為要預測的人體關鍵點,通過計算肢體連接概率對關鍵點進行連接,得到人體姿態。相關實驗[9]表明,Pose proposal network在mpii、coco等主流數據集上取得了和openpose等以直接預測關鍵點的人體姿態估計算法不相上下的成績,而模型的計算量較小,運行的速度大為提高,適于計算受限情況下的部署。
由此,我們可以通過目標框識別將人體關鍵點和手機識別統一起來,通過一個主干網絡統一提取圖片中的特征信息,分別得到H×W大小的包含人體關鍵點、手機目標框的特征圖B和只包含肢體關系的特征圖C,如式(1)所示:
C={{p(ki,ki+1,x,x+Δx)}i}i∈{1,....H×W},(ki,ki+1)∈L
(1)

(2)

特征圖B通過conf確定目標框,并通過ox、oy、w、h得到每個目標框的位置大小后,通過非最大值抑制去除重復的目標框,將人體關鍵點代入肢體關系特征圖C中進行二分圖匹配連接,區分得到不同的人類個體,最后輸出人體姿勢和手機目標,如圖2所示。

圖2 融合模型設計
為了滿足模型在嵌入式設備上運行的需求,本文通過使用TensorRT框架[10]完成對模型的壓縮提速。TensoRT是英偉達公司為滿足深度學習的高速推理需求所推出的只用于部署推理的神經網絡框架。其通過實現模型簡化和降低模型運行計算復雜度對模型推理速度進行加速和對模型體積壓縮,使嵌入式設備也可以滿足實時運行深度網絡的需求。
TensorRT的模型簡化通過整合卷積層(convolution layer)和批歸一化層(batch normalization layer)為一層實現。神經網絡中,卷積層運算可以表示為:
xl+1=W*xl
(3)
其中:xl代表特征圖輸入,xl+1代表特征圖輸出,W代表卷積核參數,*代表卷積運算。而批歸一化層可以表示為:
(4)
其中:μ代表事先學習中保存的訓練集xl+1的均值,σ代表xl+1的標準差,γ、β代表兩個調節因子。可以將(3)和(4)融合為:
(5)

TensorRT降低模型運行計算復雜度通過降低模型運行時計算的字節位數實現。神經網絡運行時默認采用單精度32位浮點數進行計算,而TensorRT可以將模型更換為半精度16位浮點數乃至8位整數進行推算并保存模型參數,調用設備的GPU實現模型提速。相關實驗表明,當模型采用16位浮點數計算時,模型運行速度有近乎原有速度數倍的提升,而模型的精度幾乎沒有變化。
當完成人體骨架和手機的檢測后,模型輸出識別出的人體各個關節點和手機的目標框。我們可以通過分析人體各部分的角度關系得到司機的姿態和動作,并通過檢測得到的手機框與人體手部框和人體頭部框的關系可以得到司機是否接電話或者使用手機。
如圖3所示,本文通過人體各關節點坐標得到人體肢體的向量,通過余弦公式得到肢體之間的角度。本文計算右大臂和軀干角度α、右大臂與右小臂角度β對司機是否正進行手勢進行二分判別;計算左右大腿和人體軀干的角度δ、γ判別司機處于站立還是坐著;計算人體軀干與水平面角度ε、頭部與軀干角度ζ判別司機是否瞌睡;如未在規定范圍內檢測到人體,則判斷為離崗。當檢測結果中出現手機目標框時,則計算手機目標框與各個人體的手部、頭部的目標框的的重疊情況,當手機目標框中心點落于手部、頭部的目標框內或手部、頭部的目標框中心點落于手機目標框內時,判定其處于使用手機的狀態。整體的后處理流程如圖4所示。

圖3 人體骨架示意圖

圖4 后處理流程圖
本文使用了Pytorch深度學習框架完成融合模型的搭建。基于嵌入式設備計算量限制的需求,主干網絡選擇有較好精度表現并且計算量相對較少的Densent[11],特征提取層由兩層3×3、一層1×1的卷積層和相應的批歸一化層、relu非線性激活層組成,損失函數選擇均方誤差函數(mean square error,MSE)。訓練GPU為RTX2070 8G,系統為Ubuntu16.04,python環境為python3.6.8。訓練設置圖片輸入大小為288×288,初始學習率為1e-3,按1e-3*(1-當前循環次數/總循環次數)衰減,每批次輸入圖片張數設為32,共循環訓練集1 000次。為使模型不對訓練集產生過擬合現象、提高樣本多樣性和圖片質量,使用隨機旋轉、左右翻轉、隨機裁剪、隨機改變圖片明暗度、飽和度等方式在訓練過程中擴增訓練集。
本文選擇的部署嵌入式平臺為較為廉價、適于工業部署的NVIDIA Jetson TX2,如圖5所示。NVIDIA Jetson TX2是英偉達公司推出的嵌入式高性能開發板,其采用NVIDIA Pascal架構,配備256個 CUDA核心,CPU和GPU共用內存為8 GB,可進行16位浮點數計算。

圖5 NVIDIA Jetson TX2
本文采用OKS(目標關鍵點相似度,Object Keypoint Similarity)[12]作為每張圖片人體關鍵點識別好壞的衡量標準,其計算公式如下:

(6)
式中,p表示真實目標中當前檢測的人的代碼,i代表被標記的人的每一個關節,dpi表示真實目標中每個人和預測的每個人的關鍵點的歐氏距離,Sp表示當前人的尺度因子,等于人所占面積的平方根,表示人體每個關鍵點的歸一化因子,這個值反映了當前關鍵點的識別的難易程度,υpi代表第i個點是否可見。
統計測試集所有圖片的OKS以計算MAP(mean average precision,均值平均精度)作為人體關鍵點的衡量指標。對于手機目標,本文則采用目標檢測中常用的IOU(intersection over union,交并比)作為識別好壞的衡量標準,同樣統計測試集所有圖片的MAP作為手機目標框的衡量指標。
圖6和表1分別展示了模型的訓練曲線和融合模型在測試集上的MAP。人體關鍵點和手機框識別均處于較為良好的識別水平,滿足進行人體識別后處理的要求。

圖6 訓練損失和測試集損失曲線

表1 模型檢測精度
隨后,搭建TensorRT加速模型和壓縮模型體積。由于模型采用Pytorch搭建,無法直接轉換為TesnorRT可讀取的參數格式,先將Pytorch模型轉換為ONNX(Open Neural Network Exchange) 開放式格式的模型,再輸入TesnorRT程序讀入。表2展示了TenosrRT加速前后模型在精度、速度和體積上的區別,表中各項都是在Jetson TX2中測得。經過TensorRT加速后,模型在人體關鍵點上MAP下降了0.000 7,而在手機目標框上上升了0.000 2,模型精度基本沒有太大變化。而加速后,模型的推理時間較低到了兩位數范圍以內,模型運行速度加速比為8.08,基本滿足實時運行的要求。同時,模型的體積降低了36.8%,節省了嵌入式設備的存儲空間。圖7展示了模型在測試集上的檢測效果,模型展現了較好的魯棒性,在駕駛室內光照情況有巨大區別的情況下依然可以較為精準地識別出人體姿態。

表2 加速前后模型對比

圖7 模型檢測效果圖
表3統計了經過第2.3節所描述的后處理后,模型在測試集的精確率(Precision)和召回率(Recall)。模型在大多數行為檢測中表現較好,其中在使用手機的行為上檢測表現最好,精確率達到92.31%。模型在檢測司機離崗的情況最差,精確率為62.12%。

表3 后處理檢測效果 %
在這項工作中,本文成功融合了目標檢測和關鍵點檢測兩種深度學習算法,創新實現了一種可以同時檢測司機人體關鍵點和手機的神經網絡,通過分析人體關節角度和人體關鍵點與手機目標框位置對司機行為進行了分類識別。并對算法模型進行了加速和壓縮,最終將其成功地部署在嵌入式邊緣計算設備上,模型推理速度為25 ms,可以達到實時運行的目標。另一方面,模型在各類別行為的檢測效果不一,其中離崗行為識別的檢測效果不佳,模型訓練的樣本量較少,基于各關節角度的后處理方法仍有較大的改善空間,需進一步研究。