天天看點

ssd網絡結構_目标檢測算法SSD結構詳解

上期我們一起學習了

Faster RCNN

的損失函數以及如何進行模型訓練的相關知識,如下:

Faster RCNN的損失函數以及模型訓練流程

本文主要學習:

  • One-Stage / Two-Stage
  • SSD模型結構

我們知道之前學的

RCNN

系列需要選取候選框和分類回歸兩步操作,稱為

Two-Stage

類算法。今天我們學習一種新的目标檢測算法

SSD

(

Single Shot MultiBox Detector

),該算法屬于

One-Stage

類算法範疇。首先我們先看一下

One-Stage

Two-Stage

類算法到底有哪些差別。

One-Stage / Two-Stage

  • Two-Stage:Faster RCNN

    Two-Stage

    算法将檢測問題劃分為兩個階段,首先産生候選區域(

    Region Proposals

    ),然後再對候選區域進行分類和位置回歸。

    特點:錯誤率低,漏識别率低,但是速度較慢,不太能滿足實時監測場景。

  • One-Stage:SSD YOLO

    One-Stage

    算法不需要

    Region Proposals

    階段,可以直接産生物體的類别機率和位置坐标值,經過單次檢測即可直接得到最終的檢測結果。

    特點:有着更快的檢測速度。

如下圖,我們也可以從下圖中看到

One-Stage

Two-Stage

算法的性能差異:

ssd網絡結構_目标檢測算法SSD結構詳解

可以看到在

VOC2007

測試集上

One-Stage

算法有着更快的檢測速度。

SSD模型結構

SSD

算法的模型結構簡單的說包括

VGG16

基礎網絡和後面的特征提取檢測網絡,我們逐一學習。

基礎網絡

SSD

算法的基礎網絡是

VGG16

,我們先複習下

VGG16

的網絡結構,如下圖:

ssd網絡結構_目标檢測算法SSD結構詳解

VGG16模型結構

可以看到:

  1. VGG16

    的網絡輸入是

    224*224*3

    的圖像
  2. 經過兩個卷積層(

    Conv1

    )得到

    224*224*64

    尺寸的特征圖
  3. 經過一個池化層和兩個卷積層(

    Conv2

    )後得到

    112*112*128

    尺寸的特征圖
  4. 經過一個池化層和三個卷積層後(

    Conv3

    )得到

    56*56*256

    尺寸的特征圖
  5. 經過一個池化層和三個卷積層後(

    Conv4

    )得到

    28*28*512

    尺寸的特征圖
  6. 經過一個池化層和三個卷積層後(

    Conv5

    )得到

    14*14*512

    尺寸的特征圖
  7. 經過一個池化層後得到

    7*7*512

    尺寸的特征圖
  8. 最後經過全連接配接層(

    FC6&FC7

    )後再接一個

    softmax

    層後輸出結果

上面的輸入是

224*224*3

的圖像,這裡

SSD

算法有兩種尺寸,一種是

SSD300

就是輸入圖像大小為

300*300*3

的,另外一種是

SSD500

,即輸入圖像尺寸為

500*500*3

。以

SSD300

為例,則上面第

5

步的

Conv4

後,将得到

38*38*512

的特征圖。

SSD模型結構

了解了

VGG16

這個基礎網絡,我們來看下

SSD

的結構架構是什麼樣子的,如下圖:

ssd網絡結構_目标檢測算法SSD結構詳解

SDD結構架構

從圖中我們可以看到,

SSD

算法結構流程如下:

  1. 将尺寸大小為

    300*300*3

    的圖像輸入到

    VGG16

    網絡中,在

    VGG16

    的第

    5

    步也就是

    Conv4

    之後得到

    38*38*512

    的特征圖
  2. 接着通過一個池化和

    3*3*1024

    的卷積層

    Conv6

    得到

    19*19*1024

    的特征圖
  3. 之後再經過一個

    1*1*1024

    的卷積操作

    Conv7

    ,得到

    19*19*1024

    的特征圖
  4. 接着做一個

    1*1*256

    3*3*512-s2

    (

    s2

    stride=2

    )的卷積操作

    Conv8

    後得到

    10*10*512

    的特征圖
  5. 繼續做卷積操作

    Conv9

    ,具體為

    1*1*128

    3*3*256-s2

    卷積之後得到

    5*5*256

    的特征圖
  6. 繼續做卷積操作

    Conv10

    ,具體為

    1*1*128

    3*3*256-s1

    卷積之後得到

    3*3*256

    的特征圖
  7. 繼續做卷積操作

    Conv11

    ,具體為

    1*1*128

    3*3*256-s1

    卷積之後得到

    1*1*256

    的特征圖

