SSD物體檢測演算法詳解

輕墨發表於2019-04-09

物體檢測演算法,按演算法結構,可以分為one-stage和two-stage兩類。

two-stage經典演算法主要是R-CNN族,以準確度見長,速度稍慢,一般不如one-stage。

one-stage演算法主要包括YOLO、SSD、CornerNet等,以速度快見長,準確度一般不如two-stage。本文分享的SSD就是經典的one-stage演算法。

SSD物體檢測演算法詳解

上圖是物體檢測演算法整個演化座標軸,可以看出SSD的釋出,是在Faster R-CNN和YOLO v1之後。YOLO v1是one-stage檢測演算法的開山之作,速度碾壓Faster R-CNN,但準確性遠不如Faster R-CNN。SSD沿用了YOLO v1的基本思路,糅合了Faster R-CNN的anchor-box,又開創性的提出了多解析度預測,最終達到了極快又準,如下表。

SSD物體檢測演算法詳解

SSD單一scale的檢測原理

這裡先直接給出具體的模型計算方法,後面再解釋原理,否則原理解釋起來非常晦澀難懂。

1)模型

a) 輸入圖片經過特徵提取器(SSD採用VGG16做特徵提取器),得到H x W x Channel的Extracted Feature Map。

SSD物體檢測演算法詳解

b) 將上述Extracted Feature Map,經過3 x 3 x (25 x num_default_box)的卷積核,卷積成H x W x (25 x num_default_box)的feature map作為物體檢測的predict。如下圖(圖中num_default_box=4):

SSD物體檢測演算法詳解

上述兩步,就已經完成了物體檢測的predict。足夠簡單

2)原理解釋

由卷積的特性可知,從輸入圖片到HxW解析度的預測,相當於將原解析度的輸入圖片進行HxW等分,如下圖(這裡h=2,w=2):

SSD物體檢測演算法詳解

為了更準確的預測物體bounding box,SSD借鑑了faster rcnn中的default box思想。

先假設,每一個cell中已經存在多個default box,default box的長寬固定,位於每一個cell正中。

以下圖為例,每一個cell中有四個固定大小的default box。

SSD物體檢測演算法詳解
那麼在predict時,每一個cell就會有4個預測,每一個預測對應一個default box。如下圖:

SSD物體檢測演算法詳解
具體到一個default box的預測,分為兩個部分,如上圖中的default box 1,

  1. P_i(i=background, c1, …, c20),代表的是這個default box的物體類別。P_background代表是背景的概率,P_ci代表是類別ci的概率(這裡採用的VOC資料集,共有20個物體類別),所有概率值之和為1,取概率值最大的類作為default box的類別預測值。

  2. Δcx, Δcy, Δw, Δh代表default box內的物體目標框與default box的位置之間的偏差。Δcx, Δcy代表中心點的偏差,Δw, Δh代表寬高的偏差。具體的含義可以參考Loss計算章節。

所以一個default box會有25個預測結果,4個default box就有100個。這就是上文模型部分predict中的100的意義。

3)Loss計算

根據上述分析可知,每個cell都有4個default box,HxW的解析度,則會有4HW個預測結果。對於監督學習,需要知道每個default box對應的標籤Ground Truth。SSD對於真實GT物體框的分配策略是,首先將GT分配給IoU最大的default box,然後將GT分配給IoU大於0.5的default box,也即同一個GT會分配給不同的default box,不同的default box對應的GT可能是同一個。

SSD物體檢測演算法詳解

如上圖,紅色框是dog的真實位置,那麼綠色箭指向的兩個default box的GT都是紅色框,其他兩個default box的GT是背景即沒有物體。

對於正例,即default box有GT框的,loss分為類別損失和位置損失。

對於反例,即default box沒有GT框的,loss只有類別損失(類別是背景)。

Loss是confidence loss和location loss加權之和。

SSD物體檢測演算法詳解

location loss計算如下:

SSD物體檢測演算法詳解

其中,y是預測值,y^hat是預測值的label。對於cx,cy,w,h的y^hat採用下式計算:

SSD物體檢測演算法詳解

g是ground truth值,d是default box的先驗值。可以看出,中心點座標就是ground truth值與default box先驗值得相對差,w和h是ground truth值與default box先驗值比值的對數。

其實這樣處理都是儘量減小y^hat值變化幅度,減少學習難度。

confidence loss計算如下:

SSD物體檢測演算法詳解

都是cross entropy loss。

以上就是單一scale的SSD原理。

SSD多scale的檢測原理

SSD的主要貢獻有兩點

1)引入了上文所述的default box

2)多scale預測

上文的單scale預測,是取整個特徵提過程的某一個feature map做預測。多scale預測,就是取整個特徵提取過程中的不同解析度的feature map均做預測。

SSD物體檢測演算法詳解

由上圖可以看出,SSD做了6個scale的預測。

Loss也是每個scale的Loss之和。

Tricks

1)data augmentation

資料增強是模型訓練非常重要的一環,畢竟資料獲取太難了。

SSD每一張訓練圖片由如下方法隨機產生:

原圖片

擷取一部分圖片,保證擷取框與物體框的最小IoU是0.1,03,0.5,0.7,或者0.9

隨機擷取一部分圖片

隨機擷取圖片的大小是[0.1,1]原圖片大小,aspect ratio是0.5~2。

2)default box

default box由scale和aspect ratio控制。

scale最小為0.2,最大0.9。假如總共選取了m個scale,則各個scale的scale值按下式計算:

SSD物體檢測演算法詳解

aspect ratio選取為:

SSD物體檢測演算法詳解

aspect ratio為1時,再增加一個scale,取值為:

SSD物體檢測演算法詳解
所以每一個scale的每一個cell共有6個default box。

3)hard negative mining

因為絕大部分default box都是負樣本,導致正負樣本嚴重失衡,如果計入所有負樣本的損失,訓練非常不穩定,收斂性非常慢,所以負樣本只計入損失最大的幾個負樣本,並且要保持正負樣本比例為1:3。

試驗結果

1)普通技巧的消融試驗結果

SSD物體檢測演算法詳解
可以看出資料增強的影響非常大

2)多scale預測的消融試驗

SSD物體檢測演算法詳解

可以看出多scale可以顯著提高準確性

3)COCO資料集結果對比

SSD物體檢測演算法詳解

相關文章