陳曉艷,任玉蒙,張東洋,洪 耿,許能華,閆瀟寧
(1. 天津科技大學(xué)電子信息與自動化學(xué)院,天津300222;2. 深圳市安軟科技股份有限公司,深圳518131)
當(dāng)前行人車輛檢測算法在邊緣設(shè)備中的應(yīng)用占用內(nèi)存過大,且無法達到實時性要求.隨著智慧城市建設(shè)和人工智能及大數(shù)據(jù)技術(shù)的迅猛發(fā)展,實現(xiàn)各種場景中的行人和車輛等重要目標(biāo)的精準檢測成為智慧城市的重要任務(wù).目標(biāo)檢測一直被認為是計算機視覺領(lǐng)域中最具挑戰(zhàn)性的研究課題之一,這是由于它需要在給定圖像中精確定位特定目標(biāo)類的對象,并為每個檢測目標(biāo)分配一個對應(yīng)類的標(biāo)簽[1-2].
基于圖像分類的傳統(tǒng)目標(biāo)檢測方法是在檢測圖像中提取若干區(qū)域,用訓(xùn)練好的分類器逐個判斷每個區(qū)域的所屬類別[3].檢測過程包含圖像預(yù)處理、特征提取、特征分類及后處理等階段.
HOG-SVM(histogram of oriented gradient,HOG;support vector machine,SVM)被描述為傳統(tǒng)的目標(biāo)檢測算法中最成功的行人目標(biāo)檢測方法,并在一些實際場景中得到了廣泛的運用[4];但該方法對物體的輪廓特征提取不夠準確,且特征提取能力不夠穩(wěn)定.Krizhevsky等[5]提出的AlexNet網(wǎng)絡(luò),開啟了基于卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural networks,CNN)的目標(biāo)檢測研究.二階檢測器R-CNN系列算法[6-7]提出的以樣本候選框提取特征的目標(biāo)檢測算法受到極大的關(guān)注,目標(biāo)檢測精度明顯提高,但是由于選擇性搜索得到的有效候選框的數(shù)量太多,卷積神經(jīng)網(wǎng)絡(luò)計算量十分龐大,要得到理想的檢測精度,對時間和算力的要求顯著提高.
近幾年,YOLO(you only look once)系列算法[8-10]給目標(biāo)檢測領(lǐng)域帶來了全新的思路,即將分類任務(wù)和定位任務(wù)進行合并,圖片經(jīng)過一次特征提取之后就可以獲取目標(biāo)的位置和類別.尤其是YOLOv3模型,它使用了end-to-end的設(shè)計思路,將整張圖片進行特征提取,并將目標(biāo)檢測問題轉(zhuǎn)換成單一的回歸問題,可直接計算出多種目標(biāo)的分類結(jié)果與位置坐標(biāo),既保證了檢測的速度又保證了檢測的精度[10].
然而,YOLOv3模型有235MB內(nèi)存,參數(shù)量約65MB,檢測速度不夠理想,在模型的輕量化和處理速度上存在很大的提升空間.模型的輕量化意味著對終端圖像處理芯片的需求降低,更便于在嵌入式設(shè)備上部署,這對智慧城市的建設(shè)具有十分重要的意義,不僅節(jié)約建設(shè)成本,而且提升城市安防的智能化水平[11].本文在YOLOv3基礎(chǔ)上提出一種輕量化高精度模型,使其在目標(biāo)檢測保持高精度的同時,大幅減小模型,提升處理速度.主要針對特征提取網(wǎng)絡(luò)、交并比計算以及損失函數(shù)進行了改進:將MobileNet作為特征提取網(wǎng)絡(luò),即將標(biāo)準卷積替換成點卷積和深度可分離卷積,降低大量參數(shù)量;采用CIOU(complete intersection over union)進一步精確計算目標(biāo)框和預(yù)測框的距離,并反映兩者的重合度大??;在損失函數(shù)中引入了Focal loss,解決正負樣本分布不平衡以及簡單樣本與復(fù)雜樣本不平衡所造成的誤差;同時在訓(xùn)練過程中引入標(biāo)簽平滑(Label Smoothing)抑制過擬合.
YOLOv3網(wǎng)絡(luò)的基本結(jié)構(gòu)分為兩個部分,如圖1所示,特征提取部分和預(yù)測部分.其中特征提取網(wǎng)絡(luò)Darknet53由1個CBL層和5個殘差塊組成.CBL層是由卷積層、BN層和LeakyRelu激活函數(shù)組成.殘差塊結(jié)構(gòu)如圖1綠框所示,由2個CBL單元和1個殘差邊組成.而預(yù)測部分融合了3種不同尺度的邊界框.Darknet53提取出來的3個特征圖經(jīng)過卷積層加強特征提取之后進行上采樣,再次進行特征融合來豐富不同尺度的特征.
圖1 YOLOv3網(wǎng)絡(luò)結(jié)構(gòu)圖Fig. 1 YOLOv3 network structure diagram
本文算法是在YOLOv3算法的基礎(chǔ)上進行改進,其檢測流程是先輸入大小為418×418的圖片,將圖片劃為S×S個網(wǎng)格,檢測每個網(wǎng)格是否含有目標(biāo)中心點.若有目標(biāo)中心點,則計算該物體屬于某一類的后驗概率并同時預(yù)測多個目標(biāo)邊框.每個被預(yù)測的邊框包含5個參數(shù),分別為目標(biāo)邊框的中心點坐標(biāo)(x,y)、寬高(w,h)和置信度評分Si.將置信度小于閾值的邊界框置零,采用非極大值抑制算法篩除冗余的邊界框,最終確定目標(biāo)的位置.本文中的YOLO-A模型是將YOLO的特征提取網(wǎng)絡(luò)替換成MobileNet.YOLO-B模型在YOLO-A的基礎(chǔ)上將IOU(intersection over union)改進為CIOU、在損失函數(shù)中引入Focal loss以及引入Label Smoothing.
MobileNet是Google公司在2017年提出用于移動端和邊緣設(shè)備中的輕量級網(wǎng)絡(luò).它提出的一種新的卷積思路是將標(biāo)準卷積替換成點卷積和深度可分離卷積,大大地降低了模型的計算量.深度可分離與標(biāo)準卷積的卷積核運算如圖2所示.
圖2 標(biāo)準卷積與深度可分離卷積 Fig. 2 Standard convolution with depthwise separable convolution
假設(shè)輸入一張大小為 DF×DF×M的圖片,輸出圖片大小為 DF×DF×N,卷積核大小為 DK×DK.計算量的計算公式為
式中:FLOPS表示計算量,Ci為輸入通道,Co為輸出通道,DK×DK為卷積核大小,DF×DF為輸出圖片大?。?/p>
若采用標(biāo)準卷積,則計算量為式(2);若采用深度可分離卷積,則計算量為式(3).
本文算法的特征提取網(wǎng)絡(luò)中N的值遠大于1.由公式計算可得,深度可分離的計算量遠遠小于采用普通卷積所帶來的計算量.
交并比IOU用于表示目標(biāo)框和預(yù)測框的交集和并集之比,它不僅可以用來確定正樣本和負樣本,還可以反映預(yù)測框的檢測效果[12].若預(yù)測框和真實框相近,IOU值就大,反之IOU的值就?。甀OU示意圖如圖3所示,計算公式為
采用IOU度量兩個框之間的距離和重合程度,在訓(xùn)練過程中存在兩種極端的情況:其一,當(dāng)兩個框沒有交集,即IOU=0時,無法表示兩者的距離,也無法反映兩者的重合度大小;其二,如圖4(a)和(b),其IOU值雖然相等,但擬合程度是完全不一樣的.
圖3 IOU示意圖Fig. 3 The schematic diagram of IOU
圖4 目標(biāo)框和預(yù)測框重疊情況示意圖 Fig. 4 Schematic diagram of overlap between target box and prediction box
針對上述情況,采用CIOU度量目標(biāo)框和預(yù)測框的距離與重合程度.CIOU在充分利用尺度不變性的基礎(chǔ)上,融合目標(biāo)框與預(yù)測框之間的距離及其重合程度[13],并將預(yù)測框長和寬的比值作為懲罰項,從而使預(yù)測框的效果更加穩(wěn)定.CIOU示意圖見圖5.
圖5 CIOU示意圖 Fig. 5 The schematic diagram of IOU
CIOU公式為
其中:α為權(quán)重函數(shù),ν為衡量長寬比的相似性參數(shù),α和v的公式為
圖中:d =ρ2(b, bgt)是預(yù)測框和真實框的中心點的歐氏距離, b =(x,y,w,h)是真實框的信息,bgt=( xgt, ygt, wgt, hgt)是預(yù)測框的信息;c是包含預(yù)測框和真實框的最小矩形區(qū)域的對角線距離.
在YOLOv3模型中,由于產(chǎn)生的先驗預(yù)測框絕大部分都不包含目標(biāo),這就造成了正負樣本比例失衡,導(dǎo)致大量的負樣本影響損失函數(shù),少量正樣本的關(guān)鍵信息不能在損失函數(shù)中發(fā)揮正常的作用.借鑒Focal loss損失函數(shù)概念[14],通過減少負樣本在樣本總量的權(quán)重,使得模型在訓(xùn)練時更專注于難分類的樣本,即正樣本可以發(fā)揮出在損失函數(shù)中的作用.
Focal loss是在交叉熵損失函數(shù)基礎(chǔ)上進行修改,以二分類(即0和1兩個類)交叉熵損失函數(shù)為例,表達式為
y′是經(jīng)激活函數(shù)的輸出概率,在0~1之間,對于輸出為1的正樣本,若輸出概率越大則損失函數(shù)越??;對于輸出為0的負樣本而言,若輸出概率越小則損失函數(shù)越?。捎谳敵鰹?的負樣本太多,導(dǎo)致對損失函數(shù)的優(yōu)化比較緩慢,難以獲得損失函數(shù)的最優(yōu)解.為了降低負樣本在損失函數(shù)中所占的權(quán)重,充分發(fā)揮正樣本在損失函數(shù)中所占的比重,即加入平衡系數(shù)α以降低負樣本的比重[15],得到的損失函數(shù)為
在此基礎(chǔ)上又增加一個動態(tài)縮放因子γ,自動降低簡單樣本的損失,幫助模型更好地訓(xùn)練困難的樣本,最終形成的Focal loss為
在處理人車分類問題時,當(dāng)使用最小化交叉熵損失函數(shù)更新模型參數(shù)時,模型的泛化能力弱,容易導(dǎo)致過擬合,所以先引入一個與樣本無關(guān)的分布u(i)(平滑因子),將標(biāo)簽m修正為m′,見式(11),達到抑制過擬合的目的.
其中:i為標(biāo)簽類別數(shù)目,u(i)的取值1/i,本文中共有人、車兩類,故 u(i) = 0.5;ε是伸縮因子,用來調(diào)整平滑之后標(biāo)簽數(shù)值的大小,有效抑制過擬合.本文YOLO-B網(wǎng)絡(luò)檢測示意圖如圖6所示.
圖6 YOLO-B網(wǎng)絡(luò)檢測示意圖Fig. 6 YOLO-B schematic diagram of network detection
本文所有的算法都是基于Keras框架實現(xiàn)的,并使用深圳市安軟科技有限公司提供的39064張已標(biāo)注的數(shù)據(jù)集(以下簡稱安軟數(shù)據(jù)集),其中驗證集包含3982張圖片,測試集圖片包含500張,測試集中人和車兩類目標(biāo)及其目標(biāo)框數(shù)量如圖7所示,每張圖片的大小為1920×1080.實際應(yīng)用場景包括人和車相交互的近景、遠景、白天和夜景.本文任務(wù)是在實際應(yīng)用場景下對行人和車輛進行快速準確地檢測.
圖7 測試集兩類目標(biāo)及目標(biāo)框數(shù)量Fig. 7 Number of objects per class and target boxes in the two categories of test set
訓(xùn)練環(huán)境采用的是Ubuntu 18.04操作系統(tǒng),CPU為Intel XeonE5-2360,顯卡為兩塊NVIDIA GEFORCE GTX1080Ti 11GB.實驗過程中batch size設(shè)置為16,即每個epoch在訓(xùn)練集中取16個樣本進行訓(xùn)練,直至全部樣本訓(xùn)練完成一次即為1個epoch.模型訓(xùn)練時共訓(xùn)練100個epoch.測試實驗環(huán)境采用的是Windows10操作系統(tǒng),CPU為i5-9400F@2.9GHz,顯 卡 為 NVIDIA GEFORCE GTX1660 6GB.由于數(shù)據(jù)集所含目標(biāo)框的數(shù)量不同,導(dǎo)致每張圖片檢測的時間有所不同.利用500張測試集的測試總時間計算平均檢測速度(FPS).采用平均準確率(mAP)及模型大小等指標(biāo)對目標(biāo)檢測模型進行評估.
為了驗證本文YOLO-B算法的性能,采用YOLOv3 原 型、YOLO-Slim[16]、YOLOv3-tiny、YOLOv3-D[17]、YOLOv3-剪枝和YOLO-A進行對比.其中,YOLOv3原型是由YOLOv3作者提出沒有加以改進的模型;YOLO-Slim是YOLOv3的骨干網(wǎng)絡(luò)替換成MobileNetV2并進行剪枝處理,其目的是為了降低參數(shù)量和模型大小;YOLOv3-tiny是一個公開的目標(biāo)檢測輕量級模型;YOLOv3-D模型是在YOLOv3的基礎(chǔ)上引入CIOU和Focal loss,從而提高目標(biāo)檢測的精度,但是模型大小不會發(fā)生改變;YOLOv3-剪枝是在YOLOv3的基礎(chǔ)上降低通道數(shù),從而實現(xiàn)減小模型、降低計算量和增加檢測速度的目的.
對7種模型分別進行訓(xùn)練和測試,平均檢測速度見表1.YOLOv3的檢測速度為11.2幀/秒,YOLOv3-剪枝的檢測速度為14.3 幀/秒,YOLOv3-tiny是一種以YOLOv3為基礎(chǔ)的輕量化模型,其檢測速度達到25.1 幀/秒,檢測速度優(yōu)勢明顯.YOLOSlim的檢測速度略微遜色于YOLOv3-tiny,而本文提出的YOLO-A和YOLO-B的檢測速度均為20.6幀/秒,快于YOLOv3,檢測速度相對提升了83.9%.由于YOLO-B相對于YOLO-A來說參數(shù)量相同,故YOLO-A和YOLO-B的檢測速度是一樣的.
表1 目標(biāo)檢測算法性能評價指標(biāo)對比結(jié)果 Tab. 1 Comparison results of performance evaluation indexes of target detection algorithm
7種模型的平均準確率測試結(jié)果見表1.由表1可知:YOLOv3的平均準確率值為57.80%,YOLOv3-D的平均準確率為58.32%,兩者表現(xiàn)很好,但是模型太大;YOLOv3-剪枝、YOLOv3-tiny和YOLO-Slim的模型比較小,但是平均準確率均低于50%;YOLO-A和YOLO-B的平均準確率比其他5種模型都高.YOLO-A和YOLO-B的模型大小相同,由于通過改變損失函數(shù)以及其他優(yōu)化方法使得YOLO-B的平均準確率高于YOLO-A的,達到59.23%,網(wǎng)絡(luò)模型大小僅為原始YOLOv3的40%.
在測試集中對行人和車輛分別進行目標(biāo)檢測,檢測精度見表1.結(jié)果表明,無論是檢測行人還是檢測車輛,YOLO-B的精確率均高于其他6種算法.通過進行對比得出YOLO-B算法綜合表現(xiàn)優(yōu)秀.YOLOB訓(xùn)練過程中的loss值變化如圖8所示,隨著迭代次數(shù)的不斷增加,loss值不斷降低,最終達到穩(wěn)定狀態(tài).
為了直觀地表達檢測效果,在YOLO-B算法訓(xùn)練完成之后,使用Yolo-B算法對測試集進行測試并對結(jié)果進行可視化,測試集的場景均為攝像頭真實場景,圖9為真實場景測試的效果.
圖8 YOLO-B訓(xùn)練過程中的loss變化情況 Fig. 8 Changes of loss during YOLO-B training
圖9 YOLO-B算法真實場景測試效果圖 Fig. 9 YOLO-B algorithm real scene test renderings
針對模型輕量化的需求,調(diào)整YOLOv3的網(wǎng)絡(luò)結(jié)構(gòu).首先在YOLOv3的基礎(chǔ)上將特征提取網(wǎng)絡(luò)替換成MobileNet,大幅度降低模型大??;其次是將IOU改進為CIOU并在損失函數(shù)中引入Focal loss,并且又引入Label Smoothing,最終形成YOLO-B網(wǎng)絡(luò)模型.通過對模型的對比實驗以及測試結(jié)果顯示:網(wǎng)絡(luò)模型大小僅為原始YOLOv3的40%,并且通過模型優(yōu)化策略,保證了檢測的精度.
本文提出的網(wǎng)絡(luò)模型在公共安全監(jiān)控中能有效地做到快速準確的檢測要求,為嵌入式平臺應(yīng)用提供了一種高性能的輕量化模型結(jié)構(gòu).下一步的工作是將該算法移植部署至多路攝像頭終端,進行實際場景的應(yīng)用.