SSD 論文詳解

SSD: Single Shot MultiBox Detector (ECCV 2016)

聲明:筆者翻譯論文僅爲學習研究,如有侵權請聯繫作者刪除博文,謝謝

源論文地址:https://arxiv.org/abs/1512.02325
源論文代碼:https://github.com/weiliu89/caffe/tree/ssd

**筆者踐行代碼:https://github.com/dexterod/mask_SSD-Inceptionv2

:文字中標粗和亮色的部分爲筆者認爲有創新改進餘地和需要注意的地方,灰色背景部分爲筆者的一些想法。因水平所限,部分筆觸可能有不實和錯誤之處,敬請廣大讀者批評指正,讓我們一起進步~

-----------------------------------------------------------------------------------------------------------------------------------------

摘要

       我們提出了一種使用單個深度神經網絡來檢測圖像中的目標的方法。我們的方法命名爲SSD,將邊界框的輸出空間離散化,爲不同長寬比的一組默認框和並縮放每個 feature map 的位置在預測時,網絡會在每個默認框中爲每個目標類別生成分數,並對框進行調整以更好地匹配目標形狀。此外,網絡還結合了不同分辨率的多個特徵映射的預測,自然地處理各種尺寸的目標。相對於需要 region proposal 的方法,SSD 非常簡單,因爲它完全消除了 proposal generation 和隨後的像素重採樣或特徵重採樣階段,並將所有計算封裝到單個網絡中。這使得SSD易於訓練和直接集成到需要檢測組件的系統中。PASCAL VOC,COCO和ILSVRC數據集上的實驗結果證實,SSD比利用額外的object proposal step的方法具有一定水準的準確性,並且速度更快,同時爲訓練和推斷提供了統一的框架。對於300×300的輸入,SSD在VOC2007測試中以59FPS的速度在Nvidia Titan X上達到74.3%的mAP,對於512×512的輸入,SSD達到了76.9%的mAP,優於參照的最先進的Faster R-CNN模型。與其他單階段方法相比,即使輸入圖像尺寸較小,SSD也具有更高的精度。代碼獲取:https://github.com/weiliu89/caffe/tree/ssd

SSD 將輸出一系列 離散化(discretization) 的 bounding boxes,這些 bounding boxes 是在不同層次(layers)上的 feature maps 上生成的,並且有着不同的 aspect ratio。

在 prediction 階段:要計算出每一個 default box 中的物體其屬於每個類別的可能性,即 score。如對於PASCAL VOC 數據集,總共有 20 類,那麼得出每一個 bounding box 中物體屬於這 20 個類別的每一種的可能性得分。同時,要對這些 bounding boxes的 shape 進行微調,以使得其匹配目標物體的形狀。還有就是,爲了處理相同物體的不同尺寸的情況,SSD 結合了不同分辨率的 feature maps 的 predictions。

SSD 的簡單是相對於 Faster R-CNN 來說的,前者生成默認框(也就是錨點框)後微調位置並直接具體分類,而後者在生成錨點並初次分類和迴歸位置後,得到 proposal 層,再進行 ROI Pooling。特徵重採樣成 7×7 像素,進行二次分類迴歸

1. 引言

       目前最先進的目標檢測系統是以下方法的變種:假設邊界框,每個框重採樣像素或提取特徵,並應用一個高質量的分類器。自從選擇性搜索[1]通過在PASCAL VOC,COCO和ILSVRC上所有基於Faster R-CNN[2]的檢測都取得了當前領先的結果(儘管具有更深的特徵如[3]),這種流程在檢測基準數據上流行開來。儘管這些方法準確,但對於嵌入式系統而言,這些方法的計算量過大,即使是高端硬件,對於實時應用而言也太慢。通常,這些方法的檢測速度是以每幀秒(SPF)度量,甚至最快的高精度檢測器,Faster R-CNN,僅以每秒7幀(FPS)的速度運行。已經有很多嘗試通過處理檢測流程中的每個階段來構建更快的檢測器(參見第4節中的相關工作),但是到目前爲止,顯著提高的速度會以顯著降低的檢測精度爲代價。

