劉 俊,鐘國(guó)韻,黃斯雯,劉麒麟
(東華理工大學(xué) 信息工程學(xué)院,江西 南昌 330013)
目前計(jì)算機(jī)視覺研究者們?cè)谥饾u探索車輛圖像數(shù)據(jù)處理的落地應(yīng)用,以助力智慧交通。車輛屬性檢測(cè)就是其中一個(gè)基礎(chǔ)的計(jì)算機(jī)視覺任務(wù),主要檢測(cè)車輛的車燈、車牌、車輛logo 等車輛屬性區(qū)域位置,其結(jié)果可以被應(yīng)用到很多下游的交通視覺任務(wù)。例如利用檢測(cè)到的車燈屬性來判定車輛是否變道打轉(zhuǎn)向燈;車牌屬性可以作為車牌OCR 識(shí)別的輸入,還可結(jié)合整體的車輛屬性,來實(shí)現(xiàn)車輛重識(shí)別等[1]。
由于早期顯卡的顯存和計(jì)算能力的限制,神經(jīng)網(wǎng)絡(luò)無法設(shè)計(jì)得很深,導(dǎo)致當(dāng)時(shí)目標(biāo)檢測(cè)的研究還是偏向于傳統(tǒng)的圖像處理,主要可以分為區(qū)域選擇、特征提取和分類三步。區(qū)域選擇一般是通過在圖像上進(jìn)行逐塊像素的遍歷,來找到與目標(biāo)匹配的區(qū)域;特征提取則是依據(jù)研究員的相關(guān)先驗(yàn)知識(shí),如待檢測(cè)目標(biāo)的形狀、紋理、明暗顏色等,從上一步獲取的區(qū)域中提取特征,代表算法有尺度不變特征變換(SIFT)[2]和方向梯度直方圖(HOG)[3];最后是訓(xùn)練分類器將特征分類,主要利用將待分類數(shù)據(jù)的特征向量映射到高維空間,以實(shí)現(xiàn)將不同類別的數(shù)據(jù)分開,經(jīng)典算法有支持向量機(jī)(SVM)[4]和AdaBoost[5]。
深度學(xué)習(xí)[6]開始流行后,基于卷積神經(jīng)網(wǎng)絡(luò)的方法逐漸在計(jì)算機(jī)視覺領(lǐng)域占據(jù)主導(dǎo)地位。具體到目標(biāo)檢測(cè)任務(wù),檢測(cè)的實(shí)時(shí)性不斷提高,速度能夠超過25 f/s,準(zhǔn)確率也在逐漸上升,已經(jīng)可以滿足落地使用的要求?,F(xiàn)有的目標(biāo)檢測(cè)算法包括兩類:One-Stage 和Two-Stage[7]。One-Stage 類的算法是一個(gè)端到端的網(wǎng)絡(luò)直接對(duì)物體進(jìn)行分類以及回歸出Bounding box 的坐標(biāo),現(xiàn)在使用最廣泛的是YOLO 系列算法[8-10]和SSD;Two-Stage 類的算法分為兩步,需要先選出最有可能的區(qū)域作為候選區(qū),然后再對(duì)這些區(qū)域進(jìn)行修正,這種算法的準(zhǔn)確率比前者要高一些,代表算法是Faster R-CNN。
Zhao Yanzhu 等人在SSD 的基礎(chǔ)上,增加了選擇更多的底層候選區(qū)域,并且將損失函數(shù)換成了focal loss 以提高車輛局部屬性區(qū)域的檢測(cè)[11],但是工程性、易用性和準(zhǔn)確率還有待提高。本文采用最新的YOLOv5 對(duì)車燈、后視鏡等車輛的局部零件區(qū)域位置進(jìn)行檢測(cè),由于它們相對(duì)較小,為了讓模型把更多的注意力放在小目標(biāo)對(duì)象上,加入了卷積注意力模塊;由于構(gòu)建的數(shù)據(jù)集樣本種類相對(duì)較少,為了增強(qiáng)模型的泛化能力,改進(jìn)了YOLOv5的馬賽克數(shù)據(jù)增強(qiáng)方式;最后,本文把激活函數(shù)改為自門控激活函數(shù)Swish,以抑制噪聲并且加速網(wǎng)絡(luò)訓(xùn)練。
YOLOv5 的網(wǎng)絡(luò)架構(gòu)整體上與YOLOv4 非常接近,由主干網(wǎng)絡(luò)、頸部網(wǎng)絡(luò)和輸出三部分組成,具體結(jié)構(gòu)圖如圖1 所示。
主干網(wǎng)絡(luò)是用來進(jìn)行提取圖像底層特征的,主要包括Focus 結(jié)構(gòu)和跨階段層次結(jié)構(gòu)(CSP)[12]。Focus 結(jié)構(gòu)中主要是一個(gè)切片操作,具體流程為:對(duì)圖像在每個(gè)通道進(jìn)行均勻劃分,將劃分后每個(gè)圖像塊對(duì)應(yīng)位置的像素值拼成一個(gè)新的通道。所以操作完成后會(huì)增加很多新通道,這樣可以讓模型學(xué)習(xí)到更多圖像的局部特征??紤]到計(jì)算瓶頸和內(nèi)存成本,CSP 模塊通過先把底層特征圖分為兩部分,然后通過跨階段層次結(jié)構(gòu)再將它們合并的方式,既大大降低了計(jì)算量,又保證了準(zhǔn)確率[13]。
頸部網(wǎng)絡(luò)是利用特征金字塔的架構(gòu),將多個(gè)下采樣(圖1 網(wǎng)絡(luò)結(jié)構(gòu)圖中的4、6、9 號(hào)位置) 得到的不同尺度的特征圖,通過上采樣的方式將高層特征信息流通并融合起來。輸出模塊會(huì)輸出相對(duì)于原圖的8、16、32 倍下采樣的3 個(gè)尺度特征圖,采用多個(gè)尺度是因?yàn)榭紤]到檢測(cè)的物體大小不一,這樣不會(huì)造成小目標(biāo)的檢測(cè)率過低。輸出的預(yù)測(cè)結(jié)果包括Bounding box 的坐標(biāo)、坐標(biāo)的置信度分?jǐn)?shù)和預(yù)測(cè)為某類別的概率。
圖1 YOLOv5 網(wǎng)絡(luò)結(jié)構(gòu)
與之前的版本相比,在網(wǎng)絡(luò)架構(gòu)方面一個(gè)很大的改進(jìn)是,YOLOv5 通過調(diào)節(jié)深度倍數(shù)(depth multiple)和寬度倍數(shù)(width multiple)兩個(gè)參數(shù),可以得到不同大小的網(wǎng)絡(luò),這樣便于根據(jù)自己具體的需求來調(diào)整網(wǎng)絡(luò)參數(shù)的大小。
人類每天都要接收大量的視覺信息,其實(shí)它們已經(jīng)超過了大腦所能處理的量,但是人類在進(jìn)化中學(xué)會(huì)了將有限的注意力更多地分配到感興趣區(qū)域。例如人類的眼睛會(huì)自動(dòng)關(guān)注視野內(nèi)運(yùn)動(dòng)或者發(fā)光的物體。這些往往是輸入到大腦中信息量比較多的區(qū)域。網(wǎng)絡(luò)模型也是如此,需要把有限的注意力放在信息量大的地方。
對(duì)于輸入圖像,車輛的通用目標(biāo)只占整體的較小部分,大部分為背景信息,在經(jīng)過多次的卷積操作后,會(huì)產(chǎn)生大量冗余信息,逐漸將小目標(biāo)對(duì)象的信息淹沒,導(dǎo)致網(wǎng)絡(luò)檢測(cè)不到部分小目標(biāo),如年檢標(biāo)志、后視鏡等。因此,本文將卷積塊注意力模塊(CBAM)嵌入到Y(jié)OLOv5 中,它通過結(jié)合通道和空間的注意力計(jì)算分配,讓網(wǎng)絡(luò)更多地關(guān)注到應(yīng)該關(guān)注的小目標(biāo)對(duì)象。圖2 是CBAM 模塊的結(jié)構(gòu),輸入其中的特征圖依次通過通道和空間注意力模塊,分別進(jìn)行通道與空間上的注意力計(jì)算[14]。
圖2 卷積注意力模塊
在通道注意力模塊(結(jié)構(gòu)如圖3 所示)中,其操作具體如式(1)所示:
圖3 通道注意力模塊
其中,MLP()表示通過一個(gè)多層感知機(jī);F 表示輸入的特征;AvgPool()表示平均池化操作;MaxPool()表示最大池化操作;Sigmoid()表示將數(shù)據(jù)輸入Sigmoid 函數(shù)中,將其映射到0~1 之間。
在空間注意力模塊(結(jié)構(gòu)如圖4 所示)中,其具體操作如式(2)所示:
圖4 空間注意力模塊
其中,f7×7表示7×7的卷積操作。
雖然池化操作會(huì)造成一定程度的細(xì)粒度信息的丟失,但是這兩個(gè)模塊均使用了Global Max Pooling 和Global Average Pooling,這樣可以減少信息的丟失,而且豐富了網(wǎng)絡(luò)能夠?qū)W習(xí)到的信息。
本文把CBAM 插入到Y(jié)OLOv5 的頸部,具體方式為在圖1 所示YOLOv5 網(wǎng)絡(luò)結(jié)構(gòu)圖中標(biāo)識(shí)的4、6、9 號(hào)3 個(gè)CSP 模塊內(nèi)部的最后加上CBAM 模塊,這樣能更好地提升模型檢測(cè)小目標(biāo)的性能。
馬賽克(Mosaic)數(shù)據(jù)增強(qiáng)是YOLOv5 中很重要的一種數(shù)據(jù)增強(qiáng)方式。即在載入一張圖片時(shí),再額外從數(shù)據(jù)集中任意選擇3 張圖片,先通過隨機(jī)裁減,再順時(shí)針拼接在一張圖片上,最后縮放為設(shè)定的輸入尺寸,并作為新的樣本傳入模型。這樣既豐富了待檢測(cè)目標(biāo)的背景,又增加了每次訓(xùn)練每批次中小目標(biāo)的數(shù)量,實(shí)現(xiàn)了不同尺度目標(biāo)間的平衡。
由于本文構(gòu)建的車輛通用目標(biāo)數(shù)據(jù)集中只有7 個(gè)類別,不同的車輛總共只有776,與一些標(biāo)準(zhǔn)數(shù)據(jù)集(例如含有80 個(gè)類別,超過20 萬張圖片的COCO 數(shù)據(jù)集)相比,數(shù)據(jù)過少,因此需要對(duì)現(xiàn)有的數(shù)據(jù)進(jìn)行數(shù)據(jù)增廣以提高模型的泛化能力。又因?yàn)樵捡R賽克數(shù)據(jù)增強(qiáng)方式是隨機(jī)裁剪的,會(huì)有很大概率將目標(biāo)裁剪,使輸入模型的樣本只有背景;另外原始圖片本身尺度也不一致,這樣會(huì)使拼接后的圖片有較多黑白的邊界,從而會(huì)導(dǎo)致模型訓(xùn)練大量無用的特征信息,影響了模型收斂的速度,如圖5(a)所示。因此,本文改進(jìn)了馬賽克數(shù)據(jù)增強(qiáng)方式。在載入圖片時(shí),再額外選擇8 張圖片進(jìn)行拼接,再按包圍圖片的最小矩形面積裁剪,然后對(duì)圖片增加隨機(jī)旋轉(zhuǎn)、平移、縮放、視角變換操作。如圖5(b)所示,改進(jìn)后的馬賽克數(shù)據(jù)增強(qiáng)方式比改進(jìn)前一方面減少了很多空白的邊界,減少了無用信息,加快模型收斂,提高了訓(xùn)練效率;另一方面會(huì)形成大量的不同小目標(biāo),極大地豐富了車輛通用目標(biāo)數(shù)據(jù)集,顯著地改善了模型檢測(cè)小尺寸目標(biāo)(如車標(biāo)、后視鏡等)的性能[15]。
圖5 馬賽克增強(qiáng)方式對(duì)比
激活函數(shù)在神經(jīng)網(wǎng)絡(luò)中有著至關(guān)重要的功能,它可以為網(wǎng)絡(luò)增強(qiáng)非線性表達(dá)能力,讓神經(jīng)網(wǎng)絡(luò)能夠擬合任意的復(fù)雜函數(shù),在YOLOv5 網(wǎng)絡(luò)架構(gòu)中的卷積模塊(Conv)中使用了帶泄露的ReLU 激活函數(shù)(Leaky ReLU),其表達(dá)式如式(3)所示:
其中,α 為常數(shù),一般設(shè)置為0.01。
由于Leaky ReLU 在不同區(qū)間函數(shù)不一樣,因此結(jié)果不一致,導(dǎo)致無法為正負(fù)輸入值提供一致的關(guān)系預(yù)測(cè)。Ramachandran 等[16]提出了一種效果更好的激活函數(shù),稱為Swish,其表達(dá)式如式(4)所示,圖像如圖6 所示。
圖6 Swish 激活函數(shù)圖像
Swish 函數(shù)有以下特點(diǎn):沒有上邊界,因此不會(huì)出現(xiàn)梯度飽和的現(xiàn)象;有下邊界,當(dāng)x 越靠近左半軸,縱坐標(biāo)的值越小,甚至接近于0,如果x 值是-5,那么經(jīng)過激活之后的值接近于0,那么就可以一定程度上過濾掉一部分信息,起到正則化的效果;非單調(diào),處處連續(xù)且可導(dǎo),更容易訓(xùn)練。本文在YOLOv5 網(wǎng)絡(luò)架構(gòu)中引入Swish 激活函數(shù)代替原有的Leaky ReLU。
由于缺乏高質(zhì)量開源的車輛屬性數(shù)據(jù)集,本文在公開車輛數(shù)據(jù)集VeRi-776[17]的基礎(chǔ)上進(jìn)行車輛屬性標(biāo)注,共776 個(gè)不同車輛,49 357 張圖片,進(jìn)行了7 類標(biāo)注,具體包括車標(biāo)、車輪、擋風(fēng)玻璃、車牌、車燈、后視鏡、年檢標(biāo)志。本實(shí)驗(yàn)通過在線標(biāo)注平臺(tái)Roboflow 進(jìn)行標(biāo)注,然后導(dǎo)出為YOLOv5 所使用的格式,標(biāo)注示例如圖7 所示。
圖7 標(biāo)注示例
實(shí)驗(yàn)環(huán)境的具體配置為L(zhǎng)inux Ubuntu18.04.7 LTS,CPU 為Intel?Xeon?Gold 5118,顯卡用的是16 GB 顯存的Tesla T4,深度學(xué)習(xí)框架選擇的是PyTorch,版本為1.10。采用YOLOv5 4 種模型中最小的YOLOv5s 模型以方便后續(xù)訓(xùn)練,因?yàn)樗膮?shù)量小,推理速度快。將標(biāo)注好的數(shù)據(jù)集的60%作為訓(xùn)練集,20%作為驗(yàn)證集,20%作為測(cè)試集進(jìn)行實(shí)驗(yàn)。初始學(xué)習(xí)率為0.01,終止學(xué)習(xí)率為0.2,批處理量(batch size)為64,訓(xùn)練輪數(shù)(epochs)為300輪,訓(xùn)練和測(cè)試圖像通過等比縮放并用填充像素“0”的方式,調(diào)整為640×640 尺寸。
對(duì)于錨框,不是采用YOLOv5s 默認(rèn)的錨框大小,而是使用通過K-means 聚類算法得到最適合本實(shí)驗(yàn)的訓(xùn)練數(shù)據(jù)集的錨框設(shè)置。
3.2.1 遷移學(xué)習(xí)
為了增強(qiáng)模型的魯棒性和加快訓(xùn)練的速度,利用遷移學(xué)習(xí),在基于COCO 數(shù)據(jù)集上訓(xùn)練好的模型基礎(chǔ)上對(duì)網(wǎng)絡(luò)模型進(jìn)行微調(diào)。具體地,在訓(xùn)練時(shí)將類別數(shù)量修改為7,并凍結(jié)住backbone 中的前5 層,這樣可以利用預(yù)訓(xùn)練模型在COCO 數(shù)據(jù)集上學(xué)習(xí)到的大量識(shí)別底層信息的能力,并且加快訓(xùn)練速度。
3.2.2 評(píng)價(jià)指標(biāo)
本文采用精確率(Precision)、召回率(Recall)和平均精確率(mAP)作為模型性能評(píng)價(jià)的相關(guān)指標(biāo)。精確率用來衡量模型檢測(cè)的是否準(zhǔn)確,召回率則是用來判斷模型檢測(cè)結(jié)果是否全面。單個(gè)類別的精確率(AP)是通過PR 曲線以及坐標(biāo)軸所圍成的面積得到的。mAP 是相對(duì)所有類別的平均值,通常認(rèn)為模型檢測(cè)輸出的Bounding box與Ground Truth 的IOU=0.5 時(shí)的檢測(cè)結(jié)果是正確的,此時(shí)計(jì)算mAP 值,就表示為mAP@0.5。其中IOU 為交并比,是計(jì)算mAP 的重要函數(shù),見式(5):
其中,C、G 分別為預(yù)測(cè)框和真實(shí)框,分子為兩框交集的面積,分母為兩框并集面積。
式(6)~式(8)分別是精確率、召回率和單個(gè)類別的精確率的計(jì)算公式:
其中,TP 表示預(yù)測(cè)為正類的正樣本,F(xiàn)P 表示預(yù)測(cè)為正類的負(fù)樣本,F(xiàn)N 為預(yù)測(cè)為負(fù)類的正樣本。
本文不是直接求PR 曲線的積分結(jié)果,而是采用一個(gè)平滑處理。也就是曲線上的每一個(gè)點(diǎn),精度值取它右邊精度的最大值。用公式描述為:
其中,C 為類別數(shù),APi表示第i 個(gè)類別的平均精確率。
訓(xùn)練時(shí)的損失變化曲線如圖8 所示,可以看到相比原YOLOv5 模型,改進(jìn)的YOLOv5 最終收斂時(shí)的損失值更小、收斂速度也更快,其中原YOLOv5 在230 次迭代后才開始收斂,改進(jìn)的YOLOv5 在180 次迭代就開始收斂了。
圖8 模型訓(xùn)練時(shí)的損失變化曲線
模型訓(xùn)練時(shí)的平均精度變化曲線如圖9 所示,可以看到改進(jìn)的YOLOv5 模型更快地收斂,精度表現(xiàn)更平穩(wěn),并且精度更高。
圖9 模型訓(xùn)練時(shí)的平均精度變化曲線
訓(xùn)練完成后,得到模型權(quán)重文件,然后將測(cè)試圖片輸入網(wǎng)絡(luò)中進(jìn)行推理,檢測(cè)結(jié)果示例如圖10 所示,圖11是注意力可視化圖[18],表1 是車輛各屬性的檢測(cè)精度??梢钥吹剑倪M(jìn)后的YOLOv5 網(wǎng)絡(luò)能夠準(zhǔn)確地檢測(cè)到車輛各屬性的位置,有些小目標(biāo)如年檢標(biāo)志,由于拍攝距離較遠(yuǎn),比較模糊,導(dǎo)致檢測(cè)精度較低。根據(jù)注意力圖可視化,可以發(fā)現(xiàn)網(wǎng)絡(luò)能夠更好地關(guān)注車輛本身的細(xì)節(jié)區(qū)域。
圖10 檢測(cè)結(jié)果可視化
圖11 注意力圖可視化
表1 車輛各屬性的檢測(cè)精度 (%)
4.1.1 檢測(cè)效果對(duì)比
為了清晰直觀地觀察到本文改進(jìn)算法的優(yōu)越性,將其與原YOLOv5 的部分檢測(cè)結(jié)果進(jìn)行可視化并進(jìn)行對(duì)比,如圖12 所示??梢钥吹?,原YOLOv5 在圖12(a)中將車輛左邊的后視鏡這個(gè)小目標(biāo)漏掉了,而圖12(b)中顯示出本文改進(jìn)后的YOLOv5 模型檢測(cè)到了;圖12(c)是原YOLOv5 模型的定位結(jié)果,其輸出的邊界框包含了部分檢測(cè)目標(biāo)外的無效區(qū)域,但在圖12(d)中,可以看到本文改進(jìn)后的算法檢測(cè)的邊界框與待檢測(cè)目標(biāo)重合更好,即精度更高。
圖12 改進(jìn)YOLOv5 與原YOLOv5 的檢測(cè)效果對(duì)比
4.1.2 不同網(wǎng)絡(luò)模型的對(duì)比
為了準(zhǔn)確評(píng)估本文改進(jìn)算法的有效性,將其與YOLOv5、YOLOv4、YOLOv3、SSD、Faster R-CNN 算法進(jìn)行對(duì)比,最終得到各個(gè)模型的性能效果如表2 所示。其中YOLOv5采用的是YOLOv5s,所以推理速度極快??梢钥吹?,最新的YOLOv5 相比之前的目標(biāo)檢測(cè)經(jīng)典算法在精度和檢測(cè)速度上都有提升,特別是速度方面,提升明顯。本文改進(jìn)的YOLOv5 模型,相比原YOLOv5,在輕微降低檢測(cè)速度的前提下,mAP 提高了4.6%,更具實(shí)際應(yīng)用價(jià)值。
表2 不同網(wǎng)絡(luò)模型的對(duì)比
本文在YOLOv5 模型的基礎(chǔ)上,增加了注意力卷積模塊、改進(jìn)了馬賽克數(shù)據(jù)增強(qiáng)方式、改進(jìn)了激活函數(shù),為了評(píng)估不同模塊的改動(dòng)和不同模塊組合對(duì)于算法性能優(yōu)化的程度,本文詳細(xì)地進(jìn)行了消融實(shí)驗(yàn),表3 為消融實(shí)驗(yàn)數(shù)據(jù)。在實(shí)驗(yàn)環(huán)境配置一致的情況下,實(shí)驗(yàn)結(jié)果表明,每個(gè)改進(jìn)都能提升模型的準(zhǔn)確率,其中CBAM 的貢獻(xiàn)較為明顯,mAP 提升了2.7%,3 個(gè)模塊的組合應(yīng)用對(duì)于最終的識(shí)別精度優(yōu)化效果最好。
表3 消融實(shí)驗(yàn)
本文將YOLOv5 應(yīng)用到車輛屬性檢測(cè)領(lǐng)域,提出了一種改進(jìn)的YOLOv5 算法。但是目前,自然道路場(chǎng)景下的車輛屬性檢測(cè)識(shí)別依舊面臨很多問題,如監(jiān)控?cái)z像頭采集的圖像質(zhì)量不佳;容易受霧、不良光照干擾,從而丟失目標(biāo)紋理細(xì)節(jié),對(duì)識(shí)別造成困難。對(duì)于一些車輛屬性(如車標(biāo)、年檢標(biāo)志等),由于本文是基于VeRi-776 數(shù)據(jù)集標(biāo)注的,樣本較少,檢測(cè)效果有待增強(qiáng),后續(xù)還需要不斷收集標(biāo)注更多的數(shù)據(jù)。后續(xù)會(huì)基于本文的模型,構(gòu)建Pipeline,進(jìn)行下游任務(wù)的研究與實(shí)現(xiàn)。例如在道路監(jiān)控視頻場(chǎng)景下,增加選取最優(yōu)幀的邏輯,選出質(zhì)量高的一幀圖像,結(jié)合檢測(cè)到的車牌位置,再進(jìn)行車牌OCR 識(shí)別;還有利用整體的車輛屬性,進(jìn)行車輛重識(shí)別,實(shí)現(xiàn)車輛軌跡還原等。