SSD總結


SSD: Single Shot MultiBox Detector

1. Introduction

改進點:

  • 以前的方法都是先搞bounding box,再對box里面做分類。特點:精度高,速度慢。
    SSD不需要在bounding box上采樣,特點:精度高,速度快。
  • 小卷積核在bounding box上做類別和偏移預測,
  • 在不同尺度的特征圖上做不同尺度的預測,通過寬高比來明確的分離預測。

2. The Single Shot Detector(SSD)

2.1 Model

基礎網絡,如VGG,截斷到分類層之前,作為基礎網絡。后面接附屬架構,附屬架構有以下特點:

  • 基礎網絡后添加的卷積層大小逐層遞減,使檢測具有多尺度特征。
  • 在SSD的頂部,每個增加的特征層,使用一組卷積核生成固定大小的predictions。對\(p\)通道\(m\times n\)的特征層,用\(3\times 3\times p\)的卷積核卷積,生成類別得分和坐標偏移。
  • 在給定位置的k個框,計算c類分數和4個偏移量。因此特征圖中每個位置需要(c+4)k個卷積核,對於m*n特征圖產生(c+4)kmn個輸出。在多個特征圖中使用不同形狀的默認框,可有效的離散可能的輸出框形狀空間。

2.2 Training

選擇用於檢測的default box和尺度集合、難樣本挖掘、數據增廣策略。

  • 匹配策略: 訓練階段建立真實標簽和默認框對應關系,真實標簽從默認框中選擇。開始先匹配每個真實標簽框與默認框最好的jaccard重疊,確保每個真實標簽框有一個匹配的默認框,然后匹配默認框與真實標簽框jaccard重疊高於閾值0.5的默認框。這樣就允許網絡對多個重疊的默認框預測獲得高置信度,而不是只選擇最大重疊的一個。
  • 訓練:

