物體檢測丨淺析One stage detector「YOLOv1、v2、v3、SSD」

vincent1997發表於2019-05-29

引言

之前做object detection用到的都是two stage,one stage如YOLO、SSD很少接觸,這裡開一篇blog簡單回顧該系列的發展。很抱歉,我本人只能是蜻蜓點水,很多細節也沒有弄清楚。有需求的朋友請深入論文和程式碼,我在末尾也列出了很多優秀的參考文章。

YOLOv1

You Only Look Once: Unified, Real-Time Object Detection

核心思想

  • 用一個CNN實現end-to-end,將目標檢測作為迴歸問題解決。

1559093054882

將輸入圖片分割為\(S\times S\)網格,如果物體的中心落入網格中央,這個網格將負責檢測這個物體。因此網路學會了去預測中心落在該網格中的物體。

每個網格預測\(B\)bounding boxesconfidence scores。confidence scores包含兩方面:

  1. 這個boundingbox包含物體的可能性\(Pr(Object)\):bb包含物體時\(Pr(Object)=1\)否則為0。
  2. 這個boundingbox的準確度\(IOU^{truth}_{pred}\):pred和gt的IoU。

因此,confidence scores可定義為$Pr(Object)*IoU^{truth}_{pred} $

每個bbox包含5個predictions:\(x,y,w,h和confidence\)\((x,y)\)表示bbox中心座標,\(h,w\)表示bbox長寬,\(confidence\)表示pred和gt box的IoU。

每個網格預測\(C\)個類別概率\(Pr(Class_i|Object)\),表示該網格負責預測的邊界框目標屬於各類的概率。我們不考慮box的數量即\(B\)

測試階段我們將類別概率和confidence score相乘,得每個box的類特定confidence score:

\[Pr(Class_i|Object)*Pr(Object)*IoU^{truth}_{pred}=Pr(Class_i)*IoU^{truth}_{pred}\]

表示box中類別出現的概率和預測box與目標的擬合程度。

1559094618604

將圖片分解為$S\times S \(個gird,每個grid預測\)B\(個bbox,confidence和\)C\(個類概率,預測值為\)S\times S \times (B*5+C)$

網路架構

1559093969006

網路結構參考GooLeNet,包含24個卷積層和2個啟用層,卷積層使用1x1卷積降維然後跟3x3卷積。對於卷積層和全連線層,採用Leaky ReLU:\(max(x,0.1x)\),最後一層採用線性啟用層。

網路輸出維度為30(\(B=2\)),前20個元素是類別概率值,然後2個是邊界框置信度,最後8個是bbox的\((x,y,w,h)\)

  • Loss:YOLO把分類問題轉化為迴歸問題

v2-45795a63cdbaac8c05d875dfb6fcfb5a_r

第一項是bbox中心座標誤差項;第二項是bbox高與寬誤差項;

第三項是包含目標bbox置信度誤差項;第四項是不包含目標bbox置信度誤差項;

最後一項是包含目標的grid分類誤差項。

將Loss對應到predtion張量上:

v2-d6fcd043ca10718f9f88857f4af9fa58_r

實驗結果

1559094247691

SSD

SSD:Single Shot MultiBox Detector

核心思想

速度比YOLO快,精度可以跟Faster RCNN媲美。

  1. 採用多尺度特徵圖用於檢測:大特徵圖檢測小目標,小特徵圖檢測大目標。

  2. 採用卷積進行檢測:與YOLO最後採用全連線層不同,SSD直接採用卷積提取檢測結果。

  3. 設定先驗框:借鑑Faster RCNN中anchor理念,為每個網格設定不同長寬比的anchor,bbox以anchor為基準。

    v2-f6563d6d5a6cf6caf037e6d5c60b7910_r

網路架構

在VGG16基礎上增加了卷積層獲得更多特徵圖用於檢測。

上是SSD,下是YOLO

v2-a43295a3e146008b2131b160eec09cd4_r

實驗結果

v2-09cf380f4fc0572c12acfd5f1372d310_r

YOLOv2

YOLO9000: Better, Faster, Stronger

核心思想

YOLOv1雖然檢測速度快,但檢測精度不如RCNN,YOLOv1定位不夠準確,召回率也低。於是YOLOv2提出了幾種改進策略來提升YOLO模型的定位準確度和召回率,並保持檢測速度。

1559114589104

  • Better

    • Batch Normalization:加快收斂並起到正則化效果,防止過擬合。

    • High Resolution Classifier:在ImageNet資料上使用\(448\times448\)輸入來finetune。

    • Convolutional With Anchor Boxes:借鑑Faster R-CNN中RPN的anchor boxes策略,預測offset而不是coordinate。

    • Dimension Clusters:採用k-means來替代人工選取anchor。並使用下式來度量距離。

      \[d(box,centroid)=1-IOU(box, centroid)\]

    • Direct location prediction:改變了預測bbox的計算公式

      1559115554561

    • Fine-Grained Features:小物體需要更精細的特徵圖。採用passthrough層將高解析度特徵concat低解析度特徵,類似於ResNet。
    • Multi-Scale Training:每隔10batch,網路隨機選擇新的影像尺寸。

  • Faster

    • Darknet-19
    • Training for classification
    • Training for detection
  • Stronger

    • Hierarchical classification
    • Dataset combination with WordTree
    • Joint classification and detection

網路架構

1559116219628

實驗結果

1559116314690

YOLOv3

YOLOv3: An Incremental Improvement

核心思想

  • Bounding Box Prediction:和v2一樣使用聚類來獲得anchor並預測bbox座標。
  • Class Prediction:不使用softmax,使用二元交叉熵進行類別預測。
  • Predictions Across Scales:跨尺度預測,類似FPN使用3個尺度,預測為\(N\times N\times[3*(4+1+80)]\),4個box offsets、1個obj prediction和80個類prediction。
  • Feature Extractor:Darknet-53,加入了Residual。

網路架構

1559116955153

v2-ffbc5b713c98c13e2659bb528b05fd67_r

實驗結果

1559117624834

preview

參考

  • paper

[1]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.

[2]Liu W, Anguelov D, Erhan D, et al. Ssd: Single shot multibox detector[C]//European conference on computer vision. Springer, Cham, 2016: 21-37.

[3]Redmon J, Farhadi A. YOLO9000: better, faster, stronger[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 7263-7271.

[4]Redmon J, Farhadi A. Yolov3: An incremental improvement[J]. arXiv preprint arXiv:1804.02767, 2018.

  • blog

目標檢測|YOLO原理與實現

目標檢測|YOLOv2原理與實現(附YOLOv3)

目標檢測|SSD原理與實現

你真的讀懂yolo了嗎?

artifical-intelligence

【YOLO】yolo v1到yolo v3

What do we learn from single shot object detectors (SSD, YOLOv3), FPN & Focal loss (RetinaNet)?

YOLO 的發展

相關文章