趙 輝 ,李志偉 ,方祿發
1.重慶郵電大學 通信與信息工程學院,重慶 400065
2.重慶郵電大學 信號與信息處理重點實驗室,重慶 400065
目標檢測是計算機視覺的核心任務之一,它為圖像分割、場景理解、目標跟蹤和圖像字幕等更復雜或更高層次的視覺任務奠定了基礎。近年來,卷積神經網絡(Convolutional Neural Network,CNN)發展迅速,許多基于CNN的目標檢測器算法[1-7]有效提高了目標檢測任務的準確性和速度。這些方法大致可以分為兩類:基于候選區域的目標檢測算法(兩階段檢測算法)和基于回歸的目標檢測算法(一階段檢測算法)。其主要區別在于是否生成目標候選區域。
Girshick 等通過整合AlexNet 和區域搜索算法提出了具有開創性意義的R-CNN(Region-based CNN)[1]算法,并取得了當時的最佳結果。然而對于每個目標候選區域,R-CNN 需要將圖像縮放到一個固定的尺度后再提取特征,因此其檢測速度很慢。隨后,何凱明等通過在R-CNN體系結構中引入傳統的空間金字塔池(Spatial Pyramid Pooling,SPP)提出了 SPPNet[2]。SPPNet 有效解決了CNN 輸入任意大小圖片的問題,但是對于每個目標候選區域,仍然需要反復提取特征。Girshick 等提出的Fast R-CNN[3]通過添加一個RoI(Region of Interest)池化層,解決了R-CNN 和SPPNet 提取特征時冗余的缺點,同時采用Softmax 代替支持向量機(Support Vector Machine,SVM)進行分類,并采用多任務損失函數將分類和邊框回歸統一到一個框架中,但它依然不是一個端到端的訓練,仍然需要外部的目標候選區域提議。針對Fast R-CNN 依賴于外部目標候選區域提議的問題,Ren 等人提出了Faster R-CNN[4]框架,其提出了一種高效、準確的區域建議網絡(Region Proposal Network,RPN)來生成目標候選區域,并允許檢測器端到端地進行訓練。另一方面,YOLO(You Only Look Once)[5]和單發多框檢測器算法(Single Shot Multibox Detector,SSD)[6]則推廣了一階段檢測算法。YOLO 主要采用卷積層來提取特征,采用全連接層來預測類別概率和坐標,它并沒有使用多尺度特征圖來做獨立的檢測,可能無法定位某些對象,特別是小目標。為了獲得更好的精度,Redmon 和 Farhadi 提出了 YOLOv2[7],YOLOv2 刪除了全連接層,并使用錨框(Anchor Boxes)來提高速度和精度。
SSD是一種快速和魯棒的方法,它利用網絡的不同輸出層的特征圖來直接進行目標檢測,然后將不同層的檢測結果合并起來,最后采用非極大值抑制方法(Non-Maximum Suppression,NMS)抑制冗余檢測框。傳統的SSD算法在速度和精度上都有很好的表現,但仍存在改進的空間。如圖1所示,SSD算法將基礎骨干網中最后兩個全連接層改成卷積層,并隨后增加了4個卷積層來構造整體的網絡結構,最后采用Conv4_3、Conv7、Conv8_2、Conv9_2、Conv10_2 和 Conv11_2 來構建用于檢測任務的特征金字塔(圖1中紫色部分),可以發現特征金字塔中的特征層都是獨立使用的,并沒有考慮不同輸出層之間的關系,這忽略了對于小目標檢測很重要的上下文信息[8]。為了提高SSD 算法的檢測精度,DSSD(Deconvolutional Single Shot Detector)[9]用更復雜的ResNet-101[10]替換了SSD 算法的VGG16[11]基礎骨干網來獲取更好表征能力的特征圖,并提出通過反褶積層來聚合上下文信息,增強淺層特征的高層語義。但復雜的網絡結構意味著巨大的網絡參數量,這種方法大大增加了內存和計算復雜度,嚴重降低了檢測速度。
研究人員發現基礎骨干網絡中的深層特征具有更多的語義信息,而淺層特征具有更多的內容描述[12],也就是深層的高級特征對分類任務的區分能力更強,而淺層的低級特征對目標位置回歸任務的區分能力更強。因此近年來,FPN(Feature Pyramid Network)[13]和PANet(Path Aggregation Network)[14]等提出通過橫向連接的方式來融合淺層和深層的特征信息以實現更強大的特征表示。多尺度特征生成有區別的特征金字塔表示對檢測性能至關重要。SSD算法采用多尺度特征,根據特征層感受野的大小設置相應的默認框,因此它可以從多個尺度檢測不同尺度的目標。但SSD 算法特征金字塔的設計方式使得很難融合各層不同尺度特征層上的特征信息,RSSD(Rainbow SSD)[15]提出了一種Rainbow連接的方式來融合不同層次的特征。FSSD(Feature Fusion Single Shot Multibox Detector)[16]通過融合不同尺度的特征層到一個較大尺度,然后在得到的特征層上再通過下采樣構建新的特征金字塔用于目標檢測,有效地提高了SSD 的檢測精度。因此如何利用淺層和深層的特征來有效地集成特征金字塔表示決定了檢測性能。另一方面,人類視覺通過快速掃描全局圖像來獲取需要重點關注的目標區域,隨后對這一區域投入更多注意力資源,以獲取更多所需關注目標的細節信息,從而抑制其他無用信息。近年來,受人類視覺的注意力機制啟發,Mnih 等[17]提出在循環神經網絡模型上使用注意力機制來進行圖像分類,取得了很好的性能提升。此前,在無注意力機制下,輸入特征層的每個通道對于輸出特征層作用是相同的,而注意力機制則是為了進一步區分特征層通道之間的不同重要性,為其賦予不同的注意力權值,強調不同通道之間的重要性。因此傳統SSD算法中的特征層也可以通過引入注意力機制來增強特征信息,進而提高小目標檢測的性能。

