❝
上期我們一起學習了
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
算法的性能差異:
可以看到在
VOC2007
測試集上
One-Stage
算法有着更快的檢測速度。
SSD模型結構
SSD
算法的模型結構簡單的說包括
VGG16
基礎網絡和後面的特征提取檢測網絡,我們逐一學習。
基礎網絡
SSD
算法的基礎網絡是
VGG16
,我們先複習下
VGG16
的網絡結構,如下圖:
VGG16模型結構
可以看到:
-
的網絡輸入是VGG16
的圖像224*224*3
- 經過兩個卷積層(
)得到Conv1
尺寸的特征圖224*224*64
- 經過一個池化層和兩個卷積層(
)後得到Conv2
尺寸的特征圖112*112*128
- 經過一個池化層和三個卷積層後(
)得到Conv3
尺寸的特征圖56*56*256
- 經過一個池化層和三個卷積層後(
)得到Conv4
尺寸的特征圖28*28*512
- 經過一個池化層和三個卷積層後(
)得到Conv5
尺寸的特征圖14*14*512
- 經過一個池化層後得到
尺寸的特征圖7*7*512
- 最後經過全連接配接層(
)後再接一個FC6&FC7
層後輸出結果softmax
上面的輸入是
224*224*3
的圖像,這裡
SSD
算法有兩種尺寸,一種是
SSD300
就是輸入圖像大小為
300*300*3
的,另外一種是
SSD500
,即輸入圖像尺寸為
500*500*3
。以
SSD300
為例,則上面第
5
步的
Conv4
後,将得到
38*38*512
的特征圖。
SSD模型結構
了解了
VGG16
這個基礎網絡,我們來看下
SSD
的結構架構是什麼樣子的,如下圖:
SDD結構架構
從圖中我們可以看到,
SSD
算法結構流程如下:
- 将尺寸大小為
的圖像輸入到300*300*3
網絡中,在VGG16
的第VGG16
步也就是5
之後得到Conv4
的特征圖38*38*512
- 接着通過一個池化和
的卷積層3*3*1024
得到Conv6
的特征圖19*19*1024
- 之後再經過一個
的卷積操作1*1*1024
,得到Conv7
的特征圖19*19*1024
- 接着做一個
和1*1*256
(3*3*512-s2
為s2
)的卷積操作stride=2
後得到Conv8
的特征圖10*10*512
- 繼續做卷積操作
,具體為Conv9
和1*1*128
卷積之後得到3*3*256-s2
的特征圖5*5*256
- 繼續做卷積操作
,具體為Conv10
和1*1*128
卷積之後得到3*3*256-s1
的特征圖3*3*256
- 繼續做卷積操作
,具體為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詳細結構
在上圖中,
- 輸入圖檔
為size
,經過300*300*3
的VGG16
後得到Conv4
的特征圖,對此特征圖機芯正則化後對38*38*512
個候選框進行分類和回歸,由于該特征圖常用來檢測小物體,是以在該特征圖上并未檢測到圖檔中的汽車。38*38*4=5776
- 接着對上一步的特征圖進行卷積操作得到
的特征圖,對生成的19*19*1024
個候選框進行分類和回歸,在該特贈圖上仍未檢出物體。19*19*6=2166
- 繼續做卷積操作,得到
的特征圖,對生成的10*10*512
個候選框進行分類和回歸,仍未檢出目标物體。10*10*6=600
- 繼續做卷積操作,得到
的特征圖,對生成的5*5*256
個候選框進行分類和回歸,檢出兩個目标。5*5*6=150
- 繼續做卷積操作,得到
的特征圖,對生成的3*3*256
個候選框進行分類和回歸,檢出一個目标。3*3*4=36
- 繼續做卷積操作,得到
的特征圖,對生成的1*1*256
個候選框進行分類和回歸,檢出一個目标。1*1*4=4
- 對這
個候選框分類和回歸之後,對檢出結果進行非極大值抑制後得到最終的檢測結果。5776+2166+600+150+36+4=8732
就這樣,
SSD
算法得到了不同尺寸特征圖的特征映射,同時在不同的特征映射上面進行預測,由于它考慮了更多尺度的特征,在增加運算量的同時增提高了檢測精度。下期我們将一起學習下
SSD
算法的損失函數,
Match
政策以及訓練過程中的注意點。