1 介紹

當前目標檢測系統都是下列方法的變體:假定邊界框(hypothesizebounding boxes),對每個方框進行重取樣畫素或者特徵,應用一個高質量的分類器。這種流程在檢測基準(detectionbenchmarks)上盛行,因為選擇性搜尋在PASCAL VOC,COCO和ILSVRC檢測上的效果最好,這些都是基於Faster R-CNN的。這些方法在embedded系統中是高密集型的計算,甚至要有高階硬體支援,對於實時應用來說太慢了。這些方法的常用檢測速度是每幀多少秒(seconds per frame,SPF),甚至是最快的檢測器,faster R-CNN,也只能達到每秒7幀(frames per second,FPS).很多人在改進檢測速度上做了很多嘗試,但是增加速度大都以損失檢測精度為代價。

這篇文章首先提出了基於目標檢測器的網路(object detector),它不用為邊界框假設進行重取樣畫素或特徵,但是精度同樣和其他方法一樣。這個方法提高了高精度檢測的速度,在VOC2007測試集上為59FPS,mAP為74.3%,而faster R-CNN是7FPS,mAP是73.2%,YOLO為45FPS,mAP為63.4%。這些基本的改進是來自消除邊界框提議和與之相關的畫素或特徵重取樣階段。我們改進的地方是使用一個小卷積濾波器(small convolutional filter)去預測目標分類和邊界框的位置的偏移,使用分開的濾波器去處理不同縱橫比的檢測(aspect ratio detections),把這些濾波器應用到後面網路階段的特徵圖中(feature maps),這是為了把檢測器用來檢測不同比例的圖片。修改這些以後,尤其是在使用不同層預測不同比例的刻度,我們可以得到一個在相對低解析度輸入下的高精度輸出,還增加了檢測的速度。這些貢獻可能單個看的話貢獻很小,但是我們注意到實時目標檢測的精度從YOLO的 64.3%的mAP到SSD的74.3%mAP.這是相對於殘差網路的一個在精度上的較大的改進。另外,還大大提高了高質量檢測的速度,這可以拓寬應用的環境,在這個環境中計算機視覺是有用的。


貢獻

1.     我們提出了SSD,一個多分類單杆檢測器(single-shot detector),比現在的單杆檢測器(YOLO)更快,和那些較慢技術精度一樣,並且超過了區域提議(region proposals)和池化(pooling)的方法,包括faster R-CNN.

2.     SSD的核心部分是預測分類得分和一個固定集合的預設邊界框的框偏移,這些是通過使用卷積濾波器到特徵圖上實現的。

3.     為了獲得高檢測精度,我們會從不同比例的特徵圖來產生不用比例的預測,通過縱橫比來分開預測。

4.     這些設計特徵可以進行端到端訓練,精度還很高,在輸入圖片解析度很低的情況下精度也能保持高精度。改進了速度和進度折中均衡的局面。

5.     實驗包含模型之間速度和精度的分析,用了不同輸入大小,資料集為PASCALVOC,COCO和ILSVRC,比較了最近的最新的方法。


2 The Single Shot Detector (SSD)

2.1模型

SSD基於前饋卷積網路,針對那些方框裡的目標類別例項,產生一個固定大小的邊界框的集合和分數,緊接著一個非最大抑制(non-maximum suppression)步驟去產生最後的檢測。早期的網路是一個標準的結構,用於對高質量圖片進行分類,捨棄了最後的分類層,我們叫做基網路。我們然後對網路增加放大結構去產生有下面主要特徵的檢測。

1.     多比例特徵圖檢測(Multi-scale featuremaps for detection),我們在基網路最後增增加了卷積特徵層。這些層按照大小減少的次序連線,能夠進行多尺度預測。