現在的目標檢測網絡大多依然是:先生成一些假設的 bounding boxes(可以理解爲錨點框),然後在這些 bounding boxes 中提取特徵(或者先提取特徵以後,再在特徵圖中假設 bboxes),之後再經過一個分類器,來判斷裏面是不是物體,是什麼物體。

       本文提出了第一個基於深度網絡的目標檢測器,它不對假設邊界框的像素或特徵進行重採樣,並且與其它方法有一樣精確度。這對高精度檢測在速度上有顯著提高(在VOC2007測試中,59FPS和74.3%的mAP,與Faster R-CNN 7FPS和73.2%的mAP或者YOLO 45 FPS和63.4%的mAP相比)。速度的根本改進來自消除了proposal generation and subsequent pixel or feature resampling stages。我們並不是第一個這樣做的人(查閱[4,5]),但是通過增加一系列改進,我們設法比以前的嘗試顯著提高了準確性。我們的改進包括使用小型卷積濾波器來預測邊界框位置中的目標類別和偏移量,使用不同長寬比檢測的單獨預測器(濾波器),並將這些濾波器應用於網絡後期的多個特徵映射中,以執行多尺度檢測。通過這些修改——特別是使用多層進行不同尺度的預測——我們可以使用相對較低的分辨率輸入實現高精度,進一步提高檢測速度。雖然這些貢獻可能單獨看起來很小,但是我們注意到由此產生的系統將PASCAL VOC實時檢測的準確度從YOLO的63.4%的mAP提高到我們的SSD的74.3%的mAP。相比於最近備受矚目的殘差網絡方面的工作[3],在檢測精度上這是相對更大的提高。而且,顯著提高的高質量檢測速度可以擴大計算機視覺使用的設置範圍。

我們總結我們的貢獻如下:

  • 我們引入了 SSD,這是一種針對多個類別的單次檢測器,比先前的先進的單次檢測器(YOLO)更快,並且準確得多,事實上,與執行region proposal和ROI pooling的更慢的技術具有相同的精度(包括 Faster R-CNN )。
  • SSD 的核心是預測固定的一系列默認邊界框的類別分數和邊界框偏移,使用更小的卷積濾波器應用到 feature map 上
  • 爲了實現高檢測精度,我們根據不同尺度的 feature map 生成不同尺度的預測,並通過長寬比(aspect ratio)明確分別預測。
  • 這些設計功能使得即使在低分辨率輸入圖像上也能實現簡單的端到端訓練和高精度,從而進一步提高速度與精度之間的權衡。
  • 實驗包括在 PASCAL VOC,COCO 和 ILSVRC 上評估具有不同輸入大小的模型的時間和精度分析,並與最近的一系列最新方法進行比較。

SSD 核心思想:Our improvements include using a small convolutional filter to predict object categories and offsets in bounding box locations, using separate predictors (filters) for different aspect ratio detections, and applying these filters to multiple feature maps from the later stages of a network in order to perform detection at multiple scales.

2. 單次檢測器(SSD)

       本節描述我們提出的SSD檢測框架(2.1節)和相關的訓練方法(2.2節)。之後,2.3節介紹了數據集特有的模型細節和實驗結果。

2.1 模型

       SSD方法基於前饋卷積網絡,該網絡產生固定大小的邊界框集合,並對這些邊界框中存在的目標類別實例進行評分,然後進行非極大值抑制來產生最終的檢測結果早期的網絡層基於用於高質量圖像分類的標準架構(在任何分類層之前被截斷),我們將其稱爲基礎網絡。然後,我們將輔助結構添加到網絡中以產生具有以下關鍵特徵的檢測:

這裏與跟 YOLO / Faster R-CNN 一樣,都是先用基礎網絡提取特徵,然後添加些輔助結構進行關鍵特徵的檢測

       用於檢測的多尺度特徵映射。我們將卷積特徵層添加到截取的基礎網絡的末端(VGG的conv4_3)。這些層在尺寸上逐漸減小,並允許在多個尺度上對檢測結果進行預測。用於預測檢測的卷積模型對於每個特徵層都是不同的(查閱 Overfeat[4] 和 YOLO[5] 在單尺度特徵映射上的操作)。

在這裏插入圖片描述
圖2:兩個單次檢測模型的比較:SSD和YOLO[5]。我們的SSD模型在基礎網絡的末端添加了幾個特徵層,它預測了不同尺度和長寬比的默認邊界框的偏移量及相關的置信度。300×300輸入尺寸的SSD在VOC2007 test上的準確度上明顯優於448×448的YOLO的準確度,同時也提高了速度。

