江子昂 李小玉 李洋 羅力 張澤世



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