洪 儒,于力涵,戴安邦,謝迎娟
(河海大學 信息科學與工程學院,江蘇 常州 213002)
21世紀以來,隨著中國私家車數(shù)量日益增多,交通問題成為了阻礙城市發(fā)展的關(guān)鍵因素。道路堵塞、交通事故的頻繁發(fā)生極大地限制了城市的發(fā)展?;诮煌酥緳z測的智能輔助駕駛方法則可以實時地為駕駛員提供豐富的路面信息,從而降低交通事故發(fā)生率。因此,智能輔助駕駛具有較高的研究價值,成為當下亟待解決的問題[1-4]。
而在雨霧天氣下,道路能見度低,無論是駕駛員還是智能輔助駕駛系統(tǒng)往往都難以準確觀察道路車況、捕捉實時信息[5]。因此在車輛行駛過程中,更加容易遇到道路阻塞的情況,甚至在車輛間發(fā)生碰撞、追尾一類的交通事故?;诖耍瑔堂鬧6]等人通過維納復(fù)原,檢測了六類道路限速交通標志,雖然檢測成功率較高,但算法可識別的種類較少,難以完成完整的系統(tǒng)構(gòu)建。張宏宇[7]利用改進后的Faster-RCNN模型完成了交通標志檢測任務(wù),雖然模型在公開數(shù)據(jù)集上表現(xiàn)良好,但由于Faster-RCNN模型參數(shù)量多,計算量大,難以部署在小型設(shè)備上并實時檢測。除此以外,現(xiàn)有的霧天場景目標檢測大多直接在主流目標檢測模型上進行改進,例如朱開等人[8]優(yōu)化了YOLOv5網(wǎng)絡(luò),并將其用于雨霧天氣下的交通標志識別,也有院老虎等學者在YOLOv5模型的預(yù)測層前加入CBAM注意力機制[9]。但由于沒有采用去霧算法在輸入目標檢測模型前進行預(yù)處理,因此難以估計直接使用目標檢測模型進行訓練的效果可否達到先去霧后檢測的算法。去霧算法的預(yù)處理可以提高圖像清晰度,能夠在很大程度上消除圖像中的霧氣,使得后續(xù)的目標檢測模型能夠更加準確地識別目標物體;霧氣會降低圖像的對比度,使得目標物體的邊緣模糊不清,去霧算法能夠改善圖像的對比度,使得目標物體的邊緣更加明顯,有利于目標檢測模型更好地分割目標;在雨霧天氣下,圖像中的背景往往存在大量的噪聲,去霧算法能夠降低這些背景噪聲,使得目標檢測模型更加容易區(qū)分目標物體和背景。
上述方法存在的問題可概括如下:識別效果不穩(wěn)定、模型實時推理慢、有霧圖像未經(jīng)過去霧處理、小目標識別能力弱和未部署到資源有限的嵌入式硬件中,難以融入生活實際。
針對以上問題,本文在Jetsonnano上利用了AOD-NET去霧算法與改進后的YOLOv5網(wǎng)絡(luò),設(shè)計了一種基于機器視覺的雨霧天智能語音輔助駕駛系統(tǒng),對于減少因視線模糊造成的交通隱患和事故有著重要的研究意義與實際應(yīng)用價值。
本系統(tǒng)的主要創(chuàng)新點包括:
1)去霧算法與目標檢測的結(jié)合。本系統(tǒng)利用輕量化去霧神經(jīng)網(wǎng)絡(luò)AOD-NET預(yù)處理有霧圖像,應(yīng)用于后續(xù)的交通標志檢測,并將其性能與未去霧而直接檢測交通標志的模型進行對比。最終,通過比對目標檢測模型在去霧前圖片與去霧后的圖片上的效果,最終實驗得出未優(yōu)化的YOLOv5n模型的mAP在加霧的TT100K數(shù)據(jù)集上從56.7%提高到了69.1%。在目標檢測模型中為了改進小目標檢測的效果,本文還改進了YOLOv5模型檢測時的初始錨框設(shè)定,使用了K-means++聚類算法重新設(shè)計匹配交通標志檢測數(shù)據(jù)集的先驗錨框尺寸[10],以此使得YOLOv5模型適應(yīng)交通標志的小目標檢測任務(wù)。
2)模型剪枝的使用。本文對訓練完成的YOLOv5模型進行了剪枝的操作[11],使得算法在不損失過多精度的情況下,實時性得以提高,更為貼合實際應(yīng)用的需求。相較于原來的15.50 FPS,現(xiàn)有的運行處理速率是24.68 FPS,在加入去霧算法后仍舊可以達到17.78 FPS。
3)系統(tǒng)化設(shè)計,貼合實際需求。除了算法的設(shè)計,本文還基于檢測成功的數(shù)據(jù),設(shè)計了特定的緩沖區(qū)以及語音播報方法[12],在檢測到交通標志后,無需駕駛員操作,即可通過車載藍牙音箱或藍牙耳機播報語音提示,實時提醒駕駛員路面信息,助力安全駕駛。
雨霧天智能語音輔助駕駛系統(tǒng)在完全自動化的方式下,在駕駛途中,為駕駛員提供符合道路狀況、天氣狀況的交通標志語音播報提示信息。其整體方案如圖1。
圖1 系統(tǒng)方案示意圖
本系統(tǒng)由攝像頭圖像采集、外部信息采集、藍牙語音播報以及搭載改進的交通標志檢測算法的Jetsonnano中央控制器組成。通過GPIO采集外部汽車是否啟動、濕度,并將其傳入中央控制器,中央控制器根據(jù)GPIO輸入的信息,進行下一步操作:當汽車未啟動時,不開啟圖像采集攝像頭;當汽車啟動而未判斷為雨霧天時,采用基本的交通標志檢測算法處理采集到的圖像;當汽車啟動且判斷為雨霧天時,中央控制器將采用去霧算法與交通標志檢測算法結(jié)合的方式,以更有效地方式處理視線不清晰的霧天圖像。最終,中央控制器會將利用采集到的信息控制藍牙語音播報模塊,選擇相對應(yīng)的語音進行播報,輔助駕駛員利用聽覺獲得更多的路面信息。
考慮到本系統(tǒng)在實際車載應(yīng)用中對實時性要求較高,而本文后續(xù)提出的圖像去霧處理、基于深度學習的目標檢測的算法計算量卻較大,除此以外,由于車載的特殊應(yīng)用場合,本系統(tǒng)還要求選擇體積較小且便攜的硬件平臺。
Jetson Nano是一款低功耗、高性能的嵌入式計算機,由英偉達公司推出。它采用NVIDIA Maxwell?GPU架構(gòu)、四核ARM Cortex-A57 CPU、4GB LPDDR4 RAM、16GB eMMC存儲、40針GPIO(General Purpose Input/Output)接口、1個HDMI端口、4個USB 3.0端口、千兆以太網(wǎng)接口、802.11ac Wi-Fi、藍牙4.1和Micro-SD卡擴展。除此以外,Jetson Nano還具有完整的軟件堆棧,包括JetPack軟件開發(fā)套件、CUDA-X AI加速庫、TensorRT和DeepStream SDK等工具,使得開發(fā)和部署深度學習和計算機視覺應(yīng)用變得更加容易和高效[13]。
在本系統(tǒng)測試環(huán)節(jié)中,利用其中的GPU進行推理加速;HDMI端口外接顯示屏進行圖像顯示;USB端口連接鼠標、鍵盤和移動硬盤等外設(shè);GPIO端口讀取外接傳感器數(shù)據(jù);藍牙連接外部的車載音響或藍牙耳機。
GPIO是一種標準接口,可用于控制數(shù)字和模擬信號。Jetson Nano上的GPIO接口采用40針的扁平電纜連接器,并且支持多種不同的協(xié)議和標準,例如I2C、SPI和UART。通過Jetson Nano的GPIO接口,用戶可以輕松地控制各種外設(shè),例如LED燈、蜂鳴器、電機、溫度傳感器等。此外,Jetson Nano還支持各種軟件庫和API,使得GPIO編程變得更加簡單和易于使用[14]。
結(jié)合以上因素,本系統(tǒng)最終選取了Jetson nano作為硬件主板,既保證了硬件資源滿足后續(xù)圖像處理與深度學習實時計算的需要,也有著靈活性、便攜性,其優(yōu)勢可以在車載場合中得到體現(xiàn)。
考慮到本系統(tǒng)以機器視覺為基礎(chǔ),對采集的圖像質(zhì)量要求較高,且由于實際應(yīng)用場合中實時性的需要,圖像采集設(shè)備應(yīng)盡量消耗更少的資源?;诖?,系統(tǒng)選取了與樹莓派原裝Raspi-Cam相同配置的攝像頭,既保證了圖像采集質(zhì)量,也減少了資源損耗。
濕度測量單元采用了DHT11溫濕度模塊,將測量的濕度通過GPIO傳入Jetson nano,Jetson nano將通過軟件程序判斷當前是否為雨霧天,選擇是否進行圖像去霧預(yù)處理,再執(zhí)行后續(xù)交通標志檢測程序。
系統(tǒng)軟件總體上由主程序?qū)⒏鱾€模塊串聯(lián)。主程序在運行后,將通過GPIO讀取當前DHT11傳感器獲得的大氣濕度數(shù)據(jù),隨后將判斷濕度是否超過90%。若未超過,則判斷為非雨霧天氣,將通過OpenCV調(diào)取攝像頭,對每一幀圖像通過改進的YOLOv5模型進行交通標志檢測。若濕度超過90%,則判斷為雨霧天氣,將通過OpenCV調(diào)取攝像頭,對每一幀圖像通過改進的輕量型網(wǎng)絡(luò)AOD-NET進行去霧處理,隨后再通過改進的YOLOv5模型進行交通標志檢測。最終,在識別完成后,若連續(xù)10幀中出現(xiàn)該標志8次以上,并且在此10幀的前20幀畫面中未出現(xiàn)該標志,則將該標志牌信息存入緩沖區(qū)中,程序讀取緩沖區(qū)按順序通過藍牙音箱播報提前設(shè)定好的各個標志對應(yīng)的語音文件。例如,當遇到限速標志牌時,將通過語音告知司機“注意前方限速”,提醒司機觀察前方限速標志牌及其限速信息,滿足了安全駕駛的需要。圖2為軟件運行總體流程圖。
圖2 軟件總體流程圖
在雨霧天氣中,懸浮在空氣中的水微粒對太陽光線有著散射的作用,使得太陽光光強降低,采集到的有霧圖像能見度較低,關(guān)鍵的交通標志信息嚴重缺失,給目標檢測網(wǎng)絡(luò)的特征提取帶來了極大的困難,因此使用快速而有效的去霧方法來預(yù)處理圖像是有必要的。因此在去霧工作中,本文先構(gòu)建了有霧交通圖像數(shù)據(jù)集,接著選取了合適的去霧方法并與主流方法進行比對,最終將其部署在了嵌入式平臺中,以完成工程實際應(yīng)用。
本文的數(shù)據(jù)集構(gòu)建基于簡化后的大氣散射模型。大氣散射模型可以表述為[15]:
I(i,j)=J(i,j)t(i,j)+A(1-t(i,j) )
(1)
其中:I(i,j)表示有霧圖像第i行、第j列的像素值,J(i,j)表示無霧圖像第i行、第j列的像素值,A表示大氣光強,t(i,j)表示透射率,與景深有關(guān),可以進一步表示為以下公式:
t(i,j)=e-β(γ)d(i,j)
(2)
其中:γ表示反射光波長,β(γ)表示大氣散射系數(shù)。
對于交通圖像,一般從上至下分別為天空、標志牌、前方汽車和道路。攝像頭距離這四類目標距離一般天空最遠,標志牌與汽車次之,道路最近,簡化圖像模型后將距離映射到大氣散射模型中的d(i,j),接著映射入t(i,j)中,即代表從天空、標志牌、前方汽車至道路,能見度將越來越高。這也符合雨霧天氣基本的視覺規(guī)律為:從圖像下方至圖像上方,即從行車路面至汽車、標志牌、天空,霧氣濃度越來越高,因此可以簡化大氣散射模型為圖3(b)蒙版。依照雨霧天氣基本的視覺規(guī)律,本文利用OpenCV處理來自TT100K的交通標志數(shù)據(jù)集的一批真實路面圖像構(gòu)建了霧氣增強圖像。圖3分別為路面原圖、霧氣蒙版和加霧后的圖像。
圖3 霧氣模擬圖
對于有霧圖像,本文采用了基于輕量級深度學習模型AOD-NET的去霧方法[16]。AOD-NET網(wǎng)絡(luò)由參數(shù)K估計與無霧圖像生成兩個模塊組成。具體網(wǎng)絡(luò)結(jié)構(gòu)可見圖4,其中從Input至Conv5層均為參數(shù)K估計模塊,Output為無霧圖像生成模塊。
其中參數(shù)K估計模塊基于大氣散射模型。AOD-NET將t(i,j)與A合并定義為新的單一變量K(i,j):
(3)
在后續(xù)的無霧圖像生成模塊中,J(i,j)則可以表示為:
J(i,j)=K(i,j)I(i,j)-K(i,j)+b
(4)
AOD-NET網(wǎng)絡(luò)每個卷積層只有3個卷積核,模型參數(shù)很少,因此具有運算量小、速度快、適合實時部署的特點。
對比實驗在英特爾i7-12700H CPU@2.30 GHz,內(nèi)存32 GB,操作系統(tǒng) Windows11。選取了直方圖均衡化、暗通道先驗去霧[17]和AOD-NET在100張交通真實場景圖上,在不使用GPU的情況下進行對比,通過比對平均SSIM(結(jié)構(gòu)相似性)、PSNR(平均峰值信噪比)、算法速度和主觀評定[18]評估了各個算法的可行性。
如表1所示,本章選取去霧算法AOD-NET的峰值信噪比PSNR以及結(jié)構(gòu)相似性SSIM均高于直方圖均衡化和暗通道先驗去霧算法,AOD-NET生成的去霧圖像和無霧清晰圖像之間的差距更小,圖像具有更高的還原度,說明AOD-NET具有較好的去霧效果。除此以外,在算法速度方面,AOD-NET的速度雖然與傳統(tǒng)的直方圖均衡化相比較慢,但遠遠快于暗通道先驗去霧算法,符合算法實時性場景的要求,在后續(xù)JetsonNano嵌入式平臺上,神經(jīng)網(wǎng)絡(luò)將通過GPU進一步加速。
表1 基于客觀指標的主流去霧算法對比
圖5依次為:有霧圖像(a)、直方圖均衡化去霧算法(b)、AOD-NET去霧算法(c)、暗通道先驗去霧算法(d)和無霧原圖(e),通過對比圖5中各種主流算法去霧效果。在主觀上不難看出直方圖均衡化去霧算法天空部分區(qū)域呈現(xiàn)紅色,失真嚴重;暗通道先驗去霧算法則在天空與其他實物的交界處光線過亮,也有著一定程度的失真;而本文選取的AOD-NET,與原圖、霧圖對比來看,去霧效果顯著,路標關(guān)鍵信息清晰可見,并且去霧后的圖像幾乎沒有顏色失真,具有最佳的視覺效果和最好的還原效果。經(jīng)過比對不同算法速度與效果,本文將選取AOD-NET作為輸入目標檢測模型前圖片的預(yù)處理去霧算法。
圖5 主流算法去霧效果對比
經(jīng)對比,容易看出直方圖均衡化與AOD-NET在時間上滿足實時部署的基本要求,而AOD-NET在本文選取的各個評價指標上表現(xiàn)則要遠好于直方圖均衡化法,證明在本系統(tǒng)中應(yīng)用AOD-NET來完成去霧是可行的。
交通標志種類繁多,在不同標志間還有許多內(nèi)部顏色相同、邊框圖案相似的情況,因此主流的交通標志目標檢測方法中,多采用兩階段算法R-CNN與一階段算法YOLO,這兩類算法的優(yōu)點是識別準確率高、特征提取能力強、有公開預(yù)訓練權(quán)重因而容易收斂,在理論上均適合應(yīng)用于交通標志檢測[19]。但由于兩階段算法R-CNN模型參數(shù)量較多,且計算分為兩階段耗時較長,所以不適合部署在嵌入式平臺上進行實時推理。因此本文選擇在YOLOv5模型上進行進一步改進,既可以保證模型的檢測效果,又在后續(xù)處理中節(jié)省了計算資源,使得模型能在局限的硬件資源上以更好的性能完成實時交通標志檢測。
本文從TT100K中人工篩選出包含重要路面信息、且數(shù)量多于100張的25類交通標志,從而防止后續(xù)模型出現(xiàn)過擬合的情況。
YOLOv5(You Only Look Once Version 5)[20]屬于一階段的目標檢測算法,其模型結(jié)構(gòu)如圖6所示。在開源版本中,YOLOv5共有YOLOv5x、YOLOv5l、YOLOv5m、YOLOv5s和YOLOv5n五個版本。其中YOLOv5n是深度與寬度最精簡的網(wǎng)絡(luò),考慮到模型后續(xù)將部署在嵌入式平臺上進行實時推理,因此本文選用模型體積較小的YOLOv5n作為基礎(chǔ)模型,其預(yù)訓練權(quán)值大小僅3.6 MB。
圖6 YOLOv5網(wǎng)絡(luò)結(jié)構(gòu)
訓練模型使用的平臺為Windows11操作系統(tǒng),使用CUDA10.0和cuDNN7.64加速訓練,編程語言為python3.6,網(wǎng)絡(luò)開發(fā)框架為Pytorch1.6。
YOLOv5是基于回歸的目標檢測算法,把識別作為一個回歸問題來解決,提高識別速度,因此能夠從一張圖片中識別出多種不同類別的物體,計算物體尺寸信息以及所占圖片位置,并且繪制識別框。除此以外,該算法還引入了遷移學習的概念,對于數(shù)據(jù)集的樣本數(shù)量要求大幅降低,能夠適應(yīng)更多場景。
該算法網(wǎng)絡(luò)模型結(jié)構(gòu)可以分成輸入端、骨干網(wǎng)絡(luò)、頸部網(wǎng)絡(luò)、預(yù)測輸出端。
5.2.1 輸入端
YOLOv5的輸入端的操作包含自適應(yīng)錨框計算、自適應(yīng)圖像填充縮放,以及Mosaic數(shù)據(jù)增強。
自適應(yīng)錨框計算中,算法讀取訓練集的圖片以及檢測框的寬、高,利用K-means聚類算法對所有檢測框聚類分析得到錨框,在初始錨框的基礎(chǔ)上輸出預(yù)測框與真實框進行比較,并計算差距、反向計算、迭代更新網(wǎng)絡(luò)參數(shù),以此解決多尺度問題和多目標檢測問題。
Mosaic數(shù)據(jù)增強通過隨機縮放、隨機縮減和隨機排列拼接四幅圖片。每一張圖片都有其對應(yīng)的框,將四張圖片拼接之后就獲得一張新的圖片,同時也獲得這張圖片對應(yīng)的框。接著將這張新的圖片傳入到神經(jīng)網(wǎng)絡(luò)進行訓練,在批標準化計算時,可以一次獲得四張圖片的數(shù)據(jù),使數(shù)據(jù)可以分批處理,然后再進行排序,在仍舊保持著較低的復(fù)雜度的情況下擴大數(shù)據(jù)集容量,豐富了檢測物體的背景和小目標,有利于GPU運算處理[21]。
自適應(yīng)圖像填充縮放的作用是有效利用感受野信息。在目標識別任務(wù)中,如果輸入圖片的尺寸大小不統(tǒng)一,會降低實驗的正確率。若只使用OpenCV中內(nèi)置函數(shù)改變圖片大小可能會導致圖片失真、壓縮過度,以至于失去部分特征,所以檢測的時候使用信箱來統(tǒng)一尺寸大小,采用相同的長寬的收縮比例,有效利用圖像信息。
5.2.2 骨干網(wǎng)絡(luò)
YOLOv5的骨干網(wǎng)絡(luò)主要是用來提取圖像特征的網(wǎng)絡(luò),它的主要作用是將原始的輸入圖像轉(zhuǎn)化為多層特征圖,以便后續(xù)的目標檢測任務(wù)使用。本文所使用的YOLOv5n使用的骨干網(wǎng)絡(luò)是CSPDarknet,能夠在保證較高檢測精度的同時,盡可能地減少內(nèi)存占用和計算量。主要包含 Focus、CSP和空間金字塔模塊SPP結(jié)構(gòu)。Focus對輸入圖像進行切片操作,減少模型層數(shù),提高運行速度。CSP 網(wǎng)絡(luò)結(jié)構(gòu)由CBL模塊、Resuit模塊、Concat通道融合結(jié)構(gòu)、Leaky_Relu激活函數(shù)組成。CBL模塊由卷積模塊、批標準化模塊、激活函數(shù)構(gòu)成。空間金字塔模塊SPP可以增大特征圖的感受野。
5.2.3 頸部網(wǎng)絡(luò)
頸部網(wǎng)絡(luò)采用了如圖7所示的特征金字塔網(wǎng)絡(luò)FPN、路徑聚合網(wǎng)絡(luò)PAN。FPN做自頂向下的部分,主要是通過上采樣以及與更粗粒度的特征圖融合以實現(xiàn)不同層次特征的融合,而PAN做自下向上的部分則是通過一個卷積層來融合不同層次的特征圖。通過上采樣和下采樣的操作將來自不同層次的特征圖融合在一起,生成多尺度的特征金字塔。保證了對不同尺寸的圖片的準確預(yù)測,減少對小目標信息的損失。
圖7 FPN結(jié)構(gòu)
5.2.4 預(yù)測輸出端
預(yù)測輸出端主要用來對特征金字塔進行目標檢測的部分,采用了多層級特征融合的方法,首先骨干網(wǎng)絡(luò)輸出的特征圖將經(jīng)過一個卷積模塊降維通道數(shù)和縮放特征圖,再融合不同層級的特征圖,得到更加豐富的特征信息,從而提高檢測性能。預(yù)測輸出端還使用了一些技巧來進一步提升檢測精度,比如GIoU loss、Mish激活函數(shù)和多尺度訓練等。
總的來說,YOLOv5在各個模塊上的設(shè)計都充分考量了速度和精度之間的平衡,使得它在目標檢測任務(wù)中有出色的表現(xiàn)。
由于本系統(tǒng)的雨霧天交通標志檢測任務(wù)屬于在嵌入式平臺上的小目標檢測任務(wù),因此YOLOv5模型改進主要從小目標檢測優(yōu)化與推理加速兩個方面進行。
雨霧天交通標志檢測任務(wù)屬于小目標檢測任務(wù),因此本文先對雨霧交通場景圖通過輕量級網(wǎng)絡(luò)AOD-NET進行了去霧預(yù)處理。另外,本文利用K-means++對錨框選取方法進行優(yōu)化。除此以外,為了符合實際場景的要求,本系統(tǒng)需要實時檢測目標從而提醒駕駛員,因此要在保證模型性能的情況下提高模型推理速度,本文對YOLOv5模型的骨干網(wǎng)絡(luò)結(jié)構(gòu)進行了改進,并在結(jié)束訓練與測試后對模型進行了剪枝與量化的操作,最大化提升模型推理速度,最終在嵌入式平臺上表現(xiàn)良好。
5.3.1 去霧預(yù)處理
在雨霧天氣中,由于霧霾、雨水等因素的影響,交通標志可能會被遮擋、模糊或失真,對交通標志檢測任務(wù)的準確性和可靠性造成極大影響。因此,本文使用AOD-NET輕量級去霧預(yù)處理在極小的時間代價下改善圖像的特征。AOD-NET可以去除霧霾、雨水等因素帶來的圖像噪聲和失真,提高圖像的質(zhì)量和清晰度。這使得YOLOv5模型更容易檢測和識別交通標志。雨霧天氣中的圖像因素會影響交通標志的特征表示,從而影響交通標志檢測的準確性。去霧預(yù)處理可以極大地減輕影響,改善圖像特征,使得后續(xù)交通標志檢測模型更易于學習和識別交通標志的特征。
本文在TT100K數(shù)據(jù)集及其加霧數(shù)據(jù)集上,對比了直接訓練測試與先去霧后訓練測試的YOLOv5n原始模型,其對比圖如圖8所示。
圖8 未去霧訓練測試與去霧訓練測試
其具體性能指標如表2所示。
表2 去霧訓練與測試效果
容易看出,在輸入網(wǎng)絡(luò)前進行去霧預(yù)處理是有必要的。
5.3.2 錨框與骨干網(wǎng)絡(luò)選取與對比
錨框是用于檢測目標物體的重要組成部分,通過將圖像分成多個網(wǎng)格單元,每個單元預(yù)測一組錨框的大小和位置,然后將預(yù)測結(jié)果與真實目標進行匹配,從而完成目標檢測。先驗錨框的尺寸與數(shù)據(jù)集越貼合,預(yù)測也將會更加準確,并且模型更容易收斂。由于被檢測物體交通標志屬于小目標的范疇,因此需要對官方的錨框預(yù)設(shè)數(shù)據(jù)進行調(diào)整,使其更適應(yīng)小目標檢測的需求。本文利用改進后的K-means算法即K-means++算法,將所有訓練集中的目標框進行簇數(shù)為3的聚類,選取3個聚類中心錨框值為先驗錨框尺寸,以得到一組具有代表性的先驗錨框尺寸,從而更好地適應(yīng)小目標檢測的需求。
K-means++算法通過輪盤賭算法選取了K個聚類中心,再計算各錨框與聚類中心的歐氏距離,依據(jù)歐氏距離大小對錨框進行聚類,聚類完成后針對每個聚類所得的錨框簇再次計算簇中心,作為下一次聚類的中心,迭代以上操作,直到聚類中心不再改變。表3展示了利用K-means++算法挑選出的先驗錨框在不同特征圖上的具體尺寸大小。
表3 改進先驗錨框尺寸
骨干網(wǎng)絡(luò)選取上,在保證模型在較高檢測準確率的情況下,為了可以獲得更快的推理速度,本文選取了MobileNetV2與原有的CSPDarknet進行對比。MobileNetV2是一種輕量級的卷積神經(jīng)網(wǎng)絡(luò),它可以在保持較高的準確率的同時大幅減小模型參數(shù)和計算量。MobileNetV2模型相較于其他骨干網(wǎng)絡(luò),如ResNet等,模型參數(shù)較少,計算量較小,使得MobileNetV2作為YOLOv5骨干網(wǎng)絡(luò)的模型在硬件資源有限的場景下更加實用,如在嵌入式設(shè)備、移動端設(shè)備等。另外,MobileNetV2模型結(jié)構(gòu)簡單,可擴展性強,修改其結(jié)構(gòu)較為輕松,例如添加或刪除卷積層、修改卷積核的數(shù)量和大小等。這使得MobileNetV2模型更容易地適應(yīng)不同的應(yīng)用場景和數(shù)據(jù)集。
本文訓練了骨干網(wǎng)絡(luò)為CSPDarknet的YOLOv5s模型、骨干網(wǎng)絡(luò)為CSPDarknet的YOLOv5n模型與骨干網(wǎng)絡(luò)為MobileNetV2的YOLOv5n模型,在嵌入式平臺Jetsonnano上進行對比實驗,測試結(jié)果如表4所示,經(jīng)過實驗對比,發(fā)現(xiàn)用來替換原有骨干網(wǎng)絡(luò)的主流網(wǎng)絡(luò)MobileNetV2雖然參數(shù)量較小,但由于有較多殘差連接的結(jié)構(gòu),在FPS指標上與原有的YOLOv5n幾乎持平,并且在mAP指標方面仍難以超越Y(jié)OLOv5n,因此MobileNetV2不適用于后續(xù)嵌入式平臺的部署。而ShuffleNetV2雖然模型參數(shù)多于MobileNetV2,但實際計算時FPS超過了MobileNetV2,且mAP也幾乎與原先的CSPDarknet持平,性能與速度都較為可靠。因此,使用ShuffleNetV2作為YOLOv5n的骨干網(wǎng)絡(luò)。
表4 不同網(wǎng)絡(luò)性能與大小對比
5.3.3 模型剪枝
為了進一步提高YOLOv5模型在Jetsonnano上的效率,使用模型剪枝技術(shù)處理已經(jīng)訓練完成的改進YOLOv5n模型。采用通道剪枝技術(shù),通過稀疏化訓練,將對輸出結(jié)果影響較小的通道剪去。在不損失過多精度的前提下,盡可能地加快模型推理速度,更好地滿足實時運算的需求。
YOLOV5n+ShuffleNetV2模型中的BN(Batch Normalization)層通過對每個小批次的數(shù)據(jù)進行歸一化處理,對輸入數(shù)據(jù)進行白化,進而加速網(wǎng)絡(luò)學習過程,并且減輕了對超參數(shù)的依賴性,提高了模型的泛化能力。BN層往往可以加速模型的收斂、抑制過擬合和提升模型精度。BN層具體計算公式如下:
(5)
其中:μβ、σβ分別為批處理數(shù)據(jù)的均值與標準差,xi、yi分別為BN層的輸入數(shù)據(jù)與輸出數(shù)據(jù),γ與β分別為縮放因子與移位因子,均為可學習的因子??s放因子γ衡量了輸入對輸出的影響程度,γ越小,則通道輸入對后續(xù)通道輸出影響很小。
本文基于BN層γ系數(shù)對YOLOV5n+ShuffleNetV2模型進行剪枝,根據(jù)先驗知識選取稀疏化率在0.005至0.000 05之間進行訓練,在不同稀疏率下,mAP變化趨勢如圖9所示。
圖9 不同稀疏率下模型mAP變化
模型mAP在稀疏化率為0.000 1時表現(xiàn)最好,為73.6%,而稀疏化率在超過0.000 1后,模型mAP值急劇下降。因此選擇稀疏化率為0.000 1時的模型進行剪枝。刪除絕對值超過剪枝率對應(yīng)閾值的權(quán)重,同時驗證模型性能,具體實驗結(jié)果如表5所示。
表5 不同剪枝率下的實驗結(jié)果
具體剪枝前后實驗結(jié)果對比如表6所示,剪枝后網(wǎng)絡(luò)精度雖然有小幅度的下降,但推理速度相比剪枝前提高了59.2%。
表6 網(wǎng)絡(luò)剪枝前后實驗對比結(jié)果
在AOD-NET與改進YOLOv5訓練與測試完成后,本文將這兩個模型部署在了嵌入式平臺Jetson nano中,并編寫主程序?qū)穸茸R別模塊、去霧模塊、交通標志檢測模塊和藍牙語音播報模塊串聯(lián),形成完整的系統(tǒng)。由于車內(nèi)無法放置顯示屏演示,因此選擇了在室內(nèi)以讀取與攝像頭相同格式行車記錄儀視頻的方式進行演示。系統(tǒng)本地的運行環(huán)境如圖10所示。
圖10 系統(tǒng)運行環(huán)境
系統(tǒng)的測試步驟如下:
1)配置Jetson nano環(huán)境與調(diào)試。本系統(tǒng)在運行前需要先安裝OpenCV圖像處理庫、Pytorch深度學習框架并傳入模型參數(shù),安裝傳感器并通過GPIO進行調(diào)試,直到可以正確讀取大氣濕度并傳入Python進程。
2)讀取行車視頻,運行主程序。實際測試中,各個功能運行流暢,交互無卡頓,語音播報清晰,可靠性較高,其中開啟攝像頭后檢測模型的FPS達到了17.78。實際檢測效果如圖11所示。
圖11 系統(tǒng)檢測過程
綜上所述,系統(tǒng)測試符合實時推理、準確識別、成功播報的預(yù)期,有著實際的應(yīng)用價值。
本文的改進模型采用的是更換骨干網(wǎng)絡(luò)后完成稀疏化訓練的YOLOv5n模型,并在此模型前采用AOD-NET進行去霧。通過調(diào)整仿真環(huán)境下的霧氣濃度和圖片實際分辨率,在上述完成配置環(huán)境的嵌入式平臺Jetson nano上,重復(fù)預(yù)測了加霧后TT100K數(shù)據(jù)集中的交通標志,并與數(shù)據(jù)集標簽進行對比,計算mAP值。同時,在實際行車記錄儀視頻中,在嵌入式平臺中測試AOD-NET+YOLOv5n與本文改進模型的FPS。具體實驗結(jié)果如表7所示。
表7 YOLOv5n與本文改進模型實驗對比結(jié)果
在霧氣不斷變化、圖片分辨率抖動的情況下,本文的改進模型也能與YOLOv5n模型保持相近的mAP,而每秒運行圖片幀數(shù)FPS則大幅提升,從而可以更及時地處理實時信息,滿足了實際中實時行車輔助駕駛的需要。
本文設(shè)計并開發(fā)了一種基于機器視覺的雨霧天語音輔助駕駛系統(tǒng),能在雨霧天氣和正常天氣兩種天氣下依靠機器視覺檢測前方路面標志牌,將AOD-NET去霧算法與改進的YOLOv5模型相結(jié)合,在多次對比實驗的基礎(chǔ)上驗證了檢測的準確性,同時也利用了模型剪枝技術(shù),提高了模型速度,使之在嵌入式平臺Jetson nano上得以實時推理運行。處理檢測結(jié)果后,有序地通過車載藍牙音箱向駕駛員播報前方交通標志信息,高效準確地為駕駛員提供豐富的路面信息,可以有效地減少交通事故發(fā)生概率。在后續(xù)工作中,可以圍繞更多天氣狀況,制定更多的應(yīng)對策略,從而提高系統(tǒng)面對各種天氣時的魯棒性。