圖1 SSD算法的網絡結構圖
本文的目標是通過構造一個有效的特征信息增強模塊來生成新的特征金字塔表示,進而檢測不同尺度的目標,同時避免現有方法的局限性。如圖2 所示,第一階段,考慮到傳統SSD算法特征金字塔中不同特征層之間的關系,首先特征融合模塊(Feature Fusion Module,FFM)將基礎骨干網提取的多級特征(即多層)采用FPN的融合方式生成基礎特征,然后對基礎特征通過特征整合細化獲得進一步強化的多級特征,并作為第二階段的初始特征,其核心思想是利用深度整合的均衡語義特征來強化多層次特征。第二階段,引入一個擠壓和激勵模塊(Squeeze and Excitation Block,SEB)[18],以鼓勵特征層將注意力集中在它們最受益的通道上,從而到達增強有用信息和抑制無用信息的作用。經過這兩個階段,傳統SSD算法單一利用特征層的方式得以改善,特征金字塔中多級特征的特征信息得到充分增強和利用,小目標檢測的性能將得以提高。最后為了評估本文提出的特征信息增強模塊的有效性,本文基于傳統SSD 算法設計并訓練了一個基于特征信息增強改進的SSD 算法(Feature Information Enhancement Based Single Shot Multibox Detector,FESSD)。
為了提高SSD算法的精度,本文設計了一種特征信息增強模塊,并基于此提出了FESSD 算法。不同于使用更復雜的基礎骨干網[9-10],本文的策略是通過設計一個外部連接來改變SSD的網絡結構,進而獲取更強大的特征表示。與以往使用橫向連接來融合多層次特征的方法[13-14]不同,本文的核心思想是利用深度整合的均衡語義特征來強化多層次特征,并通過自適應注意力機制來強調特征通道之間的有效信息。如圖3所示,該模塊主要步驟包括:首先特征融合模塊將基礎骨干網提取的多級特征(包括Conv4_3、Conv7、Conv8_2 和Conv9_2)采用FPN 結構的方式來實現不同特征層之間特征信息的有效融合并生成基礎特征,隨后對基礎特征通過特征深度整合細化獲得進一步強化的多級特征,并作為第二階段的初始特征。在這個深度整合細化過程中,每個特征層從整合后的特征層中獲得相同且均衡的信息。第二階段,在每個初始特征層采用SEB模塊對特征通道之間的相互依賴關系建模,通過學習的方式自動獲取每個特征通道的重要程度,從而達到增強有用信息和抑制無用信息的作用。下面將詳細介紹本文提出的特征信息增強模塊。
如圖2所示,把SSD算法特征金字塔中的Conv4_3、Conv7、Conv8_2、Conv9_2、Conv10_2 和 Conv11_2 分別記作 S1、S2、S3、S4、S5 和 S6。由于FPN 結構在高層的語義特征融合效果并不好,第一階段,本文根據實際情況選擇前4層(S1、S2、S3、S4)采用FPN的結構方式進行特征融合。如圖4 所示,以S4 和S3 采用FPN 結構方式進行特征融合為例,S4 做2 倍上采樣得到和S3 尺度大小一致的特征圖,S3 則采用1×1 的卷積和S4 進行通道數統一,以便和S4的2倍上采樣結果按元素相加(點和)進行特征融合,隨后對點和的結果利用3×3的卷積消除上采樣帶來的混疊效應,得到最后的特征融合層C3。以此類推,特征層C3與S2融合得到C2,C2與S1融合得到C1。顯然,第一階段形成的多級基礎特征層{C1,C2,C3,C4}中每個特征層都包含多層次的特征,它們比基礎骨干網中的特征層要深得多,即更具有代表性。然而簡單的連接操作還不適應,本文針對得到的多級基礎特征層再進行一個特征深度整合細化的步驟,目的是在整合多個特征層的特征信息時保留它們的語義信息,并通過細化來獲得更均衡的定位和語義信息。

