甄 然,蘇 康,周金星,李素康
(1.河北科技大學(xué) 電氣工程學(xué)院,河北 石家莊 050018;2.河北芃瑞科技有限公司,河北 石家莊 050000)
近年來(lái),卷積神經(jīng)網(wǎng)絡(luò)在各類(lèi)圖像識(shí)別任務(wù)中都取得了良好的效果,如人臉識(shí)別、人眼檢測(cè)、行人檢測(cè)、車(chē)牌識(shí)別等[1]。但是隨著科技發(fā)展,圖像識(shí)別技術(shù)被逐漸應(yīng)用在航空業(yè)、工業(yè)等各個(gè)領(lǐng)域中,對(duì)于圖像識(shí)別的精度、可靠度等要求越來(lái)越高。隨著我國(guó)低空空域的逐步開(kāi)放和科技的不斷發(fā)展,無(wú)人機(jī)數(shù)量不斷增多。無(wú)論在無(wú)人機(jī)路徑規(guī)劃、避障領(lǐng)域,還是在無(wú)人機(jī)智能視頻監(jiān)控領(lǐng)域,無(wú)人機(jī)的圖像識(shí)別系統(tǒng)都起著至關(guān)重要的作用[2]。如何提高無(wú)人機(jī)的目標(biāo)檢測(cè)準(zhǔn)確率已成為計(jì)算機(jī)視覺(jué)領(lǐng)域的重要研究方向?;谏疃葘W(xué)習(xí)的目標(biāo)檢測(cè)是近年來(lái)的研究熱點(diǎn),尤其是深度學(xué)習(xí)中卷積神經(jīng)網(wǎng)絡(luò)的發(fā)展直接促進(jìn)了目標(biāo)識(shí)別和定位任務(wù)的進(jìn)步[3]。文獻(xiàn)[4]提出了一種采用選擇性搜索算法(Selective Search)的RCNN(Regions with CNN features)方法。此方法首先通過(guò)選擇性搜索算法產(chǎn)生一系列的候選區(qū)域,然后對(duì)這些目標(biāo)區(qū)域提取特征,并訓(xùn)練SVM分類(lèi)這些特征的同時(shí)進(jìn)行邊界框回歸。此方法在檢測(cè)精度方面相比傳統(tǒng)算法有了提高,但缺點(diǎn)在于區(qū)域建議算法生成大量的候選區(qū)域,需要大量的計(jì)算才能處理,且訓(xùn)練分為多個(gè)步驟,訓(xùn)練耗時(shí)長(zhǎng)、速度慢、實(shí)時(shí)性能差[5]。Fast-R-CNN采用了ROI Pooling(Region of Interest Pooling),將特征圖中相應(yīng)區(qū)域池化為固定尺寸的特征圖,便于后續(xù)的分類(lèi)和輸出回歸操作,加快了處理速度[6]。Faster-R-CNN采用區(qū)域建議網(wǎng)絡(luò)來(lái)取代選擇性搜索,從而極大地提升了檢測(cè)框生成速度。在上述算法中從結(jié)構(gòu)上對(duì)R-CNN進(jìn)行改進(jìn)來(lái)構(gòu)建快速檢測(cè)器,但卻大大降低了檢測(cè)精度[7]。YOLO算法是一種同時(shí)預(yù)測(cè)多個(gè)檢測(cè)框位置和類(lèi)別的CNN,實(shí)現(xiàn)了端到端的物體檢測(cè)[8],極大地提升了檢測(cè)速度,但面對(duì)尺度變化較大物體時(shí)的泛化能力較差。SSD算法相比YOLO算法,其設(shè)置了尺度或長(zhǎng)寬比不同的先驗(yàn)框(Default Boxes),并采用卷積進(jìn)行檢測(cè)。在保證檢測(cè)速度的前提下提高了檢測(cè)精度[9]。YOLO和SSD的主要思路是均勻地在特征圖上進(jìn)行密集抽樣,然后利用CNN提取特征后直接進(jìn)行分類(lèi)與回歸,整個(gè)過(guò)程只需一步,所以其優(yōu)勢(shì)是速度快[10]。但均勻的密集采樣導(dǎo)致訓(xùn)練時(shí)正負(fù)樣本極不平衡,影響了模型準(zhǔn)確度。
在特征提取過(guò)程中,不同特征層包含的信息側(cè)重點(diǎn)不同,已有研究者將特征融合策略應(yīng)用于目標(biāo)檢測(cè),如圖像金字塔、FPN、DSSD、FSSD。FPN通過(guò)橫向連接進(jìn)行元素求和,融合了不同尺度特征[11],DSSD利用反卷積模塊融合特征金字塔中的特征映射;然而FPN和DSSD不夠高效,過(guò)多的融合增加了計(jì)算量。FSSD通過(guò)拼接的方式直接融合不同的層次特征,但忽略了不同特征的層次結(jié)構(gòu)[12]。
在研究了上述結(jié)構(gòu)之后,本文提出一種改進(jìn)型SSD算法。首先針對(duì)SSD算法中未能充分利用特征圖信息的情況,將包含豐富語(yǔ)義信息的深層特征圖經(jīng)過(guò)上采樣融合到包含目標(biāo)形狀和位置信息的淺層特征圖中,構(gòu)建新的特征融合模塊和目標(biāo)檢測(cè)框架。其次,針對(duì)由于位置回歸不準(zhǔn)確造成小目標(biāo)檢測(cè)率低的情況,引入?yún)?shù)IoU來(lái)對(duì)位置回歸損失函數(shù)進(jìn)行改進(jìn),進(jìn)而提高在整體損失函數(shù)中占比。分析了方案的可行性后進(jìn)行仿真實(shí)驗(yàn),對(duì)比改進(jìn)前后的實(shí)驗(yàn)數(shù)據(jù),改進(jìn)后的SSD算法顯著提高了目標(biāo)檢測(cè)的準(zhǔn)確率,驗(yàn)證了方案的有效性。
SSD(Single Shot MutiBox Detectior)是 劉 偉 在ECCV 2016提出的,是一種one-stage方法。其主要思想是均勻地在不同深度的特征圖上進(jìn)行密集抽樣,抽樣時(shí)采用不同的尺度和長(zhǎng)寬比,在不同尺度的特征圖上進(jìn)行預(yù)測(cè),端到端的訓(xùn)練,直接回歸目標(biāo)類(lèi)別和位置[13]。整個(gè)過(guò)程只需要一步,所以速度快是其優(yōu)勢(shì)。SSD300結(jié)構(gòu)中,其輸入圖像的大小是300×300,基礎(chǔ)網(wǎng)絡(luò)部分使用了VGG16的卷積層,同時(shí)將VGG16的兩個(gè)全連接層換成普通的卷積層,之后又連接了多個(gè)卷積層來(lái)獲取不同 大 小 的 特 征 映 射,提 取Conv4_3、Conv7、Conv8_2、Conv9_2、Conv10_2、Conv11_2層的特征圖;然后在目標(biāo)特征圖每一個(gè)點(diǎn)構(gòu)造若干個(gè)不同尺度大小的Default Boxes,分別進(jìn)行檢測(cè)和分類(lèi),得到多個(gè)初步符合條件的Default Boxes;再將不同特征圖的Default Boxes結(jié)合起來(lái),經(jīng)過(guò)非極大值抑制,得到最終的檢測(cè)結(jié)果。采用多尺度特征圖用于檢測(cè),CNN(Convolutional Neural Network)中一般前面的特征圖尺寸較大感受野較小,隨著網(wǎng)絡(luò)深度加深,特征圖逐漸變小感受野變大。不同尺度的特征圖同時(shí)用來(lái)檢測(cè)的優(yōu)點(diǎn)是尺寸較大的特征圖可以用來(lái)檢測(cè)小目標(biāo),尺寸較小的特征圖可以用來(lái)檢測(cè)大目標(biāo)[14]。所以,采用多尺度特征圖可提高目標(biāo)識(shí)別的準(zhǔn)確度。
預(yù)定義邊框(Default Boxes)是一組預(yù)設(shè)的邊框,在訓(xùn)練時(shí),真實(shí)的邊框位置是在預(yù)定義邊框的基礎(chǔ)之上構(gòu)建的。為了提高目標(biāo)檢測(cè)準(zhǔn)確率,預(yù)定義邊框通常有上千個(gè)或者更多,在傳統(tǒng)方法中,一般使用不同形狀的滑動(dòng)窗口在圖像上的不同位置產(chǎn)生不同的預(yù)定義邊框。在深度學(xué)習(xí)中,則使用Anchor Box在圖像的不同位置直接生成預(yù)定義邊框,用于進(jìn)行位置回歸。在SSD算法中使 用Conv4_3、Conv7、Conv8_2、Conv9_2、Conv10_2、Conv11_2作為檢測(cè)所用的特征圖,6個(gè)特征圖大小依次為(38,38),(19,19),(10,10),(5,5),(3,3),(1,1)。不同深度的特征圖設(shè)置的預(yù)定義邊框數(shù)量不同[15]。預(yù)定義邊框的設(shè)置包含兩個(gè)方面,分別是尺度(Scale)和長(zhǎng)寬比(Aspect Ratio)。預(yù)定義邊框的尺度遵循線(xiàn)性遞增規(guī)則:隨著特征圖大小降低,預(yù)定義邊框尺度線(xiàn)性增加[16]。其計(jì)算公式如下:
式中:smin=0.2表示最低層特征圖預(yù)定義邊框尺度;smax=0.9表示最高層特征圖預(yù)定義邊框尺度;m為特征層數(shù)。
為了提高模型面對(duì)尺度變化較大目標(biāo)時(shí)的泛化能力,預(yù)定義邊框采用不同的長(zhǎng)寬比,如下:
通過(guò)下面的公式計(jì)算得到預(yù)定義邊框的寬度w和高度h:
一般情況下,每個(gè)特征圖會(huì)有2個(gè)長(zhǎng)寬比為1的預(yù)定義邊框,一個(gè)尺度為sk,另一個(gè)尺度為當(dāng)前特征圖和下一個(gè)特征圖的幾何平均值,即:
SSD各層預(yù)定義先驗(yàn)框如表1所示。分析表1可知淺層特征用來(lái)檢測(cè)小目標(biāo),深層特征用來(lái)檢測(cè)大目標(biāo)。SSD算法共預(yù)測(cè)8 732個(gè)預(yù)定義邊框,所以SSD實(shí)質(zhì)上是密集采樣。
表1 SSD各層預(yù)定義先驗(yàn)框
SSD算法提取不同深度的特征圖用來(lái)檢測(cè)目標(biāo),然而淺層特征圖包含更多的紋理、位置等細(xì)節(jié)信息,其語(yǔ)義性低,不利于目標(biāo)識(shí)別。深層特征圖紋理、輪廓等信息較弱,但語(yǔ)義性很強(qiáng),不利于位置回歸。針對(duì)這個(gè)問(wèn)題,引入特征融合模塊對(duì)附加特征提取模塊進(jìn)行改進(jìn)。改進(jìn)后的SSD結(jié)構(gòu)如圖1所示。
反卷積常用于實(shí)現(xiàn)特征圖的上采樣,采用矩陣乘法的方式來(lái)考慮卷積的前向和反向過(guò)程,分別使用卷積核和特征圖來(lái)相乘[17]。在前向過(guò)程中,對(duì)于輸入元素矩陣X和輸出元素矩陣Y,用矩陣描述即為:
稀疏矩陣C為輸入矩陣X到輸出矩陣Y的正向卷積過(guò)程的矩陣表現(xiàn)形式,反卷積的操作就是對(duì)上述矩陣運(yùn)算過(guò)程進(jìn)行求逆運(yùn)算,即通過(guò)稀疏矩陣C和輸出矩陣Y求出輸入矩陣X,即:
反卷積過(guò)程中特征圖尺寸關(guān)系為:
式中:o為輸出尺寸;i為輸入尺寸;p為填充;s為步長(zhǎng)。
SSD算法主要用淺層特征圖來(lái)檢測(cè)小目標(biāo),但淺層特征圖主要包含位置、紋理等低級(jí)特征,語(yǔ)義性較低,有利于位置回歸但不利于分類(lèi)回歸。將語(yǔ)義性較強(qiáng)的深層特征和淺層特征進(jìn)行融合可以有效地解決這個(gè)問(wèn)題。特征融合模塊增強(qiáng)了各個(gè)特征層聯(lián)系,提高了特征信息的利用率和檢測(cè)率。
首先通過(guò)對(duì)Conv9_2、Conv10_2層特征圖進(jìn)行卷積核為1×1的卷積運(yùn)算,使通道數(shù)和Conv4_3、Conv7層通道數(shù)保持一致。再對(duì)其進(jìn)行反卷積運(yùn)算,使特征圖大小和Conv4_3、Conv7層相同,反卷積后分別與Conv4_3、Conv7進(jìn)行特征融合,融合方式為add。融合流程如圖2所示。
交并比(Intersection over Union,IoU)是衡量目標(biāo)檢測(cè)模型中位置回歸是否準(zhǔn)確的評(píng)估參數(shù)[18]。通過(guò)度量預(yù)測(cè)框和真實(shí)框的重疊率表示位置回歸是否準(zhǔn)確。假設(shè)A為預(yù)測(cè)框面積,B為真實(shí)框的面積,則A與B的IoU為:
SSD的訓(xùn)練過(guò)程就是對(duì)目標(biāo)位置和目標(biāo)所屬類(lèi)別進(jìn)行回歸,損失函數(shù)即位置損失(locatization loss,loc)與置信度損失(confidence loss,conf)的加權(quán)和[19],表達(dá)式定義如下:
式中:N為先驗(yàn)框的正樣本數(shù)量;c為目標(biāo)類(lèi)別置信度預(yù)測(cè)值;l為目標(biāo)對(duì)應(yīng)邊界框的位置預(yù)測(cè)值;g為真實(shí)框的位置參數(shù);α為位置損失權(quán)重參數(shù),一般情況下為1。
采用SmoothL1loss作為位置回歸損失,定義如下:
式中:x∈{1,0}是一個(gè)指示參數(shù),當(dāng)x=1時(shí)表示第i個(gè)預(yù)定義邊框和第j個(gè)真實(shí)框匹配,同時(shí)真實(shí)框的類(lèi)別為g,因?yàn)閤的限制,位置回歸權(quán)僅對(duì)正樣本進(jìn)行回歸計(jì)算。
對(duì)于置信度回歸,使用softmax loss作為損失函數(shù),定義如下:
在SSD算法中總損失函數(shù)為位置回歸損失和置信度損失的加權(quán)和,加權(quán)系數(shù)為1。置信度損失和回歸損失占據(jù)同等重要性。但大多數(shù)情況下是由于位置回歸不準(zhǔn)確造成的目標(biāo)檢測(cè)準(zhǔn)確率低。IoU值較大的預(yù)測(cè)框?qū)z測(cè)目標(biāo)的貢獻(xiàn)更大,IoU值較小時(shí)一般為無(wú)效預(yù)測(cè)。原損失函數(shù)對(duì)待不同IoU值的預(yù)測(cè)框沒(méi)有區(qū)別對(duì)待,導(dǎo)致目標(biāo)位置回歸不夠精準(zhǔn)。針對(duì)這個(gè)問(wèn)題,引入?yún)?shù)IoU來(lái)提高位置回歸損失在總損失函數(shù)中所占的比重,使得目標(biāo)預(yù)測(cè)框坐標(biāo)預(yù)測(cè)更加準(zhǔn)確。IoU值的范圍在0~1之間,加權(quán)系數(shù)控制在1~2之間。IoU值越大時(shí),位置回歸在總損失函數(shù)中所占的權(quán)重越大,位置損失的回歸精度越高,進(jìn)而提高了檢測(cè)精度。
改進(jìn)后損失函數(shù)如下:
實(shí)驗(yàn)所使用數(shù)據(jù)集包含戰(zhàn)斗機(jī)、客機(jī)、無(wú)人機(jī)、鳥(niǎo)類(lèi)、熱氣球、滑翔機(jī)等6個(gè)目標(biāo)類(lèi)別。數(shù)據(jù)集包括600張照片,每一目標(biāo)類(lèi)別數(shù)目如表2所示。經(jīng)過(guò)旋轉(zhuǎn)、鏡像等方法拓展到7 200張圖片。同時(shí)在訓(xùn)練過(guò)程中采用與原始SSD一樣的數(shù)據(jù)增強(qiáng)方法,隨機(jī)對(duì)照片的飽和度、色調(diào)等進(jìn)行改變。
表2 數(shù)據(jù)集各種類(lèi)數(shù)量
在目標(biāo)檢測(cè)性能評(píng)價(jià)體系中:TP表示目標(biāo)被檢測(cè)出且類(lèi)別歸屬準(zhǔn)確;FP表示把非目標(biāo)劃分到所要識(shí)別的目標(biāo)類(lèi)別中,包含把背景劃分為目標(biāo);FN表示所要識(shí)別的目標(biāo)歸屬到錯(cuò)誤的類(lèi)別或著沒(méi)有識(shí)別到;TN表示正確識(shí)別非目標(biāo)。準(zhǔn)確率(Precision)和召回率(Recall)計(jì)算方式如下:
準(zhǔn)確率和召回率是一對(duì)矛盾的量,單純用準(zhǔn)確率和召回率來(lái)作為檢測(cè)模型的評(píng)價(jià)指標(biāo)是不合理的。通常用AP值作為檢測(cè)模型評(píng)價(jià)指標(biāo),根據(jù)準(zhǔn)確率和召回率可以得到PR曲線(xiàn),PR曲線(xiàn)與坐標(biāo)圍起來(lái)的面積就是AP值[20]。
將添加特征融合模塊和使用改進(jìn)后損失函數(shù)訓(xùn)練的SSD模型稱(chēng)為SSD_Plus,分別在數(shù)據(jù)集上訓(xùn)練原始SSD和SSD_Plus。實(shí)驗(yàn)參數(shù)設(shè)置如表3所示。
表3 實(shí)驗(yàn)參數(shù)設(shè)置
兩個(gè)模型的檢測(cè)結(jié)果PR曲線(xiàn)如圖3、圖4所示。每個(gè)類(lèi)別的AP值如表4所示。
表4 各個(gè)目標(biāo)類(lèi)別AP值
相比原始SSD,改進(jìn)后的SSD_Plus在每一類(lèi)別上的AP值都有所增加,mAP增加了3%。說(shuō)明特征融合模塊通過(guò)利用不同特征層的特征圖,增強(qiáng)了特征信息的利用率,通過(guò)將參數(shù)IoU引入到損失函數(shù)位置回歸部分,訓(xùn)練時(shí)使網(wǎng)絡(luò)能夠更有效地進(jìn)行位置回歸,提高了檢測(cè)精度。經(jīng)過(guò)文中改進(jìn)的SSD網(wǎng)絡(luò)結(jié)構(gòu),平均精準(zhǔn)度有明顯提升。
本文設(shè)計(jì)的特征融合模塊,將包含位置等語(yǔ)義性不強(qiáng)的信息的低層特征圖和包含語(yǔ)義性較強(qiáng)的深層特征圖進(jìn)行融合,提高了信息的利用率,增強(qiáng)了目標(biāo)檢測(cè)性能。損失函數(shù)的位置回歸部分引入?yún)?shù)IoU,進(jìn)而提高位置回歸損失在總損失的占比,提高檢測(cè)精度。目標(biāo)檢測(cè)網(wǎng)絡(luò)是一個(gè)復(fù)雜的特征映射關(guān)系,在實(shí)際應(yīng)用中不僅對(duì)精度有要求,還對(duì)檢測(cè)速度有一定的要求。本文算法通過(guò)特征融合和損失函數(shù)的改進(jìn)提高了檢測(cè)精度,但增加了計(jì)算量,如何使網(wǎng)絡(luò)在有較高檢測(cè)準(zhǔn)確率的情況下,提高檢測(cè)速度還需要進(jìn)一步研究。