1. 程式人生 > >[目標檢測]SSD:Single Shot MultiBox Detector

[目標檢測]SSD:Single Shot MultiBox Detector

基於”Proposal + Classification”的Object Detection的方法,RCNN系列(R-CNN、SPPnet、Fast R-CNN以及Faster R-CNN)取得了非常好的效果,因為這一類方法先預先回歸一次邊框,然後再進行骨幹網路訓練,所以精度要高,這類方法被稱為two stage的方法。但也正是由於此,這類方法在速度方面還有待改進。由此,YOLO[8]應運而生,YOLO系列只做了一次邊框迴歸和打分,所以相比於RCNN系列被稱為one stage的方法,這類方法的最大特點就是速度快。但是YOLO雖然能達到實時的效果,但是由於只做了一次邊框迴歸並打分,這類方法導致了小目標訓練非常不充分,對於小目標的檢測效果非常的差。簡而言之,YOLO系列對於目標的尺度比較敏感,而且對於尺度變化較大的物體泛化能力比較差

針對YOLO和Faster R-CNN的各自不足與優勢,WeiLiu等人提出了Single Shot MultiBox Detector,簡稱為SSD。SSD整個網路採取了one stage的思想,以此提高檢測速度。並且網路中融入了Faster R-CNN中的anchors思想,並且做了特徵分層提取並依次計算邊框迴歸和分類操作,由此可以適應多種尺度目標的訓練和檢測任務。SSD的出現使得大家看到了實時高精度目標檢測的可行性。

一、網路結構

SSD網路主體設計的思想是特徵分層提取,並依次進行邊框迴歸和分類。因為不同層次的特徵圖能代表不同層次的語義資訊,低層次的特徵圖能代表低層語義資訊(含有更多的細節),能提高語義分割質量,適合小尺度目標的學習。高層次的特徵圖能代表高層語義資訊,能光滑分割結果,適合對大尺度的目標進行深入學習。所以作者提出的SSD的網路理論上能適合不同尺度的目標檢測。

所以SSD網路中分為了6個stage,每個stage能學習到一個特徵圖,然後進行邊框迴歸和分類。SSD網路以VGG16的前5層卷積網路作為第1個stage,然後將VGG16中的fc6和fc7兩個全連線層轉化為兩個卷積層Conv6和Conv7作為網路的第2、第3個stage。接著在此基礎上,SSD網路繼續增加了Conv8、Conv9、Conv10和Conv11四層網路,用來提取更高層次的語義資訊。如下圖3.1所示就是SSD的網路結構。在每個stage操作中,網路包含了多個卷積層操作,每個卷積層操作基本上都是小卷積。

骨幹網路:SSD前面的骨幹網路選用的VGG16的基礎網路結構,如上圖所示,虛線框內的是VGG16的前5層網路。然後後面的Conv6和Conv7是將VGG16的後兩層全連線層網路(fc6, fc7)轉換而來。

另外:在此基礎上,SSD網路繼續增加了Conv8和Conv9、Conv10和Conv11四層網路。圖中所示,立方體的長高表示特徵圖的大小,厚度表示是channel。

二、設計要點

1. Default Boxes生成

在目標檢測網路設計中,Default Boxes生成都是重中之重,也許直接決定了網路能針對的任務以及檢測的效能。在SSD中,作者充分的吸取了Faster R-CNN中的Anchors機制,在每個Stage中根據Feature Map的大小,按照固定的Scale和Radio生成Default Boxes。這裡為了方便闡述,選取了Conv9的Feature Map,輸出大小為5x5。SSD網路中作者設定Conv9的每個點預設生成6個box,如下圖所示。因此在這一層上,共生成了5x5x6=150個boxes。

2. 特徵向量生成