圖2 FESSD算法框架圖

圖3 本文提出的特征信息增強模塊框架圖

圖4 FPN結構融合方式示意圖
多級基礎特征層中第l層記為Cl,特征層的個數表示為L,其中分辨率最高和最低分別表示為lmin和lmax。如圖3 所示,在整合和細化多級基礎特征時,C1分辨率最高,C4分辨率最小,首先將多尺度(L=4)的特征層{C1,C2,C3,C4}通過雙線性插值和最大池化(Max-pooling)調整為C3 大小,然后整合后的特征層C可以由以下公式得到:

最后對特征層C 利用雙線性插值和最大池化進行尺度還原,得到細化后的多級特征層{F1,F2,F3,F4}。
第二階段,對多級初始特征層{F4,F3,F2,F1}中的每個特征層分別采用相同的SEB模塊得到FESSD算法最后用于檢測的前4 層(P1,P2,P3,P4)。如圖5 所示,在特征信息增強模塊的第二階段,SEB模塊包含兩個步驟:擠壓(Sequeeze)和激勵(Excitation)。對于一個特征空間X=[x1,x2,…,xc]∈RH×W×C,H×W表示特征層尺度的大小,C表示通道數,xc∈RH×W表示輸入特征層的第c個卷積核(通道)。Sequeeze 映射(Fsq)是將一個通道上整個空間特征編碼為一個全局特征,實際上采用全局平均池化(Global Average Pooling)來實現,得到z∈RC的第c個全局特征zc的公式為:

通過Sequeeze操作得到全局描述特征后,Excitation映射(Fex)是一種自適應學習通道之間的非線性關系的運算,實際采用sigmoid激活形式的門控機制,其公式為:


圖5(a)擠壓和激勵模塊框架圖

圖5(b)SEB實際操作流程圖
為了降低模型復雜度以及提升泛化能力,實際采用包含兩個全連接層(FC)的瓶頸層(Bottleneck)結構:第一個FC層為降維層,參數為W1,參數r為降維系數,然后采用ReLU 激活函數;另一個FC 層的作用是恢復原始的維度,參數為W2,最后將學習到的各個通道的權重(sigmoid激活值)s乘以原始特征X以進行特征通道加權(Fscale) ,得到最后的輸出特征層

其中,sc表示第c個通道的權重,表示加權后特征層的第c個卷積核。經過整個操作,模型對各個通道的特征更有辨識能力。
數據集和實驗環境:本文所有實驗均是在Pascal VOC2007 和VOC2012 數據集[19]上進行的,其中訓練集是由VOC2007 訓練集和VOC2012 訓練集組成的,算法性能評估是在VOC2007測試集上進行的。本文遵循傳統SSD 算法中的數據增強策略來使得檢測器算法對多尺度、多顏色的目標具有魯棒性。本文所有實驗都是基于Intel i7-7800x3.50 GHz 處理器和Nivida GTX1080Ti等硬件設備,并在TensorFlow1.4、Python3.5、Ubuntu16.04和CUDA8.0等軟件環境下進行的。
基礎骨干網和檢測層:本文遵循傳統SSD 算法的設置,選擇在ImageNet 數據集上預先訓練的VGG16分類網絡作為基礎骨干網。本文只對前4 個特征層(Conv4_3、Conv7、Conv8_2 和Conv9_2)采用了所提出的特征信息增強模塊進行改進,而后2 個特征層(Conv10_2和Conv11_2)維持原狀。特征信息增強后的特征層與傳統SSD 算法的特征層在尺度大小和通道數上均保持一致。
訓練細節:輸入圖像的尺寸為300×300,采用批量梯度下降算法進行訓練,批量大小設置為32。最大迭代次數設置為120 000次,學習率的設置采用一種warm-up的策略,對于前1 000 次迭代,學習率為10-4,方便加快啟動和收斂速度,對于1 000次到80 000次,學習率為10-3,對于80 000次到100 000次,學習率降低到10-4,在最后100 000次到120 000次時,學習率為10-5。本文所有相關實驗均采用上述設置。首先訓練和評估了傳統的SSD 算法,然后對特征信息增強的兩個階段分別進行了仿真實驗,最后基于整個特征信息增強模塊完成了FESSD算法的訓練和測試。
目標檢測領域最常用的評價指標是平均精度(mean Average Precision,mAP)和每秒幀率(Frame Per Second,FPS),即每秒內可以處理的圖片數量。mAP 被定義為所有對象類別的平均精度(Average Precision)的平均值,AP是精度和召回率(Precision-Recall,P-R)曲線下區域的面積。根據在VOC2007 test 上的檢測結果,計算各類別對應的查全率和查準率,可以得到P-R曲線并計算出mAP值。
圖6 顯示了本文的FESSD 算法和傳統SSD 算法在Pascal VOC2007測試集下的P-R曲線對比圖,其中輸入圖片尺寸為300×300。在較小(<0.4)召回率下,FESSD算法和傳統SSD算法的每類精度的平均值幾乎相同,但當召回率較高(>0.4)時,FESSD算法的每類精度的平均值顯然更高。通過P-R 曲線對比圖,可以直觀地發現FESSD算法比傳統SSD算法具有更高的mAP值。