FPN 論文中原話:SSD 方法在借鑑利用 featurized image pyramid上很是值得說,爲了避免利用太低層的特徵,SSD從偏後的 conv4_3 開始,又往後加了幾層,分別抽取每層特徵,進行綜合利用。但是SSD對於高分辨率的底層特徵沒有再利用,而這些層對於檢測小目標很重要。
在這裏插入圖片描述

       用於檢測的卷積預測器每個添加的特徵層(或者任選的來自基礎網絡的現有特徵層)可以使用一組卷積濾波器產生固定的預測集合。這些在圖2上部中的 SSD 網絡架構指出。對於具有 p 通道的大小爲 m×n 的特徵層,使用的卷積濾波器是 3×3×p 的卷積核,可以得到歸屬類別的分數,或者相對於默認框座標的shape偏移。在每一個 m×n 的 feature map 位置上,使用上面的 3×3 的卷積核,它會產生一個輸出值。邊界框偏移輸出值是相對每個 feature map 位置的相對默認框位置來度量的(查閱 YOLO[5] 的架構,該步驟使用中間全連接層而不是卷積濾波器)。
       默認邊界框和長寬比對於網絡頂部的多個 feature map cells,我們將一組默認邊界框與每個 feature map cell 相關聯。默認邊界框以卷積的方式平鋪 feature map,以便每個邊界框相對於其對應 cell 的位置是固定的。在每個 feature map cell 中,我們預測 cell 中相對於默認邊界框形狀的偏移量,以及指出每個邊界框中存在的每個類別實例的類別分數。具體而言,對於給定位置處的 k 個邊界框中的每一個,我們計算 c 個類別分數和相對於原始默認邊界框形狀的 4 個偏移量。這導致在 feature map 中的每個 cell 使用總共 (c+4)×k 個濾波器,對於 m×n 的 feature map 取得 (c+4)×k×m×n 個輸出。有關默認邊界框的說明,請參見圖1。我們的默認邊界框與 Faster R-CNN[2] 中使用的錨點框相似,但是我們將它們應用到不同分辨率的幾個 feature map 上。在幾個 feature map 中允許不同的默認邊界框形狀讓我們有效地離散可能的輸出框形狀的空間。
在這裏插入圖片描述
圖1:SSD框架。(a)在訓練期間,SSD僅需要每個目標的輸入圖像和真實邊界框。我們用卷積的方式評估具有不同尺度(例如(b)和(c)中的 8×8 和 4×4)的幾個 feature maps 中每個位置處不同長寬比的默認框的小集合(例如4個)。對於每個默認邊界框,我們預測所有目標類別((c1,c2,…,cp))的形狀偏移量和置信度。在訓練時,我們首先將這些默認邊界框與實際的邊界框進行匹配。例如,我們已經給貓匹配了兩個默認邊界框,與狗匹配了一個,這被視爲積極的,其餘的是消極的。模型損失是定位損失(例如,Smooth L1[6])和置信度損失(例如 Softmax)之間的加權和

feature map cell 就是將 feature map 切分成 8×8 或者 4×4之後的一個個格子;
default box 就是每一個格子上,一系列固定大小的 box,即圖中虛線所形成的一系列 boxes。

SSD總結起來:就是先用基礎網絡提取特徵,然後將多個尺度的特徵圖進行網格劃分,每個特徵圖的網格里劃分出x個默認框(錨點框),並對默認框預測目標類別和置信度以及與實際邊界框進行偏移量匹配,再經過NMS後得到預測框

這就是Faster r-cnn和yolo v1的結合。 前者的錨點框機制 + 前者的實際框偏移計算 + 後者的網格化預測5個點(即直接分類迴歸,檢測問題轉化爲迴歸問題。)然後 ssd 用的多尺度輸出,被 FPN 升級後,又在 yolo v3 中被改進使用

