讀論文系列:Object Detection ECCV2016 SSD
轉載請註明作者:夢裏茶
Single Shot MultiBox Detector
Introduction
一句話概括:SSD就是關於類別的多尺度RPN網絡
基本思路:
- 基礎網絡後接多層feature map
- 多層feature map分別對應不同尺度的固定anchor
- 回歸所有anchor對應的class和bounding box
Model
- 輸入:300x300
- 經過VGG-16(只到conv4_3這一層)
- 經過幾層卷積,得到多層尺寸逐漸減小的feature map
- 每層feature map分別做3x3卷積,每個feature map cell(又稱slide window)對應k個類別和4個bounding box offset,同時對應原圖中6(或4)個anchor(又稱default box)
- 38x38, 最後3x3, 1x1三個feature map的每個feature map cell只對應4個anchor,分別為寬高比: 1:1兩種,1:2, 2:1兩種,因此總共有 38 * 38 * 4 + 19 * 19 * 6 + 10 * 10 * 6 + 5 * 5 * 6 + 3 * 3 * 4 + 1 * 1 * 4 = 8732 個anchor
- 其他feature map的feature map cell對應6個anchor,分別為寬高比: 1:1兩種,1:2, 2:1兩種,1:3, 3:1兩種
- 每層的feature map cell對應的anchor計算方法如下
- 位置:假設當前feature map cell是位於第i行,第j列,則anchor的中心為 ((i+0.5)/|fk
- 縮放因子:
其中smin為0.2,smax為0.9,m為添加的feature map的層數,縮放因子就是為不同feature map選擇不同的大小的anchor,要求小的feature map對應的anchor盡量大,因為越小的feature map,其feature map cell的感受野就越大
- 縮放因子:
anchor寬高:
其中,ar∈{1,2,3,1/2,1/3},可以理解為在縮放因子選擇好anchor尺寸後,用ar來控制anchor形狀,從而得到多尺度的各種anchor,當ar=1時,增加一種 sk=sqrt(sk-1
網絡的訓練目標就是,回歸各個anchor對應的類別和位置
Training
樣本
正樣本
選擇與bounding box jaccard overlap(兩張圖的交集/並集)大於0.5的anchor作為正樣本樣本比例
Hard negative mining:由於負樣本很多,需要去掉一部分負樣本,先整圖經過網絡,根據每個anchor的最高類置信度進行排序,選擇置信度靠前的樣本,這樣篩選出來的負樣本也會更難識別,並且最終正負樣本比例大概是1:3
Loss
還是一如既往的location loss + classification loss,並為location loss添加了系數α(然而實際上α=1)進行平衡,並在batch維度進行平均
- x是xijp的集合xijp={1,0},用於判斷第i個anchor是否是第j個bounding box上的p類樣本
- c是cip的集合,cip是第i個anchor預測為第p類的概率
- l是預測的bounding box集合
- g是ground true bounding box集合
其中定位loss與faster rcnn相同
這個式子裏的k不是很明確,其實想表達不算背景0類的意思,且前景類只為match的類算location loss
分類loss就是很常用的softmax交叉熵了
核心的內容到這裏就講完了,其實跟YOLO和faster rcnn也很像,是一個用anchor box充當固定的proposal的rpn,並且用多尺度的anchor來適應多種尺度和形狀的目標對象。
Detail
在訓練中還用到了data augmentation(數據增強/擴充),每張圖片多是由下列三種方法之一隨機采樣而來
- 使用整圖
- crop圖片上的一部分,crop出來的min面積為0.1,0.3,0.5,0.7,0.9
- 完全隨機地crop
然後這些圖片會被resize到固定的大小,隨機水平翻轉,加入一些圖像上的噪聲,詳情可以參考另一篇論文:
Some improvements on deep convolutional neural network based image classification
從切除實驗中,可以看到data augmentaion是很重要的(從65.6到71.6)
這個表中還提到了atrous,其實是指空洞卷積,是圖像分割(deeplab)領域首先提出的一個卷積層改進,主要是能讓測試速度更快。具體可以參考 ICLR2015 Deeplab
從這個表中也可以看出多種形狀的anchor可以提升準確率
Result
輸入尺寸為300x300,batch size為8的SSD300可以做到實時(59FPS)且準確(74.3% mAP)的測試
Summary
SSD算是一個改進性的東西,站在Faster RCNN的肩膀上達到了實時且準確的檢測
讀論文系列:Object Detection ECCV2016 SSD