【論文解析】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接面構
Cascade Anchor Refinement
級聯的anchor精煉過程。我們假設用來預測的feature map的層級是L,L在論文中屬於{1,2,3,4},質量的層級Q∈{1,2,3……},對應IoU(Q)∈{0.5,0.6,0.7……}。記層級L對應質量Q的feature map為FQL,anchor記為AQL。對於這個工作,我們選擇了三個型別的檢測器對應三個不同的質量等級:Low
分類器預測類別置信度並指定給這些anchors:
training loss在質量等級Q可以表示為
(一個一個敲實在太慢,先複製一下了hh)值得注意的是,每個loss都是在一個depth下的,也就是說,這是一個level的feature map的loss。
NQ是在Q下的positive sample數量。Li是anchor在feature map L的下標,lLi是anchor Li對應的ground truth的類別,Li和gLi是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)。可以看到這個結構很好的區分了背景前景,說明特徵更加魯棒,同時級聯會有更多高質量的預測。