1. 程式人生 > >半月一讀——Single Shot MultiBox Detector(SSD)詳細筆記

半月一讀——Single Shot MultiBox Detector(SSD)詳細筆記

寫在前面

接觸了深度學習也有4個月之久了,雖然做的方向和分類以及目標檢測無關,但是私以為一些經典之作還是需要知道並且細細品味的,因此特別的想每半個月找一篇經典之作好好的讀一讀,總結總結,其實過程下來之後,發現還是能收穫不少的。那關於目標檢測這方面的論文著實也有不少了,網上的各路分析總結也有不少了,寫部落格的真實意圖一方面是對知識的再總結,一方面是自己在看別人的部落格的時候,確實也覺得有沒有說到位的地方,這裡僅僅是把自己覺得不到位的地方用圖表或者文字表述出來,期望可以幫助更多的同志們~這裡我的方式是採用正文翻譯加自己理解的部分

tip: 更多經典之作可以戳here

Single Shot MultiBox Detector(SSD)

Abstract

我們提供了一種使用簡單的神經網路進行圖片中物體識別的方法。SSD方法將輸出的bounding boxes離散化為一系列具有不同快高比(aspect ratio)和尺度的特徵圖上的default box。在預測時,網路為每個default box中的每個物件類別的存在打分,併產生對框的矯正量以更好地匹配物件形狀。此外,該網路將多個不同解析度的特徵圖預測結合在一起以便於自然處理各種尺寸的物體。 SSD相對於需要物件提議的方法而言是簡單的,因為它完全消除了提議生成和後續畫素或特徵重取樣階段,並將所有計算封裝在單個網路中。這使得SSD易於訓練並且可以直接整合到需要檢測元件的系統中。 PASCAL VOC,COCO和ILSVRC資料集的實驗結果證實,SSD與使用額外物件提議步驟的方法相比具有競爭力,並且速度更快,同時為培訓和推理提供了統一的框架。對300×300的輸入,SSD在NFCidia Titan X上以59 FPS進行推理,VOC2007測試時達到74.3%mAP1,對於512×512的輸入,SSD達到76.9%mAP,優於同等最先進的faster RCNN網路。與其他單級方法相比,即使輸入影象尺寸較小,SSD也具有更高的精度。程式碼可從以下網址獲得https:

//github.com/weiliu89/caffe/tree/ssd。

Introduction

當前最先進的物體檢測系統是以下方法的變形:先假設bounding boxes,對於每個bbox中的重畫素或特徵進行重取樣,並應用高質量分類器進行預測。上述流程在一段時期的檢測領域非常流行,這個時期是從Selective Search的應用到基於Faster RCNN在PASCAL VOC,COCO和ILSVRC資料集取得領先結果之前。這些方法雖然都很準確,但是對於嵌入式系統而言,他們的運算強度過強,即使使用高階硬體,對於實時應用來說也太慢了。通常這些方法的推演速率為每秒幾幀(SPF),甚至對於很快的Faster RCNN,它的速度也才到每秒7幀(FPS)。目前也有很多方法嘗試攻克流程中的某個環節來獲得更快的檢測方法,但是目前為止,速度的大幅提升總是伴隨著降準率的嚴重下降。
該文章提出了第一個不用bbox假設進行畫素或者特徵的重取樣的網路,同時它的精準度還和基於bbox假設的方法一樣。結果表明該方法大幅度提高了高精度檢測的速度 (59 FPS 能達到 mAP 74.3% 在 VOC2007 測試集, 對比於 Faster R-CNN 7 FPS 達到的mAP 73.2% 或者 YOLO 45 FPS 達到的 mAP 63.4%)。速度提升的最重要的因素在於該方法減少了bbox建議框的提取和對於畫素或者特徵的重取樣步驟。我們雖然不是第一個做這方面的,但是經過添加了一系列的提升方法之後,準確度得到了顯著的提升。我們的方法包括使用較小的卷積核來預測物體的類別和bbox的偏移,對不同寬高比使用不同的濾波器,同時使用這些濾波器在網路的最後的幾層用以在不同尺度的特徵圖上進行預測。依靠著這些改變——尤其是在不同尺度的特徵圖上進行預測——我們可以在一個相對較低的解析度下達到一個較高的準確率,同時提高速度。雖然這些貢獻看起來很小,但是我們注意到由此產生的系統提高了PASCAL VOC的實時檢測準確度,mAP從YOLO的63.4%到我們SSD的74.3%。與最近關於參差網路的高調的工作相比,這在檢測精度上有了很大的相對改善。此外,顯著的高質量檢測的速度可以擴大計算機視覺使用的環節範圍。

