葛 雯, 張?chǎng)╂茫?孫旭澤
(1. 沈陽(yáng)航空航天大學(xué) 電子與信息工程學(xué)院, 沈陽(yáng) 110136; 2. 國(guó)家電網(wǎng)遼陽(yáng)供電公司 信息通信分公司, 遼寧 遼陽(yáng) 111000)
計(jì)算機(jī)視覺(jué)領(lǐng)域中,目標(biāo)檢測(cè)一直是工業(yè)應(yīng)用中比較熱門(mén)且成熟的應(yīng)用領(lǐng)域,它涉及場(chǎng)景中目標(biāo)分類(lèi)和目標(biāo)定位的結(jié)合,比如人臉識(shí)別、車(chē)牌識(shí)別及行人檢測(cè)等.因?yàn)榻陙?lái)硬件計(jì)算能力變得越來(lái)越強(qiáng),所以在卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)上進(jìn)行深度學(xué)習(xí)的研究也得到了不斷發(fā)展,特別是在機(jī)器視覺(jué)方面已有不錯(cuò)的成果.劉文生等提出了SSD(單鏡頭多箱檢測(cè)器)算法,采用回歸方法進(jìn)行檢測(cè),并將定位和分類(lèi)集成到一個(gè)網(wǎng)絡(luò)中.SSD算法基于VGG-16網(wǎng)絡(luò)結(jié)構(gòu),將VGG-16中的全連接層替換為卷積層[1],然后將各個(gè)卷積層分別輸出到各自的特征映射,作為特征圖預(yù)測(cè)的輸入,最后生成一個(gè)多尺度的特征映射進(jìn)行回歸.而YOLO算法是將目標(biāo)檢測(cè)轉(zhuǎn)換成一個(gè)回歸問(wèn)題,使檢測(cè)速度得到了極大的提升,不過(guò)仍存在一些不足,即檢測(cè)小目標(biāo)所得的結(jié)果無(wú)法達(dá)到較高精度[2].通過(guò)各路學(xué)者不斷的努力,YOLO算法得以一次次升級(jí),現(xiàn)在已經(jīng)升級(jí)為YOLOv3,它采用K-means聚類(lèi)的方法在數(shù)據(jù)集中得出其邊界框最佳的初始位置.為了提高小目標(biāo)的檢測(cè)精度,算法采用了多尺度融合[3],但上述算法的速度還達(dá)不到實(shí)時(shí)效果.對(duì)于無(wú)人駕駛問(wèn)題,在提高檢測(cè)精度的同時(shí),也需要提高實(shí)時(shí)性能,為了平衡速度與精度兩者之間的利弊,本文中改進(jìn)了YOLOv3網(wǎng)絡(luò),使其更適合在硬件上運(yùn)行.
將自動(dòng)駕駛應(yīng)用到實(shí)際中,既要提高計(jì)算能力,又要考慮實(shí)物的成本以及大小等問(wèn)題,若要滿足這些需求,則需使用高性能并具有GPU的多核平臺(tái).本文使用了NVIDIA公司開(kāi)發(fā)的嵌入式視覺(jué)計(jì)算系統(tǒng)Jetson TX1,TX1以256核Maxwell架構(gòu)GPU為主,在性能上十分節(jié)能高效并且外觀小巧[4].以Jetson TX1作為核心開(kāi)發(fā)板,將前置攝像頭采集到的圖像信息輸入到TX1中,再通過(guò)目標(biāo)檢測(cè)算法,檢測(cè)、識(shí)別多種目標(biāo),并將讀取的信息存儲(chǔ)至數(shù)據(jù)庫(kù),同時(shí)通過(guò)顯示屏顯示,系統(tǒng)硬件原理框圖如圖1所示.目前,應(yīng)用在TX1上的圖像檢測(cè)計(jì)算的幀速率雖然很可觀,但對(duì)于實(shí)際應(yīng)用來(lái)說(shuō),還有一定差距,因此本文選用最新的YOLOv3算法在此平臺(tái)上進(jìn)行改進(jìn)、提速.
圖1 系統(tǒng)硬件原理框圖Fig.1 Block diagram of system hardware principle
基于端到端YOLO系列算法的步驟為:首先輸入圖像并提取網(wǎng)絡(luò)特征,得到一定大小的特征圖(比如13×13),然后將輸入圖像劃分成13×13個(gè)單元格,接著進(jìn)行邊界框預(yù)測(cè).某個(gè)目標(biāo)的中心坐標(biāo)落在哪個(gè)單元格中,則由該單元格來(lái)預(yù)測(cè)該目標(biāo),每個(gè)單元格都會(huì)預(yù)測(cè)固定數(shù)量的邊界框(YOLOv1中是2個(gè),YOLOv2中是5個(gè),YOLOv3中是3個(gè)),這幾個(gè)邊界框中只有最大的邊界框才會(huì)被選定用來(lái)預(yù)測(cè)該目標(biāo)[5].
相較于前兩代YOLO,第三代YOLOv3有了很大進(jìn)步,各方面都復(fù)雜得多,而且無(wú)論是在速度方面還是結(jié)果的精度方面,對(duì)比其他深度學(xué)習(xí)算法(SSD、R-FCN等),YOLOv3的優(yōu)勢(shì)都是最明顯的[6].YOLOv3首先對(duì)邊界框預(yù)測(cè),采用K-means聚類(lèi)的方式對(duì)Anchor Box進(jìn)行初始化,得到多個(gè)Anchor Box的尺寸、位置信息[7],其次,采用多標(biāo)簽分類(lèi),該操作是通過(guò)logistic分類(lèi)器來(lái)實(shí)現(xiàn)的,取代了以往的softmax分類(lèi),這是YOLOv3的一大亮點(diǎn),解決了重疊類(lèi)別標(biāo)簽檢測(cè)不出的問(wèn)題.另外,類(lèi)別預(yù)測(cè)中的損失函數(shù)采用二元交叉熵,特別針對(duì)小目標(biāo)檢測(cè),還采用了多尺度融合進(jìn)行特征提取,采用Darknet-53特征提取網(wǎng)絡(luò),包括53個(gè)卷積層和殘差結(jié)構(gòu).YOLOv3雖然改進(jìn)了YOLO一直以來(lái)不擅長(zhǎng)檢測(cè)小物體的缺點(diǎn),并一直保證著高檢測(cè)速度,但平均準(zhǔn)確率(mAP)并不高.
2.2.1 激活函數(shù)的改進(jìn)
YOLOv3中所采用的損失函數(shù)主要由激活函數(shù)sigmoid和二元交叉熵組成,其中輸入的連續(xù)實(shí)值經(jīng)過(guò)sigmoid函數(shù)激活后,輸出值都會(huì)在0~1范圍內(nèi),但在深度神經(jīng)網(wǎng)絡(luò)中梯度反向傳遞時(shí),要對(duì)sigmoid求導(dǎo),求導(dǎo)后兩邊趨向于0,也就意味著很大幾率會(huì)出現(xiàn)梯度消失的現(xiàn)象,甚至還有幾率發(fā)生梯度爆炸,而且sigmoid所輸出數(shù)據(jù)都大于0,那么收斂速度會(huì)受到相應(yīng)的影響[8].本文結(jié)合sigmoid函數(shù)和ReLU函數(shù)存在的問(wèn)題,將激活函數(shù)改進(jìn)為
(1)
式中,參數(shù)α、β為可調(diào)整參數(shù),神經(jīng)網(wǎng)絡(luò)更新α的方式為
(2)
式中,μ、ε分別為激活函數(shù)通過(guò)反向傳播進(jìn)行訓(xùn)練得到的動(dòng)量和學(xué)習(xí)率.本文采用αi=0.25作為初始值,β則控制著負(fù)值部分在何時(shí)飽和,最終通過(guò)不斷測(cè)試對(duì)比,選取β=0.5[9].改進(jìn)后的激活函數(shù)其總體輸出接近0均值,這樣下一層的神經(jīng)元得到0均值作為輸入,能夠提升收斂速度,還解決了梯度消失以及ReLU函數(shù)中的Dead ReLU問(wèn)題.加入?yún)?shù)α、β后,可以避免引起某些神經(jīng)元可能永遠(yuǎn)不會(huì)被激活,導(dǎo)致相應(yīng)的參數(shù)永遠(yuǎn)不能被更新的情況.
2.2.2 采用多級(jí)特征金字塔網(wǎng)絡(luò)
YOLOv3中采用的多尺度融合(FPN)是通過(guò)自上而下的方式融合深層和淺層的特征來(lái)構(gòu)造特征金字塔.雖然采用FPN后,大幅度提升了小物體的檢測(cè)能力,但對(duì)于一些大、中物體檢測(cè)能力偏弱,這是因?yàn)榻鹱炙械拿總€(gè)特征圖(用于檢測(cè)特定大小范圍內(nèi)的對(duì)象)主要或甚至僅通過(guò)骨干網(wǎng)絡(luò)單層構(gòu)建,即主要或僅包含單層信息.圖像中所包含的各個(gè)目標(biāo)大小不一,所以應(yīng)當(dāng)根據(jù)相應(yīng)的特征分別進(jìn)行檢測(cè),目標(biāo)可大致分為簡(jiǎn)單目標(biāo)與復(fù)雜目標(biāo)兩種,對(duì)于前者僅僅是淺層特征便可檢測(cè)到,其所包含語(yǔ)義信息不多,可優(yōu)勢(shì)在于目標(biāo)位置準(zhǔn)確;對(duì)于后者,則需要較深層的特征,其語(yǔ)義信息相對(duì)更多,可不足在于目標(biāo)位置較模糊[10].而多級(jí)特征金字塔網(wǎng)絡(luò)最后可以提取同一尺度在不同層內(nèi)的特征,解決了FPN方法的局限性.
本文的多級(jí)特征金字塔網(wǎng)絡(luò)(MLFPN)結(jié)構(gòu)如圖2所示,結(jié)構(gòu)保留YOLOv3中的DarkNet-53并作為主要特征提取網(wǎng)絡(luò).將MLFPN嵌入到DarkNet-53網(wǎng)絡(luò)后,首先將DarkNet-53網(wǎng)絡(luò)提取的3個(gè)層次特征(大小分別為13×13、26×26、52×52)通過(guò)特征融合模塊(FFM)融合,將融合后的特征圖(大小為52×52)作為基本特征,再依次由多個(gè)U形模塊(TUM)和FFM對(duì)基本特征進(jìn)行處理,這樣所提取的特征代表性會(huì)更強(qiáng).其中TUM用來(lái)產(chǎn)生多個(gè)不同尺度的特征圖,且不同TUM內(nèi)解碼器層的深度基本一致,每個(gè)TUM由5個(gè)跨步卷積(編碼器)和5個(gè)上采樣組成,最終將輸出6種尺度的特征,本文輸出大小依次為52×52、26×26、13×13、7×7、3×3、1×1的特征圖.每一級(jí)的輸出可表示為
(3)
圖2 MLFPN結(jié)構(gòu)圖Fig.2 MLFPN structure diagram
本文的實(shí)驗(yàn)環(huán)境如表1所示,本文所用的數(shù)據(jù)集是公開(kāi)的目標(biāo)檢測(cè)標(biāo)注對(duì)比數(shù)據(jù)集PASCAL VOC 2012.為了確定現(xiàn)有算法是否具備更高的性能,本文所建模型不管是在訓(xùn)練時(shí)還是在測(cè)試時(shí),都是通過(guò)開(kāi)放數(shù)據(jù)集而實(shí)現(xiàn).Pascal VOC 2007數(shù)據(jù)集共包含20個(gè)類(lèi)別,11 540幅圖像,27 450個(gè)被標(biāo)注的目標(biāo).設(shè)置召回率閾值等于0.5,最大邊框檢測(cè)數(shù)量是20個(gè).
表1 實(shí)驗(yàn)環(huán)境Tab.1 Experimental environment
本文分別用改進(jìn)的YOLOv3網(wǎng)絡(luò)和Faster-rcnn、YOLOv3算法來(lái)檢測(cè)目標(biāo),通過(guò)數(shù)據(jù)集的樣本驗(yàn)證訓(xùn)練模型的檢測(cè)效果,最終檢測(cè)結(jié)果如圖3所示.由圖3可知,改進(jìn)后的YOLOv3準(zhǔn)確率超過(guò)80%,并且其檢測(cè)效果相比另兩種算法有較大的提升.
本文選取數(shù)據(jù)集中幾張圖片的檢測(cè)結(jié)果進(jìn)行對(duì)比,對(duì)比結(jié)果如圖4所示.由圖4中標(biāo)出的準(zhǔn)確率和識(shí)別框數(shù)以及表2中各類(lèi)別mAP對(duì)比可證明,無(wú)論是普通背景單目標(biāo)圖像、多目標(biāo)圖像,還是有遮擋目標(biāo)圖像,改進(jìn)的YOLOv3算法都展現(xiàn)了比YOLOv3更好的檢測(cè)能力,可以更為精準(zhǔn)地檢測(cè)目標(biāo),降低了漏檢率.
圖3 檢測(cè)方法對(duì)比Fig.3 Comparison of detection methods
圖4 YOLOv3和改進(jìn)的YOLOv3檢測(cè)結(jié)果圖Fig.4 Detection results of YOLOv3 before and after improvement
表2 各類(lèi)別mAP對(duì)比表Tab.2 Comparison of different mAP %
將改進(jìn)的YOLOv3算法應(yīng)用到TX1開(kāi)發(fā)板中的檢測(cè)結(jié)果如圖5所示.靜態(tài)圖像檢測(cè)結(jié)果如圖5中a、b、c、d所示;導(dǎo)入一段視頻后,動(dòng)態(tài)視頻檢測(cè)結(jié)果截圖如圖5e、f、g、h所示.根據(jù)對(duì)比圖可以看出,改進(jìn)后的算法可以將較遠(yuǎn)的小目標(biāo)和重疊的目標(biāo)識(shí)別出來(lái),漏檢率明顯降低.其中圖5e、f和圖5g、h分別為視頻中截取的第13幀和32幀,由圖5以及表3(對(duì)視頻進(jìn)行目標(biāo)檢測(cè)的速度及mAP對(duì)比表)可以看出,改進(jìn)的YOLOv3相較于YOLOv3的mAP增長(zhǎng)了1.47倍,且檢測(cè)速度提高了1.13倍.
文中將YOLOv3中的特征金字塔、激活函數(shù)改進(jìn)后,利用嵌入式GPU平臺(tái)在Jetson TX1上實(shí)現(xiàn)目標(biāo)檢測(cè),借助CUDA編程進(jìn)行并行算法,從而實(shí)現(xiàn)目標(biāo)檢測(cè),改進(jìn)的YOLOv3可以更高速地提取精確結(jié)果.由于GPU硬件技術(shù)近年來(lái)不斷獲得發(fā)展,并且隨著研究進(jìn)一步深入,將深度學(xué)習(xí)算法應(yīng)用到具有實(shí)時(shí)處理能力的、帶有強(qiáng)大高性能運(yùn)算能力的GPU設(shè)備中已經(jīng)成為可能,屆時(shí)整個(gè)目標(biāo)檢測(cè)與跟蹤過(guò)程可以更加高效、準(zhǔn)確的實(shí)現(xiàn).
圖5 TX1上的實(shí)驗(yàn)結(jié)果圖Fig.5 Experimental results on TX1
表3 實(shí)驗(yàn)結(jié)果Tab.3 Experimental results