黃志強(qiáng),李 軍,張世義
(1.重慶交通大學(xué)機(jī)電與車輛工程學(xué)院,重慶 400074;2.重慶交通大學(xué)航運(yùn)與船舶工程學(xué)院,重慶 400074)
目標(biāo)檢測是計(jì)算機(jī)視覺的重要組成部分,在機(jī)器人導(dǎo)航、安防攝像頭的監(jiān)測、工業(yè)領(lǐng)域的故障診斷、交通道路中車流量統(tǒng)計(jì)和圖像中的文字提取等領(lǐng)域中廣泛使用[1]。現(xiàn)有的目標(biāo)檢測算法由于網(wǎng)絡(luò)層數(shù)比較深,雖然在大型硬件設(shè)備上能夠很好地檢測出理想環(huán)境中的各類物體,但是將其移植至小型設(shè)備時(shí)會由于神經(jīng)網(wǎng)絡(luò)的參數(shù)量過大,導(dǎo)致設(shè)備運(yùn)行緩慢,檢測精度和檢測速度均大幅降低。
最初的目標(biāo)檢測是通過檢測物體的邊緣特征、顏色特征和形狀特征等做出判斷。Razalli等[2]采用HSV色彩空間和支持向量機(jī)SVM(Support Vector Machine)相結(jié)合的顏色模型來表征緊急車輛警報(bào)燈,保證交通系統(tǒng)能對緊急情況做出及時(shí)反應(yīng),縮減救援時(shí)間。Ji等[3]針對傳統(tǒng)的方向梯度直方圖HOG(Histogram of Oriented Gradient)算法提取圖像的HOG特征時(shí)無法實(shí)現(xiàn)快速準(zhǔn)確檢測的情況,提出使用4個(gè)大小不同的滑動窗口對其進(jìn)行優(yōu)化,從而達(dá)到較高的準(zhǔn)確率。Dubey等[4]提出將SVM作用到基于顏色定位與分類的定向梯度直方圖上,從而實(shí)現(xiàn)對某些特征的準(zhǔn)確定位與分類。
傳統(tǒng)的目標(biāo)檢測算法往往存在時(shí)間復(fù)雜度高、魯棒性較差等缺點(diǎn)。隨著機(jī)器學(xué)習(xí)技術(shù)的快速發(fā)展,實(shí)時(shí)性好、準(zhǔn)確率高的卷積神經(jīng)網(wǎng)絡(luò)技術(shù)開始廣泛應(yīng)用在目標(biāo)檢測中[5]。目前主流的檢測算法有2種。第1種是以R-CNN[6]為代表的兩階段檢測算法,先在圖像上進(jìn)行選擇性的搜索以獲得最有可能包含目標(biāo)物體的感興區(qū)域框,之后對不同的感興區(qū)域框做大小調(diào)整,再將調(diào)整后的感興區(qū)域框傳輸至CNN分類器中進(jìn)行分類檢測,最后通過邊界框(Bounding Box)回歸預(yù)測每個(gè)已識別區(qū)域的邊界框。主流的兩階段檢測算法有Fast R-CN-N[7]、Faster R-CNN[8]和Mask R-CNN[9]等。第2種是以YOLO[10]為代表的一階段檢測算法,該算法將輸入圖像直接進(jìn)行簡單的區(qū)域劃分,然后在劃分后的區(qū)域中進(jìn)行分類和定位,在精度損失能夠接受的情況下,檢測速度遠(yuǎn)遠(yuǎn)快于兩階段檢測算法。主流的一階段檢測算法有SSD[11]、YOL-O9000[12]、YOLOv3[13]和YOLOv4[14]。
為了適應(yīng)小型設(shè)備實(shí)時(shí)檢測與低運(yùn)算量的要求,本文基于一階段檢測算法中YOLOv4的CSPDarknet53為神經(jīng)網(wǎng)絡(luò)的主干框架,提出一種改進(jìn)的CSPDarknet15目標(biāo)檢測算法。首先,對原始的通過K-means聚類算法生成錨框(Anchor Box)的方法進(jìn)行改進(jìn),由于K-means聚類算法受選取的初始點(diǎn)影響比較大,改進(jìn)后的聚類算法先隨機(jī)選取一個(gè)聚類中心,然后計(jì)算每個(gè)樣本與該中心的距離值,并將該值作為被選為下一個(gè)聚類中心的概率,將整個(gè)樣本遍歷完后獲取最合適的錨框。然后,考慮到當(dāng)神經(jīng)網(wǎng)絡(luò)的輸入值過大或過小時(shí),Sigmoid激活函數(shù)會產(chǎn)生梯度消失,而ReLU激活函數(shù)會造成部分神經(jīng)元“死亡”,降低網(wǎng)絡(luò)的識別率,因而本文采用在負(fù)區(qū)間存在一定梯度值的LeakyReLU激活函數(shù)。同時(shí),考慮到Anchor Box和Bounding Box之間的中心距和寬高比存在一定的相關(guān)性,采用LCIoU損失函數(shù)代替原始的LIoU損失函數(shù)。最后,在VOC2007數(shù)據(jù)集上訓(xùn)練該神經(jīng)網(wǎng)絡(luò)。
CSPDarknet53神經(jīng)網(wǎng)絡(luò)是由Bochkovskiy等[14]在Darknet53神經(jīng)網(wǎng)絡(luò)基礎(chǔ)上提出的一種端到端的檢測算法,該算法延續(xù)了殘差模塊的思想[15],在保證網(wǎng)絡(luò)有深度的同時(shí)能夠降低梯度消失帶來的影響,一次性檢測出物體的類別和位置,大大提高了物體檢測速度。本文提出的算法調(diào)整了CSPDarknet53網(wǎng)絡(luò)結(jié)構(gòu),將原始的53層網(wǎng)絡(luò)結(jié)構(gòu)改為15層,前2個(gè)模塊采用Darknet網(wǎng)絡(luò)模塊,對輸入圖像不斷進(jìn)行卷積操作,增加通道數(shù),縮小圖像的尺寸;第3~5個(gè)模塊采用CSP(Cross Stage Partial)殘差網(wǎng)絡(luò)模塊,通過殘差塊與卷積后的邊相連接,提高了目標(biāo)物體特征的重用性,減少了計(jì)算的參數(shù)量;最后1個(gè)模塊為卷積層。在對物體進(jìn)行預(yù)測時(shí),分別采用13×13和26×26 2種不同尺度的融合特征圖對目標(biāo)進(jìn)行檢測,并且將最后1個(gè)模塊與第4個(gè)模塊目標(biāo)物的特征進(jìn)行融合,提高了網(wǎng)絡(luò)的檢測能力。改進(jìn)的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示,殘差網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示。
Figure 1 CSPDarknet15 network structure圖1 CSPDarknet15網(wǎng)絡(luò)結(jié)構(gòu)
Figure 2 Residual network structure圖2 殘差網(wǎng)絡(luò)結(jié)構(gòu)
參照Faster R-CNN算法的思想,本文引入Anchor Box對YOLO Head的結(jié)果進(jìn)行相應(yīng)預(yù)測,Anchor Box的大小由聚類算法[16]對訓(xùn)練集中所有物體的真實(shí)邊界框進(jìn)行聚類獲得。假設(shè)網(wǎng)絡(luò)的Bounding Box與Anchor Box沒有完全重合,如圖3所示,具有一定的偏差,其偏差大小為tx,ty,tw和th,則Bounding Box的最終表達(dá)式如式(1)~式(4)所示:
bx=σ(tx)+cx
(1)
by=σ(ty)+cy
(2)
bw=pwetw
(3)
bh=pheth
(4)
其中,bx,by,bw和bh為Bounding Box的中心坐標(biāo)、寬度和高度;cx和cy為該單元格相對于初始坐標(biāo)的位置;pw和ph為Anchor Box的寬度和高高;σ(·)為Sigmoid激活函數(shù)。
Figure 3 Position coordinate map of Bounding Box and Anchor Box圖3 Bounding Box與Anchor Box的位置坐標(biāo)圖
在目標(biāo)檢測與定位任務(wù)中,研究人員常常利用均方誤差MSE(Mean Square Error)損失函數(shù)對Bounding Box進(jìn)行回歸,而該方法存在對于相同的輸入可能會有不同輸出的問題,并且該函數(shù)對目標(biāo)的尺寸比較敏感,研究人員通常采用對目標(biāo)的長和寬進(jìn)行開根號操作來降低尺寸對MSE損失函數(shù)回歸準(zhǔn)確性的影響,但并沒有從根本上解決該問題。
針對MSE損失函數(shù)的不足,研究人員提出了通過計(jì)算Anchor BoxA與Bounding BoxB交并IoU(Intersection over Union)[17]的梯度來微調(diào)Bounding Box的位置,如圖4所示。
Figure 4 Intersection region of anchor box A and bounding box B圖4 錨框A和邊界框B相交區(qū)域
其中,A∩B表示Anchor BoxA與Bounding BoxB之間的重疊區(qū)域,如式(5)和式(6)所示,當(dāng)2個(gè)邊界框的重疊度使得LIoU損失函數(shù)的取值大于某個(gè)閾值時(shí),則判定當(dāng)前的Bounding Box有效,當(dāng)2個(gè)邊界框不存在重疊區(qū)域時(shí),LIoU損失函數(shù)取值為1。
(5)
LIoU=1-IoU
(6)
由于相鄰較遠(yuǎn)的無交集的邊界框與相鄰較近的無交集的邊界框的LIoU損失函數(shù)取值相同,這樣就會造成損失函數(shù)失去梯度方向,無法優(yōu)化Bounding Box的位置。同時(shí),考慮到2個(gè)邊界框的寬和高存在一定的相似性,本文提出在原損失函數(shù)的基礎(chǔ)上添加懲罰項(xiàng)得到LCIoU損失函數(shù)[18],當(dāng)2個(gè)邊界框距離越遠(yuǎn)時(shí),懲罰項(xiàng)取值越大,從而引導(dǎo)損失函數(shù)的梯度下降方向。該損失函數(shù)的計(jì)算如式(7)~式(10)所示:
(7)
(8)
(9)
LCIoU=1-IoU+RCIoU
(10)
其中,b和bgt為Bounding Box與Anchor Box之間的中心點(diǎn)位置;ρ(·)用于計(jì)算2個(gè)中心點(diǎn)之間的歐氏距離;v用來度量長寬比的相似性;c表示能夠同時(shí)包含錨框和邊界框的最小閉包區(qū)域的對角線距離;wgt,hgt,w和h分別表示Bounding Box和Anchor Box的寬和高;α為權(quán)重函數(shù)。當(dāng)IoU<0.5時(shí),由于Bounding Box與Anchor Box重疊區(qū)域的減小,LCIoU損失函數(shù)中考慮的邊界框長寬比不再是損失函數(shù)回歸時(shí)的主要影響因素,因而α的值設(shè)置為0;當(dāng)IoU>0.5時(shí),為了保持2邊界框長寬比的一致性,加快損失函數(shù)的回歸,通過v來控制權(quán)重值α的大小。
為了驗(yàn)證LCIoU損失函數(shù)在本文方法中的有效性,對LCIoU損失函數(shù)與LIoU損失函數(shù)作對比實(shí)驗(yàn),CSP Darknet6分別使用2個(gè)損失函數(shù)在VOC2007數(shù)據(jù)集上訓(xùn)練,實(shí)驗(yàn)結(jié)果如表1所示。從表1可知,使用LCIoU損失函數(shù)對物體的檢測精度有了較明顯的提升,從原來的76.94%提升至78.61%,提高了1.67個(gè)百分點(diǎn)。
Table 1 Comparison of mAP using LIoU and LCIoU loss function 表1 使用LIoU和LCIoU損失函數(shù)的mAP對比
本文通過Anchor Box對卷積神經(jīng)網(wǎng)絡(luò)的輸出進(jìn)行預(yù)測。Anchor Box是根據(jù)需要識別的物體形狀提前設(shè)定固定大小的預(yù)測框,Anchor Box的大小和數(shù)量將直接影響到預(yù)測時(shí)的速度和精度。通常一階段神經(jīng)網(wǎng)絡(luò)采用K-means聚類算法來獲得Anchor Box的大小。K-means聚類算法采用歐幾里得距離的平方[19]作為距離度量的標(biāo)準(zhǔn),如式(11)所示:
(11)
其中,x和y表示不同的樣本點(diǎn),n表示樣本的數(shù)量。K-means算法需要優(yōu)化的問題就是使得簇內(nèi)誤差平方和SSE(within-cluster Sum of Squared Errors)達(dá)到最小,如式(12)所示:
(12)
其中,W(k,j)表示計(jì)算第k個(gè)簇內(nèi)所有樣本與聚類中心的誤差平方和,xj表示第j個(gè)樣本,yk表示第k個(gè)簇的聚類中心。雖然K-means聚類算法收斂速度快,實(shí)現(xiàn)簡單,但由于其對初始聚類中心點(diǎn)的選擇較為敏感,不同的初始聚類中心會導(dǎo)致不同的聚類結(jié)果,且有可能是局部最優(yōu)解[20]。針對該問題,本文采用K-means++聚類算法[21],先隨機(jī)選取一個(gè)樣本作為聚類中心,計(jì)算每個(gè)樣本與其最近的一個(gè)聚類中心的距離,將該距離作為被選為下一個(gè)聚類中心的概率;然后選取下一個(gè)聚類中心,重復(fù)以上步驟直到選出K個(gè)聚類中心;最后利用這K個(gè)聚類中心重新運(yùn)行標(biāo)準(zhǔn)的K-means聚類算法。由于Anchor Box自身的大小會產(chǎn)生一定的歐氏距離誤差,本文將訓(xùn)練集中的真實(shí)框與Anchor Box之間的IoU作為優(yōu)化的目標(biāo)函數(shù),目標(biāo)函數(shù)D的計(jì)算如式(3)所示:
(13)
本文使用優(yōu)化后的K-means++聚類算法對數(shù)據(jù)集進(jìn)行聚類分析,取K為6,最終得到Anchor Box的寬和高分別為(17,31),(42,68),(75,152),(133,289),(208,168)和(326,352)。表2展示了用不同聚類算法生成的Anchor Box在VOC2007數(shù)據(jù)集上的不同表現(xiàn),使用優(yōu)化后的K-means++聚類算法的平均精度mAP(mean Average Precision)提升了2.24個(gè)百分點(diǎn),達(dá)到了80.76%。
Table 2 Comparison of mAP using K-means and K-means++ 表2 使用K-means與K-means++的mAP對比
激活函數(shù)的出現(xiàn)主要是為了解決數(shù)據(jù)的非線性變換,解決線性模型的表達(dá)和分類能力不足的問題。激活函數(shù)將多層神經(jīng)網(wǎng)絡(luò)中的線性變化轉(zhuǎn)換為一層神經(jīng)網(wǎng)絡(luò),使得神經(jīng)網(wǎng)絡(luò)的多層有了實(shí)際意義,使網(wǎng)絡(luò)更加強(qiáng)大,還可以實(shí)現(xiàn)數(shù)據(jù)歸一化,將輸入的數(shù)據(jù)映射到某個(gè)范圍內(nèi),防止數(shù)據(jù)過大。傳統(tǒng)卷積神經(jīng)網(wǎng)絡(luò)采用Sigmoid激活函數(shù)[22],在淺層神經(jīng)網(wǎng)絡(luò)中能夠防止神經(jīng)元的輸出值發(fā)生“跳躍”,對每個(gè)輸出值進(jìn)行標(biāo)準(zhǔn)化。由于深度神經(jīng)網(wǎng)絡(luò)通常具有多個(gè)網(wǎng)絡(luò)層,隨著神經(jīng)網(wǎng)絡(luò)層數(shù)的不斷加深,當(dāng)輸入的值過大或者過小時(shí),經(jīng)過Sigmoid激活函數(shù)后輸出的結(jié)果差異性較小,同時(shí)Sigmoid激活函數(shù)在此位置的導(dǎo)數(shù)值趨近于零,容易造成模型求解梯度消失問題。非線性激活函數(shù)ReLU能夠解決梯度消失的問題[23],雖然其在正區(qū)間的梯度始終為1,使得網(wǎng)絡(luò)的計(jì)算速度和收斂速度大大加快,但當(dāng)輸入值為負(fù)值時(shí),函數(shù)的梯度將變?yōu)?,無法進(jìn)行反向傳播,造成部分神經(jīng)元“死亡”,降低了網(wǎng)絡(luò)的學(xué)習(xí)能力。針對以上缺點(diǎn),本文采用LeakyReLU激活函數(shù)[24],在負(fù)區(qū)間時(shí)函數(shù)也保持著較小的梯度,對于負(fù)值的輸入也能有一定的梯度進(jìn)行反向傳播,從而避免了神經(jīng)元“死亡”問題。Sigmoid激活函數(shù)、ReLU激活函數(shù)和LeakyReLU激活函數(shù)如圖5所示。
Figure 5 Three activation functions 圖5 3種激活函數(shù)
為了驗(yàn)證ReLU和LeakyReLU激活函數(shù)的效果,本文分別使用包含不同激活函數(shù)的神經(jīng)網(wǎng)絡(luò)在VOC2007數(shù)據(jù)集上訓(xùn)練,實(shí)驗(yàn)結(jié)果如表3所示,使用LeakyReLU激活函數(shù)的神經(jīng)網(wǎng)絡(luò)將檢測精度提高了1.82個(gè)百分點(diǎn),達(dá)到了79.54%。
Table 3 mAP values of different activation functions表3 不同激活函數(shù)的mAP值
本次實(shí)驗(yàn)采用的數(shù)據(jù)集為PASCAL VOC2007,包含有9 963幅圖像,每個(gè)數(shù)據(jù)集有20種常見的物體,是視覺處理中分類識別和檢測的一個(gè)基準(zhǔn)數(shù)據(jù)集。該數(shù)據(jù)集中的某些圖像中的物體存在一定的遮擋,可以提高網(wǎng)絡(luò)的檢測能力。在訓(xùn)練過程中,將數(shù)據(jù)集以6∶1∶3的比例隨機(jī)劃分為訓(xùn)練集、驗(yàn)證集和測試集,epoch設(shè)置為16,初始的學(xué)習(xí)率為0.001,圖像的輸入大小設(shè)置為416×416,權(quán)重衰減值為0.000 5,總共訓(xùn)練100個(gè)epoch,取消Mosaic數(shù)據(jù)增強(qiáng)方法,其中先凍結(jié)50個(gè)epoch,以加快訓(xùn)練速度,同時(shí)防止權(quán)值被破壞。此外,還對圖像進(jìn)行反轉(zhuǎn)、平移、調(diào)整對比度,以此增加神經(jīng)網(wǎng)絡(luò)的魯棒性。實(shí)驗(yàn)平臺為Windows系統(tǒng),神經(jīng)網(wǎng)絡(luò)框架使用Pytor-ch1.2,編程語言為Python3.6,硬件為Intel(R) Core(TM)i7-9750H、CPU@2.60 GHz、24 GB RAM、NVIDIA GeForce GTX1650。
將以上3種改進(jìn)同時(shí)加入所有類別的CSPDarknet 15神經(jīng)網(wǎng)絡(luò),單個(gè)類別的精度AP(Average Precision)如表4所示。從表4可以看出,改進(jìn)后CSPDarknet15神經(jīng)網(wǎng)絡(luò)的物體識別率最高可達(dá)96%,最低為66%,平均檢測精度為83.94%,相較于改進(jìn)前分別提高了3個(gè)百分點(diǎn)、13個(gè)百分點(diǎn)和5.69個(gè)百分點(diǎn)。
Table 4 AP comparison before and after improvement表4 改進(jìn)前后的AP對比
將本文改進(jìn)的CSPDarknet15神經(jīng)網(wǎng)絡(luò)與典型的Faster R-CNN、SSD和YOLOv3 3種目標(biāo)檢測算法進(jìn)行對比,均在本文所選取的VOC2007數(shù)據(jù)集上進(jìn)行相應(yīng)測試,同時(shí)將mAP和檢測時(shí)間作為評價(jià)指標(biāo)。表5展示了本文檢測算法與Faster R-CNN、SSD、YOLOv3和YOLOv4的對比實(shí)驗(yàn)結(jié)果。
Table 5 mAP and detection time of different detection algorithms表5 不同檢測算法的mAP和檢測時(shí)間對比結(jié)果
從表5可知,兩階段檢測算法Faster R-CNN的mAP達(dá)到70.66%,但由于識別時(shí)需要提前生成包含物體的候選區(qū)域框,再從候選區(qū)域框中檢測物體,因而大大增加了計(jì)算時(shí)間,導(dǎo)致檢測時(shí)間較長。一階段檢測算法SSD的檢測速度相對于兩階段檢測算法提升比較明顯,但檢測精度與YOLOv3和YOLOv4相比存在明顯的差距。由于YOLOv3和YOLOv4為了提高物體的檢測精度,不斷增加網(wǎng)絡(luò)層數(shù),采用具有多種連接的特征提取金字塔,導(dǎo)致神經(jīng)網(wǎng)絡(luò)的參數(shù)量不斷增加,因而識別率提高的同時(shí)檢測速度也在不斷降低。本文所使用的神經(jīng)網(wǎng)絡(luò)兼顧了物體的檢測精度和檢測速度,將原始的53層神經(jīng)網(wǎng)絡(luò)改為15層,避免使用全連接層作為最后的分類層,最終將YOLOv4的參數(shù)量從64 040 001個(gè)減少至5 918 006個(gè),檢測時(shí)間從7 955 ms降低至3 625 ms,檢測速度提升了54.43%,能夠滿足實(shí)時(shí)性檢測要求。從圖6中可以看出,本文改進(jìn)后的算法對車輛和行人的檢測效果優(yōu)于Faster RCNN、SSD、YOLOv3和CSPDarknet15,并且對重疊人群的檢測性能接近YOLOv4的。
Figure 6 Detection results of different algorithms圖6 不同算法的檢測結(jié)果對比
針對CSPDarknet53神經(jīng)網(wǎng)絡(luò)參數(shù)量巨大,無法適配小型設(shè)備的缺點(diǎn),本文提出一種輕量級CSPDarknet15神經(jīng)網(wǎng)絡(luò);為了不降低物體的識別率,采用K-means++算法對標(biāo)記的數(shù)據(jù)進(jìn)行聚類,并利用該聚類算法獲得的聚類中心點(diǎn)作為檢測物體的錨框;為了解決ReLU在負(fù)區(qū)間存在偏差的問題,采用在負(fù)區(qū)間具有軟飽和性、有較高魯棒性的LeakyReLU激活函數(shù);同時(shí),為了使錨框回歸變得更加穩(wěn)定,在綜合考慮邊界框與錨框之間的距離、重疊率、尺度以及錨框的長寬比后,使用LCIoU損失函數(shù)來計(jì)算錨框與邊界框之間的重疊率。在公開的VOC2007數(shù)據(jù)集上進(jìn)行了實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果表明,輕量級CSPDarknet網(wǎng)絡(luò)在該數(shù)據(jù)集上的mAP能夠達(dá)到83.94%,一幅圖像的檢測時(shí)間從7 955 ms降低至3 625 ms,檢測速度提升54.43%,能夠滿足小型設(shè)備的檢測要求。