目標檢測 | SSD原理以及相關問題

SSD: Single Shot MultiBox Detector

這裡寫圖片描述

intro: ECCV 2016 Oral
arxiv: http://arxiv.org/abs/1512.02325
paper: http://www.cs.unc.edu/~wliu/papers/ssd.pdf
slides: http://www.cs.unc.edu/%7Ewliu/papers/ssd_eccv2016_slide.pdf
github(Official): https://github.com/weiliu89/caffe/tree/ssd
video: http://weibo.com/p/2304447a2326da963254c963c97fb05dd3a973
github: https://github.com/zhreshold/mxnet-ssd
github: https://github.com/zhreshold/mxnet-ssd.cpp
github: https://github.com/rykov8/ssd_keras
github: https://github.com/balancap/SSD-Tensorflow
github: https://github.com/amdegroot/ssd.pytorch
github(Caffe): https://github.com/chuanqi305/MobileNet-SSD

SSD網路結構以及原理

首先使用VGG16作為base network,然後同其它的檢測網路一樣替換掉VGG16本身的兩個全連線層,在SSD中直接改為卷積層。

網路結構的變化,又加入了4個卷積層,SSD與yolo不同之處是除了在最終特徵圖上做目標檢測之外,還在之前選取的5個特特徵圖上進行預測。SSD圖1為SSD網路進行一次預測的示意圖,可以看出,檢測過程不僅在填加特徵圖(conv8_2, conv9_2, conv_10_2, pool_11)上進行,為了保證網路對小目標有很好檢測效果,檢測過程也在基礎網路特徵圖(conv4_3, conv_7)上進行。

此部分貼出幾個比較清楚的文章:

http://blog.csdn.net/zy1034092330/article/details/72862030

http://www.cnblogs.com/fariver/p/7347197.html

https://zhuanlan.zhihu.com/p/28867241

SSD的缺點以及相應的方案

SSD的缺點:
1. 需要人工設定prior box的min_size,max_size和aspect_ratio值。網路中prior box的基礎大小和形狀不能直接通過學習獲得,而是需要手工設定。而網路中每一層feature使用的prior box大小和形狀恰好都不一樣,導致除錯過程非常依賴經驗。
2. 雖然採用了pyramdial feature hierarchy的思路,但是對小目標的recall依然一般,並沒有達到碾壓Faster RCNN的級別。作者認為,這是由於SSD使用conv4_3低階feature去檢測小目標,而低階特徵卷積層數少,存在特徵提取不充分的問題。

針對上述缺點1,參考連結: https://github.com/zhreshold/mxnet-ssd/issues/25

針對上述缺點2,參考連結:為什麼SSD(Single Shot MultiBox Detector)對小目標的檢測效果不好?

https://www.zhihu.com/question/49455386