余國豪,賈瑋迪,余鵬飛,李海燕,李紅松
(云南大學 信息學院,云南 昆明 650500)
傳統(tǒng)的燈光檢測儀是通過追蹤光強來移動支架從而定位前照燈的位置,該過程不僅耗時久,而且不夠準確。為了解決此問題,本文基于相機成像并結合深度學習的方法,來定位前照燈的位置,以測量前照燈基準中的高度,同時,還可以利用圖像中的車標、車身顏色等信息進一步防止車輛代檢情況的發(fā)生。
基于深度學習的目標檢測算法在車輛檢測領域一直是熱點研究方向。例如:Xu等[1]提出了基于SSD的車輛檢測算法,引入注意力機制和殘差連接,將其部署到樹莓派上進行使用;Wei等[2]提出了基于PF-Net的車輛檢測算法,多個通道共同表達一個局部信息,在相關數(shù)據(jù)集上取得了較好的效果;GUO等[3]提出了基于YOLOv4的車輛檢測算法,引入注意力機制,使用GhostNet作為Backbone,不僅檢測精度高,而且檢測速度快。由于以上車輛檢測算法主要應用于智能交通系統(tǒng)場景,與車檢站車輛檢測場景的應用需求區(qū)別較大,上述算法無法直接應用于車檢站的車輛檢測領域。查閱文獻后未發(fā)現(xiàn)有前人研究過用機器學習或深度學習的方法來解決基于圖像的車檢站車輛檢測問題,需要針對這一應用場景做有針對性的研究。
因此,本文針對車輛前照燈檢測的實際需求,提出了一種改進YOLOv5s的輕量級網(wǎng)絡模型,滿足了對車輛前照燈檢測的實時性與準確性的要求。實驗結果表明,本文檢測算法的綜合性能最好,能夠滿足車檢站中車輛檢測工作的應用需求。
YOLOv5是One-stage目標檢測算法的代表模型,是在YOLOv1~YOLOv4[4-7]等眾多模型基礎上的又一扛鼎之作。該模型共有4種版本:YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x,模型的性能隨著網(wǎng)絡復雜度的增加而提升。為了取得較好的檢測精度和檢測速度,本文采用YOLOv5s模型來進行車臉(車輛正面,簡稱車臉)檢測。
改進的YOLOv5s由輸入端(Input)、主干特征提取網(wǎng)絡(Backbone)、多尺度特征融合網(wǎng)絡(Neck)和預測器(YOLO Head)4部分組成,其網(wǎng)絡結構如圖1所示。
圖1 改進后的YOLOv5s網(wǎng)絡結構
改進后的網(wǎng)絡結構以ShuffleNetV2[8]作為Backbone提取特征,并引入STA注意力模塊,不僅能加快模型的檢測速度,還能減少模型的參數(shù)量;刪除原有的部分Concat模塊,在下采樣階段,使用跨層特征融合模塊STA-FF來代替,將Backbone的輸出特征通過Sigmoid操作變?yōu)榭蓪W習的權重,然后與對應特征進行Element-wise product操作,增強了模型的特征提取能力,提高了不同尺寸特征的融合效率。下面分別介紹改進后的網(wǎng)絡結構中重要的組成部分。
原YOLOv5s檢測算法的Backbone由Focus、CSPNet[9]和SPP[10]等結構組成,其網(wǎng)絡層數(shù)較深且模型參數(shù)量較多。為了在保證檢測精度的同時,具有較少的模型參數(shù)量,并且還具有較快的檢測速度,本文引入輕量級的ShuffleNetV2網(wǎng)絡作為YOLOv5s的Backbone。為了彌補模型輕量化造成的精度損失,在ShuffleNetV2網(wǎng)絡中的Stage結構后添加STA注意力機制,提高模型對有效特征的捕獲能力。
輸入圖像首先經(jīng)過CBS結構(卷積Conv、批量歸一化BN、激活函數(shù)SiLU)處理,調整特征矩陣的通道數(shù)并縮小尺寸;然后經(jīng)過最大池化(Maxpool)操作進行下采樣處理,目的是減少參數(shù)的數(shù)量;最后由Stage結構和STA注意力模塊交替處理3次,輸出不同尺寸的特征。為了讓Backbone的輸出特征維度能與Neck匹配,本文調整CBS、Stage2、Stage3、Stage4等結構的輸出通道數(shù)分別為64、128、256、512。ShuffleNetV2網(wǎng)絡結構如圖2所示。
圖2 ShuffleNetV2網(wǎng)絡結構
當Stage結構中的步長(stride)取不同的值時,Stage結構也隨之不同。當stride=1時,Stage結構中的左分支不做任何處理,右分支依次經(jīng)過CBR(卷積Conv、批量歸一化BN、激活函數(shù)ReLU)、DWConv(深度可分離卷積)和CBR處理,左分支的輸出結果與右分支的輸出結果進行Concat處理;當stride=2時,Stage結構中的左分支會先依次經(jīng)過DWConv和CBR處理,右分支依次經(jīng)過CBR、DWConv和CBR處理,左分支的輸出結果再與右分支的輸出結果進行Concat處理。
ShuffleNetV2網(wǎng)絡結構及參數(shù)列表見表1。Layer表示每個特征層所經(jīng)歷的模塊;Kernel size表示當前Layer層所采用的卷積核尺寸;stride表示步長;Repeat表示當前Layer重復堆疊的次數(shù);Output表示當前Layer層的輸出特征尺寸。當Repeat取不同值時,當前Layer層中不同結構的stride、Kernel size取值也不同。
表1 ShuffleNetV2網(wǎng)絡結構
隨著YOLOv5s的網(wǎng)絡層數(shù)不斷加深,Backbone在對輸入圖像不斷卷積提取特征的過程中,圖像分辨率不斷降低,使得圖像中分辨率較小的小目標物體的特征信息丟失,從而導致檢測精度不高。為了有效改善該問題,將通道-空間注意力SA-Net[11]與跨通道注意力Triplet[12]相結合,改進SA-Net的空間注意力和Triplet的通道注意力,提出一種跨通道-空間注意力模塊STA,有效捕獲不同維度間的特征映射關系,在不增加計算開銷的情況下提高模型的檢測精度,本文在Backbone中引入STA注意力模塊。STA注意力模塊如圖3所示。
圖3 STA結構
STA注意力模塊分為3個分支:
(1)第一分支是通道注意力分支,輸入特征C×H×W(C、H、W分別表示特征的深度、高度、寬度)首先經(jīng)過Split操作將輸入特征的通道數(shù)均分,得到2組特征矩陣C/2×H×W,再分別經(jīng)過均值池化(AvgPool)和最大池化(MaxPool)變?yōu)?×H×W,然后分別依次經(jīng)過F(x)處理和Sigmoid激活函數(shù)生成權值,再分別將權值與特征矩陣C/2×H×W進行Element-wise product操作,最后通過Concat操作和Channel Shuffle操作得到第一個分支的輸出特征C×H×W;
(2)第二分支是空間注意力分支,通道C維度和空間W維度交互處理特征信息,輸入特征C×H×W首先經(jīng)過Permute操作變?yōu)镠×C×W,再經(jīng)過Z-Pool操作(將最大池化和均值池化的結果在通道方向上拼接起來)變?yōu)?×C×W,然后經(jīng)過CBR處理變?yōu)?×C×W,再經(jīng)過Sigmoid激活函數(shù)生成權值,最后將權值與輸入特征H×C×W進行Element-wise product操作,通過Permute操作得到第二個分支的輸出特征C×H×W;
(3)第三分支也是空間注意力分支,通道C維度和空間H維度交互處理特征信息,輸入特征C×H×W首先經(jīng)過Permute操作變?yōu)閃×H×C,再經(jīng)過Z-Pool操作變?yōu)?×H×C,然后經(jīng)過CBR處理變?yōu)?×H×C,再經(jīng)過Sigmoid激活函數(shù)生成權值,最后將權值與輸入特征W×H×C進行Element-wise product操作,通過Permute操作得到第三個分支的輸出特征C×H×W。
STA注意力模塊是對以上3個分支的輸出特征進行相加求均值的操作。
圖3中,F(xiàn)(x) 表示矩陣的乘法與加法操作,目的是增強特征的表達能力,從而捕獲到更有效的特征信息,其計算公式如下
F(x)=wx+b
(1)
式中:w表示權值矩陣,b表示偏置向量。
淺層特征具有較多的細節(jié)信息,如紋理信息、位置信息等,而深層特征具有較多的語義信息。目標檢測任務不僅需要提取語義信息用于分類識別,還需要提取位置信息用于回歸。原YOLOv5s采用PANet[13]結構的多尺度特征融合方法,同時考慮淺層特征的位置信息和深層特征的語義信息。然而,簡單求和或拼接的特征融合方式會使得模型對不同尺寸的特征分配固定的權重,從而忽視了不同尺寸特征之間的差異,導致特征在融合的過程中丟失部分細節(jié)信息。因此,本文提出了一種基于STA的跨層特征融合(STA-FF)模塊,其核心思想是在特征融合過程中引入注意力機制,在通道域和空間域上對不同尺寸的特征引入一個可學習的權值,使模型自行學習不同尺寸特征的重要性來實現(xiàn)加權特征融合,動態(tài)地改變原有固定特征權值分配方式。STA-FF模塊的結構如圖4所示。
圖4 跨層特征融合(STA-FF)模塊
STA-FF模塊的計算公式如下
Z=Concat(X,Y)⊙Sigmoid(STA(A))
(2)
式中:X與Y表示待融合的特征,XY表示經(jīng)過Concat操作后得到的初步融合特征;A表示Backbone輸出的特征,A′表示經(jīng)過STA注意力模塊和Sigmoid激活函數(shù)后得到的注意力權值矩陣;⊙表示Element-wise product操作;Z表示最終融合后的特征。
為了更加合理地分配權值,本文通過一種基于STA注意力機制的自適應權值分配方法來動態(tài)地分配權值。首先,將待融合特征X與Y通過Concat操作融合,得到初步的融合特征XY;然后,特征A經(jīng)過STA注意力模塊后得到的注意力權值矩陣A′,再經(jīng)過Sigmoid激活函數(shù)處理后A′的值域范圍為0~1;最后將初步融合后的特征XY與權值矩陣A′進行Element-wise product操作,得到最終的融合特征Z。
由于現(xiàn)有的公開車輛數(shù)據(jù)集主要用于車型檢測,大部分是對車身進行標注,用于區(qū)分小車(car)、公交車(bus)、出租車(taxi)、卡車(truck)等車型,導致數(shù)據(jù)集中車輛類別不多、車輛圖片單一,外形相差無幾,缺少車臉的信息,不適用于車輛前照燈檢測的需求,所以本文構建了一個車臉數(shù)據(jù)集Car-Data,對汽車的車臉部分進行標注,即對車燈(carlight)、車標(logo)、車身顏色(color)進行人工標注。其中,車標尺寸小于32像素,車燈尺寸介于32像素與96像素之間,車身顏色尺寸大于96像素,根據(jù)MS COCO數(shù)據(jù)集[14]的定義,它們依次為小、中、大目標。
圖5 數(shù)據(jù)集部分圖片
由于是自建數(shù)據(jù)集,故YOLOv5網(wǎng)絡中原anchor參數(shù)不再適用于本文的數(shù)據(jù)集。因此,使用K-means聚類[15]算法獲取合適目標的邊界框,以便能使算法更快收斂。先驗錨框的尺寸見表2。
表2 先驗錨框尺寸
本實驗的深度學習框架為Pytorch1.9.0,CUDA版本為11.4,編程語言為Python3.8,集成開發(fā)環(huán)境為PyCharm,程序運行平臺為Windows10操作系統(tǒng),CPU為11th Gen Intel(R) Core(TM) i7-11700 @2.50 GHz,GPU為GeForce RTX 3060,顯存為12 G。
網(wǎng)絡的超參數(shù)配置如下:在模型訓練中,通過Adam優(yōu)化器對參數(shù)進行調優(yōu),初始學習率為0.001,學習率動量為0.937,權重衰減系數(shù)為0.0005,使用余弦退火算法動態(tài)調整學習率,以防止模型過擬合;batch-size設置為32,提高訓練速度;訓練總次數(shù)為100個Epoch。
YOLOv5模型的損失函數(shù)Loss由分類損失Lclass、定位損失Lloc和置信度損失Lconf這3部分加權求和組成,計算公式如下
Loss=λ1Lclass+λ2Lloc+λ3Lconf
(3)
式中:λ1、λ2和λ3為平衡系數(shù)。
分類損失Lclass的計算公式如下
(4)
定位損失Lloc的計算公式如下
Lloc=1-CIoU
(5)
式中:IoU表示預測框與真實框的交并比;ρ(b,bgt) 表示預測框與真實框中心點坐標的歐氏距離;c表示能夠同時包含預測框與真實框的最小閉包區(qū)域的對角線距離;α為權重參數(shù);v為度量長寬比一致性的參數(shù);wgt、hgt分別表示真實框的寬和高;w和h分別表示預測框的寬和高。
置信度損失Lconf的計算公式如下
(6)
訓練過程中的損失函數(shù)迭代過程如圖6所示。
圖6 訓練損失
本文采用平均精準率(mean average precision,mAP)、模型參數(shù)量(Parameters)和檢測速度(frame per second,F(xiàn)PS)作為算法性能評價指標。mAP是針對多類別目標檢測精度的情況,它是多類別目標平均精度(AP)的平均值;Parameters表示模型的參數(shù)量,其值越小則模型越輕量化;FPS用來評價檢測速度,其數(shù)值表示檢測模型每秒檢測圖像的幀數(shù),該指標用于衡量模型的實時性。
召回率Recall、精度Precision的計算公式如下
(7)
(8)
其中,TP(True Positive)表示模型檢測為真的正樣本個數(shù);FN(False Negative)表示模型預測為非真的正樣本個數(shù);FP(False Positive)表示模型檢測為真的負樣本個數(shù)。
AP是指在所有召回率的可能取值情況下得到的所有精度的平均值,計算公式如下
(9)
式中:P表示Precision,R表示Recall,以Recall為橫軸,Precision為縱軸,并將每次的值連線,繪制得到PR曲線。使用積分的方法來計算PR曲線與坐標軸圍成的面積,得到AP。
mAP表示所有類別的平均準確率AP均值,計算公式如下
(10)
式中:n為總的類別數(shù)量。
對輕量化模型、注意力機制以及跨層特征融合的有效性分別進行實驗,選擇Ultralytics5.0版本的YOLOv5s作為實驗的基準模型。
2.4.1 不同Backbone對比
通過消融實驗來驗證本文使用ShuffleNetV2作為Backbone是否能夠在保證模型檢測精度的同時實現(xiàn)模型的輕量化和實時性,實驗結果見表3。
表3 不同Backbone對檢測性能的影響
從表3中結果可以看出,在YOLOv5s網(wǎng)絡的基礎上將Backbone替換為ShuffleNetV2,mAP降低了0.7個百分點,F(xiàn)PS提升了20.98 frame/s(23%),Parameters降低了14.20 M(53%)。實驗結果表明,在mAP略微降低的同時,能夠極大降低模型參數(shù)量,并能有效提升模型的檢測速度,這驗證了替換Backbone對減小模型參數(shù)量和加快圖像推理速度的有效性。
2.4.2 注意力機制對比
注意力機制并不是在網(wǎng)絡中的任何位置均有作用,通過多次實驗發(fā)現(xiàn),相比于將STA注意力模塊添加到Neck和YOLO Head中,將其添加在Backbone中,取得了最好的檢測效果,實驗結果見表4。本文認為將STA注意力模塊嵌入到模型的不同位置之所以導致不同的檢測效果,是因為Backbone中的特征含有豐富的輪廓信息和紋理信息,能夠更好地捕獲細節(jié)特征信息;而在更深層次的Neck和YOLO Head中,由于特征含有更豐富的語義信息和更大的感受野,導致STA注意力模塊難以區(qū)分特征間的重要性。
表4 不同注意力模塊對檢測性能的影響
YOLOv5s-Backbone表示在Backbone中的每個Stage結構后面引入一個STA注意力模塊;YOLOv5s-Neck表示在Neck中的每個CSP結構后面引入一個STA注意力模塊;YOLOv5s-Head表示在YOLO Head中的每個Head結構前面引入一個STA注意力模塊。
從表4中結果可以看出,以ShuffleNetV2作為Backbone,在YOLOv5s模型的不同位置分別嵌入STA注意力模塊后,Parameters保持不變。在Backbone中嵌入STA注意力模塊后,mAP提升了0.8個百分點,F(xiàn)PS降低了2.24 frame/s;而在Neck和YOLO Head中分別嵌入STA注意力模塊后,mAP分別降低了0.2個百分點和0.9個百分點,F(xiàn)PS分別降低了1.81 frame/s和3.02 frame/s。
實驗結果表明,在Backbone中嵌入STA注意力模塊雖然使得模型的檢測速度有一定程度的降低,但卻能捕獲到更為完整的特征信息,增強了模型對特征信息的捕獲能力,從而提高了模型的檢測精度,并且不會額外增加模型參數(shù)量,即不會造成額外的計算開銷,這驗證了STA注意力模塊對提高模型檢測精度的有效性。
2.4.3 特征融合方法對比
為驗證改進的特征融合方法STA-FF模塊的有效性,本文對不同的特征融合方法進行消融實驗,實驗結果見表5。
表5 不同特征融合方法對檢測性能的影響
從表5中結果可以看出,引入改進的特征融合方法STA-FF模塊后,mAP提升了2.1個百分點,F(xiàn)PS降低了4.85 frame/s,Parameters保持不變。實驗結果表明,與原始特征融合方法Concat相比,改進的特征融合方法STA-FF在特征融合過程中基于注意力機制分配可學習權值,使得模型不僅能夠捕獲特征中更加高級的語義信息,還能保留更多特征融合后的細節(jié)信息,從而能夠提升模型的檢測精度,這驗證了改進的特征融合方法STA-FF模塊對提高模型檢測精度的有效性。
為了檢驗本文模型的性能,選取Faster R-CNN[16]、RetinaNet[17]、YOLOv4和YOLOv5s在相同數(shù)據(jù)集上進行訓練、驗證和測試。實驗結果見表6。
表6 不同檢測算法性能對比
從表6中結果可以看出,本文模型提高了檢測精度,mAP達到了94.3%,實現(xiàn)了模型的準確檢測;同時具有較高的檢測速度,F(xiàn)PS達到了105.60 frame/s,實現(xiàn)了模型的實時檢測;相比原YOLOv5s模型,Parameters減小了14.20 M(53%),實現(xiàn)了模型的輕量化。因此可以得出,與其它主流目標檢測模型相比,本文模型在檢測精度、檢測速度和模型輕量化等方面性能更優(yōu),能夠更好地完成車檢站中車輛檢測的任務。
為了定性比較本文模型與原YOLOv5s模型,從而獲取更直觀的對比效果,本文分別用這兩種模型對測試集的部分車輛圖片進行了檢測,部分檢測結果對比如圖7~圖9所示。
從圖7對比結果中可以看出,YOLOv5s模型出現(xiàn)了置信度較低的情況:“carlight”標簽、“Roewe”標簽和“Suzuki”標簽的置信度相對較低,均低于0.9;而本文模型的置信度較高,達到了0.9及以上。
從圖8對比結果中可以看出,YOLOv5s模型出現(xiàn)了漏檢的情況:未檢測到“Blue”標簽、“Subaru”標簽和“Peugeot”標簽;而本文模型準確檢測出所有目標,且置信度較高。
圖8 檢測效果對比(漏檢)
從圖9對比結果中可以看出,YOLOv5s模型出現(xiàn)了誤檢、漏檢的情況:將正確的“Orange”標簽誤檢為“Yellow”標簽、未檢測到“JAC”標簽;本文模型能夠全部將目標正確檢測出來且置信度較高。
圖9 檢測效果對比(誤檢)
由上述多種情況比較可知,相比于原YOLOv5s模型,本文模型的檢測性能更好,對復雜環(huán)境具有較好的魯棒性,降低了誤檢和漏檢的概率,具有良好的泛化能力。
針對車檢站中車輛檢測的實際需求,本文結合ShuffleNetV2設計出一種基于YOLOv5s的輕量化車臉檢測算法。實驗結果表明,相比于目前幾種主流檢測算法,本文算法在滿足輕量化的同時,也具備較高的檢測精度,并且能更好地滿足目標檢測任務的實時性要求。本文算法的不足之處在于對小目標物體檢測的效果不夠理想。后續(xù)工作的研究重點是確保模型輕量化的同時進一步提高檢測精度和檢測速度,同時探究雨雪天氣和夜間環(huán)境對車輛目標檢測的影響,加強模型對小目標物體的檢測能力。