- 比YOLO: You Only Look Once 還要快,還要精確。保證速度的同時,其結果的 mAP 可與使用 region proposals 技術的方法(如 Faster R-CNN)相媲美。
- 爲了得到高精度的檢測結果,在不同層次的 feature maps 上去 predict object、box offsets,同時,還得到不同 aspect ratio 的 predictions。
- 能夠在當輸入分辨率較低的圖像時,保證檢測的精度。同時,這個整體 end-to-end 的設計,訓練也變得簡單。在檢測速度、檢測精度之間取得較好的 trade-off。
基本網絡-VGG-16
Layer name |
"圖像"規格 |
input |
3x300x300 |
conv1_1 (3*3 s1 p1) |
64x300x300 |
conv1_2(3*3 s1 p1) |
64x300x300 |
pool_1 (3*3 s1 p1) |
64x150x150 |
conv2_1 (3*3 s1 p1) |
128x150x150 |
conv2_2(3*3 s1 p1) |
128x150x150 |
pool_2(3*3 s1 p1) |
128x75x75 |
conv3_1(3*3 s1 p1) |
256x75x75 |
conv3_2(3*3 s1 p1) |
256x75x75 |
conv3_3(3*3 s1 p1) |
256x75x75 |
pool_3(3*3 s1 p1) |
256x38x38 |
conv4_1(3*3 s1 p1) |
512x38x38 |
conv4_2(3*3 s1 p1) |
512x38x38 |
conv4_3(3*3 s1 p1) |
512x38x38 |
pool_4(3*3 s1 p1) |
512x19x19 |
conv5_1(3*3 s1 p1) |
512x19x19 |
conv5_2(3*3 s1 p1) |
512x19x19 |
conv5_3(3*3 s1 p1) |
512x19x19 |
----------- |
VGG昏割線 |
fc6(convolution kernel dilation) (3*3, p6, s1, dilation=6) |
1024x19x19 |
fc7 (1*1 s1 p0) |
1024x19x19 |
conv8_1 (1*1 s1 p0) |
256x19x19 |
conv8_2 (3*3 s2 p1) |
512x10x10 |
conv9_1 (1*1 s1 p0) |
128x10x10 |
conv9_2 (3*3 s2 p1) |
256x5x5 |
conv10_1 (1*1 s1 p0) |
128x5x5 |
conv10_2 (3*3 s2 p1) |
256x3x3 |
conv11_1 (1*1 s1 p0) |
128x3x3 |
conv11_2 (3*3 s2 p1) |
256x1x1 |
YOLO在卷積層後接全連接層,即檢測時只利用了最高層feature maps(包括Faster RCNN也是如此);
而SSD採用了特徵金字塔結構進行檢測,即檢測時利用了conv4-3,conv-7(FC7),conv8-2,conv9-2,conv10_2,conv11_2這些大小不同的feature maps,在多個feature maps上同時進行softmax分類和位置迴歸。
Prior Box
與anchor非常類似,就是一些目標的預選框,後續通過softmax分類+bounding box regression獲得真實目標的位置。SSD按照如下規則生成prior box:
- 以feature map上每個點的中點爲中心(offset=0.5),生成一些列同心的prior box(然後中心點的座標會乘以step,相當於從feature map位置映射回原圖位置).
-
正方形prior box
最小邊長爲min_size,
最大邊長爲sqrt(max_size * min_size).
每在prototxt設置一個aspect ratio,會生成2個長方形:
min_size*sqrt(aspect ratio)
min_size/sqrt(aspect ratio)
每個feature map對應prior box的min_size和max_size由以下公式決定,公式中m是使用feature map的數量(SSD 300中m=6):
第一層feature map對應的min_size=S1,max_size=S2;第二層min_size=S2,max_size=S3;其他類推。在原文中,Smin=0.2,Smax=0.9,但是在SSD 300中prior box設置並不能和paper中上述公式對應
|
min_size |
max_size |
conv4_3 |
30 |
60 |
fc7 |
60 |
111 |
conv6_2 |
111 |
162 |
conv7_2 |
162 |
213 |
conv8_2 |
213 |
264 |
conv9_2 |
264 |
315 |
不過依然可以看出,SSD使用低層feature map檢測小目標,使用高層feature map檢測大目標
分類和迴歸網絡:
在conv4_3 feature map網絡pipeline分爲了3條線路:
- 經過一次batch norm+一次卷積後,生成了[1, num_class*num_priorbox, layer_height, layer_width]大小的feature用於softmax分類目標和非目標(其中num_class是目標類別,SSD 300中num_class = 21)
- 經過一次batch norm+一次卷積後,生成了[1, 4*num_priorbox, layer_height, layer_width]大小的feature用於bounding box regression(即每個點一組[dxmin,dymin,dxmax,dymax],參考Faster RCNN 2.5節)
- 生成了[1, 2, 4*num_priorbox]大小的prior box blob,其中2個channel分別存儲prior box的4個點座標和對應的4個variance
prior box的生成基準是在原圖上,即min_size和max_size都是相對於原圖的。
第3步的第1個輸出爲prior box的4個點座標,一般歸一化到[0,1],具體操作爲原圖上生成的xmin,xmax,ymin,ymax分別除以原圖的長寬
|
圖像規格 |
備註 |
conv4_3 |
N, 512, 38, 38 |
|
conv4_3_norm |
N, 512, 38, 38 |
Scale=20,cross_channel=false |
conv4_3_norm_mbox_loc |
N, 16, 38, 38 |
3*3 s1 p1 |
conv4_3_norm_mbox_loc_perm |
N, 38, 38, 16 |
NCHW->NHWC |
conv4_3_norm_mbox_loc_flat |
N, 38*38*16 |
4個boxid*4個座標 |
|
圖像規格 |
備註 |
conv4_3 |
N, 512, 38, 38 |
|
conv4_3_norm |
N, 512, 38, 38 |
Scale=20,cross_channel=false |
conv4_3_norm_mbox_conf |
N, 84, 38, 38 |
3*3 s1 p1 |
conv4_3_norm_mbox_conf_perm |
N, 38, 38, 84 |
NCHW->NHWC |
conv4_3_norm_mbox_conf_flat |
N, 38*38*84 |
4個boxid*21類(含背景) |
|
圖像規格 |
備註 |
conv4_3 |
N, 512, 38, 38 |
|
conv4_3_norm |
N, 512, 38, 38 |
Scale=20,cross_channel=false |
conv4_3_norm_mbox_priorbox |
|
Min_size=30, max_size=60, aspect_rato=2 |
SSD網絡結構優劣分析
SSD算法的優點應該很明顯:運行速度可以和YOLO媲美,檢測精度可以和Faster RCNN媲美。
缺點:
SSD訓練過程
對於SSD,雖然paper中指出採用了所謂的“multibox loss”,但是依然可以清晰看到SSD loss分爲了confidence loss和location loss兩部分,其中N是match到GT(Ground Truth)的prior box數量;而α參數用於調整confidence loss和location loss之間的比例,默認α=1。SSD中的confidence loss是典型的softmax loss:
xijp代表第i個prior box匹配到了第j個class爲p類別的GT box;
Hard negative mining:
值得注意的是,一般情況下negative default boxes數量>>positive default boxes數量,直接訓練會導致網絡過於重視負樣本,從而loss不穩定。所以需要採取:
Data augmentation:
數據增廣,即每一張訓練圖像,隨機的進行如下幾種選擇:
採樣的 patch 是原始圖像大小比例是[0.1,1],aspect ratio在1/2與2之間。當 groundtruth box 的 中心(center)在採樣的patch中時,保留重疊部分。在這些採樣步驟之後,每一個採樣的patch被resize到固定的大小,並且以0.5的概率隨機的 水平翻轉(horizontally flipped)。
翻來覆去的randomly crop,保證每一個prior box都獲得充分訓練而已。