在每張特徵圖上得到許多Default Box後還需要生成相應的特徵向量,用來進行邊框迴歸和分類。對於邊框迴歸,只需要4維向量即可,分別代表邊框縮放尺度(座標軸兩個方向)和平移向量(座標軸兩個方向)。對於分類,SSD網路採取為每個類別進行打分的策略,也就是說對於每個Default Box,SSD網路會計算出相應的每個類別的分數。假設資料集類別數為c,加上背景,那麼總的類別數就是c+1類。SSD網路採用了c+1維向量來分別代表該Default Box對於每個類別所得到的分數。這裡,假設是VOC資料集,那麼每個Default Box將生成一個20 + 1 + 4 = 25維的特徵向量。同樣,以Conv9輸出特徵圖5x5為例。

3. 新增卷積網路

SSD網路在VGG基礎上新增加了幾個卷積網路(如網路結構中所述)。SSD網路總共增加了Conv8、Conv9、Conv10和Conv11四個卷積網路層。新增的這些網路都是通過一些小的卷積核操作。引用論文所說,這些小的卷積核操作是SSD網路效能優秀的核心。下面本報告將簡單的闡述一下作者對於卷積網路的簡單配置。

卷積核配置
- 假設Feature Map通道數為P,SSD網路中每個Stage的卷積核大小統一為3*3*P。其中padding和stride都為1。保證卷積後的Feature Map和卷積前是一樣大小。

卷積濾波器
- 每個Feature Map上mxn個大小的特徵點對應K個Default Boxes,假設類別數+背景=c,最終通過卷積濾波器得到c+4維特徵向量。那麼一個Feature Map上的每個點就需要使用kx(c+4)個這樣的濾波器。

4. 聯合LOSS FUNCTION

三、訓練策略

訓練SSD和基於region proposal方法的最大區別就是:SSD需要精確的將ground truth對映到輸出結果上。這樣才能提高檢測的準確率。文中主要採取了以下幾個技巧來提高檢測的準確度

  • 匹配策略
  • Default boxes生成器
  • Hard Negative Mining
  • Data Augmentation

1. 匹配策略

這裡的匹配是指的ground truth和Default box的匹配。這裡採取的方法與
Faster R-CNN中的方法類似。主要是分為兩步:第一步是根據最大的overlap將ground truth和default box進行匹配(根據ground truth找到default box中IOU最大的作為正樣本),第二步是將default boxes與overlap大於某個閾值(目標檢測中通常選取0.5,Faster R-CNN中選取的是0.7)的ground truth進行匹配。

2. Default Boxes生成器

3. Hard Negative Mining

經過匹配策略會得到大量的負樣本,只有少量的正樣本。這樣導致了正負樣本不平衡,經過試驗表明,正負樣本的不均衡是導致檢測正確率低下的一個重要原因。所以在訓練過程中採用了Hard Negative Mining的策略,根據Confidence Loss對所有的box進行排序,使得正負樣本的比例控制在1:3之內,經過作者實驗,這樣做能提高4%左右的準確度。

4. Data Augmentation

為了模型更加魯棒,需要使用不同尺度目標的輸入,作者對資料進行了增強處理。

  • 使用整張影象作為輸入
  • 使用IOU和目標物體為0.1、0.3、0.5、0.7和0.9的patch,這些patch在原圖的大小的[0.1, 1]之間,相應的寬高比在[1/2, 2]之間。
  • 隨機採取一個patch

四、實驗結果

1. PASCAL VOC 2007

2. 模型分析

3. PASCAL VOC 2012

五、參考文獻

[1] He K, Zhang X, Ren S, et al. Spatial pyramid pooling in deep convolutional networks for visual recognition[C]//European Conference on Computer Vision. Springer, Cham, 2014: 346-361.
[2] Redmon J, Divvala S, Girshick R, et al. You only look once: Unified, real-time object detection[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016: 779-788.
[3] Liu W, Anguelov D, Erhan D, et al. Ssd: Single shot multibox detector[C]//European conference on computer vision. Springer, Cham, 2016: 21-37.
[4] https://zhuanlan.zhihu.com/p/24954433
[5] github原始碼地址

其它平臺只是資訊轉發(留言可能看不到),歡迎同學們到個人blog交流:https://faiculty.com/