天天看點

SSD回歸類物體檢測

本寶寶最近心情不會,反正這篇也是搬用别人部落格的了:(SSD就是YOLO+anchor(不同feature map 作為input))

引言

這篇文章是在YOLO[1]之後的一篇文章,這篇文章目前是一篇the-art-of-state的方法。這篇文章可以看到很多前人的影子,我所感受到這篇文章主要借鑒前人的有DeepNultiBox[2]、Faster R-CNN[3]、YOLO[1]、VGG16[4]等。

發表位置

  • ECCV 2016
  • PDF.v5 arXiv:1512.02325.pdf
  • 代碼托管

問題引入

對于object detection,之前的方法都沒有特别快,雖然YOLO很快,但是在準确性上下降了較多。作者就提出了一個速度很好,準确性還好的方法——SSD。

SSD核心思想

整個圖檔做輸入,之後在輸出層回歸出box的位置和object的類别。與YOLO不同的是,SSD在輸出層隻用conv layer,而不是全連結層。

模型

這個模型,是以VGG16進行修改的,把VGG16的fc層換成conv層,中間還夾雜了maxpooling層。每個額外添加的conv層都輸出一個Feature map,并以此作為預測一個輸入,換句話說,這些不同scale的Feature map都作為預測的輸入,以此來達到不同scale。作者舉了一個例子,如果一個Feature map是m×n×p(width×height×channel)的,那麼用3×3×p的kernel去産生value,産生了m×n個value。

為了友善讀者了解這個網絡結構,我把VGG[4]論文中的圖粘貼過來了,作者用的是D這個模型進行修改的。

訓練

default boxes

作者在這裡提到的default boxes與faster R-CNN中的Anchor很類似,這裡是按照YOLO中的想法,把每個Feature map(不同scale的)分成m×n個cell,每個cell有預設出k個default boxes,最後的predict box與default box有4個offset,并為每個predict box計算c個類的值。最後産生了(c+4)kmn個值。這裡與faster R-CNN Anchor最大的不同就是,faster R-CNN是通過改變Anchor的大小來實作scalable的,SSD是改變Feature map大小來實作的。

訓練目标

損失函數:這個與Faster R-CNN中的RPN是一樣的,不過RPN是預測box裡面有object或者沒有,是以,沒有分類,SSD直接用的softmax分類。location的損失,還是一樣,都是用predict box和default box/Anchor的差 與 ground truth box和default box/Anchor的差 進行對比,求損失。 

以下,是我根據我的了解畫的一張簡單示意圖。這個default box存在求損失,就是盡可能把X與Y的數值做到內插補點最小。

為default box選擇尺度(scale)和長寬比

如果我們用m個Feature maps進行預測,那麼尺度最大的是smax,最小的是smin,那麼第k個Feature map的default boxes的尺度sk:

使用不同的長寬比,ar∈{1,2,3,1/2,1/3},長度(wr = sk × squr(ar)),高度(hr = sk / squr(ar))。除此之外,對于ar=1,還有一個情況sk‘= squr(sk × sk+1)。

negative資料處理

這種方法會産生很多個negative的資料,使positive與negative失去平衡,作者把negative:positive控制在3:1。

資料擴大

實驗結果

PASCAL VOC2007

PASCAL VOC2012

COCO

模型分析

資料擴大很重要

多個default box 尺度更好

atrous 更快

目前,我還沒有明白atrous是什麼。

多個Feature map用于預測更好

SSD定位錯誤少

因為他把定位和分類放在一步裡解決。

小目标效果不好

因為在top layer中,獲得小目标的資訊不多,擴大圖檔大小輸入,會有改善。通過資料擴大也會有改善。

速度

使用 Titan X 、 cuDNN v4 、 Intel Xeon [email protected]

結論

  • SSD的各種特定和優點。
  • SSD将會獲得更為廣泛的應用。

個人想法

這篇文章在很早之前就想拜讀,但是,到今天才扣完。之前讀的object Detection文章基本都是在為了這篇做基礎。這篇文章看完了,想法有很多,現在簡單叙述一下把。

巨人肩膀

  • DeepMultiBox:這篇文章主要講的多個scale的問題,利用圖檔放縮的方法進行不同scale多個框預測。文章在最後提到把定位分類放到one-shot的網絡裡面,我覺得作者可能受到這個的啟發。
  • YOLO:YOLO這篇文章就是把定位和分類放在一個網絡裡面,同時徹底擺脫了之前位置推薦的方式。SSD中的default box的生成借鑒了YOLO中cell的想法。SSD在很多方面都是在于YOLO做對比。畢竟YOLO是發表在CVPR2016上的成果。
  • Faster R-CNN:這篇文章主要借鑒了Faster R-CNN中anchor的想法。正如作者在提到“similar to Faster R-CNN”,SSD裡面提到的“default bounding box”直接按照anchor了解的話,便容易了解多了,SSD與Faster R-CNN中關于Anchor的使用差別主要在Scalable上。
  • VGG16:這個主要說的是個網絡結構,SSD主要就是根據VGG16改的,VGG16中抛棄了之前用的5×5、7×7、11×11等大的卷積核,而是全用3×3的卷積核(VGG文章中提到了具體原因,大主要有1.更多個non-linear rectification layers.)。

作者提到的改進空間

    • “How to design the optimal tiling is an open question as well”,這是作者在提到default box的尺度問題時候說的。
    • 針對small object的問題,這個跟YOLO是一緻的,我覺得這很可能是這樣劃分cell的問題。