tip: 摘要部分可以看到作者一直強調該方法的優勢是速度快,同時兼顧了準確率,也就是平衡了速率和準確率的trade-off,同時作者也說明了整個方法中最好的改變就是使用default box的方法減少了bbox proposals和重取樣的步驟,同時還使用在不同尺度上進行預測的方式提高了準確率。
我們將貢獻總結為下列幾點:

  • 我們介紹了SSD——一個比之前最先進的single shot檢測器(YOLO)更準確的多類別single shot檢測器,事實上,SSD的準確度和顯式的使用建議框和池化操作的Faster RCNN一樣準確。
  • SSD的核心是用小的卷積核對在特徵圖上一系列的default box進行卷積從而預測類別的得分和box的偏移。
  • 為了達到比較高的準確度,我們在不同尺度的特徵圖上進行不同尺度的預測,同時使用快高比顯式的分離出預測器(這裡的意思就是說根據寬高比的不同,預測不同大小的物體)。
  • 即使在低解析度輸入影象上,這些設計特點也可實現簡單的端到端訓練和高精度,從而進一步提高速度與精度之間的權衡。
  • 實驗包括在PASCAL VOC,COCO和ILSVRC上評估的具有不同輸入尺寸的模型的時序和精度分析,並與一系列最新的最新方法進行比較。

2 The Single Shot Detector (SSD)

本節介紹我們提出的用於檢測的SSD框架(第2.1節)和相關的訓練方法(第2.2節)。 之後,Sec3顯示了資料集特定的模型細節和實驗結果。
figure1

Fig 1: SSD框架。(a)SSD在訓練期間僅需要每個物件的輸入影象和ground truth(GT)。 以卷積方式,我們在具有不同尺度的若干特徵圖(像(b)和©中的8×8和4×4尺寸的特徵圖)中預測每個位置處的不同寬高比的一系列(例如4個)預設框。 對於每個預設框,我們預測形狀偏移和所有物件類別的置信度((c1,c2,···,cp))。在訓練時,我們首先將這些預設框與ground truth匹配。例如,我們將兩個預設框與cat匹配,一個與dog匹配,將其視為正樣本,其餘為負樣本。模型損失函式是定位損失(如smooth L1方法)和置信度損失(如Softmax)之間的加權和。

2.1 Model

SSD方法是基於前饋卷積的網路,該網路生成固定大小的邊界框集合以及在這些框中存在物件類例項的分數,隨後使用非最大抑制方法產生最終結果。前面的網路層使用基於高質量影象分類的標準框架(在分類層之前把網路截斷),我們將其稱為基礎網路(論文中使用的是VGG-16)。然後,我們將輔助的網路層新增到網路中以生成具有以下主要特徵的檢測:

  • 檢測多尺度特徵圖 我們在截斷的基礎網路末尾新增一些卷積層。這些特徵層的尺寸逐漸減小並在多個尺度上目標預測。 用於目標預測的卷積模型對於每個特徵層是不同的(參見Overfeat和YOLO在單個尺度特徵圖上操作)。
  • 用於目標檢測的卷積預測器 每個新增的特徵層(或者選擇來自基礎網路的現有特徵層)可以使用一組卷積濾波器產生一組固定的目標預測。這些層在圖2中的SSD網路架構上表示。對於具有p個通道的大小為m×n的特徵層,用於預測潛在目標的引數是3×3×p小卷積核,其卷積出來的值要麼是類別的分數的部分,要麼就是相對於預設框的形狀偏移部分(這個部分我也是讀了很多次才理解,其實作者就是把卷積的過程講了一遍,因為平時我們對一個大小為W×H×C的特徵圖進行卷積輸出Co通道的時候,也是拿Co個大小為3×3×C的卷積核對輸入的特徵圖進行卷積操作,之後將獲得的Co個大小為W×H×1疊在一起,作者這裡說的其實就是這個過程)。在每個m×n位置處使用卷積核進行卷積就可以產生輸出值。邊界框的偏移量是相對於每個預設框位置的,每個預設框的位置都是相對於特徵圖位置的(參見YOLO的結構,該結構中此步驟使用中間完全連線層而不是卷積濾波器)。