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