1 SSD基礎原理
1.1 SSD網絡結構
SSD使用VGG-16-Atrous作為基礎網絡,其中黃色部分為在VGG-16基礎網絡上填加的特征提取層。SSD與yolo不同之處是除了在最終特征圖上做目標檢測之外,還在之前選取的5個特特征圖上進行預測。
SSD圖1為SSD網絡進行一次預測的示意圖,可以看出,檢測過程不僅在填加特征圖(conv8_2, conv9_2, conv_10_2, pool_11)上進行,為了保證網絡對小目標有很好檢測效果,檢測過程也在基礎網絡特征圖(conv4_3, conv_7)上進行。
1.2 SSD網絡的損失函數
注意:圖中fc6, fc7名為fc,其實是卷積層。
SSD圖2為整個SSD訓練網絡的結構,由於圖像所含層數太多,網絡中不能看到每層細節,我重畫其中部分層為綠色,作為代表。可以看出,GT標簽在分特征圖上生成priorbox,即再將所有priobox組合為mbox_priorbox作為所有默認框的真實值。再看預測過程,會在所選取的特征圖進行兩個 3x3卷積,其中一個輸出每個默認框的位置(x, y, w, h)四個值,另一個卷積層輸出每個默認框檢測到不同類別物體的概率,輸出個數為預測類別個數。再將所有的默認框位置整合為mbox_loc,將所有默認框預測類別的向量組合為mbox_conf。mbox_loc、mbox_conf為所有預測默認框,將它與所有默認框的真實值mbox_priorbox進行計算損失,得到mbox_loss。
圖中data下方每個priorbox都對應了min_size與max_size,表示不同特征圖上的默認框在原圖上的最小與最大感受野。關於不同特征圖上的min_size與max_size,論文中給出的計算公式,可惜與實現的prototxt中的參數並不對應。
SSD的損失函數如圖3所示,由每個默認框的定位損失與分類損失構成。
1.3 SSD網絡訓練技巧
1.3.1 數據增強
SSD訓練過程中使用的數據增強對網絡性能影響很大,大約有6.7%的mAP提升。
(1) 隨機剪裁:采樣一個片段,使剪裁部分與目標重疊分別為0.1, 0.3, 0.5, 0.7, 0.9,剪裁完resize到固定尺寸。
(2) 以0.5的概率隨機水平翻轉。
1.3.2 是否在基礎網絡部分的conv4_3進行檢測
基礎網絡部分特征圖分辨率高,原圖中信息更完整,感受野較小,可以用來檢測圖像中的小目標,這也是SSD相對於YOLO檢測小目標的優勢所在。增加對基礎網絡conv4_3的特征圖的檢測可以使mAP提升4%。
1.3.3 使用瘦高與寬扁默認框
數據集中目標的開關往往各式各樣,因此挑選合適形狀的默認框能夠提高檢測效果。作者實驗得出使用瘦高與寬扁默認框相對於只使用正方形默認框有2.9%mAP提升。
1.3.4 使用atrous卷積
通常卷積過程中為了使特征圖尺寸特征圖尺寸保持不變,通過會在邊緣打padding,但人為加入的padding值會引入噪聲,因此,使用atrous卷積能夠在保持感受野不變的條件下,減少padding噪聲,關於atrous參考。本文SSD訓練過程中並且沒有使用atrous卷積,但預訓練過程使用的模型為VGG-16-atrous,意味着作者給的預訓練模型是使用atrous卷積訓練出來的。使用atrous版本VGG-16作為預訓模型比較普通VGG-16要提高0.7%mAP。
1.4 實驗結論
作者發現SSD對小目標檢測效果不好(但也比YOLO要好,因此多特征圖檢測),這是因為小物體在高層特征圖上保留很少的信息,通過增加輸入圖像的尺寸能夠解決對小物體檢測效果。