1. 程式人生 > >《SSD: Single Shot MultiBox Detector》論文筆記

《SSD: Single Shot MultiBox Detector》論文筆記

1. 論文思想

SSD從網路中直接預測目標的類別與不同長寬比例的邊界框。在這篇論文中提出的方法(SSD)並沒有為邊界框假設重取樣畫素或是特徵,但是卻達到了使用這種方案檢測模型的精度。在VOC 2007的測試集上跑到了mAP74.3% 59 FPS(在後來改進資料增廣的方法,在VOC 2007資料集上實現了解析度為 300 300 300*300

的圖片上實現了77.2% mAP,在 512 512 512*512 的輸入圖片上達到了79.8% mAP。),都是快於Faster RCNN與YOLO的。速度提升的關鍵來自於取消了邊界框的預測以及後續畫素與特徵的重取樣部分。雖然這篇論文並不是頭一個使用這樣方案的,但是卻取得了極佳的效能提升,這是源自於如下三點:
(1)使用小的卷積核去預測目標的類別與邊界框的位置偏移
(2)使用分離的預測器去預測不同長寬比目標
(3)將上面所說的兩點在網路的不同feature map上使用獲得多尺度的檢測效果。
在這裡插入圖片描述

在上圖(a)中首先框定兩個GT框,之後SDD網路分別在解析度為 8 8 8*8 4 4
4*4
的不同尺度feature map上預測不同長寬比例的預設框,對於每個預設框預測其座標偏移與分類概率。在訓練階段,首先匹配預測框與GT框,要是匹配上了其它的預測框就會被標註為負類。最後的損失函式是分類誤差與定位誤差的加權和。

2. SSD模型

SSD方法基於前饋卷積網路,該網路生成一個固定大小的邊界框集合,併為這些框中是否存在物件類例項生成概率,然後執行非最大抑制步驟以生成最終檢測結果。SDD模型的前部分是分類模型的網路作為其基礎網路,之後添加了一些額外的網路結構使得檢測具有如下的特徵:
(1)使用多尺度檢測:在基礎網路中feature map是逐漸減小的,這就使得檢測模型可以在多尺度上進行檢測,不同於YOLO是在最後的feature map上做預測。
(2)用於檢測的卷積預測器:每個新增的特徵層(或來自基礎網路的現有特徵層)可以使用一組卷積濾波器生成一組固定的檢測預測集合,這些卷積濾波器位於SSD網路的頂端。對於 m n p m*n*p 的feature map輸入(p:通道數)使用 3 3 p 3*3*p 的小卷積核去預測目標分類與預測框與相對default box的座標偏移。
(3)預設框(default boxes)與不同長寬比:在網路中不同解析度的feature map上使用類似anchor box的機制獲得default box。對於一個 m n m*n 的輸入feature map可以產生 ( c + 4 ) k m n (c+4)k*m*n 的輸出, c c 代表分類概率, k k 代表該位置給出的default box的數量。
在這裡插入圖片描述

3. 模型訓練

訓練SSD和訓練使用region proposal的典型檢測器的關鍵區別在於,在固定的檢測器輸出集中,需要將GT資訊分配給對應的輸出。同樣的這種機制也被用在了YOLO上,實現了端到端的網路訓練。在訓練還涉及到default box與比例的選擇、資料增廣與hard negative mining。

3.1 匹配策略

匹配策略指的是尋找default box與GT之間的最佳對應關係,default box是源自於不同位置、長寬比、尺度的選擇。首先將每個ground truth框與預設框進行匹配,使用的是jaccard overlap(就是兩個集合的交集除以兩個集合的並集)作為距離度量,只要重疊度大於了0.5就認為其匹配,而不是選取最大的那一個。這簡化了學習問題,允許網路預測多個與GT重疊較高的預設框,而不是隻選擇重疊最大的那個。

3.2 訓練的目標函式

SSD的目標函式源自於MultiBox的目標函式,SSD在此基礎上增加了對於多分類的支援。這裡定義 x i j p x_{ij}^{p} ,是代表第 i i 個default box與第 j j 個GT框對應,並且被分類為 p p ,其取值規則為:若匹配上值為1,否則為0。因而,基於上面的匹配策略可以得到 i x i j p 1 \sum_{i}x_{ij}^{p} \geq 1 。因而整個損失函式就可以使用定位誤差與分類誤差加權和的形式得到:
L ( x , c , l , g ) = 1 N ( L c o n f ( x , c ) + α L l o c ( x , l , g ) ) L(x,c,l,g)=\frac{1}{N}(L_{conf}(x,c)+\alpha L_{loc}(x,l,g))
其中, N N 是匹配到的box的數量,如果 N = 0 N=0 ,定義loss為0;定位損失使用Smooth L1計算預測框 l l 與GT框 g g 計算得到的;重量項α通過交叉驗證設定為1;與Faster RCNN類似的,這裡使用損失函式去迴歸相對default box ( d ) (d) 的中心 ( c x , c y ) (cx,cy) 偏移與長寬 w , h w, h 。因而,定位損失函式就可以被描述為:
在這裡插入圖片描述
對於分類的誤差使用softmax loss,則可以被描述為:
在這裡插入圖片描述

3.3 default box的尺度與長寬比

對於不同尺度的目標的檢測任務,可以在同一個網路中使用不同的feature map做檢測實現,不用分別在不同的尺度做檢測,再將其合在一起。之前的在FCN與U-Net中也是用了低層次的卷積資訊,來增加網路的效能,這裡也是同樣的道理。在本文的第一張圖片裡面也對其做了示意

已知網路中不同層的特徵對映具有不同的(經驗的)感受野大小。幸運的是,在SSD框架內,預設邊界框不需要對應於每層的實際感受野。我們設計平鋪預設邊界框,以便特定的特徵對映學習響應目標的特定尺度。假設我們要使用 m m 個特徵對映進行預測。每個特徵對映預設邊界框的尺度計算如下:
s k = s min + s max s min m 1 ( k 1 ) , k [ 1 , m ] s_k = s_\text{min} + \frac{s_\text{max} - s_\text{min}}{m - 1} (k - 1),\quad k\in [1, m]
其中 s min s_\text{min} 為0.2, s max s_\text{max} 為0.9,意味著最低層具有0.2的尺度,最高層具有0.9的尺度,並且在它們之間的所有層是規則間隔的。我們為預設邊界框新增不同的長寬比,並將它們表示為 a r 1 , 2 , 3 , 1 2 , 1 3 a_r \in {1, 2, 3, \frac{1}{2}, \frac{1}{3}} 。我們可以計算每個邊界框的寬度( w k a = s k a r w_k^a = s_k\sqrt{a_r} )和高度( h k a = s k / a r h_k^a = s_k / \sqrt{a_r} )。對於長寬比為1,我們還添加了一個預設邊界框,其尺度為 s k = s k s k + 1 s’_k = \sqrt{s_k s_{k+1}} ,在每個特徵對映位置得到6個預設邊界框。我們將每個預設邊界框的中心設定為 ( i + 0.5 f k , j + 0.5 f k ) (\frac{i+0.5}{|f_k|}, \frac{j+0.5}{|f_k|})