SSD

算法的大概結構如上,但是是如何進行分類和回歸的呢?

我們發現,上圖中

Conv4

,

Conv7

,

Conv8

,

Conv9

,

Conv10

Conv11

都有指向後面的

8732

分類和最後的非極大值抑制。以Conv4為例,

Conv4

後得到的特征圖尺寸為

38*38*512

,對該

38*38

的特征圖上的每個像素類似前面

Faster-RCNN

中的

anchor

一樣,映射到輸入圖檔上産生

4

個候選框,總共産生

38*38*4=5776

個候選框,然後對每個候選框進行分類和回歸,而該分類和回歸是通過一個

3*3*(4*(Classes+4))

的卷積操作完成的。其他類似,比如對

Conv7

,

Conv8

Conv9

特征圖中每個像素産生

6

個候選框,對

Conv10

Conv11

特征圖中的每個像素産生

4

個候選框。總計産生

8732

個候選框,對每個候選框逐級分類和回歸之後進行非極大值抑制操作,即得出目标檢測結果。

SSD檢測執行個體

我們知道根據特征圖往輸入圖檔上映射候選框會根據特征圖大小進行不同比例的映射,也就是說前面的特征圖,比如

Conv4

Conv7

映射的候選框偏小,可以用來檢測小物體;

Conv8

Conv9

映射的候選框尺寸中等,可以用來檢測中等大小的物體,而

Conv10

Conv11

映射到原圖的候選框偏大,則可以用來檢測大物體。這樣實作的檢測不同尺度物體的目的。接下來,我們執行個體看一下

SSD

的預測過程,如下圖:

ssd網絡結構_目标檢測算法SSD結構詳解

SSD詳細結構

在上圖中,

  1. 輸入圖檔

    size

    300*300*3

    ,經過

    VGG16

    Conv4

    後得到

    38*38*512

    的特征圖,對此特征圖機芯正則化後對

    38*38*4=5776

    個候選框進行分類和回歸,由于該特征圖常用來檢測小物體,是以在該特征圖上并未檢測到圖檔中的汽車。
  2. 接着對上一步的特征圖進行卷積操作得到

    19*19*1024

    的特征圖,對生成的

    19*19*6=2166

    個候選框進行分類和回歸,在該特贈圖上仍未檢出物體。
  3. 繼續做卷積操作,得到

    10*10*512

    的特征圖,對生成的

    10*10*6=600

    個候選框進行分類和回歸,仍未檢出目标物體。
  4. 繼續做卷積操作,得到

    5*5*256

    的特征圖,對生成的

    5*5*6=150

    個候選框進行分類和回歸,檢出兩個目标。
  5. 繼續做卷積操作,得到

    3*3*256

    的特征圖,對生成的

    3*3*4=36

    個候選框進行分類和回歸,檢出一個目标。
  6. 繼續做卷積操作,得到

    1*1*256

    的特征圖,對生成的

    1*1*4=4

    個候選框進行分類和回歸,檢出一個目标。
  7. 對這

    5776+2166+600+150+36+4=8732

    個候選框分類和回歸之後,對檢出結果進行非極大值抑制後得到最終的檢測結果。

就這樣,

SSD

算法得到了不同尺寸特征圖的特征映射,同時在不同的特征映射上面進行預測,由于它考慮了更多尺度的特征,在增加運算量的同時增提高了檢測精度。下期我們将一起學習下

SSD

算法的損失函數,

Match

政策以及訓練過程中的注意點。

ssd網絡結構_目标檢測算法SSD結構詳解