戴 騰,張 珂,尹 東*
1 中國科學技術大學信息科學技術學院,安徽 合肥 230027;
2 中國科學院電磁空間信息重點實驗室,安徽 合肥 230027
遵守道路交通法規(guī)、安全駕駛是駕駛員牢記于心的鐵則。但司機開車時使用手機的現(xiàn)象卻屢見不鮮,這將造成巨大的安全隱患,甚至釀成慘禍。因此,實時檢測司機駕駛行為,不僅有利于交管部門的管控,而且對于減小交通事故的發(fā)生都具有重大的現(xiàn)實意義。
近年來,Rodríguez-Ascariz 等[1]利用電子電路射頻采集來捕獲使用手機所產(chǎn)生的功率,并將位于車內(nèi)的兩個天線和信號分析算法用于識別駕駛員何時使用手機。Leem SK 等[2]通過脈沖無線電超寬帶雷達進行生命體征監(jiān)測,提出了一種不受駕駛活動引發(fā)的運動影響的生命體征估算算法。這些方法依靠的是手機產(chǎn)生的信號,通過硬件傳感器設備捕獲并處理,從而有一定的誤差。當前計算機視覺發(fā)展迅猛,應用也越來越廣泛,圖像和視頻處理更加準確高效。Berri 等[3]構建了一個模式檢測識別系統(tǒng),由車內(nèi)監(jiān)控攝像頭得到圖像后提取圖像特征,用具有多項式內(nèi)核的支持向量機(SVM)[4]實現(xiàn)分類。Xiong 等[5]提出了一種基于深度學習的駕駛員手機使用率檢測算法。它首先使用漸進式校準網(wǎng)絡(PCN)[6]進行面部檢測和跟蹤;其次,采用卷積神經(jīng)網(wǎng)絡檢測候選區(qū)域中的手機。其結果對比基于傳感器和信號處理的方法,減小了環(huán)境干擾的因素,具有實時的直觀反饋,在準確率上也有提升,但仍未滿意。
在實際檢測識別的工程應用中,不僅要求有較高的準確率和較強的魯棒性,而且實時性也很重要。故本文基于深度學習的目標檢測算法,提出了一種用于駕駛場景下手機檢測的端到端的神經(jīng)網(wǎng)絡。首先,為了維持較高的準確率,同時還能保證實時性,本文改進了YOLOv4[7]算法,設計了一個端到端的小目標檢測網(wǎng)絡(one-stage mobile phone detection network,OMPDNet)來提取圖片特征;其次,基于K-means[8]設計了一個聚類中心更加貼切樣本數(shù)據(jù)分布的聚類算法K-means-Precise,用以生成適應于小目標數(shù)據(jù)的先驗框(anchor),從而提升網(wǎng)絡模型的效率;最后,由于公開數(shù)據(jù)集不能適用于特定的駕駛場景,本文采用監(jiān)督與弱監(jiān)督方式構建了自己的數(shù)據(jù)集。同時,為了解決訓練時正負樣本不平衡問題,在數(shù)據(jù)集中加入負樣本用于訓練。
隨著深度學習的不斷發(fā)展,卷積神經(jīng)網(wǎng)絡[9]在計算機視覺中取得了巨大的成功,其卷積特性使得圖像和視頻的處理更加精準、高效。1998 年,LeCun 等[10]建立了一個手寫體的卷積神經(jīng)網(wǎng)絡LeNet-5,是首個卷積神經(jīng)網(wǎng)絡的現(xiàn)代模型。隨著2012 年Krizhevsky 等人提出的卷積神經(jīng)網(wǎng)絡,AlexNet[11]大幅度提升了圖像分類的準確率,掀開了卷積神經(jīng)網(wǎng)絡的高潮,從而產(chǎn)生了一系列優(yōu)秀的神經(jīng)網(wǎng)絡,如VGG[12]、MobileNets[13]、GoogleNet[14]、ResNet[15]等。這些網(wǎng)絡為本文的研究提供了思路,具有很好的借鑒意義。
目標檢測是計算機視覺中的基礎任務,其研究有兩大類:一是傳統(tǒng)的目標檢測方法,如Viola 和Jones提出的Haar 分類器[16-17],它由Haar 特征提取、離散強分類器和強分類級聯(lián)器組成,核心思想是提取人臉的Haar 特征,可應用于人臉檢測,同時級聯(lián)分類器Cascade[16]與Dalal[18]等人提出的HOG 特征,在行人檢測方面取得了較好的結果。Felzenszwalb[19]設計了DPM 算法實現(xiàn)了人體檢測拓展到了物體檢測。此外,便是這些算法的諸多改進和優(yōu)化。另一類是基于深度學習的目標檢測算法,旨在利用神經(jīng)網(wǎng)絡對圖像進行特征提取,同時輸出目標。其總體方向是通過搭建復雜的卷積神經(jīng)網(wǎng)絡,在龐大的數(shù)據(jù)驅動下不斷地訓練和優(yōu)化,最終得到各項指標較好的模型。
基于深度學習的目標檢測建立在基礎網(wǎng)絡上,其模型可分為兩階段(Two-stage)和一階段(One-stage)兩種類型。以R-CNN[20]、SPPNet[21]、Fast R-CNN[22]、Faster R-CNN[23]和R-FCN[24]為主的Two-stage 算法其核心思想是先提取候選區(qū)域(region proposal),然后再利用卷積神經(jīng)網(wǎng)絡進行分類,原理如圖1 所示。One-stage 算法則去掉了候選框的提取步驟,在分類的同時,直接對邊界框回歸,其原理如圖2。這一類算法代表主要有YOLO 系列算法[25-27,7]、SSD[28]等。Two-stage 檢測算法精度高,但大量的候選區(qū)域框的輸入使得模型速度稍遜。One-stage 方法則在損失精度的同時提升速度,是一種嚴格意義上的端到端的訓練,這使得訓練更加簡便,可應用在需實時處理視頻的工程中。
圖2 一階段過程原理(端到端)Fig.2 Basic one-stage process (end to end)
YOLOv4 是目前官方認可的YOLO 系列中發(fā)展的最新、最好的算法,其結構主要分為三個部分:主干網(wǎng)(Backbone)、頸部(Neck)和頭部(Head)。
YOLOv4 的主干網(wǎng)是CSPDarkNet53。它是基于DarkNet53[27]網(wǎng)絡并通過CSPNet[31]方法改進得到的一種性能優(yōu)異的網(wǎng)絡。CSPNet 通過改進密集塊和過渡層的信息流,避免了重復的梯度信息,從而大大減少計算量,優(yōu)化了網(wǎng)絡性能,提高推理速度和準確性。對于輕量化后的卷積神經(jīng)網(wǎng)絡,CSPNet 仍能加強網(wǎng)絡的學習能力,保持足夠的準確性。
YOLOv4 以SPP[21]和PANet[32]作為頸部,目的是對淺層特征進行加工和增強。SPP 層是一種多尺度特征提取層,可以產(chǎn)生固定大小的輸出。它擴大了感受野,提高圖像的尺度不變性,降低了過擬合。PANet將高低層特征融合,減少了淺層特征傳遞信息的損失,從而也提高了小尺寸目標的檢測。
YOLOv4 的頭部沿用了YOLOv3 結構,采用YOLO Head 多尺度輸出,在不同尺度下輸出張量的深度表示邊界框偏移量、類別和先驗框。網(wǎng)絡端到端的實現(xiàn)過程是由預設的候選框(region proposal)通過線性回歸得到預測框(predict box)。其原理在于,當真實框(ground truth)和候選框之間的IOU 很大時,反映了兩者之間極為接近,此時用線性回歸近似代替。
定義四種線性變換函數(shù)f x(R),f y(R),f w(R),f h(R),如下所式:
其中:Xx和Xy為窗口中心坐標,Xw和Xh為窗口的寬和高(X表示R,P,G,分別是候選框、預測框和真實框)。
根據(jù)模式識別與機器學習[8]中的線性回歸思想構建線性模型,圖像由神經(jīng)網(wǎng)絡模型提取的特征φ,通過學習參數(shù)w*(*表示x,y,w,h),得到窗口的偏移量,即上述線性變換函數(shù)f*:
損失函數(shù):
其中:
Xi表示第i個窗口。
本文的工作是完成司機行車時是否使用手機的檢測任務,手機在駕駛場景下屬于小目標,但小目標檢測卻是視頻圖像處理中的難點。小目標是指目標尺寸的長寬是原圖像尺寸的10%以下,或者尺寸小于32 pixels×32 pixels 的目標,具有低分辨率的特點。由于網(wǎng)絡模型識別的精度往往不夠,處理此類問題頗為棘手。金瑤等[29]提出了一種基于Road_Net 卷積神經(jīng)網(wǎng)絡的檢測方法,在城市道路視頻中取得了較好的檢測結果。Hu 等[30]為了提升小臉檢測精度,圍繞著尺度不變、圖像分辨率和上下文三個方面做了研究,在公開人臉數(shù)據(jù)集WIDER FACE 上,比當前的技術減少了2 倍誤差。
在復雜的駕駛場景下,由于攝像頭和駕駛員操控手機的角度和位置的不同,時常會出現(xiàn)遮擋、尺寸小、分辨率低的情況,也就是典型的小目標檢測。雖然YOLOv4 在公開數(shù)據(jù)集中速度和精度上都有較好的表現(xiàn),但是公開數(shù)據(jù)集具有數(shù)量多、種類繁雜和尺度不一的特點,是不同于本文指定的駕駛場景,此時YOLOv4并不能很好地直接應用。為解決此問題,本文基于YOLOv4,提出了一種端到端的、可適應于駕駛場景下的手機小目標檢測網(wǎng)絡(one-stage mobile phone detection network,OMPDNet)。
如圖3 所示,OMPDNet 網(wǎng)絡架構主要包括主干特征提取網(wǎng)絡、特征增強網(wǎng)絡和端到端的多尺度輸出。輸入的RGB 三通道圖片通過主干特征提取網(wǎng)絡的一系列不同數(shù)量和大小的Resblock_body 塊,得到高度抽象的多尺度特征圖(feature map)。在特征增強網(wǎng)絡部分,高層特征圖通過下采樣(DownSampling)與低層特征圖堆疊(concat),而低層特征圖通過上采樣(UpSampling)與高層特征圖堆疊,達到多尺度特征提取的目的。而最底層特征圖則通過SPP 的最大池化(max pooling),進一步增強特征。高低層堆疊和特征增強后,最終通過端到端的多尺度輸出得到預測結果output1、output2、output3 和output4。
圖3 OMPDNet 網(wǎng)絡架構圖Fig.3 OMPDNet network architecture diagram
由于淺層特征對小目標更加敏感,因此OMPDNet在保持網(wǎng)絡深度的情況下,充分利用淺層特征。以輸入圖片大小為608×608 為例,在特征提取的主干網(wǎng)絡中,將特征尺度大小為104×104 的淺層特征也加入多尺度融合。但YOLOv4 中的CSPDarkNet53 在這一特征尺度的Resblock_body 的卷積數(shù)量只有2,殘差網(wǎng)絡不夠深,head 會過早地輸出,無法充分提取特征,故OMPDNet 通過將Resblock_body 的卷積數(shù)量增至8,從而克服這一問題。為了提高實時性和網(wǎng)絡的輕量化,在保證精度不降的情況下,本文精簡了網(wǎng)絡,在76×76、38×38 和19×19 的特征尺度上,特征提取的Resblock_body 的層數(shù)分別降至4、4 和2。
設置大小合適的Anchor,有利于提高模型的收斂速度和精度。YOLOv4 采用K-means 算法對數(shù)據(jù)聚類獲得Anchor 的大小,此時Anchor 對應著聚類中心。這種方法充分利用數(shù)據(jù)分布特性,比預定義更為可靠。但K-means 算法在意的是類別的劃分,而不是聚類中心。而小目標數(shù)據(jù)要求Anchor 的跨度較小,密度精細且集中,這將導致由K-means 生成的Anchor 并不處于最佳位置。如圖4 可以發(fā)現(xiàn),當數(shù)據(jù)中存在著少數(shù)的不可抗的噪聲數(shù)據(jù)和難例數(shù)據(jù)時,雖然聚類簇沒有發(fā)生變化,但聚類中心已偏移,降低了Anchor 的精度。
圖4 數(shù)據(jù)和難例數(shù)據(jù)聚類。(a) 無噪聲;(b) 有噪聲Fig.4 Clustering of data and difficult data.(a) Noise-free data;(b) Noisy data
為此,本文設計了一個使聚類中心更為精確的算法,稱作K-means-Precise。首先采用K-means 聚類得到k個類別,通過設置方差閾值λ,將每個類別中偏離中心的噪聲數(shù)據(jù)和難例數(shù)據(jù)移除。然后不斷重復,當數(shù)據(jù)集和聚類中心都不再發(fā)生變化時,就得到了較為準確的結果。由此得到的Anchor 更加符合數(shù)據(jù)樣本分布,可用于后續(xù)的網(wǎng)絡檢測。
K-means-Precise 算法描述如下:
本文通過車內(nèi)監(jiān)控攝像頭拍攝視頻,并結合少量公開數(shù)據(jù)集和互聯(lián)網(wǎng)圖片等,手動制作了一個數(shù)據(jù)集(OMPDDataset),如圖5 所示。采集數(shù)據(jù)時,為了解決正負樣本不平衡問題,將負樣本也加入訓練中,提高模型精度和魯棒性。在對數(shù)據(jù)集進行標注的時候,本文不完全依靠單一的人工標注位置,而采用了一種監(jiān)督和弱監(jiān)督結合的方式對數(shù)據(jù)進行標注。具體做法是,首先人工標注手機具體位置,然后借鑒當前行人檢測較好的模型CenterNet[33]對本文的數(shù)據(jù)預測,為檢測到的行人打上標注,最后結合人工標注剔除一部分只有行人而沒有手機的標注。通過人和手機的雙重檢測減少漏檢和誤檢,為準確率增加一道保障,同時又減少了人工標注量。
本文實驗環(huán)境為Ubuntu 16.04 系統(tǒng),顯卡為1080Ti,cuda 版本為10.0,編程語言為python3.6,深度學習框架pytorch1.1.0。
數(shù)據(jù)集OMPDDataset 中訓練集有20000 張,測試集有2000 張。在訓練集的20000 張圖片中,10000 張為駕駛員在駕駛過程中使用手機的正樣本,10000 張為駕駛員正常駕駛的負樣本。在數(shù)據(jù)增強方面,本文借鑒mixup[34]方法,基于鄰域風險最小化原則,使用線性插值得到新數(shù)據(jù),新數(shù)據(jù)的生成方式:
圖5 數(shù)據(jù)集OMPDDatasetFig.5 OMPDDataset
其中:(x n,yn)是插值生成的新數(shù)據(jù),(x i,yi)和(x j,yj)是在訓練集數(shù)據(jù)中隨機選取的兩個數(shù)據(jù)。此外,還采用隨機裁剪、旋轉、馬賽克數(shù)據(jù)增強、調(diào)整飽和度等數(shù)據(jù)增強方法對訓練集進行預處理。
本文使用召回率(Recall,簡稱R)和精確率(Precision,簡稱P)作為評價指標。
召回率的計算如式:
其中:TP是檢測正確的正樣本數(shù)量,F(xiàn)N是檢測錯誤的負樣本數(shù)量。
精確率的計算式:
其中FP是檢測錯誤的正樣本數(shù)量。
在深度學習目標檢測中,僅憑精確率來評估模型性能是不夠的,我們需要在精確率較高的基礎上,召回率也能實現(xiàn)最大化。平均精確度(Average precision,簡稱AP)將不同召回率下的精確率累積,反映了整體信息,其評估更為有效,計算式為
其中P(r)是當召回率R=r的精確率。
本文使用平均精確率(mean average precision,簡稱mAP)對結果進行評估:
其中QR是指模型類別。在模型速度的可行性上,則用每秒傳輸幀數(shù)評估。
本文做了兩類對比實驗,并利用模型評估方法來客觀評估本文算法。
對比實驗一:如表1 和表2 所示,在OMPDNet網(wǎng)絡上分別單獨加入K-means-Precise 和負樣本訓練(negative sample training)。實驗結果表明,增加K-means-Precise 對模型的準確率會有微弱的提升,但更重要的是,它提前了5 個周期(epoch)收斂,而將負樣本加入訓練其精確率和平均精確率分別提高了4.7%和3.9%,由此可見,本文算法能加快模型收斂,提高模型精度。
表1 K-means-Precise 的實驗結果Table 1 Experimental results of K-means-Precise
表2 負樣本訓練的實驗結果Table 2 Experimental results of negative sample training
對比實驗二:選取當前具有代表性且性能優(yōu)異的目標檢測算法與本文提出的用于駕駛場景下的OMPDNet 手機檢測算法做對比,實驗結果如表3。本文提出的算法在速度和平均精確率都有較大的提升,而召回率相比于YOLOv4提高了11.9%,達到了96.1%,這得益于OMPDNet 網(wǎng)絡的多尺度改進。
再則,圖6~7 展示了本文實際檢測效果圖。圖6展示了在不同的位置、不同的角度和不同的駕駛場景下,駕駛員使用手機的檢測結果,均達到了實際檢測要求。
表3 五種算法的性能比較Table 3 Performance comparisons of five algorithms
圖6 復雜的駕駛場景下的檢測結果Fig.6 Detection results in complex driving scenarios
圖7 異常檢測Fig.7 Abnormal detection
圖7 展示的是在實驗過程中出現(xiàn)的異常檢測。圖7(a)展示的是漏檢,圖7(b)展示的是誤檢,圖7(c)和圖7(d)展示的是同時漏檢和誤檢。出現(xiàn)這一類問題的原因在于圖像質量差、手機被嚴重遮擋、光照影響以及高度相似物體的混入。這些異常檢測問題后續(xù)可以通過兩方面來解決和優(yōu)化。一方面是通過改善外部條件,如提高圖片分辨率、數(shù)據(jù)集平衡擴增、駕駛環(huán)境中減少不必要的高度相似物體;另一方面則是提高自身模型的健壯性,如困難樣本挖掘、改進損失函數(shù)、優(yōu)化網(wǎng)絡等。
本文基于YOLOv4 算法,提出了一種端到端的神經(jīng)網(wǎng)絡OMPDNet 用于駕駛場景下的手機檢測。同時,為了評估網(wǎng)絡模型性能,本文制作了一個新的數(shù)據(jù)集OMPDDataset 來進行驗證。實驗結果表明,本文方法在精確率、召回率和平均精確率上分別達到了89.7%、96.1%和89.4%,在速度上達到了每秒72.4 幀,優(yōu)于當前幾種主流目標檢測算法,并且更為貼切工程中的應用,能為交管部門貢獻一份力量。本文算法不僅適用于手機檢測,該思路亦可拓展到深度學習小目標檢測的問題。在今后的工作中,將繼續(xù)改進算法,泛化其性能。