2.2 訓練

       訓練SSD和訓練使用 region proposal + pooling 的典型檢測器之間的關鍵區別在於,SSD 訓練圖像中的 ground truth 需要賦予到那些固定輸出的 boxes 上。在YOLO[5]的訓練中、Faster R-CNN[2]和MultiBox[7]的region proposal階段,一些版本也需要這樣的操作。當這種將訓練圖像中的 groundtruth 與固定輸出的 boxes 對應之後,就可以 end-to-end 的進行 loss function 的計算以及 back-propagation 的計算更新了。訓練也涉及選擇默認邊界框集合和縮放檢測,以及難例挖掘和數據增強策略。
       下面談本文解決這些問題的方式,分爲下面的幾個部分。

在前面也已經提到了,SSD 輸出的是事先定義好的,一系列固定大小的 bounding boxes。如圖1中,狗狗的 ground truth 是紅色的 bounding boxes,但進行 label 標註的時候,要將紅色的 groundtruth box 賦予 圖(c)中一系列固定輸出的 boxes 中的一個,即 圖(c)中的紅色虛線框。

匹配策略

       在訓練過程中,我們需要確定哪些默認邊界框對應 ground truth 的檢測,並相應地訓練網絡。對於每個 ground truth,我們從默認邊界框中選擇,這些框會在位置,長寬比和尺度上變化。我們首先將每個 ground truth 與具有最好的 Jaccard 重疊(如MultiBox[7])的邊界框相匹配。與 MultiBox 不同的是,我們將默認邊界框匹配到 Jaccard 重疊高於閾值(0.5)的任何實際邊界框。這簡化了學習問題,允許網絡爲多個重疊的默認邊界框預測高分,而不是要求它只挑選具有最大重疊的一個邊界框。

注:Jaccard重疊即IoU。

訓練目標函數

       SSD 訓練目標函數來自於 MultiBox 目標[7,8],但擴展到處理多個目標類別。xpij=1 表示 第 i 個 default box 與 類別 p 的 第 j 個 ground truth box 相匹配,否則若不匹配的話,則 xpij=0。根據上面的匹配策略,一定有 ∑ixpij≥1,意味着對於 第 j 個 ground truth box,有可能有多個 default box 與其相匹配。
       總體目標損失函數是定位損失(loc)和置信度損失(conf)的加權和
在這裏插入圖片描述
       其中N是匹配的默認邊界框的數量。如果N=0,則將損失設爲0。定位損失是預測框(l)與真實框(g)參數之間的Smooth L1損失[6]。類似於Faster R-CNN[2],我們迴歸默認邊界框(d)的中心偏移量(cx,cy)和其寬度(w)、高度(h)的偏移量
在這裏插入圖片描述
       置信度損失conf是在多類別置信度©上的softmax損失。

在這裏插入圖片描述
       通過交叉驗證權重項α設爲1。

定位損失 loc 像 Faster R-CNN 中的一樣,也是三個框,默認框d(錨點框)、預測框l 和真實框g。其中 g 與 d 相關聯,首先用 g 和 d 的關係算出偏移量 g~ ,然後將 g~ 代入,構成 l 與 g~ 的Smooth L1損失。(具體見 Faster R-CNN 相關部分)
在這裏插入圖片描述

爲默認邊界框選擇尺度和長寬比

       爲了處理不同的目標尺度,一些方法[4,9]建議處理不同尺寸的圖像,然後將結果合併。然而,通過利用單個網絡中幾個不同層的feature map進行預測,我們可以模擬相同的效果,同時還可以跨所有目標尺度共享參數。以前的工作[10,11]已經表明,使用低層的特徵映射可以提高語義分割的質量,因爲低層會捕獲輸入目標的更多細節。同樣,[12]表明,從feature map上添加全局上下文池化可以有助於平滑分割結果。受這些方法的啓發,我們使用較低和較高的feature map進行檢測。圖1顯示了框架中使用的兩個示例性feature map(8×8和4×4)。在實踐中,我們可以使用更多的具有很少計算開支的feature map。
       已知網絡中不同層的feature map具有不同的(經驗的)感受野大小[13]。幸運的是,在SSD框架內,默認邊界框不需要對應於每層的實際感受野。我們設計平鋪默認邊界框,以便特定的feature map學習相應目標的特定尺度。假設我們要使用 m 個 feature map 進行預測。每個 feature map 默認邊界框的尺度計算如下:

在這裏插入圖片描述

在這裏插入圖片描述

