【目標檢測算法】SSD(Single Shot MultiBox Detector)

ZSYL 2021-08-15 14:00:46 阅读数:52

本文一共[544]字,预计阅读时长:1分钟~
算法 ssd single shot multibox

學習目標

  • 目標
    • 知道SSD的結構
    • 說明Detector & classifier的作用
    • 說明SSD的優點

1. SSD

1.1 簡介

SSD算法源於2016年發錶的算法論文,論文網址:https://arxiv.org/abs/1512.02325

SSD的特點在於:

  • SSD結合了YOLO中的回歸思想和Faster-RCNN中的Anchor機制,使用全圖各個比特置的多尺度區域進行回歸,既保持了YOLO速度快的特性,也保證了窗口預測的跟Faster-RCNN一樣比較精准。

  • SSD的核心是在不同尺度的特征特征圖上采用卷積核來預測一系列Default Bounding Boxes的類別、坐標偏移。

1.2 結構

以VGG-16為基礎,使用VGG的前五個卷積,後面增加從CONV6開始的5個卷積結構,輸入圖片要求300*300。

在這裏插入圖片描述

1.3 流程

在這裏插入圖片描述

SSD中引入了Defalut Box,實際上與Faster R-CNNanchor box機制類似,就是預設一些目標預選框,不同的是在不同尺度feature map所有特征點上使用PriorBox層

1.4 Detector & classifier

在這裏插入圖片描述

Detector & classifier的三個部分:

  • 1.PriorBox層:生成default boxes,默認候選框

  • 2.Conv3 x 3:生成localization, 4個比特置偏移

  • 3.Conv3 x 3:confidence,21個類別置信度(要區分出背景)

在這裏插入圖片描述

1.4.1 PriorBox層-default boxes

default boxex類似於RPN當中的滑動窗口生成的候選框,SSD中也是對特征圖中的每一個像素生成若幹個框。

在這裏插入圖片描述

  • 特點分析:
    • priorbox:相當於faster rcnn裏的anchors,預設一些box,網絡根據box,通過分類和回歸給出被檢測到物體的類別和比特置。每個window都會被分類,並回歸到一個更准的比特置和尺寸上
    • 各個feature map層經過priorBox層生成prior box

在這裏插入圖片描述

根據輸入的不同aspect ratio 和 scale 以及 num_prior來返回特定的default box,

  • default box 的數目是feature map的height x width x num_prior。

在這裏插入圖片描述在這裏插入圖片描述

1、SSD網絡prior_box:打印出來的形狀為:
Tensor("concat_2:0", shape=(?, 7308, 8), dtype=float32)
2、variance: bounding regression中的權重。網絡輸出[dxmin,dymin,dxmax,dymax],即對應利用如下方法進行針對prior box的比特置回歸:
decode_bbox->set_xmin(
prior_bbox.xmin() + prior_variance[0] * bbox.xmin() * prior_width);
decode_bbox->set_ymin(
prior_bbox.ymin() + prior_variance[1] * bbox.ymin() * prior_height);
decode_bbox->set_xmax(
prior_bbox.xmax() + prior_variance[2] * bbox.xmax() * prior_width);
decode_bbox->set_ymax(
prior_bbox.ymax() + prior_variance[3] * bbox.ymax() * prior_height);
# 其中某一層的結構輸出
layer {

name: "conv6_2_mbox_priorbox"
type: "PriorBox"
bottom: "conv6_2"
bottom: "data"
top: "conv6_2_mbox_priorbox"
prior_box_param {

min_size: 111.0
max_size: 162.0
aspect_ratio: 2.0
aspect_ratio: 3.0
flip: true
clip: false
variance: 0.10000000149
variance: 0.10000000149
variance: 0.20000000298
variance: 0.20000000298
step: 32.0
offset: 0.5
}

1.4.2 localization與confidence

這兩者的意義如下,主要作用用來過濾,訓練

在這裏插入圖片描述

模型中打印出最後的三個部分結果:

Tensor("Reshape_42:0", shape=(?, 7308, 4), dtype=float32) Tensor("truediv:0", shape=(?, 7308, 21), dtype=float32) Tensor("concat_2:0", shape=(?, 7308, 8), dtype=float32)

問題:SSD中的多個Detector & classifier有什麼作用?

SSD的核心是在不同尺度的特征圖上來進行Detector & classifier容易使得SSD觀察到更小的物體

2. 訓練與測試流程

2.1 train流程

  • 輸入->輸出->結果與ground truth標記樣本回歸損失計算->反向傳播, 更新權值

1. 樣本標記:

先將prior boxground truth box做匹配進行標記正負樣本,每次並不訓練8732張計算好的default boxes, 先進行置信度篩選,並且訓練指定的正樣本和負樣本, 如下規則

  • 正樣本

    • 1.與GT重合最高的boxes, 其輸出對應label設為對應物體.
    • 2.物體GT與anchor iou滿足大於0.5
  • 負樣本:其它的樣本標記為負樣本

在訓練時, default boxes按照正負樣本控制positive:negative=1:3

2. 損失

網絡輸出預測的predict box與ground truth回歸變換之間的損失計算, 置信度是采用 Softmax Loss(Faster R-CNN是log loss),比特置回歸則是采用 Smooth L1 loss (與Faster R-CNN一樣)

在這裏插入圖片描述

2.2 test流程

  • 輸入->輸出->nms->輸出

3. 比較

在這裏插入圖片描述

從圖中看出SSD算法有較高的准確率和性能,兼顧了速度和精度

4. 總結

  • SSD的結構
  • Detector & classifier的組成部分以及作用
  • SSD的訓練樣本標記
  • GT與default boxes的格式轉換過程
版权声明:本文为[ZSYL]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/08/20210815140041027y.html