SSD(single shot multibox detector)
SSD,全稱Single Shot MultiBox Detector,是Wei Liu在ECCV 2016上提出的一種目標檢測算法,截至目前是主要的檢測框架之一,相比Faster RCNN有明顯的速度優勢,相比YOLO又有明顯的mAP優勢(不過已經被CVPR 2017的YOLO9000超越)
在VOC2007上,SSD300比Faster R-CNN的mAP高了6.6倍
在VOC2007上,SSD300比YOLP的FPS高了10%倍
1.SSD網絡結構
SSD網絡最前邊使用了VGG16的前5個層,使用Conv4_3做邊框回歸和分類;然後把VGG16的2個全連接層FC6、FC7改成了卷積層Conv6、Conv7,使用Conv7做邊框回歸和分類;之後自己添加了Conv8、Conv9、Conv10、Conv11,並選取其中的Conv8_2、Conv9_2、Conv10_2、Conv11_2做邊框回歸和分類。
通過分析SSD網絡的結構,我們知道了SSD網絡是在哪個特征圖上做邊框回歸和分類,接著看下怎麽在這些特征圖上圈一個框出來。
2.Default Boxs
假設網絡經過卷積,生成了8*8和4*4的feature map
在8*8和4*4的feature map上分割生成一些網格,這些網格稱為feature map cell,如下圖所示
使用一個3*3卷積核在圖像上滑動,每一個卷積核滑動的位置,生成一系列default box
由於網絡前邊的feature map尺寸較大(8*8),使用3*3的卷積核可以圈出小物體;網絡後邊的feature map尺寸較小(4*4),使用3*3的卷積核可以圈出大物體,這樣就解決了在YOLO中容易漏掉小物體的問題(如果YOLO劃分的網格中有2個小物體的中心都在同一個網格,那麽YOLO只能檢測出一個物體
default box的大小用scale和aspect ratios表示,使用如下公式計算:
scale
$s_k = s_{min} + {s_{max}- s_{min} \over m -1}(k - 1) ,k \in [1,m]$
其中$s_{min} = 0.2,s_{max = 0.9}$
aspect ratios
$w_k^a表示的是盒子的寬,h_k^a表示盒子的長$
當aspect ratios為1時,scale為s`
3.特征向量生成
有了default box後就需要生成特征向量進行框回歸和分類。
對於邊框回歸,只需要4維向量即可,分別代表邊框縮放尺度(坐標軸兩個方向)和平移向量(坐標軸兩個方向)
在5*5的特征圖上使用1*1的卷積核滑動,即每個格子生成6個default box,一共5*5*6 = 150個default box
每個盒子要生成25個特征向量,最後會產生5*5*6*25 = 3750個輸出
SSD源碼中並不會使用所有的default box,而是在每張feature map中使用部分default box,源碼中叫prior box
conv4_3(4),fc7(6),conv6_2(6),conv7_2(6),conv8_2(4),conv9_2(4)括號中的數字是每張feature map使用的prior box數
所以SSD300的prior box總數是38*38*4+19*19*6+10*10*6+5*5*6+3*3*4+1*1*4=8732
4.損失函數
這8732個prior box不會全部計算損失函數,而是通過計算Jaccard overlap計算和Groudtruth box重疊的比例,大於0.5的計算損失,損失的計算公式如下,具體的可以參考reference論文中的公式
5.Reference
- 論文:http://arxiv.org/abs/1512.02325
- https://zhuanlan.zhihu.com/p/24954433
- https://zhuanlan.zhihu.com/p/31427288
- https://www.cnblogs.com/xuanyuyt/p/7447111.html
SSD(single shot multibox detector)