哈哈哈哈,原諒我偷個小懶,這些公式打上去有點麻煩 ~ 。~

       通過將所有默認邊界框的預測與許多 feature map 所有位置的不同尺度和長寬比相結合,我們有不同的預測集合,涵蓋各種輸入目標大小和形狀。例如,在圖1中,狗被匹配到 4×4 feature map 中的默認邊界框,而不是 8×8 feature map 中的任何默認框。這是因爲那些邊界框有不同的尺度,不匹配狗的邊界框,因此在訓練期間被認爲是負例

一般來說,一個 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/

難例挖掘

       在匹配步驟之後,大多數默認邊界框爲負例,尤其是當可能的默認邊界框數量較多時。這在正的訓練實例和負的訓練實例之間引入了顯著的不平衡,訓練時難以收斂。我們不使用所有負例,而是使用每個默認邊界框的最高置信度損失的前幾個負例來排序它們,以便負例和正例之間的比例至多爲3:1。我們發現這會導致更快的優化和更穩定的訓練。

數據增強

       爲了使模型對各種輸入目標大小和形狀更魯棒,每張訓練圖像都是通過以下選項之一進行隨機採樣的:

  • 使用整個原始輸入圖像。
  • 採樣一個圖像塊,使得與目標之間的最小Jaccard重疊爲0.1,0.3,0.5,0.7或0.9。
  • 隨機採樣一個圖像塊。每個採樣圖像塊的大小是原始圖像大小的 [0.1,1],長寬比在12和2之間。如果實際邊界框的中心在採用的圖像塊中,我們保留實際邊界框與採樣圖像塊的重疊部分。在上述採樣步驟之後,除了應用類似於文獻[14]中描述的一些光度變形之外,將每個採樣圖像塊調整到固定尺寸並以0.5的概率進行水平翻轉。

關於數據增廣,推薦一篇文章:Must Know Tips/Tricks in Deep Neural Networks,其中的 section 1 就講了 data augmentation 技術。

3. 實驗結果

       基礎網絡。我們的實驗全部基於VGG16[15],它是在ILSVRC CLS-LOC數據集[16]上預先訓練的。類似於DeepLab-LargeFOV[17],我們將fc6和fc7轉換爲卷積層,從fc6和fc7中重採樣參數,將pool5從2×2−s2更改爲3×3−s1,並使用空洞算法[18]來填補這個“小洞”。我們刪除所有的丟棄層和fc8層。我們使用SGD對得到的模型進行微調,初始學習率爲10^3,動量爲0.9,權重衰減爲0.0005,批數據大小爲32。每個數據集的學習速率衰減策略略有不同,我們將在後面詳細描述。完整的訓練和測試代碼建立在Caffe[19]上並開源:https://github.com/weiliu89/caffe/tree/ssd。

3.1 PASCAL VOC2007

       在這個數據集上,我們在VOC2007 test(4952張圖像)上比較了Fast R-CNN[6]和Faster R-CNN[2]。所有的方法都在相同的預訓練好的VGG16網絡上進行微調。
在這裏插入圖片描述表1:PASCAL VOC2007 test檢測結果。Fast和Faster R-CNN都使用最小維度爲600的輸入圖像。兩個SSD模型除了輸入大小不同(300×300和512×512),其餘使用完全相同的設置。很明顯更大的輸入尺寸會導致更好的結果,並且更大的數據同樣有幫助。數據:“07”:VOC2007 trainval,“07+12”:VOC2007和VOC2012 trainval的聯合。“07+12+COCO”:首先在COCO trainval35k上訓練然後在07+12上微調。

在這裏插入圖片描述
圖2顯示了SSD300模型的架構細節。我們使用conv4_3,conv7(fc7),conv8_2,conv9_2,conv10_2和conv11_2來預測位置和置信度我們在conv4_3上設置了尺度爲0.1的默認邊界框。我們使用“xavier”方法[20]初始化所有新添加的卷積層的參數。對於conv4_3,conv10_2和conv11_2,我們只在每個feature map位置上關聯了4個默認邊界框——忽略1/3和3的長寬比。對於所有其它層,我們像2.2節描述的那樣放置了6個默認邊界框。如[12]所指出的,與其它層相比,由於conv4_3具有不同的特徵尺度,所以我們使用[12]中引入的L2正則化技術將feature map中每個位置的特徵標準縮放到20,在反向傳播過程中學習尺度。對於40k次迭代,我們使用103的學習率,然後繼續用104和105的學習率訓練10k迭代。當對VOC2007 trainval進行訓練時,表1顯示了我們的低分辨率SSD300模型已經比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。

