1. 程式人生 > >【論文解析】Single-Shot Bidirectional Pyramid Networks for High-Quality Object Detection

【論文解析】Single-Shot Bidirectional Pyramid Networks for High-Quality Object Detection

論文地址
AAAI 2018的文章,和Cascade R-CNN一樣,注意到了IoU閾值的設定對目標檢測的影響,但是這篇論文的網路設計比Cascade R-CNN複雜多了。
本文提出的Bidirectional Pyramid Networks(BPN)主要有兩個模組:(1)a Bidirectional Feature Pyramid雙向特徵金字塔結構,主要是為了更有效和魯棒的特徵表示。(2)一個級聯的anchor refinement來逐步地改善所預設計的anchors的質量來更有效的訓練。
BPN已經在VOC和COCO超過了所有single-stage的檢測器(當時)

目前來說,目標檢測是基於IOU比較小的goal來實現的,如0.5的閾值(relatively low-quality precision)。但是如果訓練的時候單純的提高IoU的閾值,會導致訓練時候positive training samples會變少,因為一開始訓練很少有樣本能夠達到這個要求,從而導致過擬合,特別是像SSD這種沒有proposal生成過程的one-stage演算法。
本文是在SSD的基礎上進行的改進。首先,目前SSD存在的兩個主要問題:1.single-shot的特徵表示沒有足夠的區分度和魯棒性來精確定位。2.single-stage的檢測框架基於預定義的anchors,顯得很死板以及不精確。

一. 網路結構

動機

和R-CNN系列的two-stage檢測器相比(如selective search,RPN等生成proposal),one-stage的檢測器人工設計anchors,並且大多數的anchors和Ground Truth的IoU都沒有0.5。這個問題在訓練高IoU閾值的檢測器時變得更加嚴峻,因為高閾值會導致positive samples數量急劇減少,從而過擬合。
這個表
這個表表示的是不同閾值下每張圖的平均anchors>閾值的數量。可以看到原始的SSD隨著IoU閾值的升高positive samples的數量下降的很快。
在這裡插入圖片描述

BPN的整體框架

如圖1所示,BPN的BPN的backbone可以是任意的base model,論文中選擇的是vgg16. 從圖中可以看到,藍色的部分和SSD類似,也是分stage,然後接著包括一個標準的類FPN接面構

(紫色)以及一個反向FPN接面構(綠色)。這三個level的分支聚合了多level的特徵來提供一個魯棒的特徵表示,同時也使得multi-quality訓練和級聯anchor refinement變得可行。

Cascade Anchor Refinement

級聯的anchor精煉過程。我們假設用來預測的feature map的層級是LL在論文中屬於{1,2,3,4},質量的層級Q∈{1,2,3……},對應IoU(Q)∈{0.5,0.6,0.7……}。記層級L對應質量Q的feature map為FQL,anchor記為AQL。對於這個工作,我們選擇了三個型別的檢測器對應三個不同的質量等級:Low

MidHigh,對應的IoU閾值是0.5,0.6,0.7。為了增加positive anchors的數量並且提高他們的質量,我們定義了一個Cascaded Anchor Refinement(CAR)為CARQL。它包含兩個部分:RegQLClsQL。對於每一個質量等級,迴歸器regressors接受前一級處理後的anchors來更好的優化(A1L人工定義)
A L Q = R e g Q ( A L Q 1 ; F L Q ) , Q = 2 , 3 , , L = 1 , 2 , A^Q_L = Reg^Q(A^{Q-1}_L;F^Q_L), Q=2,3,……, L=1,2,……
分類器預測類別置信度並指定給這些anchors:
C L Q = C l s Q ( F L Q ) , Q = 1 , 2 , 3 , , L = 1 , 2 , C^Q_L = Cls^Q(F^Q_L), Q=1,2,3,……, L=1,2,……
training loss在質量等級Q可以表示為
在這裡插入圖片描述
(一個一個敲實在太慢,先複製一下了hh)值得注意的是,每個loss都是在一個depth下的,也就是說,這是一個level的feature map的loss。
NQ是在Q下的positive sample數量。Li是anchor在feature map L的下標,lLi是anchor Li對應的ground truth的類別,LigLi是ground truth的位置和大小。λ是用了平衡的超參,分類用的是softmax,迴歸用的是smooth L1 loss。然後總的BPN的loss為:
在這裡插入圖片描述

BPN接面構

在這裡插入圖片描述
首先,為了解決SSD特徵的弱表達問題,在SSD-style的結構中運用了FPN,使得淺層的特徵也有強語義資訊。但是我們發現,反方向的特徵聚合也是很重要的,所以在提出的BPN中,既有FP也有反向FP。
反向FP的好處:1)對於CNN的堆疊來影象分類,反向FP用更少的卷積核來減少了淺層特徵和深層特徵的距離,從小保留了空間資訊。2)側連線重利用了淺層的特徵來減少淺層到深層特徵的資訊衰減,3)我們的級聯式的檢測器可以自然地利用這種結構。
圖2(a)是一個典型的FP結構,(b)則是一個反FP結構。公式如下:
在這裡插入圖片描述
反FP和FP中相加的項都是上一級Q對應的feature map。用的融合是element-wise summation。在本論文中,FP和RFP用的是3×3的卷積核,256通道。

實現細節

在imagenet上預訓練過的VGG16作為backbone,和SSD不同的是,fc6和fc7換成了conv_6和conv_7以減少引數量。
資料增強和SSD用的一樣。
batchsize設定為了32,用的SGD優化器,momentum0.9,weight decay為0.005. 初始學習率0.001.(基本上都和SSD一樣了)

實驗結果

在這裡插入圖片描述
超過了所有的single-stage目標檢測演算法,同時FPS也沒有降的很小,BPN320也有32左右。
同時作者也討論的CAR級聯level的重要性:
在這裡插入圖片描述
w/是with的意思,w/o是without的意思(一開始我也看不懂,後來查了才知道)。
在COCO上的測試結果:
在這裡插入圖片描述
量化與錯誤分析:
在這裡插入圖片描述
圖4第一行表示了top false positive的錯誤率,第二行是 檢測分數:correct(Cor)或different false positive types,定位issue(Loc),相似類別的混淆(Sim),和背景(BG)或是其他錯誤(Oth)。可以看到這個結構很好的區分了背景前景,說明特徵更加魯棒,同時級聯會有更多高質量的預測。
在這裡插入圖片描述