徐 棟,陳正宇
(1.南京郵電大學電子與光學工程學院,江蘇 南京 210023;2.金陵科技學院電子信息工程學院,江蘇 南京 211169)
駕駛電動車時佩戴安全頭盔可在事故發(fā)生時緩沖頭部撞擊,保護生命安全。電動車駕乘人員佩戴頭盔成為保障道路安全的一項重要工作。通過人工智能算法構(gòu)建電動車駕乘人員佩戴安全頭盔的檢測系統(tǒng)對促進道路安全具有重要意義,也是邁向交通智能化的關(guān)鍵一步。
目前,針對道路場景下電動車頭盔佩戴檢測的研究較少,不少研究是針對工地安全帽的佩戴檢測,二者檢測方法存在相似之處,但是道路場景下電動車頭盔佩戴檢測對檢測速度的要求更高。傳統(tǒng)的安全頭盔檢測方法如使用支持向量機作為分類器、通過梯度直方圖進行特征提取等,存在主觀性強、特征提取困難、泛化性差等問題,需要進一步改進[1]。深度學習卷積神經(jīng)網(wǎng)絡在提取圖像特征時不需要手動設計特征,給安全頭盔的佩戴檢測提供了一個新的方向。目前主流的基于深度學習的頭盔佩戴檢測算法分為兩類:一類是以Fast R-CNN[2]和Faster R-CNN[3]為代表的雙階段檢測算法;另一類是以SSD[4]、YOLO[5]為代表的單階段檢測算法。雙階段算法模型體積較大,訓練時間長,檢測速度不高,不利于模型部署;單階段算法的泛化能力較弱,對小目標的檢測性能有待提升。此外,上述基于深度學習的研究大多數(shù)是基于GPU工作站,缺乏對部署嵌入式平臺的考慮,難以滿足道路場景下電動車騎行者頭盔佩戴的檢測要求。
因此,本文通過降低卷積參數(shù)、改進特征提取結(jié)構(gòu)、加入注意力機制對YOLOv5s模型進行優(yōu)化,提出了一種基于改進YOLOv5s模型的電動車頭盔佩戴檢測方法,以期對小目標和遮擋目標有較好的檢測效果,在NVIDIA Jetson Xavier NX開發(fā)板上具有較高的檢測速度。
YOLOv5是在YOLOv3、YOLOv4模型基礎上不斷創(chuàng)新的模型,該模型的特點是適用于移動端、模型小、速度快。YOLOv5包括YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x四個模型。YOLOv5s是其中網(wǎng)絡深度最淺、特征圖寬度最小的模型,體積只有14 M,非常適合嵌入式設備的部署,因此本文選用YOLOv5s模型作為基準模型。
YOLOv5s模型結(jié)構(gòu)如圖1所示,主要由主干網(wǎng)絡(backbone)和頭部(head)兩部分構(gòu)成。backbone包含F(xiàn)ocus結(jié)構(gòu)、SPP[6]結(jié)構(gòu)和參照CSP[7]結(jié)構(gòu)設計的C3結(jié)構(gòu),head部分使用了PANet[8]結(jié)構(gòu)。
圖1 YOLOv5s模型結(jié)構(gòu)
YOLOv5s創(chuàng)造性地采用了Focus結(jié)構(gòu),先通過間隔采樣對輸入圖像進行四倍通道擴充,再經(jīng)過卷積操作得到無特征信息損失的二倍下采樣特征圖。Focus模塊對普通卷積操作進行了優(yōu)化,以更少的計算成本實現(xiàn)下采樣并增加通道維度,降低了參數(shù)量并提升了速度。
YOLOv5s根據(jù)跨階段合并策略設計了C3模塊,該模塊是對殘差特征進行學習的主要模塊。C3模塊根據(jù)堆疊的Bottleneck[9]有無側(cè)向連接設計了兩種CSP模塊,分別是C3_X(True)和C3_X(False),X是Bottleneck的堆疊數(shù)量。前者用于backbone部分的特征提取,后者用于head部分的特征融合。
PANet 是在特征金字塔網(wǎng)絡(FPN)[10]的基礎上加上一個自底向上的特征傳遞路徑,然后將不同深度的特征進行融合。該結(jié)構(gòu)使得頂層特征圖也可以有效利用底層特征豐富的位置信息,從而提升了多尺度目標的檢測效果。
YOLOv5s模型對目標檢測中常見的問題都做了一定的優(yōu)化改進,在性能上同時兼顧檢測速度和檢測精度,具有較好的工程實用性,但在一些實際場景下仍有待提升。為了滿足電動車駕乘人員頭盔佩戴檢測需要,本文從模型計算量、體積、精確度出發(fā),將YOLOv5s模型進一步優(yōu)化,以提升檢測精度。
YOLOv5s模型中,C3模塊使用了較多的標準卷積,帶來了計算量大的問題。因此,本文引入Ghost模塊,該模塊能夠通過高效操作以更少的參數(shù)量和計算量生成特征圖[11]。Ghost模塊的實現(xiàn)分為兩部分,一部分是普通卷積,另一部分是更為高效的線性操作。先通過普通卷積得到一組特征圖,再將得到的特征圖通過線性操作生成另一組特征圖,最后把兩組特征圖拼接起來。
(a)結(jié)構(gòu)一
(b)結(jié)構(gòu)二
為了更高效地提取特征,本文使用GhostNet[11]中的GhostBottleneck結(jié)構(gòu)代替YOLOv5s主干網(wǎng)絡的標準卷積,結(jié)構(gòu)如圖2(a)所示。該結(jié)構(gòu)在兩個Ghost模塊之間通過一個步長(stride)為2的深度卷積(DWConv)進行向下采樣連接,最后將這兩個Ghost模塊的輸入和輸出合并。第一個Ghost模塊用于增加通道數(shù),第二個Ghost模塊用于壓縮通道數(shù),這構(gòu)成了逆殘差結(jié)構(gòu),使得信息損失更少,結(jié)構(gòu)表征能力更強。根據(jù)MobileNetV2的思想,將通道壓縮后,不使用ReLU函數(shù)激活可以避免特征信息丟失[12]。因此,除了最后一個Ghost模塊不使用ReLU函數(shù)外,在每一層后均通過批標準化(BN)和ReLU函數(shù)進行非線性激活。將該結(jié)構(gòu)替換YOLOv5s中backbone部分的CBL卷積結(jié)構(gòu),減少了模型的參數(shù)量和計算量。
假設輸入特征圖的通道數(shù)、高度和寬度分別為c、h和w,輸出特征圖的通道數(shù)、高度和寬度分別為n、h′和w′,普通卷積中卷積核的大小為k×k。Ghost模塊中通過普通卷積生成的特征圖數(shù)量為m,每個線性運算的平均內(nèi)核大小為d×d。根據(jù)文獻[11],GhostBottleneck模塊的計算量可表示為2[mh′w′ckk+ddh′w′(n-m)]。根據(jù)圖1,Bottleneck模塊的計算量可表示為2nh′w′ckk。因此Bottleneck模塊與GhostBottleneck模塊的計算量之比可表示為:
(1)
其中,k和d的大小相同,m 圖3 GhostCSP-Bottleneck結(jié)構(gòu) 圖4 SE注意力模塊示意圖 雖然GhostBottleneck模塊能夠大幅壓縮YOLOv5s模型的參數(shù)量和計算量,但不可避免地導致檢測精度小幅度下降。為了提升檢測精度,本文在主干網(wǎng)絡部分引入SE[13]注意力模塊(圖4),該模塊能夠解決卷積池化過程中由于特征圖不同、通道占比不同帶來的損失問題。SE注意力模塊首先是擠壓操作Fsq,將輸入特征圖X進行全局池化,生成1×1×c的一維矩陣,該矩陣具有全局大小的感受野;然后是激勵操作Fex,通過兩個全連接層(FC),利用非線性操作擬合通道之間的相關(guān)性,在第一個全連接層后加入ReLU函數(shù)增加通道間的非線性,在第二個全連接層后加入Sigmoid函數(shù)進行權(quán)值歸一化操作,得到附帶通道權(quán)值的1×1×c矩陣;最后是縮放操作Fscale,將得到的1×1×c特征圖與輸入特征圖做全乘操作,將權(quán)重加權(quán)到輸入特征圖上,這樣就得到了附帶不同通道權(quán)重的特征圖Y。 SE注意力模塊為即插即用模塊,通常用在卷積模塊之后[14]。因此本文在YOLOv5s主干網(wǎng)絡的第二個和第三個C3模塊后加入SE注意力模塊,為不同尺度的特征層賦予更高的權(quán)重;再在SPP層后加入SE注意力模塊,強化融合后的局部特征和全局特征,豐富特征圖的表達能力。在主干網(wǎng)絡加入SE注意力模塊后參數(shù)量增加了43 008,僅占YOLOv5s模型總參數(shù)量的0.61%;學習到的特征信息被進一步優(yōu)化,賦予通道小目標的權(quán)值比重,能大幅提升模型精度。 改進的YOLOv5s模型網(wǎng)絡結(jié)構(gòu)如圖5所示。 圖5 改進的YOLOv5s模型結(jié)構(gòu) GhostCSP-Bottleneck模塊的True和False表示有無殘差邊,后面的數(shù)字(YOLOv5s中是1和3)代表GhostBottleneck的堆疊次數(shù)。經(jīng)計算,改進前后的YOLOv5s模型參數(shù)如表1所示。 表1 改進前后YOLOv5s模型參數(shù)對比 從表1可以看出,改進的YOLOv5s模型參數(shù)量(params)為 3.7 M,每秒浮點運算次數(shù)(FLOPs)為8.2 G,模型體積(weight)為7.6 MB,三者分別為原始YOLOv5s模型的51.39%、47.95%和52.78%,實現(xiàn)了較大幅度的壓縮。 由于所需的檢測類別沒有公開的數(shù)據(jù)集,所以自行制作了包含5 000張圖片的原始數(shù)據(jù)集。數(shù)據(jù)集圖片來源包括兩部分:一是利用Python網(wǎng)絡爬蟲從百度圖片獲取,二是從金陵科技學院的道路監(jiān)控緩存視頻截取圖片。為了提高模型的泛化性能,使用隨機縮放、裁剪、翻轉(zhuǎn)、旋轉(zhuǎn)等方式來增加原始數(shù)據(jù)集的多樣性。 本實驗的數(shù)據(jù)集由motorcycle、helmet、person三個類別構(gòu)成,分別對應電動車目標、頭盔目標和未佩戴頭盔的人臉目標,其中helmet和person為兩種對立的狀態(tài)。先使用標注工具將圖片中出現(xiàn)的三類目標進行標注,生成YOLOv5s模型訓練格式的標簽,最后按照7∶2∶1的比例劃分訓練集、驗證集和測試集,完成數(shù)據(jù)集的構(gòu)建。 實驗所使用的設備是云服務器平臺,操作系統(tǒng)為Ubuntu 18.04,GPU為GeForce RTX 2080Ti,搭配CUDA10.2和CUDNN7.6加速工作站。訓練完成后將模型移植到嵌入式平臺NVIDIA Jetson Xavier NX上進行部署。實驗使用的深度學習框架為Pytorch 1.8.0,對應的torchvision版本為1.9.0。訓練時設置初始學習率為0.01,動量設置為0.937,衰減系數(shù)為0.000 5,epoch為300,batchsize為32。 為了定量評價實驗結(jié)果,使用準確率(precision)、召回率(recall)、平均準確率均值(mAP)作為指標,如式(2)—式(5)所示。此外還采用模型體積、參數(shù)量、每秒浮點運算次數(shù)(FLOPs)、檢測速度(單位為FPS)作為衡量模型大小、計算量、推理速度的指標。 (2) (3) (4) (5) 式中,TP表示被正確分類的正樣本,FP表示被錯誤分類的正樣本,FN表示被錯誤分類的負樣本,n表示總類別數(shù)。 在驗證改進后的完整模型之前,通過消融實驗探究改進方法對于YOLOv5s的影響。消融實驗以YOLOv5s模型為基礎,按照2.1節(jié)和2.2節(jié)所述的改進方法將GhostBottleneck(以下簡稱GBk)模塊、GhostCSP-Bottleneck(以下簡稱GhostCSP)模塊、SE注意力模塊加入到Y(jié)OLOv5s模型中,得到的結(jié)果如表2所示,圖片輸入尺寸為640×640。 表2 以YOLOv5s為基礎的消融實驗結(jié)果 由表2可知,加入SE注意力模塊后模型精度有較大的提升,比原YOLOv5s模型mAP提升了2.4個百分點,且計算量幾乎沒有增加,但是召回率有所下降。在模型中同時加入GBk模塊和GhostCSP模塊后,計算量減少了52.0%,mAP下降了0.8個百分點,因此GBk和GhostCSP 能夠以更少的計算量提取特征信息。 根據(jù)消融實驗可以發(fā)現(xiàn),在主干網(wǎng)絡不同尺度特征層加入SE注意力模塊,能夠為不同通道賦予權(quán)重信息,而且在后續(xù)的特征融合中可以將權(quán)重信息繼續(xù)傳遞,最終以少許計算量為代價顯著提高檢測精度;GBk模塊由于以更高效的方式提取特征,對計算量和模型體積有較明顯的壓縮;GhostCSP模塊減少了特征信息的損失,以少量準確率為代價將模型的計算量和參數(shù)量進一步壓縮??梢?SE注意力模塊、GBk模塊和GhostCSP模塊對于模型整體性能提升十分必要。 為了驗證改進后模型的效果,選用同類型輕量級模型YOLOv4-tiny和MobilenetV3-YOLOv5s進行對比實驗,后者是由MobilenetV3的backbone部分替換掉YOLOv5s的backbone得到。將模型按照3.2節(jié)的配置進行訓練,將訓練好的模型放在測試集上測試模型的性能,測試集包含500張圖片,測試結(jié)果如表3所示。 表3 不同模型的檢測性能 從表1和表3可以看出,改進后模型的mAP為84.2%,在四種模型中最高,較改進前提升了1.3個百分點,但是召回率下降了3.3個百分點。雖然改進后的模型在參數(shù)量、計算量、體積上稍遜色于MobilenetV3-YOLOv5s,但是mAP比MobilenetV3-YOLOv5s高2.1個百分點。實驗結(jié)果表明,相較于YOLOv5s,本文所提方法在大幅度減小參數(shù)量和計算量的同時提高了檢測精度。 將訓練好的模型部署到NVIDIA Jetson Xavier NX開發(fā)板上,比較不同模型的檢測速度。由表4可知,在640×640 的圖像輸入尺寸下,由于嵌入式設備性能限制,YOLOv5s的檢測速度僅有20.2 FPS,實時性不佳。本文提出的模型的檢測速度達到28.6 FPS,較改進前提升了8.4 FPS,可以滿足實時性的檢測需求。在512×512 的圖像輸入尺寸下,改進后模型的檢測速度達到了36.3 FPS,比YOLOv4-tiny略快。結(jié)果表明,本文提出的模型在電動車駕乘人員頭盔佩戴檢測方面更有優(yōu)勢。 表4 不同模型在不同尺寸下的檢測速度 FPS 除了在數(shù)據(jù)集上驗證模型的性能外,還從實際道路采集圖像以直接檢驗模型的檢測效果。圖6—圖8是改進前后模型的部分檢測結(jié)果,(a)圖為原始YOLOv5s模型的檢測結(jié)果,(b)圖為改進后模型的檢測結(jié)果。從圖6可以看出,在場景良好的情況下改進前后的模型都能將電動車駕駛?cè)藛T的頭盔佩戴情況檢測出來,即二者均滿足檢測需求。在圖7中,YOLOv5s模型沒能檢測出圖片左下方被遮擋的電動車目標和右上角遠處模糊的電動車目標,而改進的模型能夠?qū)⑦@兩個目標檢測出來,說明改進的模型對遮擋目標和小目標有更好的檢測效果。在圖8(為了便于觀察做了標簽隱藏處理)中,左側(cè)的自行車目標(藍色框標出)和右側(cè)的電動車目標在特征上有較高的相似度,原始YOLOv5s模型沒能將二者區(qū)分開來,將自行車錯誤地識別為電動車目標,而改進后的模型成功地區(qū)分出了這兩個相似的目標。由此得出,改進后的模型不但在常規(guī)場景下可以成功識別出電動車駕乘人員的頭盔佩戴情況,而且對遮擋目標、小目標和相似度較高的目標也有較好的檢測效果。 (a)YOLOv5s (b)改進的YOLOv5s (a)YOLOv5s (b)改進的YOLOv5s (a)YOLOv5s (b)改進的YOLOv5s 本文針對電動車駕乘人員頭盔佩戴檢測任務,以YOLOv5s模型為基礎,引入GhostBottleneck優(yōu)化網(wǎng)絡結(jié)構(gòu),設計GhostCSP-Bottleneck模塊替換C3模塊,并在主干網(wǎng)絡加入SE注意力模塊,形成了一種適用于嵌入式平臺的輕量化電動車駕乘人員頭盔佩戴檢測方法。實驗結(jié)果表明,改進的模型在精度上稍高于原模型,且具有更少的計算量、更小的模型體積和更快的檢測速度。在640×640 的圖像輸入尺寸下,平均準確率均值mAP為84.2%,在四種模型中最高,比YOLOv5s提高了1.3個百分點;在嵌入式平臺NVIDIA Jetson Xavier NX上的檢測速度可以達到28.6 FPS,比YOLOv5s提高了8.4 FPS,可以很好地滿足實時性的檢測需求。本文提出的模型在精度上和檢測速度上取得了良好的平衡,適合嵌入式平臺的部署檢測。下一步工作目標是要豐富檢測場景,提升模型在夜晚、霧天、雨雪天等環(huán)境下的檢測效果。2.2 SE(squeeze and excitation)注意力模塊
2.3 改進的YOLOv5s模型
3 實驗結(jié)果與分析
3.1 數(shù)據(jù)集及實驗環(huán)境
3.2 實驗平臺和模型訓練配置
3.3 評價指標
3.4 消融實驗
3.5 不同模型在數(shù)據(jù)集上的對比實驗
3.6 不同模型在實際道路上的對比實驗
4 結(jié) 語