在這裏插入圖片描述圖3:SSD512在VOC2007 test中的動物,車輛和傢俱上的性能可視化。第一行顯示由於定位不佳(Loc),與相似類別(Sim)混淆,與其它(Oth)或背景(BG)相關的正確檢測(Cor)或假陽性的累積分數。紅色的實線表示隨着檢測次數的增加,強標準(0.5 Jaccard重疊)下的召回變化。紅色虛線是使用弱標準(0.1 Jaccard重疊)。最下面一行顯示了排名靠前的假陽性類型的分佈。

在這裏插入圖片描述
圖4:使用[21]在VOC2007 test設置上不同目標特性的靈敏度和影響。左邊的圖顯示了bbox面積對每個類別的影響,右邊的圖顯示了長寬比的影響。關鍵:bbox區域:XS=超小;S=小;M=中等;L=大;XL=超大。長寬比:XT=超高/窄;T=高;M=中等;W=寬;XW =超寬。

       爲了更詳細地瞭解我們兩個SSD模型的性能,我們使用了[21]中的檢測分析工具。圖3顯示了SSD可以檢測到高質量(大白色區域)的各種目標類別。它大部分的確信檢測是正確的。召回約爲85−90%,而“弱”(0.1 Jaccard重疊)標準則要高得多。與R-CNN[22]相比,SSD具有更小的定位誤差,表明SSD可以更好地定位目標,因爲它直接學習迴歸目標形狀和分類目標類別,而不是使用兩個解耦步驟。然而,SSD對類似的目標類別(特別是對於動物)有更多的混淆,部分原因是我們共享多個類別的位置。圖4顯示SSD對邊界框大小非常敏感。換句話說,它在較小目標上比在較大目標上的性能要差得多。這並不奇怪,因爲這些小目標甚至可能在頂層沒有任何信息。增加輸入尺寸(例如從300×300到512×512)可以幫助改進檢測小目標,但仍然有很大的改進空間。積極的一面,我們可以清楚地看到SSD在大型目標上的表現非常好。而且對於不同長寬比的目標,它是非常魯棒的,因爲我們使用每個feature map位置的各種長寬比的默認框。

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更快

       如第3節所述,我們根據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]中使用這個策略,忽略在邊界上的邊界框。我們觀察到了一些有趣的趨勢。例如,如果我們使用非常粗糙的feature map(例如conv11_2(1×1)或conv10_2(3×3)),它會大大傷害性能。原因可能是修剪後我們沒有足夠大的邊界框來覆蓋大的目標。當我們主要使用更高分辨率的feature map時,性能開始再次上升,因爲即使在修剪之後仍然有足夠數量的大邊界框。如果我們只使用conv7進行預測,那麼性能是最糟糕的,這就強化了在不同層上擴展不同尺度的邊界框是非常關鍵的信息。此外,由於我們的預測不像[6]那樣依賴於ROI pooling,所以我們在低分辨率feature map中沒有摺疊組塊的問題[23]。SSD架構將來自各種分辨率的feature map的預測結合起來,以達到與Faster R-CNN相當的精確度,同時使用較低分辨率的輸入圖像。

3.3 PASCAL VOC2012

在這裏插入圖片描述表4: PASCAL VOC2012 test上的檢測結果. Fast和Faster R-CNN使用最小維度爲600的圖像,而YOLO的圖像大小爲448× 48。數據:“07++12”:VOC2007 trainval,test和VOC2012 trainval。“07++12+COCO”:先在COCO trainval135k上訓練然後在07++12上微調。

       除了我們使用VOC2012 trainval和VOC2007 trainval,test(21503張圖像)進行訓練,以及在VOC2012 test(10991張圖像)上進行測試之外,我們使用與上述基本的VOC2007實驗相同的設置。我們用103的學習率對模型進行60k次的迭代訓練,然後使用104的學習率進行20k次迭代訓練。表4顯示了我們的SSD300和SSD512模型的結果。我們看到了與我們在VOC2007 test中觀察到的相同的性能趨勢。我們的SSD300比Fast/Faster R-CNN提高了準確性。通過將訓練和測試圖像大小增加到512×512,我們比Faster R-CNN的準確率提高了4.5%。與YOLO相比,SSD更精確,可能是由於使用了來自多個特徵映射的卷積默認邊界框和我們在訓練期間的匹配策略。當對從COCO上訓練的模型進行微調後,我們的SSD512達到了80.0%的mAP,比Faster R-CNN高了4.1%。

