1. 程式人生 > >目標檢測之SSD:RefineNet演算法理解

目標檢測之SSD:RefineNet演算法理解

RefineDet是CVPR2018的論文,個人覺得是一篇很不錯的文章,大致上是SSD演算法和RPN網路、FPN演算法的結合,可以在保持SSD高效的前提下提高檢測效果(實驗效果提升挺明顯)。第一眼看到這篇文章就讓我想起了RON,畢竟都是想做one stage和two stage的object detection演算法結合。RefineDet的主要思想:一方面引入two stage型別的object detection演算法中對box的由粗到細的迴歸思想(由粗到細迴歸其實就是先通過RPN網路得到粗粒度的box資訊,然後再通過常規的迴歸支路進行進一步迴歸從而得到更加精確的框資訊,這也是two stage型別的object detection演算法效果優於one stage型別的一個重要原因)。另一方面引入類似FPN網路的特徵融合操作用於檢測網路,可以有效提高對小目標的檢測效果,檢測網路的框架還是SSD。

Figure1是RefineDet網路的結構圖(直觀的特點就是two-step cascaded regression),主要包含三個部分:anchor refinement module (ARM) 、object detection module (ODM)、transfer connection block (TCB)。

anchor refinement module (ARM)部分類似Faster RCNN演算法中的RPN網路,主要用來得到bbox(類似Faster RCNN中的ROI或proposal)和去除一些負樣本(這是因為負樣本數量遠大於正樣本)。因此基於4層特徵最後得到的還是兩條支路,一個bbox的座標迴歸支路,另一個是bbox的二分類支路。我們知道在Faster RCNN演算法中RPN網路存在的意義就是生成proposal(或者叫ROI),這些proposal會給後續檢測網路提供較好的初始資訊,這也是one stage的object detection演算法和two stage的object detection演算法的重要區別,這裡的anchor refinement module基本上扮演了RPN網路的角色,如果一定要說不同點的話,那應該就是這裡的輸入利用了多層特徵,而RPN網路的輸入是單層特徵。

transfer connection block (TCB)部分是做特徵的轉換操作,也就是將ARM部分的輸出feature map轉換成ODM部分的輸入,這部分其實和FPN演算法的特徵融合很像,FPN也是這樣的upsample後融合的思想。

object detection module (ODM)部分和就基本上是SSD了,也是融合不同層的特徵,然後做multi class classification和regression。主要的不同點一方面在於這部分的輸入anchors是ARM部分得到的refined anchors,類似RPN網路輸出的proposal。另一方面和FPN演算法類似,這裡的淺層feature map(size較大的藍色矩形塊)融合了高層feature map的資訊,然後預測bbox是基於每層feature map(每個藍色矩形塊)進行,最後將各層結果再整合到一起。而在SSD中淺層的feature map是直接拿來用的(並沒有和高層的feature map融合),也就是對bbox的預測是在每一層上進行的,預測得到結果後再將各層結果整合在一起,這是非常重要的區別。這樣做的好處就是對小目標物體的檢測效果更好,這在FPN和RON等演算法中已經證明過了。

具體網路結構是怎麼構建的呢?以特徵提取網路為ResNet101,輸入影象大小為320為例,在Anchor Refinement Module部分的4個灰色矩形塊(feature map)的size分別是40*40,20*20,10*10,5*5,其中前三個是ResNet101網路本身的輸出層,最後5*5輸出是另外新增的一個residual block。有了特徵提取的主網路後,就要開始做融合層操作了,首先是5*5的feature map經過一個transfer connection block得到對應大小的藍色矩形塊(P6),transfer connection block後面會介紹 ,對於生成P6的這條支路而言只是3個卷積層而已。接著基於10*10的灰色矩形塊(feature map)經過transfer connection block得到對應大小的藍色矩形塊(P5),此處的transfer connection block相比P6增加了反捲積支路,反捲積支路的輸入來自於生成P6的中間層輸出。P4和P3的生成與P5同理。

因此整體來看該網路和tow stage的結構很像(都可以概括為two-step cascaded regression),一個子模組做RPN的事,另一個子模組做SSD的事。因此SSD是直接在default box的基礎上進行迴歸的,而在RefineDet中是先通過ARM部分生成refined anchor boxes(類似RPN網路輸出的propsoal),然後在refined anchor boxes基礎上進行迴歸,所以能有更高的準確率,而且得益於特徵融合,該演算法對於小目標物體的檢測更有效。 
這裡寫圖片描述

Transfer Connection Block的結構如Figure2所示,也是比較中規中矩的設計。 
這裡寫圖片描述

關於正負樣本界定的標準基本上和其他object detection類似,比如和ground truth的IOU超過閾值0.5的box為正樣本,也就是label是1。顯然這樣做後很多box的標籤都是背景標籤,也就是所謂的負樣本,通過前面說的ARM部分可以過濾掉一些負樣本,但接下來還是要採用類似SSD演算法中的hard negative mining來設定正負樣本的比例(一般設定為1:3),當然負樣本不是隨機選的,而是根據box的分類loss排序來選的,按照指定比例選擇loss最高的那些負樣本即可。

損失函式方面主要包含ARM和ODM兩方面,如式子1所示。在ARM部分包含binary classification損失Lb和迴歸損失Lr;同理在ODM部分包含multi-class classification損失Lm和迴歸損失Lr。關於這個式子中的引數介紹也在截圖中給出了,核心思想和SSD類似。需要注意的是雖然本文大致上是RPN網路和SSD的結合,但是在Faster RCNN演算法中RPN網路和檢測網路的訓練可以分開也可以end to end,而這裡的訓練方式就純粹是end to end了,ARM和ODM兩個部分的損失函式都是一起向前傳遞的。 
這裡寫圖片描述

關於inference的細節,文中給出了詳細的描述:At inference phase, the ARM first filters out the regularly tiled anchors with the negative confidence scores larger than the threshold , and then refines the locations and sizes of remaining anchors. After that, the ODM takes over these refined anchors, and outputs top 400 high confident detections per image. Finally, we apply the nonmaximum suppression with jaccard overlap of 0.45 per class and retain the top 200 high confident detections per image to produce the final detection results.

實驗結果: 
Table1是非常詳細的實驗結果對比,測試資料包括VOC2007和VOC2012資料集。以VGG-16為特徵提取網路的RefineDet320在達到實時的前提下能在VOC 2007測試集上達到80以上的mAP,這個效果基本上是目前看到過的單模型在相同輸入影象情況下的最好成績了。表格中最後兩行在演算法名稱後面多了+,表示採用multi scale test,因此效果會更優一些。 
這裡寫圖片描述

Table2是在COCO資料集上的對比。 
這裡寫圖片描述

Table3是驗證本文幾個改進點的具體提升情況。 
這裡寫圖片描述 
更多實驗結果可以參看原論文。

關於未來工作方面,作者也給出了兩個主要思路,其中attention機制也是目前分類和檢測演算法中的熱點:In the future, we plan to employ RefineDet to detect some other specific kinds of objects, e.g., pedestrian, vehicle, and face, and introduce the attention mechanism in RefineDet to further improve the performance.