譚 龍,高 昂
(黑龍江大學 計算機科學與技術(shù)學院,哈爾濱 150080)
目標檢測是計算機視覺領(lǐng)域的一項重要任務(wù),是生活中如實例分割[1],面部分析[2],汽車自動駕駛[3]、視頻分析[4]等各種視覺應(yīng)用的先決條件.
近些年,伴隨著深度卷積神經(jīng)網(wǎng)絡(luò)的充分發(fā)展[5]以及良好的數(shù)據(jù)集注釋先驗工作的積累[6],物體檢測器的性能得到了顯著提高.但是,物體檢測過程中的尺度變化仍然是所有檢測器的關(guān)鍵挑戰(zhàn),為了識別不同尺度的物體,早期大多數(shù)的檢測器都是基于手工制作的特征[7],并且利用圖像金字塔.考慮到內(nèi)存和檢測時間,這些工作無論在計算還是花費上都是昂貴的.得益于卷積神經(jīng)網(wǎng)絡(luò)的發(fā)展,手工設(shè)計的特征已逐漸被卷積神經(jīng)網(wǎng)絡(luò)計算的特征所取代.最近的檢測系統(tǒng)[8,9]利用卷積神經(jīng)網(wǎng)絡(luò)(ConvNets)在單個輸入尺度圖像依次進行運算,獲得不同尺度的特征圖,然后用最頂層特征圖來預(yù)測具有不同尺度和縱橫比的候選邊界框.然而,最頂部的特征圖具有固定的感受野,與自然圖像中的不同尺度的物體沖突.特別是小物體在最頂層上幾乎沒有信息,因此可能會損害物體檢測性能,尤其是小物體.
在解決多尺度問題方面,SSD 利用從下到上的特征金字塔來適應(yīng)各種尺寸的物體,然而,SSD 算法的特征金字塔形式未能利用深層特征圖中強大的語義信息,這對于小物體檢測至關(guān)重要.因為語義信息對于檢測視覺上困難的物體(例如小的,遮擋的物體)是決定性的,為了克服SSD 的缺點并使網(wǎng)絡(luò)對對象尺度更加穩(wěn)健,最近的工作(例如FPN[9],DSSD[10],RON[11])建議將低分辨率帶有強語義信息的特征圖同具有高分辨率但帶有弱語義弱信息的特征圖通過自上而下的通道橫向連接.與SSD 中的自下而上的方式相比,橫向連接將語義信息一個接一個地傳遞到淺層,從而增強了淺層特征的檢測能力.與傳統(tǒng)檢測器相比,這些網(wǎng)絡(luò)在精度方面有著顯著的提高.但是我們注意到這些在最頂層特征圖中使用反卷積層的方法完全丟失了小物體的精細細節(jié).
本文致力于提高小物體的檢測性能,緩解SSD算法的尺度變化問題,同時又不失實時檢測速度.通常,較深層中的深層特征對于分類子任務(wù)更具辨別性,而較淺層中的淺層特征則對于物體位置回歸子任務(wù)更有利.此外,淺層特征更適合于具有簡單外觀的特征對象,而深層特征適用于具有復雜外觀的對象.基于此,本文通過特征融合模塊將具有語義信息的深層特征添加到淺層特征中,以獲得具有豐富信息的特征圖,將來自不同層次的不同尺度的特征圖投影并連接在一起,然后用BN[12]層進行歸一化處理,最后附加下采樣層以生成新的特征金字塔,此外,添加了感受野模塊(RFM),以加強從輕量級CNN 模型中學到的深層特征,使它們有助于檢測器快速準確.與傳統(tǒng)SSD 相比,本文算法RF_SSD 主要選擇VGG16 作為骨干網(wǎng)絡(luò),而不是更深層次的ConvNets (例如ResNet[13]或DenseNet[14]),原因是深層卷積神經(jīng)網(wǎng)絡(luò)(ConvNets)雖然對特征提取有利但會加大計算量同時降低檢測速度,實驗表明本文所提出的結(jié)構(gòu)在精度上比SSD 算法有所提升.本文的貢獻主要表現(xiàn)為以下幾點:
(1) 提出了新穎的、輕量級的特征融合方式,主要是將不同層的特征圖合并,并生成特征金字塔,降低了重復檢測一個對象的多個部分或者多個對象合并到一個對象的檢測概率,同時小物體檢測表現(xiàn)更好.
(2) 借鑒混合空洞卷積和Inception 結(jié)構(gòu),設(shè)計并添加感受野模塊來增強網(wǎng)絡(luò)的特征提取能力,同時在不增加卷積參數(shù)的前提下增大卷積感受野,加強輕量級卷積神經(jīng)網(wǎng)絡(luò)學到的深層特征,保證檢測器的實時性.
(3) 在PASCAL VOC 數(shù)據(jù)集上進行了定性與定量的實驗,結(jié)果表明,同傳統(tǒng)SSD 算法相比,本文所提出的算法在目標檢測性能上有顯著的提升,同時以相對低的速度損耗提高了小物體的準確率.
在目標檢測算法研究中,無論是在單階段檢測器還是兩階段檢測器中,相關(guān)研究者都投入了大量的工作來改善目標檢測中的尺度變化問題,大致可分為兩種策略.一種是圖像金字塔,通過圖像的尺度變化來產(chǎn)生具有語義代表性的多尺度特征,然后用來自不同尺度的圖像的特征分別產(chǎn)生預(yù)測,最后將這些預(yù)測放在一起進行評估以給出最終預(yù)測.在識別精度和定位精度方面,來自多尺寸圖像的特征確實超越僅基于單尺度圖像的特征.諸如OHEM[15]和SNIP[16]之類的方法都采用了這種策略.雖然性能得到了提升,但這種策略在時間和內(nèi)存方面花銷很大,所以在實時任務(wù)中很難得到應(yīng)用.另一種是利用網(wǎng)絡(luò)內(nèi)的特征金字塔以較低的計算成本來模擬圖像金字塔.該策略比第一個策略需要的內(nèi)存和計算成本要少得多,從而可以在實時網(wǎng)絡(luò)的訓練和測試階段中進行使用.此外,特征金字塔構(gòu)建模塊可以很容易地修改,并應(yīng)用在最先進的基于深度神經(jīng)網(wǎng)絡(luò)的探測器.MS-CNN[17],SSD[8],DSSD[10],FPN[9],YOLOv3[18],RetinaNet[19]和RefineDet[20]以不同的方式采用了這種策略.
此外,MS-CNN[17]提出了兩個子網(wǎng)絡(luò),并首先將多尺度特征結(jié)合到用于物體檢測的深度卷積神經(jīng)網(wǎng)絡(luò)中.提議子網(wǎng)利用幾種分辨率的特征圖來檢測圖像中的多尺度物體.SSD 利用VGG16 網(wǎng)絡(luò)的后幾層的特征圖和額外特征層進行多尺度預(yù)測.FPN 將高層特征與低層特征相結(jié)合,由最近鄰居上采樣和橫向連接實現(xiàn).DSSD實現(xiàn)了反卷積層,用于聚合上下文和增強淺層特征的高級語義信息,RefineDet[20]采用了兩步級聯(lián)回歸,在保持SSD 效率的同時,在準確性方面取得了顯著提高.
本節(jié)將在SSD 框架基礎(chǔ)上,分析算法涉及到的特征融合處理、感受野模塊的設(shè)計以及算法的具體處理過程.
SSD 采用不同尺度的特征圖來檢測物體,以VGG16[21]作為骨干網(wǎng)絡(luò),采用級聯(lián)卷積的方式生成不同尺度的特征圖,結(jié)合YOLO 的回歸思想和Faster-RCNN 的Anchor 機制,使用全圖各個位置的多尺度區(qū)域特征進行回歸,既保證檢測速度又保持了精度.同時在對特征圖預(yù)測時,采用卷積核來預(yù)測一系列Default Bounding Boxes 的類別和坐標偏移.
由于小物體不會在淺層中丟失太多的位置信息,并且大物體也可以在較深層中很好地定位和識別,所以SSD 算法使用淺層特征圖檢測小物體,深層特征圖檢測大物體這種策略是合理的,但問題是由淺層產(chǎn)生的小物體的特征缺乏足夠的信息,這將導致小物體檢測性能的不良.此外,小物體也嚴重依賴于上下文信息,SSD 網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示.
圖1 SSD 算法結(jié)構(gòu)圖
針對傳統(tǒng)SSD 算法缺點,FPN 和DSSD 利用頂層特征的反卷積層,經(jīng)過驗證,這種方法可以大大提高傳統(tǒng)探測器的性能,但卻需要多個功能合并過程.而且右側(cè)的新特征只能融合相應(yīng)的左側(cè)和更高層級的特征[9,10].此外,潛在特征和大量特征的element-wise process過程也會消耗大量時間.基于此,本文提出了一種輕量級和高效的特征融合模塊來處理這項任務(wù).本文的動機是以適當?shù)姆绞揭淮稳诤喜煌墑e的特征,并從融合特征生成特征金字塔.
傳統(tǒng)的SSD300 是基于VGG16 的,作者選擇Conv4_3,FC7 和新添加的Conv8_2,Conv9_2,Conv10_2,Conv11_2層特征圖進行檢測.相應(yīng)的特征圖的大小為38×38,19×19,10×10,5×5,3×3 和1×1.本文認為大小小于10×10的特征圖太小而幾乎沒有要合并的信息,所以本文先將Conv8_2 的stride 設(shè)為1,這樣Conv9_2 的大小為10×10,然后本文選擇Conv4_3,Conv9_2 融合為新的特征圖,增強了淺層特征的語義信息,同時也有很強的幾何細節(jié)信息表征能力.
在傳統(tǒng)的處理方法中,主要有兩種方法合并不同的特征圖:concatenation 及element-wise summation.Element-wise summation 要求特征圖的通道相同,這意味著我們必須將特征圖轉(zhuǎn)換為相同的通道.由于此要求限制了融合特征圖的靈活性,所以我們選擇用concatenation 方式.為了使Conv4_3,Conv9_2 融合為新的特征圖,需對Conv9_2 進行上采樣處理.如圖2所示,首先使用大小為2×2,通道數(shù)為256 的反卷積核進行上采樣,將輸出通過3×3 的卷積核映射至BN 層,然后再到下一個反卷積核.Con4_3 通過1×1 的卷積核直接映射輸出至BN 層.最終將Conv4_3 通過1×1 卷積層的輸出與Con9_2 經(jīng)過兩層反卷積層的輸出進行concat 操作,之后傳入至ReLU 層,再通過L2 Normalization 層做歸一化處理,同時增加模型的魯棒性.
圖2 特征融合模塊
本模塊采用多支路卷積形式,其內(nèi)部結(jié)構(gòu)可以分為兩個部分:多支路卷積層和空洞卷積層.多支路卷積層的結(jié)構(gòu)和Inception 相同,模擬不同尺寸的感受野,空洞卷積層利用空洞卷積模擬不同尺寸感受野之間的關(guān)系[22].在卷積神經(jīng)網(wǎng)絡(luò)中,卷積核的感受野大小和卷積核的尺寸成正相關(guān),通過改變卷積核的尺寸可以獲得不同大小的感受野,進而更加有效的利用特征信息.本文的設(shè)計借鑒了Inception-V4 和Inception-ResNet[23],結(jié)構(gòu)如圖3所示,首先在每個分支結(jié)構(gòu)中使用1×1 的卷積層,減少特征圖中通道數(shù)量,用2 個連續(xù)的3×3 Conv 替代Inception 模塊中的5×5 Conv,從而實現(xiàn)網(wǎng)絡(luò)深度的增加,之后將原有3×3 的卷積核分解成兩個一維的卷積核(1×3 和3×1),目的是加速計算,同時網(wǎng)絡(luò)寬度增加,增加了網(wǎng)絡(luò)的非線性.除此之外,為了保留更多的原始特征信息,增加了一條剪接支路.
圖3 RFM 模塊
本算法感受野模塊結(jié)構(gòu)上借鑒了混合空洞卷積和Inception,混合空洞卷積(hybrid dilated convolution)由文獻[24]提出,通過疊加多個不同空洞率的空洞卷積來避免網(wǎng)格效應(yīng)和平衡不同尺寸感受野之間的關(guān)系,解決了傳統(tǒng)卷積神經(jīng)網(wǎng)絡(luò)采用池化層所造成的內(nèi)部數(shù)據(jù)結(jié)構(gòu)遺失和小物體信息無法重建等問題,同時協(xié)調(diào)多支路卷積,在很好的結(jié)合多支路卷積的同時提高了算法的檢測效率.
本文算法是以SSD 算法框架為基礎(chǔ)構(gòu)建的,提出新的特征融合模塊來充分利用深層的特征信息以此提高算法的檢測精度,同時改善小物體檢測的效果,另外,通過在特征提取網(wǎng)絡(luò)上添加感受野模塊來提高特征的提取能力.無論特征融合模塊還是感受野模塊都比較簡單,所以在極大程度上保留了SSD 原有的網(wǎng)絡(luò)結(jié)構(gòu),保證了檢測速度.整體的算法結(jié)構(gòu)如圖4所示,骨干網(wǎng)絡(luò)采用VGGNet,先對Con9_2 層特征圖進行尺寸調(diào)整,后將調(diào)整尺寸后的Con9_2 層特征圖與Con4_3 層特征圖傳入Feature Fusion 模塊產(chǎn)生新特征圖,經(jīng)BN 層后,通過一系列下采樣形成特征金字塔,同時加入感受野模塊.具體描述如下:第一是將Conv8_2 的stride 設(shè)為1,這樣Conv9_2 的大小為10×10,然后使用兩層反卷積核對Conv9_2 進行上采樣處理.之后將輸出和經(jīng)過BN 層的Conv4_3 進行concat 操作,之后傳入至ReLU層,再通過L2Normalization 層做歸一化處理.第二,對新得到的特征圖進行下采樣(包含一些1×1 和stride為2 的3×3 的卷積層來改變通道數(shù)和特征圖的大小),形成新的特征金字塔,同時利用新添加的感受野模塊對新的特征信息進行檢測.第三,用RFM 替換掉中間兩層卷積層,考慮到最后兩個卷積層的尺寸,將最后兩層保持不變.
圖4 本文的算法結(jié)構(gòu)
本文的損失函數(shù)采用了傳統(tǒng)的SSD 算法的處理方式,回歸函數(shù)輸出物體的位置坐標,Softmax 函數(shù)進行預(yù)測分類.總的損失函數(shù)為位置誤差(locatization loss,loc)與置信度誤差(confidence loss,conf)的加權(quán)和:
其中,N是先驗框的正樣本數(shù)量.c為類別置信度預(yù)測值.l為先驗框所對應(yīng)邊界框的位置預(yù)測值,x為預(yù)測框的類別匹配信息,而g是ground truth 的位置參數(shù).權(quán)重系數(shù)α通過交叉驗證設(shè)置為1.
位置誤差定義為:
對于位置誤差,其采用Smooth L1 loss,定義如下:
置信度誤差,其采用Softmax loss,定義如下:
在進行訓練之前,可先通過數(shù)據(jù)增強的方式對數(shù)據(jù)進行預(yù)處理,以此提高數(shù)據(jù)集的多樣性,使模型有更高的魯棒性.常用的數(shù)據(jù)增強方式如隨機翻轉(zhuǎn)、縮放、顏色變化和裁剪等.通過將數(shù)據(jù)增強方式應(yīng)用到訓練當中,可使模型學到旋轉(zhuǎn)不變性和對稱不變性.
本文算法采用與SSD 算法相似的訓練策略,都是使用訓練好VGGNet 網(wǎng)絡(luò),本文使用PASCAL VOC 2007 和PASCAL VOC 2012 數(shù)據(jù)集,同時把與真實框(ground truth)的交并比(IOU)大于0.5 的預(yù)測框認為是正樣本.采用平均精度(mAP)作為評測算法性能的度量,幀速(Frame Per Second,FPS)作為目標檢測速度的評價指標.訓練階段將輸入圖像的大小設(shè)為300×300像素.訓練時,我們用VOC 2007 trainvaland VOC2012 trainval (VOC07+12)的聯(lián)合數(shù)據(jù)集訓練,在VOC 2007 test 測試集上測試.本文的硬件環(huán)境為深度學習框架Caffe,ubuntu16.04 系統(tǒng),GPU 顯卡型號為NVIDIA 1080Ti,Batch size=16,初始學習率設(shè)定為0.001,max_epoch 設(shè)置為180 K,然后在步驟100 K,140 K 和180 K 除以10.將權(quán)重衰減設(shè)置為0.0005.和SSD 算法一樣采用動量為0.9 的SGD 來優(yōu)化本文算法.
PASCAl VOC 是一個用于物體分類識別和檢測的標準數(shù)據(jù)集,該數(shù)據(jù)集包括20 個類別,表1為PASCAl VOC 具體類別.
表1 PASCAL VOC 數(shù)據(jù)集類別
本文算法模型與主流目標檢測算法在VOC2007數(shù)據(jù)集的實驗結(jié)果如表2所示,本文所提出的算法準確率達到了80.2%,比傳統(tǒng)的SSD 算法有2.7%的提升,比DSSD 算法提高了1.2%,但比R-FCN 低了0.3%,原因在于R-FCN 算法使用ResNet-101 作為基礎(chǔ)網(wǎng)絡(luò),相比于VGG-16,算法網(wǎng)絡(luò)結(jié)構(gòu)更深,提取特征的能力更強,但同時也降低了網(wǎng)絡(luò)的檢測速度.本文算法的檢測速度為44.5 FPS,雖然相比于傳統(tǒng)的SSD 算法,速度也有所下降,但滿足實時檢測需求.
表2 不同目標檢測算法在PASCAL VOC 2007上的檢測結(jié)果
不同目標檢測算法在精度和速度上的分布如圖5所示,Faster-RCNN,R-FCN,YOLOv2,DSOD,RSSD,DSSD 算法是在Titan X GPU 上進行測試的,而SSD和本文提出的算法是在1080 Ti GPU 上測試的.從圖5中也可看出本文的算法在檢測速度和精度上有著一定的優(yōu)勢.
圖5 不同的檢測算法在檢測速度和精度上的分布
本文將傳統(tǒng)的SSD 算法和RF_SSD 算法在每一類目標檢測的精度上進行比較,結(jié)果如表3所示.從表中可知,飛機,自行車,鳥,船,瓶子,公交車等類別都有顯著的提升,其中,瓶子,盆栽的檢測精度較低,雖然得益于本文提出的網(wǎng)絡(luò)結(jié)構(gòu),相比于傳統(tǒng)的SSD 算法,精確度有所提升,但因物體相比于其他類別太小,特征提取較少,導致相應(yīng)檢測精度不高.但總體來說,本文算法相比于SSD 算法mAP 提高了2.7%,基本滿足實際需求,同時也論證了本文算法思想的可行性.
同時本文對比了感受野模塊對算法檢測結(jié)果的影響(參見表4),通過實驗可知添加感受野模塊可提高算法的準確率,說明感受野對算法性能有一定的提升,同時由于感受野模塊采用多個支路卷積,提高了模型的復雜度,所以導致檢測速度降低.
表3 本文算法在PASACAL VOC2007 測試集上單個類別的測試結(jié)果
表4 感受野模塊對算法準確率的影響
最后本文分析了不同卷積層融合后的結(jié)果,結(jié)果如表5,若融合Conv3_3,Conv4_3,和Conv9_2,則在VOC2007 的mAP 為79.8%,若去掉Conv3_3,則mAP 為80.2%,表明Conv3_3 對檢測器的結(jié)果并沒有太大的影響,原因在于Conv3_3 卷積層提取的特征圖包含較多的背景噪聲.此外,本文從COCO 數(shù)據(jù)集中隨機挑選了幾張照片,測試結(jié)果如圖6所示.
表5 不同層融合的測試結(jié)果
本文基于SSD 算法,提出了一種新穎高效的目標檢測算法,通過將不同層的特征圖以輕量級的方式融合在一起,使新的特征圖既有深層特征的語義信息,同時又有高分辨率,然后采用下采樣層生成特征金字塔,之后設(shè)計添加感受野模塊,提高網(wǎng)絡(luò)的特征提取能力,提高了算法的整體精度,也改善了小目標的檢測效果.本文的算法在精度上超越了傳統(tǒng)SSD 算法以及一系列其他目標檢測算法,由于添加感受野模塊,增加了網(wǎng)絡(luò)特征的提取能力,增加了精度,但加深了深度和模型復雜度,導致檢測速度降低,雖以速度換取精度,但基本滿足實時檢測要求.和大多數(shù)單階段目標檢測結(jié)構(gòu)一樣,本算法類別不平衡問題依舊未能得到解決.未來,將繼續(xù)改進該算法,使用anchor-free 模型方法或進一步修改目標損失函數(shù)改善類別不平衡問題,設(shè)計輕量型的特征提取和融合網(wǎng)絡(luò)結(jié)構(gòu),在不降低精度的同時提高速度.
圖6 COCO 2017 上的實例檢測結(jié)果