3.4 COCO

在這裏插入圖片描述
       爲了進一步驗證SSD框架,我們在COCO數據集上對SSD300和SSD512架構進行了訓練。由於COCO中的目標往往比PASCAL VOC中的更小,因此我們對所有層使用較小的默認邊界框。我們遵循2.2節中提到的策略,但是現在我們最小的默認邊界框尺度是0.15而不是0.2,並且conv4_3上的默認邊界框尺度是0.07(例如,300×300圖像中的21個像素)。
       我們使用trainval35k[24]進行訓練。我們首先用103的學習率對模型進行訓練,進行160k次迭代,然後繼續以104和105的學習率各進行40k次迭代。表5顯示了test-dev2015的結果。與我們在PASCAL VOC數據集中觀察到的結果類似,SSD300在[email protected]和mAP@[0.5:0.95]中都優於Fast R-CNN。SSD300與ION 24]和Faster R-CNN[25]具有相似的[email protected],但是[email protected]更差。通過將圖像尺寸增加到512×512,我們的SSD512在這兩個標準中都優於Faster R-CNN[25]。有趣的是,我們觀察到SSD512在[email protected]中要好5.3%,但是在[email protected]中只好1.2%。我們也觀察到,對於大型目標,AP(4.8%)和AR(4.6%)的效果要好得多,但對於小目標,AP(1.3%)和AR(2.0%)有相對更少的改進。與ION相比,大型和小型目標的AR改進更爲相似(5.4%和3.9%)。我們推測Faster R-CNN在較小的目標上比SSD更具競爭力,因爲它在RPN部分和Fast R-CNN部分都執行了兩個邊界框細化步驟。在圖5(展示圖片,未放)中,我們展示了SSD512模型在COCO test-dev上的一些檢測實例。

3.5 初步的ILSVRC結果

       我們將在COCO上應用的相同網絡架構應用於ILSVRC DET數據集[16]。我們使用[22]中使用的ILSVRC2014 DETtrain和val1來訓練SSD300模型。我們首先用103的學習率對模型進行訓練,進行了320k次的迭代,然後以104繼續迭代80k次,以105迭代40k次。我們可以在val2數據集上[22]實現43.4 mAP。再一次證明了SSD是用於高質量實時檢測的通用框架。

3.6 爲小目標準確率進行數據增強

在這裏插入圖片描述表6:我們使用圖像擴展數據增強技巧在多個數據集上的結果。SSD300∗和SSD512∗是用新的數據增強訓練的模型。
在這裏插入圖片描述圖6:具有新的數據增強的目標尺寸在[21]中使用的VOC2007test數據集上靈敏度及影響。最上一行顯示了原始SSD300和SSD512模型上每個類別的BBox面積的影響,最下面一行對應使用新的數據增強訓練技巧的SSD300∗和SSD512∗模型。新的數據增強技巧顯然有助於顯著檢測小目標。

       SSD沒有如Faster R-CNN中後續的特徵重採樣步驟,小目標的分類任務對SSD來說相對困難,正如我們的分析(見圖4)所示。2.2描述的數據增強有助於顯著提高性能,特別是在PASCAL VOC等小數據集上。策略產生的隨機裁剪可以被認爲是“放大”操作,並且可以產生許多更大的訓練樣本。爲了實現創建更多小型訓練樣本的“縮小”操作,我們首先將圖像隨機放置在填充了平均值的原始圖像大小爲16x的畫布上,然後再進行任意的隨機裁剪操作。因爲通過引入這個新的“擴展”數據增強技巧,我們有更多的訓練圖像,所以我們必須將訓練迭代次數加倍。我們已經在多個數據集上看到了一致的2%−3%的mAP增長,如表6所示。具體來說,圖6顯示新的增強技巧顯著提高了模型在小目標上的性能。這個結果強調了數據增強策略對最終模型精度的重要性。
       改進SSD的另一種方法是**設計一個更好的默認邊界框平鋪,使其位置和尺度與feature map上每個位置的感受野更好地對齊。**我們將這個留給未來工作。