2.     卷積檢測預測器(Convolutionalpredictors for detection)每個新增的特徵層或者現存的來自基網路的特徵層,在使用一個卷積濾波器(convolutional filters)集合的情況下,可以產生一個固定集合的檢測預測(detection predictions)。特徵層的大小為m*n,有p個channels.預測引數的可能的基本單元是一個3*3的小核(small kernel),它要麼產生一個類別的分數,要麼一個相對預設方框座標的形狀偏移(shape offset)。每一個m*n的運用核的位置中,會產生一個輸出值。邊界框的偏移輸出值是相對於預設的位置的,它使用一箇中間全連線層,而不是一個卷積濾波器。


.

上圖是兩個single shot detection模型的比較:SSD和YOLO.我們的SSD模型在基網路的末端增加了一些特徵層,用來預測預設不同比例方框的偏移(offsets),縱橫比和與之相關的置信度(confidences)。SSD的輸入是300*300,在VOC2007測試集上,其效能超過了448*448輸入大小的YOLO。輸入變小也提高了網路的速度。

1.     預設方框和縱橫比(Default boxes andaspect ratios),我們設定了預設邊界框的集合和每個特徵圖單元(cell)關聯,這是對於網路頂層的多特徵圖來說的。預設的方框(default boxes)以卷積的方式覆蓋了卷積圖,因此每一個方框對應的cell是固定的,在每個特徵對映單元上,我們預測相對預設方框形狀的偏移,和每一類的分數,這表明每一個方框中一個類的出現。特別的,對於給定位置的每一個方框(for each box out of k at a given location,根據我的理解翻譯,智慧做參考,英文原文已經貼出),我們計算c類別的分數,和4個相對於原來預設方框形狀的偏移。結果總共有(c+4)個濾波器應用到卷積圖的每個位置,產生了來自m*n的卷積圖的(c+4)kmn個輸出。預設方框的解釋如下,他和Faster R-CNN的anchor方框相似,但是,我們把他們應用到不同解析度的特徵圖上的時候,由於我們在一些特徵圖上面有不同的預設方框形狀,這使得我們能高效的計算出離散化可能輸出方框形狀的空間。



這是SSD框架,(a)SSD在訓練期間僅需要一張輸入圖片和每個目標的ground truth的方框。在卷積操作中,我們評估評估一個預設方框的集合,這些方框在每一個位置又不同的縱橫比,在一些特徵圖中有不同的比例(如(b)中的8*8和4*4),對每一個預設的方框,我們預測形狀的偏移和所有物體分類的置信度((c1,c2,…,cp ))。在訓練時間,我們首先把預設的方框和groundtruth的方框對應上。例如,我們已經把兩個預設方框分別對應到貓和狗了,他們當成正量,剩下的當成負量。模型損失是一個位置權重損失之和(Smooth L1)置信損失(softmax).


2.2 訓練


訓練SSD和訓練一個典型的使用區域提議(region proposals)檢測器的主要區別,ground truth資訊在固定檢測器輸出的情況下需要指定到特定的輸出。SSD的某個版本也需要在YOLO上訓練,和Faster R-CNN以及multibox的區域提議階段,一旦這些指派決定了,損失函式和反向傳播就可以端到端,訓練包括選擇預設盒子的集合,檢測比例,Hard negative mining(對於目標檢測問題就是影象中不存在目標的樣本集合,具體解釋見下面的參考文獻),資料增強(data augmentation)策略等。

匹配策略

訓練期間,我們需要決定那個預設盒子匹配一個ground truth,並且網路也相應的進行訓練,對於每個我們從預設盒子中選擇的ground truth盒子,在位置,縱橫比,和比例上不同,我們用bestjaccard overlap 方法匹配ground truth的盒子和預設盒子。不像MultiBox, jaccard overlap的值高於一個閾值(0.5),我們就將二者匹配,這簡化了學習問題,使得網路可以對多覆蓋(multiple overlapping)預設盒子預測得到高分,而不是選出最大覆蓋的那個覆蓋。

訓練目標

SSD訓練目標是有MultiBox目標推匯出來的,但是我們把它拓展成可以處理多目標分類問題,令x^pi,j={1,0}為一個指示器,代表匹配第i個預設盒子和第j個ground truth盒子的分類p。在以上匹配策略中,我們有Σix^pi,j>=1,整體的目標函式損失就是位置損失(localization loss,loc)和置信度損失(confidence loss,conf)的權重和:

其中N是匹配預設盒子的數量,如果N=0,我們設定損失為0.位置損失是一個Smooth L1損失,代表預測的box(l)和ground truth的box(g)引數。和Faster R-CNN相似。我們對下面引數盡心迴歸補償,中心為(cx, cy)的預設包圍盒子(d),以及預設包圍盒子的寬(w)和高(h).



置信損失是softmax多分類置信度(c)損失,



權重項α在交叉驗證的時候設定為1。

為預設盒子選擇不同比例和縱橫比

為了解決不同目標的比例,一些方法是把圖片處理成不同的大小,然後結果不同大小圖片的結果。可是,通過利用一個網路的不同層的特徵圖,我們可以模仿達到相同的效果,所有比例的目標還可以共享引數。前面的研究表明使用底層的特徵圖可以提升語義分割的質量,因為低層捕獲了輸入目標更多的細節資訊,這些資訊可以幫助平滑語義結果。受這些方法的啟發,我們使用特徵圖的高層和低層特徵,最開始的樣例特徵圖)(8*8,4*4)被應用到了這個框架,我們在一個小的計算負載下可以使用得更多。

特徵圖一個網路不通等級下有不同的接受域大小(receptive field sizes),幸運的是,在SSD框架之內,預設的盒子沒必要匹配每層的真正接受域(receptive fields),我們設計了預設盒子的tiling(查了一下中文意思,覺得翻譯不過來,就直接上中文意思了:蓋瓦; 貼瓷磚; (總稱)瓦; 瓦工;),這使得特定特徵圖學習對特定比例的目標進行響應。假設我們使用m特徵圖進行預測,每一個特徵圖的預設盒子的比例計算如下:


Smin是0.2,Smax是0.9,意思是最小層的比例是0.2,最高層的比例是0.9.所有層都在這兩值之間,以固定間隔分隔開。我們對預設盒子加上不同的縱橫比,即ar屬於{1,2,3,1/2,1/3}.我們可以計算每個預設盒子(default box)寬和高:


對於縱橫比為1,我們也加了一個預設盒子,比例(scale)為


每個特徵圖位置產生6個預設盒子,我們把預設盒子的的中心為:



|fk|是第k個正方形特徵圖的大小,I,j屬於[0,fk)。

通過結合不同比例和縱橫比預測所有的預設盒子,我們有一個離散的預測集合,覆蓋不同輸入目標大小和形狀。例如,上面的那幅圖,狗在4*4得特徵圖中匹配了一個預設盒子,但是沒有匹配到8*8的特徵盒子,這是因為這些盒子有不同的比例,不匹配夠的盒子,因此被認為是訓練期間的負樣本。

Hard negative mining

匹配完之後,大多數的預設盒子是負值,特別是當預設盒子的數量很大的時候,這導致了正負訓練樣例不均衡的的情況。因此我們把訓練樣本進行分類,我們使用對每個預設盒子有最高置信損失的的負樣本,取出排在前面的負樣本,使得負正樣本的比率最多3:1.使用了之後,網路優化更快和訓練更穩定了。

資料增強(Data augmentation

為了識模型對不同輸入目標大小,形狀,表現得更加健壯,每個訓練樣例隨機的按照下面進行取樣:

l  使用完整的原圖片輸入

l  取樣一個小塊,使得目標的最小jaccard overlap是0.1,0.3,0.5,0.7,0.9.

l  隨機取樣一個小塊

每個樣本塊的大小是原圖片大小的[0.1,1],縱橫比在1/2到2之間。如果ground truth的中心在樣本塊裡,我們保留那個重疊部分的ground truth盒子,在完成前面的取樣之後,我們把樣本塊重新調整成固定大小,以0.5的概率進行翻轉。

3實驗結果

Base network

我們的實驗都是基於VGG16的,VGG16在ILSVRC CLS-LOC資料集上進行了預訓練。和DeepLab-LargeFOV相似,我們把fc6和fc7轉換成了卷積層,從fc6和fc7進行下采樣,把pool5從2*2-s2變為3*3-s1.我們使用`a trous algorithm去填充“holes”。我們移除了所有的dropout層和fc8層。我們fine-tune模型,學習率為0.001,momentum為0.9,權重衰減為0.0005,batch size為32。衰減策略的學習率在每個資料集上稍有不同,稍後我們會詳細描述,其caffe模型的訓練和測試程式碼開源地址為:https://github.com/weiliu89/caffe/tree/ssd

3.1  PASCAL VOC2007

在這個資料集上,我們用VOCtest(4592)來和fast R-CNN和FasterR-CNN做對比。所有的方法都是用的同一個預訓練的vgg16網路進行fine tune的。


上圖顯示的是SSD300模型的結構,我們使用conv4_3, conv7(fc7), conv(8_2), conv(9_2), conv(10_2)和conv(11_2)來預測位置和置信度,設定conv4上的預設框的比例為0.1,我們對新加進來的卷積層使用“xavier”方法進行初始化。對於conv4_3,conv 10_2和conv11_2,我們在每個特徵圖位置上只關聯4個預設框,省略的縱橫比為1/3和3.對於所有其它的層,我們放置了6個預設框,conv4_3有一個不同於其它層的特徵尺度,我們使用L規範技術,把特徵圖上每個位置的特徵規範到20的比例,然後在反向傳播期間來學習這個比例。我們使用0.001的學習率來做了40 000次迭代,只有用了0.0001和0.00001的學習率做了10000次迭代。,


如上圖,當在VOCtrainval上訓練的時候,低解析度SSD300模型比FastR-CNN更準確,當用SSD在512*512輸入的圖片上的時候,更精確了,比Faster R-CNN的mAP多了1.7%,如果我們用更多的資料(例如,07+12)訓練,SSD300比Faster R-CNN精度高了1.1%,比SSD512的精度高了3.6%。如果我們用COCO trainval35k資料集進行訓練,在07+12資料集上做fine-tuning,模型用得是SSD512,我們得到了最佳的結果:81.6%.

       為了更細節的理解我們的兩個SSD模型的效能,我們使用了分析工具。


上圖顯示的是SSD可以高質量的檢測不同目標的類別(大白色區域),它的置信度檢測的大多數是正確的,recall是85%-90%,比“weak”(0.1 jaccard overlap)標準更高一點。和R-CNN相比,SSD有著很少的定位錯誤,意味著SSD在定位上更好,因為它直接學習物體形狀的迴歸,並且分類目標類別,而不是使用兩個分離的步驟。可是,SSD對相似的目標類別(特別是對動物)有著困惑,部分是因為我們對多個類別共享位置。


圖4顯示的是SSD對邊界框的大小非常敏感,換句話說,它在小目標上比大目標的表現更差。這不驚訝,因為那些小目標可能在頂層沒有任何資訊。增加輸入的大小(例如,從300*300到500*500)可以提升檢測小目標的效能,但是仍然有很多的空間去改進。積極的一面是,我們很明顯可以看到SSD在大目標上表現很好,並且對不同比例的目標是非常魯棒的,因為我們對每個特徵圖位置使用不同比例的預設框。

3.2模型分析

為了更好的理解SSD,我們做了控制實驗,檢測每個部分對效能的影響。對於所有的實驗,我們使用相同的設定,輸入的大小是300*300,當然除了對設定或者元件的特別改變的除外。

資料增強是關鍵

Fast 和Faster R-CNN使用原始圖片,並且水平翻轉來訓練。我們使用了一個拓展的取樣策略,和YOLO相似。


上表結果表明,用了這個取樣策略mAP提升了8.8%。我們不知道我們的取樣策略會對Fast和Faster R-CNN產生多大的影響,但是他們可能受益很小,因為它們在分類期間做了一個特徵池化操作,這對於設計的目標翻譯(object translation)是相對魯棒的。

預設框的形狀越多越好

我們對每個特徵圖用了6個預設框,如果我們移除了1/3和3比例的方框,效能下降了0.6%。通過進一步移除比例為1/2和2的方框,效能又一次下降了2.1%,使用多樣的預設框的形狀會使得網路很容易做預測方框的任務。

Atrous 更快

我們使用的是VGG16子取樣的atrous版本,跟DeepLab-LargeFOV差不多。如果我們使用完全的VGG16, 保留pool5的2*2-s2,不從fc6和fc7中下采樣引數,增加conv5_3用於預測,結果是一樣的,而速度滿了20%。

不同解析度的的多輸出層更好

SSD的主要貢獻是在不同的輸出層上使用不同比例的預設框,為了衡量其優點,我們進一步移除了層數並且比較結果。為了公平比較,每次我們移除一層,我們調整預設框,進行平鋪,使得方框的總數和原來的方框數目(8732)一樣。我們通過在剩下的層上堆疊更多比例的方框,如果有必要,還會調整方框的比例,我們對每個設定沒有詳盡的進行平鋪。


上圖顯示的是隻有少數幾層的時候精度下降得很快,從74.3%下降到62.4%。當在一層上堆疊不同比例的的方框時,許多方框在圖片邊界,需要小心的處理。我們使用了Faster R-CNN的策略,忽略了邊界上的方框。我們觀察到了一些有趣的趨勢,例如,如果我們使用特別粗糙的特徵圖(例如,conv11_2(1*1)或者conv10_2(3*3)),它會很明顯影響到效能,理由可能是我們沒有足夠的大方框來覆蓋剪枝後的大目標。當我們使用更精細的分辨圖時,效能再次提升了,因為即使在修剪足夠數量的大方框以後,也會保留。如果我們僅使用conv7做預測,效能表現更差,加強資訊,在不同的層上傳播不同比例的方框是至關重要的。此外還有,我們的預測不依賴於ROI pooling,因此就沒有在低解析度特徵圖上的collapsing bins問題,SSD結構結合來自不同解析度的特徵圖的預測,可以取得比Faster R-CNN更好的效果,並且使用了低解析度的輸入。

3.3PASCAL VOC2012

我們使用了相同的設定作為那些用於我們的基本的VOC2007的實驗,此外,我們使用了VOC2012 trainval和VOC2007 trainval和test(21503張圖片)用於訓練,在VOC2012 test(10991張圖片)上進行測試。我們用學習率0.001迭代了60 000次,隨後用0.0001的學習率迭代了20 000次,


上表顯示的是我們的SSD300和SSD512的模型,我們觀察到了這和VOC2007 test上的效能表現趨勢一樣,我們的SSD300與Fast/Faster R-CNN相比提升了精度,通過增加訓練和測試圖片大小到512*512,相比Faster R-CNN,精度提升了4.5%,和YOLO相比,SSD精度高多了,這可能是由於是使用了多種特徵圖的卷積預設框,訓練期間的對應的策略。當我們fine-tune從COCO上訓練的模型,我們的SSD 512取得了80%的mAP,比Faster R-CNN高了4.1%.

3.4COCO

為了進一步驗證SSD框架,我們在COCO資料集上訓練了我們的SSD300和SSD512結構,因為SSD上的目標比PASCAL VOC上的小,我們對所有的層使用了更小的預設框,我們用了2.2部分的策略,但是現在我們的最小預設框的比例是0.15,而不是0.2. conv4_3上的預設框的比例是0.07(例如對於300*300的圖片,畫素為21)。

       我們使用trainval35k來進行訓練,我們開始用學習率為0.001訓練160 000次,繼續用0.0001的學習率訓練40 000次,最後用0.000 01的學習率迭代40 000次。


表5顯示的是test-dev2015的結果,和我們在PASCAL VOC dataset上觀察到的一樣,SSD300在[email protected][email protected][0.5:0.95]上比Fast R-CNN更好,SSD300在[email protected]和Faster R-CNN以及ION相似,但是在[email protected]上表現比較差。通過把圖片的大小增加到512*512,SSD512比Faster R-CNN更好,有趣的是,我們觀察到SSD512在[email protected]上比faster R-CNN高5.3%, 而在[email protected]上只高了1.2%。我們也觀察到它對大目標有更好的AP(4.8%)和AR(4.6%),但是對小目標的改進很小,AP(1.3%),AR(2.0%)。和ION相比,對於大目標和小目標在AR上的提升是更相似的(5.4% vs 3.9%)。我們推測Faster R-CNN比SSD在小目標上跟強,因為它有兩個步驟的方框改良,在RPN部分和Fast R-CNN 兩部分。


圖5顯示的是用SSD512在COCO-dev上的檢測樣例.

3.5Preliminary ILSVRC results

我們把相同的用於COCO的網路結構應用到ILSVRC DET dataset上,我們訓練了一個SSD300的模型,資料集為ILSVRC2014 DET train和val1.我們首先用學習率為0.001來迭代320 000次,繼續以學習率0.000 1來迭代80 000次,最後以學習率0.000 01來迭代40 000次。我們在val2上得到了43.4 mAP。再次,它驗證了SSD是一個有著高質量實時檢測的一般框架。

3.6Data Augmentation for Small Object Accuracy

在沒有像Faster R-CNN的follow-up的resampling步驟,對於小目標的分類任務,SSD相對比較艱難,資料增強策略對效能的提升很大,特別是對小資料集,例如PASCALVOC,通過策略產生的隨機分割可以被認為是一種放大操作,可以產生更大的訓練樣例,為了實現縮小操作,產生更多小的訓練樣本,在做隨機分割操作之前,我們開始隨機的把一幅圖片放置在16x的原圖大小的的畫布上,用均值來填充。通過引入了這些資料放大的技巧,我們有更多的訓練圖片,我們得迭代兩倍的次數,我們得到了在多種資料集上的2%-3%mAP的增加,如下表所示。



上圖顯示新的放大技巧可以提升對小目標的精度,結果強調了資料增強策略對最終模型精度的重要性。

  一個可以改進SSD的方式是設計一個更好的預設框的平鋪,使得位置和比例可以更好的和每個位置和特徵圖的接受域對齊,我們把這個作為future work。

3.7Inference time

考慮到從我們的方法中產生大量的方框,運用non-maximum suppression在推測階段是必須的,通過使用置信度閾值為0.01,我們可以過濾掉大多數方框。我們之後應用nms,每個類別的jaccard overlap為0.45,保留每張圖片的前200個檢測。對於SSD300和20VOC類別,這個步驟對每張圖片會花費1.7秒,這接近所有新加的層的總時間(2.4秒),我們用batch size為8, 使用TitanX,cuDNN v4,Intel Xeon [email protected]


上表顯示SSD,YOLO,Faster R-CNN的比較,SSD300和SSD512方法在精度和時間上超過了Faster R-CNN,即使YOLO可以執行155fps,但是精度下降了幾乎22%mAP。據我們所知,SSD是第一個取得mAP超過70%的實時方法。注意到80%的前向時間都是花在了基網路。因此,使用一個更快的基網路可以進一步提升速度,可能會使得SSD512也達到實時。

單詞

Pipeline  管道; 輸油管道; 渠道,傳遞途徑;

Scales  刻度( scale的名詞複數 ); 水垢; 比例(尺); 魚鱗;