張立國(guó),蔣軼軒,田廣軍
(燕山大學(xué)電氣工程學(xué)院,河北秦皇島066004)
對(duì)地車(chē)輛目標(biāo)檢測(cè),在傳統(tǒng)檢測(cè)算法中,占據(jù)主導(dǎo)地位的是基于人工特征提取的方法。人工特征提取方法中需要選取感興趣區(qū)域并使用滑動(dòng)窗口選出候選區(qū)、手動(dòng)提取特征然后分類(lèi)[1]。如Papageorgiou提出了一種在復(fù)雜場(chǎng)景的圖像中進(jìn)行目標(biāo)檢測(cè)的通用可訓(xùn)練模型,其不依賴(lài)任何先驗(yàn)?zāi)P?在此基礎(chǔ)上提出了基于運(yùn)動(dòng)的擴(kuò)展,提高了性能[2]。但是很顯然,手動(dòng)提取依賴(lài)經(jīng)驗(yàn)且提取特征的好壞將會(huì)直接影響檢測(cè)結(jié)果,而基于深度學(xué)習(xí)的方法具有不需要人工提取特征,靈活多變,可在精確率與速度之間進(jìn)行權(quán)衡等優(yōu)點(diǎn)[3]。隨著硬件技術(shù)的發(fā)展,被越來(lái)越多的研究者使用。如使用TensorFlow構(gòu)建Faster R-CNN,提高了檢測(cè)的精確度與速度;將Faster R-CNN與ZF、VGG16結(jié)合,改善了模型的魯棒性;基于輕量化SSD的LVP-DN模型,實(shí)現(xiàn)了檢測(cè)速度極大提高。但這些算法為特定場(chǎng)景研發(fā)的,側(cè)重點(diǎn)有所不同,難以將其應(yīng)用到無(wú)人機(jī)圖像對(duì)地車(chē)輛檢測(cè)中使用。其中突出的問(wèn)題就是無(wú)人機(jī)圖像目標(biāo)尺寸相較于整個(gè)圖像較小,而且極易出現(xiàn)多物體重疊,造成了檢測(cè)錯(cuò)誤,效果不甚理想。因此,提出了基于多尺度融合的圖像多目標(biāo)檢測(cè)方法,以Faster R-CNN為基本框架,卷積層使用VGG16,將卷積層中不同尺寸的特征信息依次結(jié)合生成融合層,在這一過(guò)程中,需要來(lái)自卷積層和前一層的特征信息所需的特征圖像尺寸及通道數(shù)保持一致并分別使用不同的網(wǎng)絡(luò)模塊對(duì)其進(jìn)行處理。再將新得到的特征圖結(jié)合上下文信息,對(duì)其使用RNN算法,提高對(duì)車(chē)輛目標(biāo)的檢測(cè)效率。
本文實(shí)驗(yàn)所用到的數(shù)據(jù)集是VisDrone2019數(shù)據(jù)集。在實(shí)驗(yàn)部分,對(duì)算法的性能參數(shù)進(jìn)行測(cè)試,并使用了Faster R-CNN和YOLO與改進(jìn)后的算法進(jìn)行比較,以綜合比較模型的性能。
2 基于Faster R-CNN的多尺度融合算法
在Faster R-CNN算法中,大致可以分為4個(gè)步驟:卷積層網(wǎng)絡(luò)提取特征;區(qū)域候選框網(wǎng)絡(luò)生成候選區(qū)域;感興趣區(qū)域池化層將特征圖輸出為統(tǒng)一大小;候選區(qū)域分類(lèi)和回歸[4]。其流程圖如圖1所示。
圖1 Faster R-CNN流程圖Fig.1 Faster R-CNN flowchart
特征提取的卷積層網(wǎng)絡(luò)的種類(lèi)有很多種,常見(jiàn)的有VGG16、ResNet網(wǎng)絡(luò)等,在本文中VGG16選用網(wǎng)絡(luò)進(jìn)行特征提取[5]。其結(jié)構(gòu)簡(jiǎn)單,可以通過(guò)構(gòu)建多層次的網(wǎng)絡(luò)結(jié)構(gòu)來(lái)提升特征提取的能力。VGG16使用的是3*3的卷積核以及2*2的最大池化。將輸入圖像進(jìn)行一系列的卷積、池化后,得到相應(yīng)的特征圖,然后將特征圖送入?yún)^(qū)域候選框網(wǎng)絡(luò)(RPN,region proposal network)。
RPN的作用是生成大小不一的候選框[6]。在Faster R-CNN之前,基于區(qū)域的two-stage目標(biāo)識(shí)別算法普遍采用Selective Search提取候選框,非常浪費(fèi)時(shí)間。為此,Faster R-CNN使用區(qū)域候選框網(wǎng)絡(luò)代替Selective Search,并引入了錨框機(jī)制(anchor)[7]。即在特征圖上的每個(gè)位置,生成不同大小與尺寸的錨框。
經(jīng)過(guò)RPN網(wǎng)絡(luò)后,模型生成了大小不一的候選區(qū),由于在模型后面要使用到全連接層,要求統(tǒng)一輸入大小,Faster R-CNN設(shè)計(jì)了感興趣區(qū)域池化層。對(duì)于輸入的特征圖,根據(jù)自身尺寸大小分為固定的幾個(gè)部分[8]。對(duì)每個(gè)部分取最大值,從而將特征圖輸出為固定尺寸。
經(jīng)過(guò)感興趣池化層后,得到的特征圖送入全連接層,輸出每個(gè)候選框?qū)?yīng)各類(lèi)別的置信度,并利用邊框回歸得到每個(gè)候選框的相對(duì)于實(shí)際位置的偏移,得到更貼近實(shí)際的檢測(cè)框。
本文以Faster R-CNN為基礎(chǔ)進(jìn)行改進(jìn)。輸入圖片經(jīng)過(guò)卷積層的時(shí)候,會(huì)經(jīng)過(guò)多次卷積、池化、激活等操作,因此可以得出不同層次不同空間分辨率的特征信息[9]。在Faster R-CNN中,只利用最后的特征信息進(jìn)行RPN操作以及分類(lèi)回歸[10]。但是在經(jīng)過(guò)VGG16后,此時(shí)的特征圖中小目標(biāo)的語(yǔ)義信息幾乎消失,造成了對(duì)小目標(biāo)檢測(cè)的難度較大。但如果使用較低層次的特征圖進(jìn)行計(jì)算,其低水平的特征顯然會(huì)損害模型的目標(biāo)檢測(cè)能力。
因此,本文利用卷積層所產(chǎn)生的、不同層次的特征信息,將其結(jié)合后得到新的特征圖像進(jìn)行目標(biāo)檢測(cè)。為實(shí)現(xiàn)這一目標(biāo),需要對(duì)算法模型進(jìn)行改進(jìn),將不同層次的特征信息融合。用融合后的特征信息代替最后一層特征信息,達(dá)到對(duì)小目標(biāo)的精確檢測(cè)。與此同時(shí),模型最大限度地使用Faster R-CNN框架,僅對(duì)其進(jìn)行部分改進(jìn),減小對(duì)速度的影響和對(duì)內(nèi)存的消耗。
改進(jìn)后的模型框架如圖2所示。其中,使用卷積操作是為了提取特征,這是深度學(xué)習(xí)常用的提取特征的方法;使用激活操作為網(wǎng)絡(luò)加入非線(xiàn)性因素,使其能解決非線(xiàn)性問(wèn)題,使用的激活函數(shù)是RELU激活函數(shù);使用池化操作是為了降低計(jì)算的規(guī)模并且防止過(guò)擬合,使用的池化方法是最大值池化,步長(zhǎng)被設(shè)置為2[11]。由圖2可知,經(jīng)過(guò)卷積神經(jīng)網(wǎng)絡(luò),可以獲取不同尺度的特征信息。而多尺度融合就是將不同尺度的特征信息進(jìn)行融合,獲取新的特征圖取代卷積層的最后一層特征信息。
圖2 多尺度融合的Faster R-CNN網(wǎng)絡(luò)框架Fig.2 Multi-scale fusion Faster R-CNN network framework
在以往的算法中,只用到了最后一層特征圖,而在本算法中選取了卷積層中最后3個(gè)階段的特征。之所以沒(méi)有選取更前層次的特征圖,主要考慮到使用淺層特征會(huì)占用大量?jī)?nèi)存,不利于檢測(cè)速度。并且選擇每個(gè)階段最后的輸出(既經(jīng)過(guò)池化層前的最后一個(gè)卷積層)作為所使用的特征信息。這樣選的好處是選取的特征信息是每個(gè)階段最好的特征。首先將最后1層得到的特征圖與倒數(shù)第2層的特征圖進(jìn)行融合,然后將新得到的與倒數(shù)第3層的特征圖進(jìn)行融合,這樣得到的就是多尺度融合的特征圖。
融合層的生成方式如圖3所示,其中1*1代表對(duì)特征圖進(jìn)行1*1的卷積,3*3代表對(duì)特征圖進(jìn)行3*3的卷積,2*代表對(duì)其進(jìn)行2倍上采樣。融合模塊有2個(gè)輸入,對(duì)從前一層得到的特征信息先進(jìn)行3*3的卷積操作,再進(jìn)行2倍上采樣以得到更大的特征圖以便融合。而對(duì)于從上而下的特征圖要經(jīng)過(guò)一個(gè)1*1的卷積操作,以調(diào)整通道數(shù)。
圖3 特征融合模塊Fig.3 Feature fusion module
在將不同層次的特征圖融合時(shí),前提條件就是各層的特征圖像在融合前要大小一致且通道數(shù)一致[12]。因此在特征融合模塊需要對(duì)輸入進(jìn)行調(diào)整,從而實(shí)現(xiàn)特征圖像的統(tǒng)一化,得到最后的特征圖。在特征圖經(jīng)過(guò)結(jié)合上下文信息的模塊后,送入感興趣區(qū)域池化層(ROI)并進(jìn)行分類(lèi)和回歸。多尺度融合的意義在于在深層特征語(yǔ)義更強(qiáng)也更抽象,因此對(duì)分類(lèi)有益;淺層特征則有利于小目標(biāo)的檢測(cè)。將其結(jié)合,可以在一定程度上提高中小尺度目標(biāo)檢測(cè)精度。
在圖2中可以看到,在完成了多尺度信息的融合之后,并沒(méi)有直接使用特征信息進(jìn)行目標(biāo)檢測(cè)。為了進(jìn)一步提高模型的檢測(cè)能力,決定采用結(jié)合上下文信息的方法,獲取周邊信息,實(shí)現(xiàn)對(duì)特征圖充分利用以提升性能。設(shè)計(jì)了一個(gè)獲取上下文信息的模塊,并將2個(gè)該模塊插入算法中,接收融合得到的特征圖。模塊如圖4所示。將特征圖作為輸入,使用模塊的4個(gè)循環(huán)卷積網(wǎng)絡(luò)(RNN)獲取不同方向(上、下、左、右)的信息。再將所有信息連接起來(lái)(concat操作),然后新得到的特征信息與輸入相結(jié)合。
圖4 模塊結(jié)構(gòu)Fig.4 Module structure
本文借鑒并使用了RNN算法,如圖5所示,并對(duì)其進(jìn)行了改進(jìn)。傳統(tǒng)的RNN網(wǎng)絡(luò)輸入和輸出序列是等長(zhǎng),本文將多尺度融合得到的特征圖像中的每一個(gè)像素點(diǎn)以及不同方向的像素點(diǎn)作為RNN的輸入。以左側(cè)為例,輸出為在該點(diǎn)時(shí)的特征信息,進(jìn)行RNN計(jì)算。在每個(gè)像素點(diǎn)進(jìn)行RNN計(jì)算時(shí),將左側(cè)的像素點(diǎn)以及該像素點(diǎn)作為輸入,分別為圖5中的x1,x2,x3,…,而目標(biāo)點(diǎn)為最后一個(gè)輸入。將特征圖通過(guò)不同方向的RNN網(wǎng)絡(luò),使用如圖4模塊結(jié)構(gòu)得到特征圖像。因此,每個(gè)像素點(diǎn)都可以獲取周邊的4個(gè)位置即上下左右的信息,而這4個(gè)位置又可以獲取再外側(cè)的信息,這樣該像素點(diǎn)就得到以該點(diǎn)為中心的十字感受野。在第2次的過(guò)程中,因?yàn)槊總€(gè)像素點(diǎn)都獲取了十字感受野,即得到了全圖信息。這樣就使特征圖的每個(gè)點(diǎn)都兼顧了上下文信息,從而得到對(duì)無(wú)人機(jī)圖像更好的檢測(cè)能力。
圖5 RNN結(jié)構(gòu)Fig.5 RNN structure
圖5中,h與y的計(jì)算公式如式(1)和式(2)所示。對(duì)于RNN計(jì)算,參數(shù)保持不變[13]。如在計(jì)算不同的h時(shí),U,W,b都保持不變。
h1=f(Ux1+Wh0+b)
(1)
y=f(Vh4+C)
(2)
式中:f為激活函數(shù);U,W為參數(shù)矩陣;b為偏置量參數(shù),計(jì)算y時(shí)的激活函數(shù)與計(jì)算h時(shí)的不一定相同,V與C作用類(lèi)似于W和b。
(3)
式中:PT為被正確識(shí)別的正樣本;NT為被正確識(shí)別的負(fù)樣本。召回率表示所有正樣本當(dāng)中,被正確識(shí)別為正樣本的比例[15]。
(4)
式中:P為在驗(yàn)證集上所有的圖像對(duì)于該類(lèi)的精度值;n為存在該類(lèi)目標(biāo)的所有圖像的數(shù)量。
(5)
式中i為具體第i個(gè)類(lèi)。
本文使用的硬件設(shè)備是NVIDIA的Jetson TX2,配置環(huán)境是:Ubuntu+Python2+Tensorflow1.2+CV2+CUDA8.0。端到端開(kāi)源機(jī)器學(xué)習(xí)平臺(tái)使用TensorFlow,其擁有完善的文檔,豐富的算法庫(kù),靈活的移植性以及多語(yǔ)言支持[16]。使用的數(shù)據(jù)集為VisDrone2019數(shù)據(jù)集,該數(shù)據(jù)集由無(wú)人機(jī)拍攝圖像組成,涵蓋了廣泛的范圍,可以檢測(cè)多種物體,包括行人、車(chē)輛、船只等[17]。本文針對(duì)車(chē)輛目標(biāo)進(jìn)行檢測(cè),需要對(duì)圖片進(jìn)行重新標(biāo)注。由于卷積訓(xùn)練需要大量的數(shù)據(jù),因此為了增加樣本的數(shù)據(jù),對(duì)圖像進(jìn)行仿射變換,包括平移、旋轉(zhuǎn)等。得到包含各類(lèi)車(chē)輛的圖片一共大約8 000張作為訓(xùn)練數(shù)據(jù)集,對(duì)車(chē)輛進(jìn)行標(biāo)注,并劃分為4類(lèi):小型轎車(chē)、卡車(chē)、公交車(chē)、工程車(chē)。數(shù)據(jù)集部分圖片如圖6所示。
圖6 VisDrone2019數(shù)據(jù)集部分圖片F(xiàn)ig.6 Partial picture of VisDrone2019 dataset
圖6中,8 000張圖片分為5 600張訓(xùn)練集、1 600張驗(yàn)證集以及800張測(cè)試集。學(xué)習(xí)率初始值為0.001,batch size大小設(shè)定為64。
在進(jìn)行實(shí)驗(yàn)的過(guò)程中,需要對(duì)模型進(jìn)行訓(xùn)練和測(cè)試。圖7是模型的各個(gè)損失函數(shù),橫坐標(biāo)為迭代次數(shù),縱坐標(biāo)分別為RPN網(wǎng)絡(luò)分類(lèi)損失函數(shù)、RPN網(wǎng)絡(luò)定位損失函數(shù)、候選區(qū)域分類(lèi)與回歸過(guò)程分類(lèi)損失函數(shù)、候選區(qū)域分類(lèi)與回歸過(guò)程定位損失函數(shù)、總損失函數(shù)。
圖7中,圖7(a)和圖7(b)表示RPN網(wǎng)絡(luò)的分類(lèi)損失函數(shù)和定位損失函數(shù)隨迭代次數(shù)的變化;圖7(c)和圖7(d)表示在候選區(qū)域分類(lèi)和回歸過(guò)程中的分類(lèi)損失函數(shù)和定位損失函數(shù)隨迭代次數(shù)的變化;圖7(e)則表示模型的總損失函數(shù),即前4幅圖之和。在實(shí)際操作過(guò)程中,最常用就是模型的總損失函數(shù)。如果經(jīng)過(guò)訓(xùn)練總損失函數(shù)較低且平滑穩(wěn)定時(shí),就代表模型性能較好;反之如果經(jīng)過(guò)訓(xùn)練總損失函數(shù)無(wú)法降低或者起伏較大,則說(shuō)明模型有待優(yōu)化。通過(guò)圖像可知,當(dāng)訓(xùn)練次數(shù)達(dá)到40 000左右時(shí),各參數(shù)變化基本穩(wěn)定,表明改進(jìn)的網(wǎng)絡(luò)能夠很好的收斂。
圖7 訓(xùn)練模型損失值Fig.7 Training model loss
本文分別對(duì)改進(jìn)的算法、Faster R-CNN以及YOLO v3在Jetson TX2進(jìn)行檢測(cè)。一般來(lái)說(shuō),Faster R-CNN的檢測(cè)效果要好于YOLO v3(這一點(diǎn)在實(shí)際檢測(cè)中也有體現(xiàn))。因此僅在圖8中,給出了改進(jìn)的算法與Faster R-CNN對(duì)數(shù)據(jù)集中部分圖片的檢測(cè)結(jié)果。從圖8可以看出,左側(cè)的采用Faster R-CNN算法的2幅圖中都出現(xiàn)了漏檢的情況??梢灾庇^地感覺(jué)出相較于Faster R-CNN,改進(jìn)的算法對(duì)于無(wú)人機(jī)圖像中中小型目標(biāo)的檢測(cè)效果更好。
圖8 改進(jìn)的算法與Faster R-CNN部分圖片檢測(cè)結(jié)果Fig.8 Improved algorithm and Faster R-CNN partial image detection results
表1 不同模型的檢測(cè)評(píng)價(jià)指標(biāo)Tab.1 Detection and evaluation indicators of different models
同時(shí)也要看到由于實(shí)驗(yàn)平臺(tái)的硬件性能限制,3種算法的PFS都較低,即使是速度較快的YOLO v3的PFS也僅為19幀/s。而改進(jìn)算法的PFS為4.5幀/s,相比于Faster R-CNN還要低。但由于本文所要研究的無(wú)人機(jī)對(duì)地車(chē)輛檢測(cè)更傾向于精確度,改進(jìn)算法的PFS足以滿(mǎn)足實(shí)際需要。因此,綜合考慮各種因素,可以看出本文所提出的模型在無(wú)人機(jī)目標(biāo)檢測(cè)中更具有優(yōu)勢(shì)。
在對(duì)不同車(chē)輛類(lèi)型實(shí)驗(yàn)中,得到4種類(lèi)型的PA值,如表2所示。
表2 不同模型對(duì)于不同類(lèi)別的平均精確度Tab.2 Average accuracy of different models for different categories (%)
在表2中可以看到,在不同的類(lèi)別當(dāng)中,改進(jìn)的算法模型都取得了最好的檢測(cè)效果。例如,在對(duì)于小型轎車(chē)的檢測(cè)當(dāng)中,平均檢測(cè)精度提高了至少1.9%。同時(shí)可以看出上面四個(gè)類(lèi)別中,工程車(chē)的平均精確度最高,公交車(chē)的平均精確度最低。工程車(chē)的檢測(cè)精度好于其他幾類(lèi)的原因可能是工程車(chē)在外形上與其他類(lèi)有較大的差別。