3.7 推斷時間

       考慮到我們的方法產生大量邊界框,在推斷期間執行非最大值抑制(NMS)是必要的。通過使用0.01的置信度閾值,我們可以過濾大部分邊界框。然後,我們應用NMS,每個類別0.45的Jaccard重疊,並保留每張圖像的前200個檢測。對於SSD300和20個VOC類別,這個步驟每張圖像花費大約1.7毫秒,接近在所有新增層上花費的總時間(2.4毫秒)。我們使用Titan X、cuDNN v4、Intel Xeon [email protected]以及批大小爲8來測量速度。

在這裏插入圖片描述
       表7顯示了SSD,Faster R-CNN[2]和YOLO[5]之間的比較。我們的SSD300和SSD512的速度和精度均優於Faster R-CNN。雖然Fast YOLO[5]可以以155FPS的速度運行,但其準確性卻降低了近22%的mAP。就我們所知,SSD300是第一個實現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合併的複雜性,並且更容易訓練,更快且更直接地集成到其它任務中。
       與我們的方法直接相關的另一組方法,完全跳過region proposal步驟,直接預測多個類別的邊界框和置信度。OverFeat[4]是滑動窗口方法的深度版本,在知道了底層目標類別的置信度之後,直接從最頂層的feature map的每個位置預測邊界框。YOLO[5]使用整個最頂層的feature map來預測多個類別和邊界框(這些類別共享)的置信度。我們的SSD方法屬於這一類,因爲我們沒有region proposal,但使用默認邊界框。然而,我們的方法比現有方法更靈活,因爲我們可以在不同尺度的多個特徵映射的每個特徵位置上使用不同長寬比的默認邊界框。如果我們只從最頂層的feature map的每個位置使用一個默認框,我們的SSD將具有與OverFeat[4]相似的架構;如果我們使用整個最頂層的特徵映射,並添加一個全連接層進行預測來代替我們的卷積預測器,並且沒有明確地考慮多個長寬比,我們可以近似地再現YOLO[5]。

5. 結論

       本文介紹了SSD,一種快速的單次多類別目標檢測器。我們模型的一個關鍵特性是使用網絡頂部多個feature map的多尺度卷積邊界框輸出。這種表示使我們能夠高效地建模可能的邊界框形狀空間。我們通過實驗驗證,在給定合適訓練策略的情況下,大量仔細選擇的默認邊界框會提高性能。我們構建的SSD模型比現有的方法至少要多一個數量級的邊界框預測採樣位置,尺度和長寬比[5,7]。我們證明了給定相同的VGG-16基礎架構,SSD在準確性和速度方面與其對應的最先進的目標檢測器相比毫不遜色。在PASCAL VOC和COCO上,我們的SSD512模型的性能明顯優於最先進的Faster R-CNN[2],而速度提高了3倍。我們的實時SSD300模型運行速度爲59FPS,比目前的實時YOLO[5]更快,同時顯著提高了檢測精度。

-----------------------------------------------------------------------------------------------------------------------------------------

PS:

SSD值得學習的地方

SSD的主要貢獻是在不同的輸出層上使用不同尺度的默認邊界框進行類別分數預測和邊界框偏移定位

  • 吸納了yolo和faster rcnn的優勢(錨點和分塊直接檢測)
  • 數據增強用了抽樣策略。(需要實驗+別的方法可以用)

可能會更好的地方:

  • ssd增加更多的默認邊界框形狀會更好。(需要實驗,根據檢測物調整)
  • ssd增加更多的不同分辨率輸出層會更好。(需要實驗+與FPN結合)
  • 改變基礎網絡VGG16
  • 可以更好地定位目標,但對於類似的目標類別(特別是對於動物)有更多的混淆,部分原因是我們共享多個類別的位置
  • 在小目標的檢測上差很多
  • 改進SSD的另一種方法是設計一個更好的默認邊界框平鋪,使其位置和尺度與feature map上每個位置的感受野更好地對齊。

借鑑資料:
https://blog.csdn.net/u010167269/article/details/52563573
Must Know Tips/Tricks in Deep Neural Networks

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章