1. 程式人生 > >SSD+caffe︱Single Shot MultiBox Detector 目標檢測(一)

SSD+caffe︱Single Shot MultiBox Detector 目標檢測(一)

作者的思路就是Faster R-CNN+YOLO,利用YOLO的思路和Faster R-CNN的anchor box的思想。
.

0 導讀

(本節來源於BOT大賽嘉賓問答環節 )
SSD 這裡的設計就是導致你可以一下子可以檢測 8 張圖,FasterRCNN 一下子只能檢測 1 張圖片,這樣的話會導致會有 8 張圖片的延遲。但是我覺得如果你用 FasterRCNN 的話,你可以優化前面的這個,在實際使用的時候可以把這個網路簡化一下。YOLO 做了這樣一些設計,在做 3×3×256 的運算之前先有一個 1×1×128 的卷積層,這樣的話,它會讓你下一層的運算量減少一半。就是說前面一層輸出的維數變為一半,下一層再做大卷積和的時候,這樣的運算更小了。
SSD 的輸入是 300×300,其實這個圖片的大小和處理速度也是有很大的影響。比如說如果你要檢測一個很大的物體的話,我們覺得在計算的時候並不需要像 FasterRCNN 那樣有成就感。如果你去看卷積的運算過程的話,這個圖片大小是和運算量有一個關係的。就是你實際做檢測的話,可以儘量的去壓縮輸入的大小,得到速度的提升,另外一方面就是這種網路結構。最近谷歌有專門講檢測的速度和精度的平衡。

  • FasterRCNN 比 SSD 要好一些?

SSD 很多訓練的策略是非常有效的,因為 FasterRCNN 已經出得非常久了,這個檢測效果我覺得可以針對實際場景去看一下這幾個框架在做訓練的時候採用了一些資料增強的方法,包括一些訓練之類的,我覺得這個對於檢測效果影響也非常大。像 SSD 最開始其實效果並沒有這麼好,並沒有這麼高。但是它通過一些策略,讓它訓練的精度達到了這個效果。
.

公眾號“素質雲筆記”定期更新部落格內容:

這裡寫圖片描述

1 SSD:Single Shot MultiBox Detector

較多參考於:SSD
.

1.1 優勢

  1. 關鍵的資料增廣,取樣策略在分類期間使用了pooling,比人為設定更魯棒。
  2. 更多特徵圖的提升 ,使用底層特徵圖來預測邊界框輸出。
  3. 更多的預設框形狀效果更好,預設情況下,每個位置使用6個預設框。如果我們刪除具有1/3和3寬高比的框,效能下降0.9%。通過進一步移除1/2和2縱橫比的框,效能再下降2%。使用多種預設框形狀似乎使網路預測任務更容易。
  4. Atrous演算法更好更快
  5. 小物體檢測的檢測效能較好。

.

1.2 網路結構

該論文采用 VGG16 的基礎網路結構,使用前面的前 5 層,然後利用 astrous 演算法將 fc6 和 fc7 層轉化成兩個卷積層。再格外增加了 3 個卷積層,和一個 average pool層。不同層次的 feature map 分別用於 default box 的偏移以及不同類別得分的預測(慣用思路:使用通用的結構(如前 5個conv 等)作為基礎網路,然後在這個基礎上增加其他的層),最後通過 nms得到最終的檢測結果。
這裡寫圖片描述


允許能夠檢測出不同尺度下的物體: 在低層的feature map,感受野比較小,高層的感受野比較大,在不同的feature map進行卷積,可以達到多尺度的目的。
低層的特徵圖feature map對區域性進行描述的更為精確,但是高層的內容對全域性的資訊描述更準,看不同的需求。而SSD就是區域性+整體結合的方式。
.

1.3 多尺度feature map

得到 default boxs及其 4個位置偏移和21個類別置信度。按照不同的 scale 和 ratio 生成,k 個 default boxes,這種結構有點類似於 Faster R-CNN 中的 Anchor。
.

1.4 影象增強

為了模型更加魯棒,需要使用不同尺寸的輸入和形狀,作者對資料進行了如下方式的隨機取樣:

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

當 ground truth box 的 中心(center)在取樣的 patch 中時,我們保留重疊部分。在這些取樣步驟之後,每一個取樣的 patch 被 resize 到固定的大小,並且以 0.5 的概率隨機的 水平翻轉(horizontally flipped)。用資料增益通過實驗證明,能夠將資料mAP增加8.8%。
這裡寫圖片描述
.

2 SSD測評結果

SSD在精度和速度方面勝過最先進的物件檢測器。我們的SSD500型號在PASCAL VOC和MS COCO的精度方面明顯優於最先進的Faster R-CNN [2],速度快了3倍。 我們的實時SSD300模型執行在58 FPS,這比當前的實時YOLO[5]更快,同時有顯著高質量的檢測。
本次參考:翻譯SSD論文(Single Shot MultiBox Detector),僅作交流~
.

2.1 實驗調參

我們的實驗基於VGG16 [14]網路,在ILSVRC CLS-LOC資料集[15]預訓練。類似於DeepLab-LargeFOV [16],我們將fc6和fc7轉換為卷積層,從fc6和fc7兩層取樣得到引數,將pool5從2×2-s2更改為3×3-s1,並使用atrous演算法填“洞”。我們刪除了所有的dropout層和fc8層,使用SGD對這個模型進行fine-tune,初始學習率 ,0.9 momentum, 0.0005 weight decay, batch大小32。每個資料集的學習速率衰減策略略有不同,稍後我們將描述詳細資訊。
.

2.2 PASCAL VOC2007測試集檢測結果

這裡寫圖片描述

Fast和Faster R-CNN輸入影象最小尺寸為600,兩個SSD模型除了輸入影象尺寸(300*300和500*500),其他設定與其相同。很明顯,較大的輸入尺寸得到更好的結果。
增加輸入尺寸(例如從300×300到500×500)可以幫助改善檢測小物件,但是仍然有很大改進空間。積極的一面是,我們可以清楚地看到SSD在大物件上表現很好。並且對於不同的物件寬高比非常魯棒,因為我們對每個特徵圖位置使用各種長寬比的預設框。
.

2.3 MS COCO資料集

使用trainval35k [21]來訓練我們的模型。由於COCO有更多的物件類別,開始時的梯度不穩定。
通過將影象大小增加到500×500,我們的SSD500在兩個標準中都優於Faster R-CNN。此外,我們的SSD500模型也比ION[21]更好,它是一個多尺寸版本的Fast R-CNN,使用迴圈網路顯式模擬上下文。
這裡寫圖片描述
.

2.4 ILSVRC

目前保留的是ILSVRC2015的SSD-500*500,ILSVRC2016的SSD-300*300。
.

2.5 SSD500-SSD300對比

SSD在精度上要高於SSD300,不過FPS小了不少。相對來說,SSD價效比比較好。

這裡寫圖片描述
.

3 caffe實現SSD

3.1 安裝

git clone https://github.com/weiliu89/caffe.git
cd caffe
git checkout ssd

一些教程說要把原來caffe資料夾刪掉,但是筆者實踐時候,可以不用。
同時,Makefile.config的設定,可以直接拷貝主caffe目錄,然後:

make -j8
# Make sure to include $CAFFE_ROOT/python to your PYTHONPATH.
make py
make test -j8
make runtest -j8

.

3.2 已有的模型

weiliu89/caffe開源了三款資料集的fine-tuning模型,PASCAL VOC models、COCO models、ILSVRC models。
PASCAL VOC models:20分類
COCO models:80分類
ILSVRC models:1000分類
.

4、model zoo