SSD-目標檢測的學習

文章介紹

(SSD: Single Shot MultiBox Detector,ECCV2016)
本文提出一種利用單個深度神經網絡來實現圖像目標檢測的算法——SSD(Single Shot MultiBox Detector)。該算法相比現有的目標檢測算法進一步提升了目標檢測的速度,也保證了目標檢測準確率。此外,在低分辨的情況下也可以達到很高的檢測準確率、進一步提升檢測速度。

SSD算法將邊界框的輸出空間離散化爲一組默認框,每個特徵映射位置有不同的長寬比和比例, 以及在預測時,網絡爲每個默認框中每個對象類別的存在生成分數,並對框進行調整以更好地匹配對象形狀。該算法基於 feed-forward convolutional network——前饋卷積網絡(該篇文章的SSD是基於VGG-16網絡),其網絡爲這些框中分類實例的存在產生固定大小的邊界框和分數集合,隨後是non-maximum suppression step——非最大抑制步驟,產生最終檢測結果。

算法模型

模型介紹

1. Multi-scale feature maps
SSD uses multiple feature maps of decreasing resolution to output bounding boxes of increasing size.在這裏插入圖片描述

圖 1

2. More default boxes
SSD discretizes bounding boxes spaces into many bins, preventing box coordinates averaging when several likely hypotheses are present in the same default box.
在這裏插入圖片描述

圖 2

3. SSD Architecture
SSD網絡中分爲了6個stage,每個stage能學習到一個特徵圖,然後進行邊框迴歸和分類。SSD網絡以VGG16的前5層卷積網絡作爲第1個stage,然後將VGG16中的fc6和fc7兩個全連接層轉化爲兩個卷積層Conv6和Conv7作爲網絡的第2、第3個stage。接着在此基礎上,SSD網絡繼續增加了Conv8、Conv9、Conv10和Conv11四層網絡,用來提取更高層次的語義信息。如圖3所示就是SSD的網絡結構。在每個stage操作中,網絡包含了多個卷積層操作,每個卷積層操作基本上都是小卷積.。
骨幹網絡:SSD前面的骨幹網絡選用的VGG16的基礎網絡結構,如上圖所示,虛線框內的是VGG16的前5層網絡。然後後面的Conv6和Conv7是將VGG16的後兩層全連接層網絡(fc6, fc7)轉換而來。
另外:在此基礎上,SSD網絡繼續增加了Conv8和Conv9、Conv10和Conv11四層網絡。圖中所示,立方體的長高表示特徵圖的大小,厚度表示是channel。
在這裏插入圖片描述

圖 3

SSD模型中的幾個重要組成部分

  • Multi-scale feature maps(圖1所示);
  • Convolutional predictors;
  • Default boxes and aspect ratios.

training中涉及到的關鍵技術:

  • Choosing scales and aspect ratios for default boxes;
  • The hard negative mining;
  • Data augmentation.
    此外,在訓練時在前饋網絡上新添加的所有卷積層參數初始化採用xavier方法

(聯合)損失函數Loss function):該損失函數是局部化損失和置信損失的加權和。

L(x,c,l,g)=1N(Lconf(x,c)+αLloc(x,l,g)) L(x, c, l, g)=\frac{1}{N}\left(L_{\operatorname{con} f}(x, c)+\alpha L_{l o c}(x, l, g)\right)

其中,
Lloc(x,l,g)=iPosNm{cx,cy,w,h}xijk smooth L1(limg^jm) L_{l o c}(x, l, g)=\sum_{i \in P o s}^{N} \sum_{m \in\{c x, c y, w, h\}} x_{i j}^{k} \text { smooth }_{\mathrm{L} 1}\left(l_{i}^{m}-\hat{g}_{j}^{m}\right)
g^jcx=(gjcxdicx)/diwg^jcy=(gjcydicy)/dihg^jw=log(gjwdiw)g^jh=log(gjhdih) \begin{aligned} \hat{g}_{j}^{c x}=\left(g_{j}^{c x}-d_{i}^{c x}\right) / d_{i}^{w} & \hat{g}_{j}^{c y}=\left(g_{j}^{c y}-d_{i}^{c y}\right) / d_{i}^{h} \\ \hat{g}_{j}^{w}=\log \left(\frac{g_{j}^{w}}{d_{i}^{w}}\right) & \hat{g}_{j}^{h}=\log \left(\frac{g_{j}^{h}}{d_{i}^{h}}\right) \end{aligned}

Lconf(x,c)=iPosNxijplog(c^ip)iNeglog(c^i0) where c^ip=exp(cip)pexp(cip) L_{c o n f}(x, c)=-\sum_{i \in P o s}^{N} x_{i j}^{p} \log \left(\hat{c}_{i}^{p}\right)-\sum_{i \in N e g} \log \left(\hat{c}_{i}^{0}\right) \quad \text { where } \quad \hat{c}_{i}^{p}=\frac{\exp \left(c_{i}^{p}\right)}{\sum_{p} \exp \left(c_{i}^{p}\right)}
NN 是匹配默認框的數量,α\alpha由交叉驗證設置爲1,其餘的一些具體細節請參考文章。

模型分析

圖4 給出了不同關鍵技術對於檢測準確率影響得到的結果。

圖 4

從圖4的結果以及後續的實驗結果可得以下結論此處只給出一組實驗結果,其餘的實驗結果請參考該文章):

  • Data augmentation是至關重要的,對於檢測的準確率影響很大,特別是小目標的檢測準確率;
  • Multiple output layers對於不同分辨率的圖像得到的檢測準確率也是很不錯的,特別是對低分辨率的圖像依舊可以有很好的正確檢測率;
  • 該算法對於小目標的檢測準確率還有很大的提升空間;
  • 通過增大訓練圖像的尺寸可以進一步提升檢測準確率。

復現代碼

Caffe代碼:Caffe
Paddlepaddle代碼:Paddlepaddle
Tensorflow代碼:Tensorflow
Pytorch代碼:Pytorch
Keras代碼:Keras

未來的工作

  • 針對小目標檢測做進一步的研究;
  • 考慮如何設計出更好的 tiling of default boxes;
  • 用更快的基礎網絡來進一步提升SSD的速度。

參考文獻
[1]: https://zhuanlan.zhihu.com/p/32929487
[2]: https://arleyzhang.github.io/articles/786f1ca3/
[3]: https://zhuanlan.zhihu.com/p/33544892
[4]: http://www.cs.unc.edu/~wliu/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章