圖6 SSD和FESSD的P-R曲線對比圖
為了驗證和評價本文提出方法的有效性,將FESSD算法與其他一些先進的目標檢測算法進行了比較分析,所涉及到的算法其訓練集和測試集都與本文的FESSD 算法保持一致。表1 表明FESSD 算法相比于Faster R-CNN[4]、RSSD[15]、SSD 精確度更高,達到了78.6%,比傳統SSD提高了1.1個百分點,與DSSD[9]精度相當。FESSD 算法比FSSD[16]精度略低,主要是FSSD在融合后的特征層采用了批量規范化(Batch Normalization,BN)層技術。FESSD 算法精度的提升主要得益于提出的特征信息增強模塊。在檢測速度上,由于網絡復雜度的增加,FESSD 算法相比于傳統SSD 算法略有下降,但相比于 Faster R-CNN、DSSD 和 RSSD 明顯更快,達到了46.1 f/s。DSSD 速度較慢的主要原因是其基礎骨干網ResNet的復雜度過高,而RSSD速度相比本文FESSD 算法較慢,主要是由于其特征融合方式相對更復雜。

表1 各種算法在Pascal VOC2007測試集上的性能對比
如表2所示,用消融實驗進一步驗證了本文所提的特征信息增強模塊在第一階段(FFM)和第二階段(SEB)的有效性,其檢測精度相比SSD 分別提高了0.8個百分點和0.6個百分點,且速度分別達到了48.5 f/s和50.5 f/s。

表2 消融實驗:特征信息增強模塊不同階段的性能對比
為了評價本文的FESSD算法能否有效地提高小目標檢測的精度,表3 對FESSD 算法和其他一些先進的目標檢測算法在Pascal VOC2007 測試集中20 個類別的精確度進行了比較。結果表明,FESSD 算法在bike、boat、cat、chair、plant、sheep 和 train 等類別上準確度最高。與傳統 SSD 算法相比,對于 aero、bike、bird、boat、bottle、car、chair、cow、dog、mbike、plant、sheep、sofa 和train 這些類別,特別是小目標,FESSD 算法的性能有明顯提高。

表3 各種算法在Pascal VOC2007測試集上20類性能對比
為了進一步直觀地評價本文的方法,如圖7 所示,在VOC2012測試集上用樣例圖片展示了FESSD算法和傳統SSD算法在性能上的對比。圖7(a)是本文FESSD算法的結果圖,圖7(b)是傳統SSD算法的結果,不同顏色的框代表不同的類別。結果表明,相比于傳統SSD算法,FESSD算法明顯具有更強的檢測和識別小規模物體的能力,它有效地減少了檢測時目標的遺漏和誤檢的發生,特別是小目標,其定位更加準確。

圖7 FESSD算法與SSD算法樣例檢測結果對比圖
本文提出了一種特征信息增強模塊來增強用于檢測不同尺度目標的特征金字塔表示,并基于此提出了一種特征信息增強的SSD算法(FESSD)。首先,第一階段設計了一個特征融合模塊來對基礎骨干網提出的多級特征層進行高效的特征融合和整合細化,增強后的多級特征層能夠包含豐富的細節和語義信息,有利于小目標檢測。隨后通過一個擠壓和激勵注意力機制模塊來自適應地學習基礎特征層在通道數上不同的權重,從而達到增強有用信息和抑制無用信息的作用。最后,本文在Pascal VOC2007和VOC2012數據集上進行了一系列的實驗,并對FESSD 算法和一些先進的檢測器算法進行了定量和定性的比較分析。結果表明,本文FESSD 算法在精度上優于傳統SSD 算法和其他一些先進的檢測器算法,同時檢測速度上也有相當的優勢。進一步的消融實驗也表明本文提出的特征信息增強模塊是十分有效的,后續將進一步探索提高SSD小目標檢測精度的方法,以及把本文提出的特征信息增強模塊運用到更多的計算機視覺任務中。