SSD物體檢測算法詳解

物體檢測算法,按算法結構,能夠分爲one-stage和two-stage兩類。算法

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

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

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

SSD單一scale的檢測原理

這裏先直接給出具體的模型計算方法,後面再解釋原理,不然原理解釋起來很是晦澀難懂。blog

1)模型

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

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):ci

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

2)原理解釋

由卷積的特性可知,從輸入圖片到HxW分辨率的預測,至關於將原分辨率的輸入圖片進行HxW等分,以下圖(這裏h=2,w=2):io

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

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

如下圖爲例,每個cell中有四個固定大小的default box。

那麼在predict時,每個cell就會有4個預測,每個預測對應一個default box。以下圖:

具體到一個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多是同一個。

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

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

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

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

location loss計算以下:

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

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

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

confidence loss計算以下:

都是cross entropy loss。

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

SSD多scale的檢測原理

SSD的主要貢獻有兩點

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

2)多scale預測

上文的單scale預測,是取整個特徵提過程的某一個feature map作預測。多scale預測,就是取整個特徵提取過程當中的不一樣分辨率的feature map均作預測。

由上圖能夠看出,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值按下式計算:

aspect ratio選取爲:

aspect ratio爲1時,再增長一個scale,取值爲:

因此每個scale的每個cell共有6個default box。

3)hard negative mining

由於絕大部分default box都是負樣本,致使正負樣本嚴重失衡,若是計入全部負樣本的損失,訓練很是不穩定,收斂性很是慢,因此負樣本只計入損失最大的幾個負樣本,而且要保持正負樣本比例爲1:3。

試驗結果

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

能夠看出數據加強的影響很是大

2)多scale預測的消融試驗

能夠看出多scale能夠顯著提升準確性

3)COCO數據集結果對比

相關文章
相關標籤/搜索