SSD: The Single Shot Detector

  • YOLO: You Only Look Once 還要快,還要精確。保證速度的同時,其結果的 mAP 可與使用 region proposals 技術的方法(如 Faster R-CNN)相媲美。
  • 爲了得到高精度的檢測結果,在不同層次的 feature maps 上去 predict objectbox 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-3conv-7FC7),conv8-2conv9-2conv10_2conv11_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 boxmin_sizemax_size由以下公式決定,公式中m是使用feature map的數量(SSD 300m=6):

第一層feature map對應的min_size=S1max_size=S2;第二層min_size=S2max_size=S3;其他類推。在原文中,Smin=0.2Smax=0.9,但是在SSD 300prior 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條線路:

  1. 經過一次batch norm+一次卷積後,生成了[1, num_class*num_priorbox, layer_height, layer_width]大小的feature用於softmax分類目標和非目標(其中num_class是目標類別,SSD 300num_class = 21)
  2. 經過一次batch norm+一次卷積後,生成了[1, 4*num_priorbox, layer_height, layer_width]大小的feature用於bounding box regression(即每個點一組[dxmindymindxmaxdymax],參考Faster RCNN 2.5節)
  3. 生成了[1, 2, 4*num_priorbox]大小的prior box blob其中2channel分別存儲prior box的4個點座標和對應的4個variance

 prior box的生成基準是在原圖上,即min_sizemax_size都是相對於原圖的。

3步的第1個輸出爲prior box4個點座標,一般歸一化到[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

4boxid*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

4boxid*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媲美。

缺點:

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

SSD訓練過程

對於SSD,雖然paper中指出採用了所謂的“multibox loss”,但是依然可以清晰看到SSD loss分爲了confidence losslocation loss兩部分,其中NmatchGTGround Truth)的prior box數量;而α參數用於調整confidence losslocation loss之間的比例,默認α=1SSD中的confidence loss是典型的softmax loss

xijp代表第iprior box匹配到了第jclassp類別的GT box

 
location loss是典型的smooth L1 loss

Hard negative mining

值得注意的是,一般情況下negative default boxes數量>>positive default boxes數量,直接訓練會導致網絡過於重視負樣本,從而loss不穩定。所以需要採取:

所以SSD在訓練時會依據confidience score排序default box,挑選其中confidience高的box進行訓練,控制positivenegative=13
 

Data augmentation

數據增廣,即每一張訓練圖像,隨機的進行如下幾種選擇:

使用原始的圖像
採樣一個 patch,與物體之間最小的 jaccard overlapiou 爲:0.10.30.50.7 0.9
隨機的採樣一個 patch

採樣的 patch 是原始圖像大小比例是[0.11]aspect ratio1/22之間。當 groundtruth box 的 中心(center)在採樣的patch中時,保留重疊部分。在這些採樣步驟之後,每一個採樣的patchresize到固定的大小,並且以0.5的概率隨機的 水平翻轉(horizontally flipped)。

翻來覆去的randomly crop,保證每一個prior box都獲得充分訓練而已。

 

Result

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