江子昂 李小玉 李洋 羅力 張澤世
關(guān)鍵詞:YOLOv5s;目標(biāo)檢測;車輛檢測
中圖分類號: TP311 文獻標(biāo)識碼:A
文章編號:1009-3044(2023)03-0019-03
1 引言
截至2022年6月底,公安部已經(jīng)官方宣布我國的車輛總量已經(jīng)達到了4.06億輛,與2021年底比較,新增加了1082 萬輛汽車(扣除報廢注銷量),增長率為2.74%。其中,2022年6月之前新注冊登記的車輛就有1657萬輛。這說明了我國人民的生活質(zhì)量處于不斷上升的趨勢中,對汽車的需求量也在持續(xù)的增加,這就導(dǎo)致道路交通擁堵現(xiàn)象越來越多。日益增加的汽車數(shù)量以及相對落后的道路交通管理系統(tǒng)是造成道路交通擁堵的最主要根源[1]。車輛目標(biāo)檢測在道路交通管理系統(tǒng)中扮演著十分關(guān)鍵的角色。車輛目標(biāo)檢測屬于電腦視覺的典型任務(wù),其目的就是從圖片中找出物品的具體的位置,并檢測出物品的具體類別是什么[2]。如果可以快速且準(zhǔn)確地檢測出車輛,就可以對車輛流動做出最及時的管理從而避免道路交通擁堵。
最近幾年中卷積神經(jīng)網(wǎng)絡(luò)的研究獲得了迅猛的成長,使得基于卷積神經(jīng)網(wǎng)絡(luò)的目標(biāo)檢測方法也受到了更多的重視與應(yīng)用,其中比較典型的方法包括RCNN[3],F(xiàn)ast R-CNN[4],F(xiàn)aster R-CNN[5]等一些基于候選框的二層次方法,不過由于這一類方法在訓(xùn)練的時候需要相當(dāng)大的空間且訓(xùn)練和檢測的速度非常慢,因此這類二層次方法并不合適用在交通管理系統(tǒng)中來檢測大批次的車輛。YOLO系列算法是當(dāng)前比較流行的另外一種類型的算法,此算法的訓(xùn)練和檢測速度非???,因此廣泛地被應(yīng)用于工業(yè)上面。本文使用YOLOv5算法中的YOLOv5s模型來進行復(fù)雜情況下的車輛檢測,用數(shù)據(jù)標(biāo)記軟件labelimg 對公共數(shù)據(jù)集StanfordCar Dataset[6]進行標(biāo)記處理,得到用訓(xùn)練、測試和驗證各150張汽車圖片組成的數(shù)據(jù)集,基于得到的數(shù)據(jù)集進行YOLOv5s模型的訓(xùn)練測試和驗證,最后利用互聯(lián)網(wǎng)和實地拍攝的數(shù)據(jù)材料來實際驗證模型的性能。
2 YOLOv5 模型概述
YOLO的意思就是you only look once(你只看一次),這類算法的創(chuàng)造性在于它把目標(biāo)檢測問題看待成回歸問題,直接從圖像元素開始,計算邊框和分類的可能性。YOLO系列算法經(jīng)過不斷的升級更新出現(xiàn)了有YOLOv1[7],YOLOv2[8],YOLOv3[9],YOLOv4[10],YOLOv5 等算法,YOLOv5算法是由Ultralytics LLC有限公司于2020年6月發(fā)布的,在其官方的源碼庫中出現(xiàn)了4各不同的版本,分別是YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x四個模型,其中YOLOv5s模型是所有4個模型中深度最少的,特征圖的寬度也最小的一個模型,而其他的3種模型都是在YOLOv5s模型的基礎(chǔ)上不斷深化,并進一步加寬得到的。YOLOv5s 一般由輸入端、Backbone、Neck和Prediction四個具有特殊功能的部分組成。圖1為YOLOv5s網(wǎng)絡(luò)結(jié)構(gòu)圖。
輸入端口YOLOv5s,主要應(yīng)用了Mosaic圖像增強的技術(shù)、自適應(yīng)錨框方法,以及自適應(yīng)圖像縮放方法。Mosaic數(shù)據(jù)增強是YOLOv5團隊成員提出來的,這種方法可以豐富數(shù)據(jù)集,可以增加很多的小目標(biāo),增強網(wǎng)絡(luò)的穩(wěn)健性,在小目標(biāo)的檢測過程中效果還是很可觀的。另外在YOLOv3、YOLOv4算法中,不同的數(shù)據(jù)集在進行訓(xùn)練的時候,初始錨框值都是采用單獨的程序計算得到的,但官方給出的YOLOv5算法的源碼中增加了自適應(yīng)錨框方法和自適應(yīng)圖像縮放方法,使得在每一次訓(xùn)練過程中,此算法都會自適應(yīng)的計算不同數(shù)據(jù)集中的最佳錨框值,并在原始圖片中自適應(yīng)的使用最小的黑邊,提升了模型推理能力。
Backbone主要包括Focus結(jié)構(gòu)和CSP結(jié)構(gòu)。如圖2所示,F(xiàn)ocus結(jié)構(gòu)的主要核心就是切片功能[11],在此模型中原始的608×608的3通道圖像輸入到Focus結(jié)構(gòu)中,使用切片功能,先變成304×304具有12通道的特征信息圖,再經(jīng)過一次由32個卷積核組成的卷積操作,最終變成304×304具有32通道的特征信息圖。此算法中還設(shè)計了兩種CSP結(jié)構(gòu),CSP1_X結(jié)構(gòu)在Back?bone主干網(wǎng)絡(luò)被采用,而另一種CSP2_X結(jié)構(gòu)則使用于Neck部分中。CSP結(jié)構(gòu)首先會將基礎(chǔ)層的特征信息映射劃分為兩個部分,最后通過跨階段層次結(jié)構(gòu)將它們合并,這種結(jié)構(gòu)不但可以增強網(wǎng)絡(luò)的學(xué)習(xí)能力還可以降低計算瓶頸,使模型變得輕量的同時識別準(zhǔn)確性不會改變。
Neck部分主要使用了FPN+PAN結(jié)構(gòu),F(xiàn)PN是將上層的特性信息特點利用向上采樣的方法傳遞融合,傳達強語義特征并得以提供進行預(yù)測的特征圖,PAN則從底向上傳達強定位特性信息,這樣FPN+PAN結(jié)構(gòu)就可以從不同的主干層對不同的檢測層進行特征聚合。YO?LOv5在Neck這一部分并沒有按部就班地使用YOLOv4 中的普通卷積操作,而是把CSP2_X結(jié)構(gòu)加入到了Neck 部分,從而提高了對網(wǎng)絡(luò)特殊信息的整合能力。
Prediction部分YOLOv5也使用了與YOLOv4相似的損失函數(shù),采用了CIOU_Loss 作為目標(biāo)Boundingbox的損失函數(shù)。CIOU_Loss可使預(yù)測框回歸的速率和準(zhǔn)確性都更高一些。CIOU_Loss為公式(1) ,其中v 是度量長寬比一致性的參數(shù),應(yīng)該確定為公式(2):
3 實驗與結(jié)果分析
本節(jié)首先會介紹實驗所用到的數(shù)據(jù)集及其處理的方法,然后是實驗的運行環(huán)境及依賴庫的版本,再然后是實驗的過程,最后是重點分析YOLOv5s模型的性能和實際的檢測效果。
3.1 數(shù)據(jù)集介紹和處理
該實驗使用的是公共數(shù)據(jù)集Stanford Car Dataset。這個數(shù)據(jù)集是由stanford所建立,是一個汽車資料集合,數(shù)據(jù)集中包括了16185張汽車圖像,汽車的種類也非常的豐富,足足有196種汽車?;旧犀F(xiàn)實生活中所有的車輛的圖像在數(shù)據(jù)集中都可以找到。數(shù)據(jù)集被分為有8144個訓(xùn)練圖片的訓(xùn)練集和8041個試驗圖片的測試集,而其中的各個車輛分類都已大致分成了50-50個分割。類通常指品牌,型號,生產(chǎn)日期等級別,2012的特斯拉Model S或者是2012 的BMW M3 coupe。
在處理數(shù)據(jù)集階段使用labelimg對數(shù)據(jù)集進行標(biāo)記,labelimg是一款給圖形標(biāo)注類別的工具,它是基于python開發(fā)的,圖形界面則采用QT開發(fā),用此工具可以使標(biāo)記的圖片保存成各種網(wǎng)絡(luò)模型訓(xùn)練時所需要的文件格式。使用labelimg對數(shù)據(jù)集中的圖像進行處理,指明識別對象為car類別,保存文件格式調(diào)整為yolo_txt格式,如圖3所示,經(jīng)過labelimg標(biāo)記處理后得到數(shù)據(jù)集的帶標(biāo)簽的yolo_txt文件,只有得到了帶標(biāo)簽的yolo_txt文件才可以訓(xùn)練模型。分別對訓(xùn)練集、測試集和驗證集各150圖片進行標(biāo)記操作,得到最終的數(shù)據(jù)集。用這些數(shù)據(jù)集來進行模型的訓(xùn)練。
3.2 實驗環(huán)境
YOLOv5是利用Python所編寫所以運行環(huán)境中需要安裝Python,訓(xùn)練YOLOv5s模型所需要的依賴庫之間的版本對應(yīng)是非常嚴(yán)格的,版本之間的不對應(yīng)會導(dǎo)致模型無法訓(xùn)練的結(jié)果,此實驗是嚴(yán)格按照表1所示的版本進行模型訓(xùn)練的。其中IDE是集成的開發(fā)環(huán)境,是提供程序開發(fā)環(huán)境的工具,包含了代碼編輯器、編譯器、調(diào)試器和圖形用戶界面等工具;依賴庫numpy是一種數(shù)字計算擴展,對于大型矩陣的運算是非常方便的;依賴庫pandas是在數(shù)據(jù)分析階段所使用的庫;依賴庫pillow是圖像處理庫,具有對圖像進行裁剪、調(diào)整大小和顏色處理等功能;依賴庫scipy是用來進行計算大多數(shù)函數(shù)運算的庫;依賴庫Pytorch是運行環(huán)境中最重要的庫,它是由Facebook(臉書)的人工智能研究院開發(fā)的,是一個用Python開發(fā)的可續(xù)計算包,主要有兩個功能:1) 具有強大的張量計算。2) 包含自動求導(dǎo)系統(tǒng)的深度神經(jīng)網(wǎng)絡(luò)。
3.3 實驗結(jié)果
根據(jù)搭建的環(huán)境和標(biāo)注處理好的數(shù)據(jù)集來訓(xùn)練模型,訓(xùn)練weights(權(quán)重)設(shè)置為YOLOv5s.pt,batchsize(每批次樣本的數(shù)量)調(diào)整為4,增加模型的泛化力,經(jīng)過100次迭代最終得到訓(xùn)練好的模型文件YO?LOv5s.pt,模型性能如表2所示,其中Precision是查準(zhǔn)率的意思,表達式為公式(3) ,其中TP為正樣本正確分類的個數(shù),F(xiàn)N為正樣本未分類的個數(shù),訓(xùn)練曲線圖如圖4所示,圖中Precision的數(shù)值趨于平穩(wěn)緩和并數(shù)值上接近1,說明模型的準(zhǔn)確度已經(jīng)很高了;Recall是查全率的意思,表達式為公式(4) ,其中FP為沒有正確分類的個數(shù),訓(xùn)練曲線圖如圖5所示,圖中Recall的數(shù)值最后維持在0.8 左右,說明模型的失誤檢測率低;mAp@0.5和mAp@0.5:0.95:mAp是用Precision和Re?call作為兩坐標(biāo)軸作圖所圍成的范圍,越靠近1,模型精度就越高[12]。根據(jù)以上數(shù)據(jù)可以得出實驗訓(xùn)練出來的模型在車輛識別的正確率是非常高的。
3.4 實際檢測
為了實際檢測訓(xùn)練好的YOLOv5s.pt模型的識別準(zhǔn)確度,使用訓(xùn)練好的YOLOv5s.pt模型檢測在互聯(lián)網(wǎng)上找到的一張帶有汽車的圖片所需要的時間為11.1ms,結(jié)果如6所示,為了具體的驗證模型的識別準(zhǔn)確性,采用實地拍攝圖片和視頻用YOLOv5s.pt模型進行檢測,結(jié)果如圖7所示。
根據(jù)圖6和圖7可以看出,無論是互聯(lián)網(wǎng)上的圖片還是實地拍攝的圖片模型,都準(zhǔn)確地檢測出圖片中的車輛可以準(zhǔn)確地把圖片中的車輛用紅色的方框標(biāo)記出來,并沒有出現(xiàn)錯誤,準(zhǔn)確度都在90%左右,這說明模型已經(jīng)訓(xùn)練得比較好了。
4 結(jié)束語
本文把YOLOv5算法中的YOLOv5s模型運用到車輛檢測中,使用Stanford Car Dataset數(shù)據(jù)集訓(xùn)練、測試和驗證模型,得到Y(jié)OLOv5s.pt模型文件,使用訓(xùn)練好的模型文件進行檢測,結(jié)果表明識別的準(zhǔn)確率非常高,可以對車輛進行高準(zhǔn)確度的檢測,實現(xiàn)了城市道路車輛的有效檢測,這對城市道路管理有著非常大的意義,可以提高城市道路車輛管理的效率,有效地避免道路交通擁堵。