\[\left\{\begin{align} & g:ground\ truth\ box\\ & l:predicted\ box\\ & d:default\ bounding\ box\\ & w:width\\ & h:height \end{align}\right.\]

LOSS計算公式:

\[L(x,c,l,g)=\frac {1} {N}(L_{conf}(x,c))+αL_{loc}(x,l,g)\tag{1} \]

定位LOSS:

\[L_{loc}(x,l,g) = \sum_{i\in Pos}^{N}\sum_{m\in\{cx,cy,w,h\}}x_{ij}^ksmooth_{L1}(l_i^m-\hat{g}_j^m) \]

\[\hat{g}_j^{cx}=(g_j^{cx}-d_i^{cx})/d_i^w \quad \tag{2} \hat{g}_j^{cy}=(g_j^{cy}-d_i^{cy})/d_i^h \]

\[\hat{g}_j^{w}=log(g_j^{w}/d_i^h) \quad \hat{g}_j^{h}=log(g_j^{h}/d_i^h) \]

置信度損失(confidence loss):

\[L_{conf}(x,c)=-\sum_{i\in Pos}^N x_{ij}^p log(\hat{c}_i^p) - \sum_{i\in Neg} log(\hat{c}_i^0) \quad where \quad\hat{c}_i^p = \frac {exp(c_i^p)}{\sum_p exp(c_i^p)}\tag{3} \]

  • 在默認框上選擇尺度和寬高比:同時使用低層和高層特征圖來檢測。
    一般來說,一個 CNN 網絡中不同的 layers 有着不同尺寸的 感受野(receptive fields)。這里的感受野,指的是輸出的 feature map 上的一個節點,其對應輸入圖像上尺寸的大小。具體的感受野的計算,參見兩篇 blog:
    http://blog.csdn.net/kuaitoukid/article/details/46829355
    http://blog.cvmarcher.com/posts/2015/05/17/cnn-trick/
    但是在SSD 結構中,default boxes 不必要與每一層 layer 的 receptive fields 對應。本文的設計中,feature map 中特定的位置負責圖像中特定的區域,以及物體特定的尺寸。假如我們用 \(m\) 個 feature maps 來做 predictions,每一個 feature map 中 default box 的尺寸大小計算如下:

\[s_k = s_{min} + \frac{s_{max} - s_{min}}{m-1}(k-1), \ \ \ \ \ \ \ \ \ \ k \in [1, m] \]

其中\(s_{min}=0.2,s_{max}=0.9\)
再對每個default box做不同寬高比,
令aspect ratio:\(a_r\in \{1,2,3,\frac {1}{2},\frac{1}{3}\}\)
寬:\(w_k^a=s_k\sqrt {a_r}\)
高:\(h_k^a=s_k/\sqrt{a_r}\)
寬高比為1時,額外加一個\(s'_k=\sqrt{s_ks_{k+1}}\)
整理如下:

\[\left\{ \begin{array}{l} \ s_k = s_{min} + \frac{s_{max} - s_{min}}{m-1}(k-1), \ \ k \in [1, m] \\ \ s'_k=\sqrt{s_ks_{k+1}} \\ \hskip -1.3mm { \left. \begin{array}{l} \ w_k^a=s_k\sqrt {a_r} \\ \ h_k^a=s_k/\sqrt{a_r} \\ \end{array} \right\} a_r\in \{1,2,3,\frac {1}{2},\frac{1}{3}\} } \end{array} \right.\]

e.g.

\[設m=6,s_{min}=0.2,s_{max}=0.9 \]

\[\left\{\begin{align} & s_1=0.2+\frac {0.7}{5}(1-1)=0.2\ ,\\ & w_1^a=0.2*\sqrt{\{1,2,3,\frac{1}{2},\frac{1}{3}\}}= 0.2*\{1,1.41,1.73,0.71,0.58\} \ ,\\ & h_1^a=0.2/\sqrt{\{1,2,3,\frac{1}{2},\frac{1}{3}\}} \ ,\\ & s'_1=\sqrt{s_1s_2}\approx 0.2608 \end{align}\right.\]

\[s_2=0.2+\frac {0.7}{5}(2-1)=0.34 \\ s_3=0.2+\frac {0.7}{5}(3-1)=0.48 \\ s_4=0.2+\frac {0.7}{5}(4-1)=0.62 \\ s_5=0.2+\frac {0.7}{5}(5-1)=0.76 \\ s_6=0.2+\frac {0.7}{5}(6-1)=0.9$$, $$\left\{ \begin{array}{l} \left. \begin{array}{l} s_1=0.2+\frac {0.9-0.2}{6-1}(1-1)=0.2 ,\\ w_1^a=0.2*\sqrt{\{1,2,3,\frac{1}{2},\frac{1}{3}\}},\\ h_1^a=0.2/\sqrt{\{1,2,3,\frac{1}{2},\frac{1}{3}\}},\\ s'_1=\sqrt{s_1s_2}\approx 0.2608\\ \end{array} \right\} {(w_1^a,h_1^a)=\{(0.2,0.2),(0.282,0.1418),(0.346,0.1156),\\\quad\quad\quad\quad\quad(0.142,0.2816),(0.116,0.3448),(0.2608,0.2608)\}} \\\\ \left. \begin{array}{l} s_2=0.2+0.14*(2-1)=0.34 ,\\ w_2^a=0.34*\{1,1.41,1.73,0.71,0.58\},\\ h_2^a=0.34/\{1,1.41,1.73,0.71,0.58\},\\ s'_2=\sqrt{s_2s_3}\approx 0.4040\\ \end{array} \right\} {(w_2^a,h_2^a)=\{(0.34,0.34),(0.4794,0.2411),(0.5882,0.1965),\\\quad\quad\quad\quad\quad(0.2414,0.4789),(0.1972,0.5862),(0.4040,0.4040)\}} \\\\ \left. \begin{array}{l} s_3=0.2+0.14*(3-1)=0.48 ,\\ w_3^a=0.62*\{1,1.41,1.73,0.71,0.58\},\\ h_3^a=0.62/\{1,1.41,1.73,0.71,0.58\},\\ s'_3=\sqrt{s_3s_4}\approx 0.5455\\ \end{array} \right\} {(w_3^a,h_3^a)=\{(0.48,0.48),(0.6768,0.3404),(0.8304,0.2775),\\\quad\quad\quad\quad\quad(0.3408,0.6760),(0.2784,0.8276),(0.5455,0.5455)\}} \\\\ \left. \begin{array}{l} s_4=0.2+0.14*(4-1)=0.62 ,\\ w_4^a=0.62*\{1,1.41,1.73,0.71,0.58\},\\ h_4^a=0.62/\{1,1.41,1.73,0.71,0.58\},\\ s'_4=\sqrt{s_1s_2}\approx 0.1632\\ \end{array} \right\} {(w_4^a,h_4^a)=\{(0.62,0.62),(0.8742,0.4397),(1.0726,0.3584),\\\quad\quad\quad\quad\quad(0.4402,0.8732),(0.3596,1.0690),(0.1632,0.1632)\}} \\\\ \left. \begin{array}{l} s_5=0.2+0.14*(5-1)=0.76 ,\\ w_5^a=0.9*\{1,1.41,1.73,0.71,0.58\},\\ h_5^a=0.9/\{1,1.41,1.73,0.71,0.58\},\\ s'_5=\sqrt{s_1s_2}\approx 0.8270\\ \end{array} \right\} {(w_5^a,h_5^a)=\{(0.76,0.76),(1.0716,0.5390),(1.3148,0.4393),\\\quad\quad\quad\quad\quad(0.5396,1.0704),(0.4408,1.3103),(0.827,0.827)\}} \\\\ \left. \begin{array}{l} s_6=0.2+0.14*(6-1)=0.9 ,\\ w_6^a=0.9*\{1,1.41,1.73,0.71,0.58\},\\ h_6^a=0.9/\{1,1.41,1.73,0.71,0.58\},\\ s'_6=\sqrt{s_6s_7}\approx 1.04\\ \end{array} \right\} {(w_6^a,h_6^a)=\{(0.9,0.9),(1.269,0.6382),(1.557,0.5202),\\\quad\quad\quad\quad\quad(0.639,1.2676),(0.522,1.5517),(1.04,1.04)\}} \\ \end{array} \right.\]

每一個 default box 的中心,設置為:\((i+0.5*|fk|,j+0.5*|fk|),其中|f_k|表示第k個正方形特征圖的大小,i,j\in[0,|f_k|)\)

  • 難樣本挖掘: 由於正負樣本不均衡,因此對default boxes以confidence loss由高到低排序,取最高的一些值,把將正負樣本控制在3:1的范圍。

  • 數據擴容:

    • 使用原始圖像
    • 采樣一個patch,與目標間最小的jaccard overlap為:0.1,0.3,0.5,0.7,0.9.
    • 隨機采樣一個patch.
      每個采樣的patch大小為原始圖像的[0.1,1],aspect ratio在\(\frac {1}{2}和2\)之間.
      當ground truth box的中心在patch中時,保留重疊部分.
      每個采樣的patch被resize到固定大小,並以0.5的概率隨機水平翻轉。

3 Experimental Results

Base network 實驗基於VGG16,z ILSVRC CLS-LOC上做了預訓練。把fc6和fc7改成了卷積層,並對fc6和fc7參數進行降采樣。把pool5的2x2-s2改為3x3-s1,並使用atrous算法填充“空洞”[1]

這樣做之后可以讓pool5的feature maps 保持較大的尺寸,這篇ECCV16論文也采用了同樣的策略使得feature maps 分辨率比傳統的更高,有利於小物體的檢測。
pool5這樣改變這之后,后面層的感受野將改變,因此也不能用原來網絡的參數進行finetune,為了解決這樣的矛盾,atrous算法提出。

圖(a)展示是傳統的過程,經過3x3-s2的pooling后,接一個3x3的conv,那么卷積層的一個神經元感受野是7 圖(b)是atrous過程,現在Pooling層是3x3-s1,后面的卷積層為了能夠使用原來的參數初始化必須使用帶孔的卷積,這里卷積層的一個神經元的感受野也是7。

3.1 PASCAL VOC2007

SSD總結-SSD_YOLO

PASCAL VOC 2007

如圖所示,
conv4_3,conv7(fc7),conv8_2,conv9_2,conv10_2,conv11_2這些層用來預測位置和置信度。

在conv4_3上設置default box尺度0.1。

新增的層都用Xavier初始化參數。

對於conv4_3,conv10_2,conv11_2,每個feature map的location上只關聯4個default box,(因為conv4_3的尺寸比較大,size為\(38\times 38\),放6個default box的話計算量會過大),去掉了aspect ratio為\(\frac {1} {3}和3\)的那倆。其他層都設置了6個default box。

文獻[2]中指出,conv4_3和其他層相比有着不同的feature scale

Figure 2: Features are in different scale. We show the features for a position from conv4 3, conv5 3, fc7 and pool6
when we concatenate them together.

我們使用ParseNet中的L2 Normalization將conv4_3 feature map中每個位置的feature歸一化到scale為20的大小,並在BP中學習這個scale。

開始的40K次迭代,learning rate為\(10^{-3}\),之后減少到\(10^{-4}\),再迭代20K次。

3.2 Model analysis

定量分析:
SSD總結-model_analysis

  • Data augmentation提升明顯
    Fast R-CNN 與 Faster R-CNN 使用原始圖像,以及 0.5 的概率對原始圖像進行水平翻轉(horizontal flip),進行訓練。如上面寫的,本文還使用了額外的 sampling 策略,YOLO 中還使用了亮度扭曲(photometric distortions),但是本文中沒有使用。
    做了數據增廣,將 mAP 從 65.4% 提升到了 72.1%,提升了 6.7%。
    我們還不清楚,本文的 sampling 策略會對 Fast R-CNN、Faster R-CNN 有多少好處。但是估計不會很多,因為 Fast R-CNN、Faster R-CNN 使用了feature pooling,這比人為的對數據進行增廣擴充,還要更 robust。

  • 使用更多的 feature maps 對結果提升更大
    類似於 FCN,使用含圖像信息更多的低 layer 來提升圖像分割效果。我們也使用了 lower layer feature maps 來進行 predict bounding boxes。
    我們比較了,當 SSD 不使用 conv4_3 來 predict boxes 的結果。當不使用 conv4_3,mAP 下降到了 68.1%。
    可以看見,低層的 feature map 蘊含更多的信息,對於圖像分割、物體檢測性能提升幫助很大的。

  • defualt boxes越多,結果越好
    如 Table 2 所示,SSD 中我們默認使用 6 個 default boxes(除了 conv4_3 因為大小問題使用了 3 個 default boxes)。如果將 aspect ratios 為 13、3 的 boxes 移除,performance 下降了 0.9%。如果再進一步的,將 12、2 的 default boxes 移除,那么 performance 下降了近 2%。

  • Atrous 使得SSD又好又快
    如前面所描述,我們根據 ICLR 2015, DeepLab-LargeFOV,使用結合 atrous algorithm 的 VGG16 版本。
    如果我們使用原始的 VGG16 版本,即保留 pool5 的參數為:2×2−s2,且不從 FC6,FC7 上采集 parameters,同時添加 conv5_3 來做 prediction,結果反而會下降 0.7%。同時最關鍵的,速度慢了 50%

PASCAL VOC 2012

SSD總結-PASCALVOC2012

MS COCO

為了進一步的驗證本文的 SSD 模型,我們將 SSD300、SSD500 在 MS COCO 數據集上進行訓練檢測。

因為 COCO 數據集中的檢測目標更小,我們在所有的 layers 上,使用更小的 default boxes。

這里,還跟 ION 檢測方法 進行了比較。

總的結果如下:
SSD總結-MSCOCO

Inference time

本文的方法一開始會生成大量的 bounding boxes,所以有必要用 Non-maximum suppression(NMS)來去除大量重復的 boxes。

通過設置 confidence 的閾值為 0.01,我們可以過濾掉大多數的 boxes。

之后,我們再用 Thrust CUDA library 進行排序,用 GPU 版本的實現來計算剩下的 boxes 兩兩之間的 overlap。然后,進行 NMS,每一張圖像保留 top 200 detections。這一步 SSD300 在 VOC 20 類的每張圖像上,需要耗時 2.2 msec。

下面是在 PASCAL VOC 2007 test 上的速度統計:
SSD總結-PASCALVOC2007


  1. SSD 里的 atrous. CSDN ↩︎

  2. JMLR 2010, Understanding the difficulty of training deep feedforward neural networks. ↩︎


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM