論文標題:SSD: Single Shot MultiBox Detector
論文作者:Wei Liu, Dragomir Anguelov, Dumitru Erhan, Christian Szegedy, Scott Reed, Cheng-Yang Fu,Alexander C. Berg
論文地址:https://arxiv.org/abs/1512.02325
SSD 的GitHub地址:https://github.com/balancap/SSD-Tensorflow
參考的SSD翻譯部落格:http://noahsnail.com/2017/12/11/2017-12-11-Single%20Shot%20MultiBox%20Detector%E8%AE%BA%E6%96%87%E7%BF%BB%E8%AF%91%E2%80%94%E2%80%94%E4%B8%AD%E6%96%87%E7%89%88/
宣告:小編翻譯論文僅為學習,如有侵權請聯絡小編刪除博文,謝謝!
小編是一個機器學習初學者,打算認真研究論文,但是英文水平有限,所以論文翻譯中用到了Google,並自己逐句檢查過,但還是會有顯得晦澀的地方,如有語法/專業名詞翻譯錯誤,還請見諒,並歡迎及時指出。
如果需要小編其他論文翻譯,請移步小編的GitHub地址
傳送門:請點選我
如果點選有誤:https://github.com/LeBron-Jian/DeepLearningNote
目標檢測近些年來已經取得了很重要的程式,主流演算法主要分為兩個型別:
- (1)Two-stage 方法:如R-CNN系列演算法,其主要思想就是通過Selective Search或者CNN網路產生一系列稀疏矩陣的候選框,然後對這些候選框進行分類和迴歸,two-stage 的方法優勢就在於準確率度高
- (2)One-stage 方法:如YOLO,SSD,其主要思想就是均勻地在圖片上不同位置進行密集抽樣,抽樣時可以採用不同尺度和長寬比,然後利用CNN提取特徵後直接進行分類和迴歸,整個過程只需要一步,所以優勢就在於速度快,但是均勻密集取樣的一個重要缺點就是訓練比較困難,這主要是因為正樣本和負樣本極度不均衡,導致模型準確率比較低。
SSD 作為經典演算法,同樣是必不可少的學習重點,SSD演算法的英文全稱是Single Shot MultiBox Detector,Single Shot指明瞭SSD演算法屬於one-stage方法,MultiBox Detector指明瞭SSD是多框預測。對於Faster R-CNN,先通過CNN得到候選框,然後進行分類和迴歸,而YOLO和SSD可以一步完成檢測,相對YOLO,SSD採用CNN來直接進行檢測,而不是像YOLO那樣採用全連線層後做檢測。相對比YOLO而言,還有其他兩個特點的改變:
- 1,SSD提取了不同尺度的特徵圖來做檢測,大尺度特徵圖可以用來檢測小物體,而小特徵圖用來檢測大物體
- 2,SSD採用了不同尺度和長寬比的先驗框,在Faster R-CNN中稱為Anchors,YOLO演算法缺點是難以檢測小物體,而且定位不準,但是對於這幾點,SSD在一定程度上克服這些困難。
下面先看看其演算法流程:
- 1,輸入一幅圖片,讓圖片經過卷積神經網路(CNN)提取特徵,並生成 feature map
- 2,抽取其中六層的 feature map,然後在 feature map的每個點上生成 default box(各層的個數不同,但每個點都有)
- 3,將生成的所有 default box 都集合起來,全部丟到 NMS(極大值抑制)中,輸出篩選後的 default box,並輸出
摘要
我們提出了一種使用單個深度神經網路來檢測影像中的目標的方法。我們的方法命名為SSD,將邊界框的輸出空間離散化為不同長寬比的一組預設框並縮放每個特徵對映的位置。在預測時,網路會在每個預設框中為每個目標類別的出現生成分數,並對框進行調整以更好地匹配目標形狀。此外,網路還結合了不同解析度的多個特徵對映的預測,自然地處理各種尺度的目標。相對於需要目標提出的方法,SSD非常簡單,因為它完全消除了提出生成和隨後的畫素或特徵重新取樣階段,並將所有計算封裝到單個網路中。這使得SSD易於訓練和直接整合到需要檢測元件的系統中。PASCAL VOC,COCO和ILSVRC資料集上的實驗結果證實,SSD對於利用額外的目標提出步驟的方法具有競爭性的準確性,並且速度更快,同時為訓練和推斷提出了統一的框架。對於300*300的輸入,SSD在 VOC 2007測試中以 59fps 的速度在NVIDIA Titan X 上達到 74.3%的mAP,對於 512*512 的輸入,SSD達到了 76.9%的mAP,優於參照的最先進Faster R-CNN 模型。與其他單階段方法相比,即使輸入影像尺寸較小,SSD也具有更高的精度。程式碼獲取:https://github.com/weiliu89/caffe/tree/ssd。
關鍵字:實時目標檢測;卷積神經網路
1,引言
目前最先進的目標檢測系統是以下方法的變種:假設邊界框,每個框重取樣畫素或特徵,並應用到一個高質量的分類器。自從選擇性搜尋【1】通過在PASCAL VOC , COCO和ILSVRC上所有基於Faster R-CNN【2】的檢測都取得了當前領先的結果(儘管具有更深的特徵如【3】),這種流程在檢測基準資料上留下開來。儘管這些方法準確,但對於嵌入式系統而言,這些方法的計算量過大,即使是高精度檢測器,Faster R-CNN,僅以每秒7幀(FPS)的速度執行。已經有很多嘗試通過處理檢測流程中的每個階段來構建更快的檢測器(參見第4節中的相關工作),但是到目前為止,顯著提高的速度僅以顯著降低的檢測精度為代價。
本文提出了第一個基於深度網路的目標檢測器,它不對邊界框假設的畫素或特徵進行重取樣,並且與其他方法有一樣精確度。這對高精度檢測在速度上有顯著提高(在VOC 2007測試中,59fps和 74.3%的mAP,與Faster R-CNN 7FPS和 73.2%的mAP或者YOLO 45 FPS和63.4%的mAP相比)。速度的根本改進來自消除邊界框提出和隨後的畫素或特徵重取樣階段。我們並不是第一個這樣做的人(查詢【4.5】),但是通過增加一系列改進,我們設法比以前的嘗試顯著提高了準確性。我們的改進包括使用小型卷積濾波器應用於網路後期的多個特徵對映中,以執行多尺度檢測。通過這些修改——特別是使用多層進行不同尺度的預測——我們可以使用相對較低的解析度輸入實現高精度,進一步提高檢測速度。雖然這些貢獻可能單獨看起來很小,但是我們注意到由此產生的系統將PASCAL VOC實時檢測的準確度從 YOLO的 63.4%的mAP提高到我們的SSD的 74.3%的mAP。相比於最近備受矚目的殘差網路方面的工作【3】,在檢測精度上這是相對更大的提高。而且,顯著提高的高質量檢測速度可以擴大計算機視覺使用的設定範圍。
我們總結了一下我們的貢獻,如下:
- 我們引入了SSD,這是一種針對多個類別的單次檢測器,比先前的先進的單次檢測器(YOLO)更快,並且準確的多,事實上,與執行顯式區域提出和池化的更慢的技術具有相當的精度(包括 Faster R-CNN)
- SSD的核心是預測固定的一系列預設邊界框的類別分數和邊界框偏移,使用更小的卷積濾波器應用到特徵對映上
- 為了實現高檢測精度,我們根據不同尺度的特徵對映生成不同尺度的預測,並通過縱橫比明確分開預測
- 這些設計功能使得即使在低解析度輸入影像上也能實現簡單的端到端訓練的高精度,從而進一步提高速度與精度之間的權衡
- 實驗包括在PASCAL VOC,COCO和ILSVRC上評估具有不同輸入大小的模型和時間精度分析,並與最近的一系列最新方法進行比較
2,單次目標檢測器(SSD)
本節描述我們提出的SSD檢測框架(2.1節)和相關訓練方法(2.2 節)。之後,2.3節介紹了資料集特有的模型細節和實驗結果。
圖 1:SSD架構。(a)在訓練期間,SSD僅需要每個目標的輸入影像和真實邊界框。以卷積方式,我們評估具有不同尺度(例如(b)和(c)中的 8*8和 4*4)的幾個特徵對映中每個位置處不同長寬比的預設框的小集合(例如4個)。對於每個預設邊界框,我們預測所有目標類別(c1, c2, ....cp)的形狀偏移量和置信度。在訓練時,我們首先將這些預設邊界框與實際的邊界框進行匹配。例如,我們已經與貓匹配兩個預設邊界框,與狗匹配了一個,這被視為積極地,其餘的是消極的。模型損失是定位損失(例如,Smooth L1【16】和置信度損失(例如Softmax)之間的加權和)。
圖中(b, c)中的虛線框就是生成的 default box,總共怎麼算呢?就是 38*38*4, 19*19*6, 10*10*6, 5*5*6, 3*3*4, 1*1*4, 也就是說 5773, 2166, 600, 150, 36, 4,加起來一共有 8732 個 box,然後我們將這些 box 送入 NMS 模組中,獲得最終的檢測結果。
SSD和YOLO一樣都是採用一個CNN網路來進行檢測,但是SSD卻採用了多尺度的特徵圖,基本架構如上圖所示。
2.1 模型
SSD方法基於前饋卷積網路,該網路產生固定大小的邊界框集合,並對這些邊界框中存在的目標類別例項進行評分,然後進行非極大值抑制步驟來產生最終的檢測結果。早期的網路層基於用於高質量影像分類的標準架構(在任何分類層之前被截斷),我們將其稱為基礎網路。然後,我們將輔助結構新增到網路中以產生具有以下關鍵特徵的檢測:
用於檢測的多尺度特徵對映:我們將卷積特徵層新增到擷取的基礎網路的末端。這些層在尺度上逐漸減小,並允許在多個尺度上對檢測結果進行預測。用於預測檢測的卷積模型對於每個特徵層都是不同的(查閱Overfeat【4】和YOLO【5】在但尺度特徵對映上的操作)。
所謂多尺度檢測是採用大小不同的特徵圖,CNN網路一般前面的特徵圖比較大,後面逐漸採用stride=2的卷積或者pooling層來降低特徵圖大小。一般比較大的特徵圖和比較小的特徵圖都用來做檢測,這樣做的好處就是比較大的特徵圖用來檢測相對比較小的目標,而小的特徵圖負責用來檢測大的物體,如圖所示:(8*8的特徵圖可以劃分更多的單元,但是其每個單元的先驗框尺度比較小。)
採用卷積做檢測:每個新增的特徵層(或者任選的來自基礎網路的現有特徵層)可以使用一組卷積濾波器產生固定的檢測預測集合。這些在圖2的SSD架構的上部指出。對於具有 p 通道的大小為 m*n 的特徵層,潛在檢測的預測引數的基本元素是 3*3*p 的小核得到某個類別的分數,或者相對預設框座標的形狀偏移。在應用卷積核的 M*N 的每個位置,它會產生一個輸出值。邊界框偏移輸出值是相對每個特徵對映位置的相對預設框位置來度量的(查閱YOLO【5】的架構,該步驟使用中間全連線層而不是卷積濾波器)。
YOLO 最後採用的是全連線層,SSD直接採用卷積對不同的特徵圖進行提取檢測結果,對於形狀為 n*n*p 的特徵圖,只需要採用 3*3*p 這樣小的卷積核得到檢測值。
預設邊界框和長寬比:對於網路頂部的多個特徵對映,我們將一組預設邊界框與每個特徵對映單元相關聯。預設邊界框以卷積的方式平鋪特徵對映,以便每個邊界框相對於其對應單元的位置是固定的。在每個特徵對映單元中,我們預測單元中相對於預設邊界框形狀的偏移量,以及指出每個邊界框中存在的每個類別例項的類別分數。具體而言,對於給定位置處的 k 個邊界框中的每一個,我們計算 c 個類別分類和相對於原始預設邊界框形狀的 4個偏移量。這導致在特徵對映中的每個位置周圍應用總共(c+4) k 個濾波器,對於 m*n 的特徵對映取得(c+4)kmn個輸出。有關預設邊界框的說明,請參見圖1.我們的預設邊界框與Faster R-CNN 【2】中使用的預設邊界框相似,但是我們將他們應用到不同解析度的幾個特徵對映上,在幾個特徵對映中允許不同的預設邊界框形狀讓我們有效的離散可能的輸出框形狀的空間。
圖2:兩個單次檢測模型的比較:SSD和YOLO【5】。我們的SSD模型在基礎網路的末端新增了幾個特徵層,它預測了不同尺度和長寬比的預設邊界框的偏移量及其相關的置信度。300*300輸入尺寸的 SSD在 VOC 2007 test 上的 準確度上明顯優於 448*448的YOLO的準確度,同時也提高了速度。
上圖是SSD和YOLO的網路結果,通過對比可以發現,SSD的優點就是它生成的 default box 是多尺度的,這是因為SSD生成 default box 的 feature map 不僅僅是 CNN的輸出的最後一層,還有利用比較淺層的 feature map 生成的 default box。所以SSD對於小目標的檢測一定會優於YOLO v1(小目標經過高層卷積後特徵幾乎都消失了)。同時,又因為SSD生成的多尺度 default box一定會有更高概率找到更加貼近與Ground Truth的候選框,所以模型的穩定性是肯定比YOLO強的(YOLO的 bounding box很少,只有 98個,如果距離 GT 比較遠,那麼修改 bounding box 的線性迴歸就不成立,訓練時模型可能會跑飛)。但是SSD的候選框數量是三種經典網路中最多的,有 8732個,所以訓練時應該會比較慢。
2.2 訓練
訓練SSD和訓練使用區域提出的典型檢測器之間的關鍵區別在於,需要將真實資訊分配給固定的檢測器輸出集合中的特定輸出。在YOLO【5】的訓練中,Faster R-CNN【2】和MultiBox【7】的區域提出階段,一些版本也需要這樣的操作。一旦確定了這個分配,損失函式和反向傳播就可以應用端到端了。訓練也涉及選擇預設邊界框集合和縮放進行檢測,以及難挖掘和資料增強策略。
匹配策略:在訓練過程中,我們需要確定哪些預設邊界框對應實際邊界框的檢測,並相應的訓練網路。對於每個實際邊界框,我們從預設邊界框中選擇,這些框會在位置,長寬比和尺度上變化。我們首先將每個實際邊界框與具有最好的 Jaccard 重疊(如 MultiBox【7】)的邊界框相匹配。與MultiBox不同的是,我們將預設邊界框匹配到 Jaccard 重疊高於閾值(0.5)的任何實際邊界框,這簡化了學習問題,允許網路為多個重疊的預設邊界框預測高分,而不是要求它只挑選具有最大重疊的一個邊界框。
訓練目標函式:SSD訓練目標函式來自於MultiBox目標【7,8】,但擴充套件到處理多個目標類別,設 Xij = {1,0} 是第 i 個預設邊界框匹配到類別 p 的第 j 個實際邊界框的指示器。在上面的匹配策略中,我們有 sigmai Xij >=1 。總體目標損失函式是定位損失(loc)和置信度損失(conf)的加權和:
其中N是匹配的預設邊界框的數量,如果N=0,則將損失設為0,定位損失是預測框(l)與真實框(g)引數之間的 Smooth L1損失【6】。類似於 Faster R-CNN【2】,我們迴歸預設邊界框(d)的中心偏移量(cx, cy)和其寬度(w),高度(h)的偏移量。
置信度損失是在多類別置信度(c)上的Softmax損失。
通過交叉驗證權重項 alpha 設為1。
為預設邊界框選擇尺度和長寬比:為了處理不同的目標尺度,一些方法【4, 9】建議處理不同尺寸的影像,然後將結果合併。然而,通過利用單個網路中幾個不同層的特徵對映進行預測,我們可以模擬相同的效果,同時還可以跨所有目標尺度共享引數。以前的工作【10, 11】已經表明,使用底層的特徵對映可以提高語義分割的質量,因為底層會捕獲輸入目標的更多細節。同樣,【12】表明,從特徵對映上新增全域性上下文池化可以有助於平滑分割結果,受這些方法的啟發,我們使用較低和較高的特徵對映進行檢測。圖1顯示了框架中使用的兩個示例性特徵對映(8*8 和 4*4)。在實踐中,我們可以使用更多的具有很少計算開支的特徵對映。
已知網路中不同層的特徵對映具有不同的(經驗的)感受野大小【13】。幸運的是,在SSD框架內,預設邊界框不需要對應與每層的實際感受野。我們設計平鋪預設邊界框,以便特定的特徵對映學習響應目標的特定尺度。假設我們要使用 m個特徵對映進行預測。每個特徵對映預設邊界框的尺度計算如下:
其中 Smin為 0.2, Smax為 0.9,意味著最底層具有 0.2 的尺度,最高層具有 0.9 的尺度,並且在他們之間的所有層是規則間隔的。我們為預設邊界框新增不同的長寬比,並將他們表示為 ar = 1, 2, 3, 1/2, 1/3 。我們可以計算每個邊界框的寬度和高度。對於長寬比為1,我們還新增了一個預設邊界框,其尺度為sk,在每個特徵對映位置得到 6 個預設邊界框。我們將每個預設邊界框的中心設定為(。。),其中 |fk| 是第 k 個平方特徵對映的大小,在實踐中,也可以設計預設邊界框的分佈以最適合特定的資料集。如何設計最佳平鋪也是一個懸而未決的問題。
通過將所有預設邊界框的預測與許多特徵對映所有位置的不同尺度和高寬比相結合,我們有不同的預測集合,涵蓋各種輸入目標大小和形狀。例如,在圖1中,狗被匹配到 4*4 特徵對映中的預設邊界框,而不是 8*8 特徵對映中的任何預設框。這是因為那些邊界框有不同的尺度,不匹配狗的邊界框,因此在訓練期間被認為是負例。
難例挖掘:在匹配步驟之後,大多數預設邊界框為負例,尤其是當可能的預設邊界框數量較多時。這在正的訓練例項和負的訓練例項之間引入了顯著的不平衡。我們不使用所有負例,而是使用每個預設邊界框的最高置信度損失來排序他們,並挑選最高的置信度,以便負例和整理之間的比例至多為3:1,我們發現這會導致更快的優化和更穩定的訓練。
資料增強:為了使模型對各種輸入目標大小和形狀更魯棒,每張訓練影像都是通過以下選項之一進行隨機取樣的:
- 使用整個原始輸入影像
- 取樣一個影像塊,使得目標與目標之間的最小Jaccard 重疊為 0.1,0.3,0.5,0.7或 0.9
- 隨機取樣一個影像塊
每個取樣影像塊的大小是原始影像大小的 [0.1, 1],長寬比在1/2 和 2之間。如果實際邊界框的中心在採用的影像塊中,我們保留實際邊界框與取樣影像塊的重疊部分。在上述取樣步驟之後,除了英語類似於文獻【14】中描述的一些光度變形之外,將每個取樣影像塊調整到固定尺寸並以 0.5的概率進行水平翻轉。
採用資料擴增(Data Augmentation)可以提升SSD的效能,主要採用的技術有水平翻轉(horizontal flip),隨機裁剪加顏色扭曲(random crop & color distortion),隨機採集塊域(Randomly sample a patch)(獲得小目標訓練樣本),如下圖所示:
2.3 預測過程
預測過程比較簡單,對於每個預測框,首先根據類別置信度確定其類別(置信度最大者)與置信度值,並過濾屬於背景的預測框。然後根據置信度閾值(如0.5)過濾掉閾值較低的預測框。對於留下的預測框進行解碼,根據先驗框得到其真實的位置引數(解碼後一般還需要做clip,防止預測框位置超出圖片)。解碼之後,一般需要根據置信度進行降序排列,然後僅保留 top-k(如 400)個預測框。最後就是進行NMS演算法,過濾掉哪些重疊度較大的預測框。最後剩餘的預測框就是檢測結果了。
3,實驗結果
基礎網路:我們的實驗全部基於VGG16【15】,它是在ILSVRC CLS-LOC 資料集【16】上預先訓練的。類似於DeepLabLargeFOV【17】,我們將 fc6 和 fc7轉換為卷積層,從 fc6 和 fc7中重取樣引數,將 pool6 從 2*2 -S2 更改為 3*3-S1,並使用空洞演算法【18】來填補這個“小洞”。我們刪除所有的dropout層和 fc8層。我們使用 SGD對得到的模型進行微調,初始學習率為 10-3,動量為 0.9,權重衰減為 0.0005,批資料大小為 32。每個資料的學習速率衰減策略略有不同,我們將在後面詳細描述。完整的訓練和測試程式碼建立在Caffe【19】上並開源:https://github.com/weiliu89/caffe/tree/ssd。
3.1 PASCAL VOC 2007
在這個資料集上,我們在VOC 2007 test (4952張影像)上比較了Fast R-CNN【6】和Faster R-CNN【2】。所有的方法都在相同的預訓練好的 VGG16網路上進行微調。
圖2 顯示了SSD 300模型的架構細節,我們使用 conv4_3,,conv7(fc7),conv8_2,conv9_2,conv10_2和conv11_2來預測位置和置信度。我們在conv4_3上設定了尺度為0.1的預設邊界框。我們使用“xavier”方法[20]初始化所有新新增的卷積層的引數。對於conv4_3,conv10_2和conv11_2,我們只在每個特徵對映位置上關聯了4個預設邊界框——忽略 1/3 和 3 的長寬比。對於所有其他層,我們像 2.2 節描述的那樣放置了 6 個預設邊界框。如【12】所指出的,與其它層相比,由於 conv4_3具有不同的特徵尺度,所以我們使用 【12】中引入的L2正則化技術將特徵對映中每個位置的特徵標準縮放到 20,在反向傳播過程中學習尺度。對於 40K 次迭代,我們使用 10-3 的學習率,然後繼續使用 10-4 和 10-5 的學習率訓練 10k 迭代。當對VOC 2007 trainval 進行訓練時,表1顯示了我們的低解析度 SSD 300模型已經被 Fast R-CNN更準確。當我們用更大的 512*512 輸入影像上訓練SSD時,它更加準確,超過了 Faster R-CNN 1.7%的mAP。如果我們用更多的(即07+12)資料來訓練SSD,我們看到SSD300已經比Faster R-CNN好1.1%,SSD512比Faster R-CNN好3.6%。如果我們將SSD512用3.4節描述的COCO trainval35k來訓練模型並在07+12資料集上進行微調,我們獲得了最好的結果:81.6%的mAP。
為了更詳細的瞭解我們兩個SSD模型的效能,我們使用了【21】中的檢測分析工具。圖3顯示了SSD可以檢測到高質量(大白色區域)的各種目標類別。它大部分的確信檢測是正確的。召回約 85~90%,而“弱”(0.1 的 Jaccard 重疊)標準則要高得多。與R-CNN【22】相比,SSD具有更小的定位誤差,表明SSD可以更好地定位目標,因為它直接學習迴歸目標形狀和分類目標類別,而不是使用兩個解耦步驟。然而,SSD對類似的目標類別(特別是對於動物)有更多的混淆,部分原因是我們共享多個類別的位置。圖4顯示SSD對邊界框大小非常敏感。換句話說,它在較小目標上比較大目標上的效能要差很多。這並不奇怪,因為這些小目標甚至可能在頂層沒有任何資訊。增加輸入尺寸(例如從300*300到 512*512)可以幫助改進檢測小目標,但仍然有很大的改進空間。積極的一面,我們可以清楚地看到SSD在大型目標上的表現非常好。而且對於不同長寬比的目標,它是非常魯棒的,因為我們使用每個特徵對映位置的各種長寬比的預設框。
表1:PASCAL VOC 2007測試檢測結果。Fast 和 Faster R-CNN都使用最小維度為 600的輸入影像。兩個SSD模型使用完全相同的設定除了他們有不同的輸入大小(300*300和 512*512)。很明顯更大的輸入尺寸會導致更好的結果,並且更大的資料同樣有幫助。資料:“07”:VOC 2007 trainval,“07+12”:VOC 2007 和 VOC 2012trainval 的聯合。“07+12 + COCO”:首先在COCO trainval 35k 上訓練然後在 07+12 上微調。
表2:各種設計選擇和元件對SSD效能的影響。
3.2 模型分析
為了更好地瞭解SSD,我們進行控制實驗,以檢查每個元件如何影響效能。對於所有的實驗,我們使用相同的設定和輸入大小(300*300),除了指定的設定或元件的更改。
資料增強至關重要:Fast 和 Faster R-CNN 使用原始影像和水平翻轉來訓練。我們使用更廣泛的抽樣策略,類似於YOLO【5】。從表2可以看出,取樣策略可以提高 8.8%的mAP。我們不知道我們的取樣策略將會使 Fast 和 Faster R-CNN 受益多少,但是他們可能從中受益較小,因為他們在分類過程中使用了一個特徵池化步驟,這對通過設計的目標變換來說相對魯棒。
更多的預設邊界框形狀會更好:如2.2節所述,預設情況下,我們每個位置使用 6個預設邊界框。如果我們刪除長寬比為 1/3 和 3的邊界框,效能下降了 0.6%。通過進一步去除 1/2 和 2長寬比的盒子,效能再下降 2.1%。使用各種預設邊界框形狀似乎使網路預測邊界框的任務更容易。
Atrous更快:如第三節所述,我們根據DeepLab-LargeFOV[17],使用子取樣的VGG16的空洞版本。如果我們使用完整的VGG16,保持 pool5為 2*2 -s2,並且不從 fc6和 fc7中子取樣引數,並新增 conv5_3進行預測,結果大致相同,而速度慢了大約 20%。
多個不同解析度的輸出層更好:SSD的主要貢獻是在不同的輸出層上使用不同尺度的預設邊界框。為了衡量所獲得的優勢,我們逐步刪除層並比較結果。為了公平比較,每次我們刪除一層,我們調整預設邊界框平鋪,以保持類似於最初的邊界框的總數(8732)。這是通過在剩餘層上堆疊更多尺度的盒子並根據需要調整邊界框的尺度來完成的。我們沒有詳盡的優化每個設定的平鋪。表3顯示層數較少,精度降低,從 74.3 單調遞減至 62.4。當我們在一層上堆疊多尺度的邊界框時,很多邊界框在影像邊界上需要小心處理。我們嘗試了在Faster R-CNN【2】中使用這個策略,忽略在邊界上的邊界框。我們觀察到了一些有趣的趨勢。例如,如果我們使用非常粗糙的特徵對映(例如conv11_2(1*1)或 conv10_2(3*3)),他會大大傷害效能。原因可能是修剪後我們沒有足夠大的邊界框來覆蓋大的目標。當我們主要使用更高解析度的特徵對映時,效能開始再次上升,因為即使在修剪之後仍然有足夠數量的大邊界框。如果我們只使用conv7進行預測,那麼效能是最糟糕的,這就強化了在不同層上擴充套件不同尺度的邊界框是非常關鍵的資訊。此外,由於我們的預測不像【6】那樣依賴於ROI池化,所以我們在低解析度特徵對映中沒有摺疊組塊的問題【23】。SSD架構將來自各種解析度的特徵對映的預測組合起來,以達到與Faster R-CNN相當的精確度,同時使用較低解析度的輸入影像。
表3:使用多個輸出層的影響
3.3 PASCAL VOC 2012
除了我們使用 VOC 2012 trainval 和 VOC 2007 trainval ,test(21503張影像)進行訓練,以及在VOC 2012 test(10991張影像)上進行測試之外,我們使用與上述基本的 VOC 2007實驗相同的設定,我們用 10-3的學習率對模型進行 60K 次的迭代訓練,然後使用 10-4的學習率進行 20K次迭代訓練。表4顯示了我們的SSD300和SSD512模型的結果,我們看到了與我們在 VOC 2007 test中觀察到的相同的效能趨勢。我們的 SSD 300比 Fast/Faster R-CNN提高了準確性。通過將訓練和測試影像大小增加到 512*512,我們比 Faster R-CNN的準確率提高了 4.5%。與YOLO相比,SSD更精確,可能是由於使用了來自多個特徵對映的額卷積預設邊界框和我們在訓練期間的匹配策略。當對從COCO上訓練的模型進行微調後,我們的SSD 512達到了 80%的mAP,比Faster R-CNN 高了 4.1%。
表4:PASCAL VOC 2012 test上的檢測結果,Fast和Faster R-CNN 使用最小維度為 600的影像,而YOLO的圖層大小為 448*448.資料:“07++12”:VOC 2007 trainval,test和VOC 2012 trainval。“07++12+COCO”:先在COCOtrainval 135k上訓練然後在 07++12 上微調。
為了進一步驗證SSD框架,我們在COCO資料集上對SSD300和SSD512架構進行了訓練。由於COCO中的目標往往比PASCAL VOC中的更小,因此我們對所有曾使用較小的預設邊界框。我們遵循2.2節中提到的策略,但是現在我們最小的預設邊界框尺度是 0.15 而不是 0.2,並且 conv4_3 上的預設邊界框尺度是 0.07(例如:300*300 影像中的 21個畫素)。
我們使用 trainval135k 【24】進行訓練。我們首先用 10-3 的學習率對模型進行訓練,進行 160K 詞迭代,然後繼續以 10-4 和 10-5的學習率各進行 40K次迭代。表5顯示了 test-dev 2015的結果,與我們在PASCAL VOC資料集中觀察到的結果類似,SSD 300 在mAP@0.5和mAP@【0.5:0.95】中都由於Fast R-CNN。SSD 300與ION【24】和 Faster R-CNN【25】具有相似的 mAP@0.75.有趣的是,我們觀察到SSD512在mAP@0.75中要好 5.3%,但是在mAP@0.5中只好 1.2%。我們也觀察到,對於大型目標,AP(4.8%)和AR(4.6%)的效果要好很多,但對於小目標,AP(1.3%)和AR(1.2%)有相對更少的改進。與ION相比,大型和小型目標的AR改進更為相似(5.4%和3.9%),我們推測 Faster R-CNN 在較小的目標上比SSD更具有競爭力,因為它在RPN部分和Fast R-CNN部分都執行了兩個邊界框細化步驟。在圖5中,我們展示了SSD512模型在COCO test-dev 上的一些檢測例項。
表5:COCO test-dev 2015 檢測結果
3.5 初步的 ILSVRC 結果
我們將在COCO上應用的相同網路架構應用於ILSVRC DET資料集【16】。我們使用【22】中使用的ILSVRC 2014 train和val 1來訓練SSD 300模型。我們首先用 10-3 的學習率對模型進行訓練,進行了 320K次的迭代,然後以 10-4繼續迭代 80k次,以 10-5迭代 40K次。我們可以在 val2 資料集上【22】實現 43.4 mAP。再一次證明了SSD是用於高質量實時檢測的通用架構。
3.6 小目標精度的資料增強
SSD沒有如Faster R-CNN中後續的特徵重取樣步驟,小目標的分類任務對SSD來說相對困難,正如我們的分析(見圖4)所示。2.2描述的資料增強有助於顯著提升效能,特別是在PASCAL VOC等小資料集上。策略產生的隨機裁剪可以被認為是“放大”操作,並且可以產生許多更大的訓練樣本。為了實現建立更多小型訓練樣本的“縮小”操作,我們首先將影像隨機放置在填充了平均值的原始影像大小為 16x 的畫布上,然後再進行任意的隨機裁剪操作。因為通過引入這個新的“擴充套件”資料增強技巧,我們有更多的訓練影像,所以我們必須將訓練迭代次數加倍。我們已經在多個資料集上看到了一致的 2%~3%的mAP增長,如表6所示。具體來說,圖6顯示新的增強技巧顯著提高了模型在小目標上的效能。這個結果強調了資料增強策略對最終模型精度的重要性。
改進SSD的另一種方法是設計一個更好的預設邊界框平鋪,使其位置和尺度與特徵對映上每個位置的感受野更好的對齊。我們將這個工作留給未來。
表6:我們使用突出擴充套件資料增強技巧在多個資料集上的結果。SSD300*和SSD512*是用新的資料增強訓練的模型。
圖6:具有新的資料增強的目標尺寸在【21】中使用的VOC 2007 test資料集上靈敏度及影響。最上面一行顯示了原始SSD300和SSD512模型上每個類別的 BBox面積的影響,最下面一行對應使用新的資料增強訓練技巧的SSd300*和 SSD 512*模型。新的資料增強技巧顯然有助於顯著檢測小目標。
3.7 推斷時間
考慮到我們的方法產生大量邊界框,在推斷機器執行非極大值抑制(NMS)是必要的。通過使用 0.01 的置信度閾值,我們可以過濾大部分邊界框。然後,我們應用NMS,每個類別 0.45的 Jaccard重疊,並保留每張影像的前 200個檢測。對於SSD 300和20個VOC類別,這個步驟每張影像花費大約 1.7毫秒,接近在所有新增層上花費的總時間(2.4毫秒)。我們使用 Titan X,cuDNN v4,Intel Xeon E5-2667v3@3.20GHz以及批大小為 8來測量速度。
表7顯示了SSD,Faster R-CNN【2】和YOLO【5】之間的比較。我們的SSD 300和 SSD512的速度和精度均優於 Faster R-CNN。雖然Fast YOLO【5】可以讓 155PFS的速度執行,但其準確性卻降低了近22%的mAP。就我們所知,SSD 300是第一個實現 70%以上mAP的實時方法。請注意,大約 80%前饋時間花費在基礎網路上(本例中為 VGG16)。因此,使用更快的基礎網路可以進一步提高速度,這也可能使SSD512模型達到實時。
4,相關工作
在影像中有兩種建立的用於目標檢測的方法,一種基於滑動視窗,另一種基於區域提出分類。在卷積神經網路出現之前,這兩種方法的最新技術——可變形部件模型(DPM)【26】和選擇性搜尋【1】——具有相當的效能。然而,在R-CNN【22】結合選擇性搜尋區域提出和基於後分類的卷積網路帶來的顯著改進後,區域提出目標檢測方法變得流行。
最初的R-CNN方法已經以各種方法進行了改進。第一套方法提高了後分類的質量和速度,因為它需要對成千上萬的裁剪影像進行分類,這是昂貴和耗時的。SPPNet【9】顯著加速了原有的R-CNN方法。它引入了一個空間金字塔池化層,該層對區域大小和尺度更魯棒,並允許分類層重用多個影像解析度下生產的特徵對映上計算的特徵。Fast R-CNN 【6】擴充套件了SPPNet,使得它可以通過最小化置信度和邊界框迴歸的損失來對所有層進行端到端的微調,最初在MultiBox【7】中引入學習目標。
第二套方法使用深度神經網路提高了提出生成的質量。在最近的工作MultiBox【7, 8】中,基於低階影像特徵的選擇性搜尋區域提出直接被單獨的深度神經網路生成的提出所取代。這進一步提高了檢測精度。但是導致了一些複雜的設定,需要訓練兩個具有依賴關係的神經網路。Faster R-CNN【2】將選擇性搜尋提出替換為區域提出網路(RPN)學習到的區域提出,並引入了一種方法,通過交替兩個網路之間的微調共享卷積層和預測層將RPN和Fast R-CNN結合在一起。通過這種方式,使用區域提出池化中級特徵,並且最後的分類步驟比較便宜。我們的SSD與Faster R-CNN中的區域提出網路(RPN)非常相似,因為我們也使用一組固定的(預設)邊界框進行預測,類似於RPN中的錨邊界框。但是,我們不是使用這些來池化特徵並評估另一個分類器,而是為每一個目標類別在每個邊界框中同時生成一個分數。因此,我們的方法避免了將 RPN與Fast R-CNN合併的複雜性,並且更容易訓練,更快且更直接地整合到其他任務中。
與我們方法直接相關的另一組方法,完全跳出提議步驟,直接預測多個類別的邊界框和置信度。OverFeat【4】是滑動視窗方法的深度版本,在知道了底層目標類別的置信度之後,直接從最頂層的特徵對映的每個位置預測邊界框。YOLO【5】使用整個最頂層的特徵對映來預測多個類別和邊界框(這些類別共享)的置信度。我們的SSD方法屬於這一類,因為我們沒有提出步驟,但使用預設邊界框。然而,我們的方法比現有的方法更靈活,因為我們可以在不同尺度的多個特徵對映的每個特徵位置上使用不同長寬比的預設邊界框。如果我們只從最頂層的特徵對映的每個位置使用一個預設框,我們的SSD將具有與OverFeat【4】相似的架構;如果我們使用整個最頂層的特徵對映,並新增一個全連線層進行預測來代替我們的卷積預測器,並且沒有明確的考慮多個長寬比,我們可以近似的再現YOLO【5】。
表7:PASCAL VOC 2007 test的結果。SSD 300是唯一可以取得 70%以上mAP的實現檢測方法。通過使用更大的輸入影像,SSD512在精度上超過了所有方法同時保持近似實時的速度。
5,結論
本文介紹了SSD,一種快速的單次多類別目標檢測器。我們模型的一個關鍵特徵是使用多個特徵對映的多尺度卷積邊界框輸出。這種表示使我們能夠高效的建模可能的邊界框形狀空間。我們通過實驗驗證,在給定合適訓練策略的情況下,大量仔細選擇的預設邊界框會提高效能。我們構建的SSD模型比現有的方法至少要多一個數量級的邊界框預測取樣位置,尺度和長寬比【5, 7】。我們證明了給定相同的VGG-16基礎架構,SSD在準確性和速度方面與其對應的最先進的而目標檢測器相比毫不遜色。在PASCAL VOC 和COCO上,我們的SSD512模型的效能明顯優於最先進的 Faster R-CNN【2】,而速度提高了3倍。我們的實時SSD 300模型允許速度為 59fps,比目前的實時YOLO【5】更快,同時顯著提高了檢測精度。
除了單獨使用之外,我們相信我們的整體和相對簡單的SSD模型為採用目標檢測元件的大型系統提高了有用的構建模組。一個有前景的未來方向是探索它作為系統的一部分,使用迴圈神經網路來同時檢測和跟蹤視訊中的目標。
圖3:SSD 512 在VOC 2007 test中的動物,車輛和傢俱上的效能視覺化。第一行顯示由於定位不佳(loc),與相識類別(Sim)混淆,與其他(Oth)或背景(BG)相關的正確檢測(Cor)或假陽性的累積分數。紅色的實現表明隨著檢測次數的增加,強標準(0.5 Jaccard 重疊)下的召回變化。紅色虛線是使用弱標準(0.1 Jaccard重疊)。最下面一行顯示了排名靠前的假陽性型別的分佈。
圖4:使用【21】在VOC 2007 test 設定上不同目標特徵的靈敏度和影響。左邊的圖顯示了BBox面積對每個類別的影響。右邊的圖顯示了長寬比的影響。關鍵:BBox區域:Xs=超小;S=小;M=中等;L=大;XL=超大。長寬比:XT=超高/窄;T=高;M=中等;W=寬;XW=超寬。
圖5:SSD512模型在COCO test-dev上的檢測例項。我們展示了分數高於 0.6的檢測。每一種顏色對應一個目標類別。