SSD算法通俗詳解

算法簡介 算法原理 樣本構造 損失函數 使用細節


#ssd算法

##簡介

劉偉在2016年提出,發表在ECCV;是一種通過直接回歸的方式去獲取目標類別和位置的one-stage算法,不需要proposal;作用在卷積網絡的輸出特徵圖上進行預測,而且是不同尺度,因此能夠保證檢測的精度,圖像的分辨率也比較低,屬於端到端的訓練;

input->CNN->Lreg,Lcls

CNN特徵->區域分類,位置精修

##算法原理

輸入是300x300,通過主幹網絡VGG-16(也可以是Resnet,MobileNet)得到feature map,然後通過下采樣(Pooling層)得到6個不同尺度,38x38,19x19,10x10,5x5,3x3,1x1,將這6個不同尺度的feature map作爲檢測預測層的輸入,最後用nms進行篩選和合並;
每一個feature map層都會進行default boundingbox的提取,針對每一個boundingbox都會有類別分數以及位置的偏移量,這裏就有兩個問題:

1.如何進行多個尺度的預測?(見下)

2.每個尺度上選擇多少個bounding boxes?

答:通過ssd的相應的配置文件來進行配置,其實是通過相應層的name來進行配置,決定有多少個box,以及哪一層作爲預測層的輸入

###主幹網絡介紹

將VGG最後兩個FC層(FC用來分類,映射每一類的概率)改成卷積層,並增加4個卷積層,增加了多次度預測,從而提升模型預測性能;

###多尺度feature map預測

(類似anchor機制)不同層的feature map(輸入到相應的預測層),大小爲mxn,以每一個點(cell,找到他在原圖中的位置)爲center,每個cell生成固定scale和aspect ratio的k個prior box,通過和GT的比較得到prior box的label,再對每一個prior box預測他們的類別score和座標offset(x,y,w,h),得到維度爲(4+C)xkxmxn的輸出;

兩個超參數:scale和aspect ratio

關於Prior box Layer:

上面說了,類似於anchor機制,shape數量越多,預測效果越好;

針對6種不同尺度的feature map層,提取的prior box的總數量爲:38x38x4 + 19x19x6 + 10x10x6 + 5x5x6 + 3x3x4 + 1x1x4 = 8732個

可以看到,這裏每一個feature map cell並不是k個prior box都取,爲什麼呢,因爲實際訓練中,並不是每個prior box都去計算loss,那麼具體怎麼操作的呢?通過什麼策略來進行篩選呢?接下來我們來看一下ssd的樣本構造策略。

##樣本構造
正樣本:
從prio box集出發,尋找與GT box滿足 IOU 大於0.5的最大prior box放入候選正樣本集;
或者,從GT box出發,找到與之最爲匹配的prior box放入候選正樣本集;
負樣本:
IOU小於0.5的作爲負樣本,而中間那些可以丟掉不考慮;一般正負樣本比爲1:3;
或者進行難例挖掘
在這裏插入圖片描述
注意:除了這種尋找正負樣本的方法,還可以對正負樣本做數據增強;
##損失函數
SSD的損失函數包含了兩個部分:分類loss + 迴歸loss,其中前者一般用Softmax Loss,後者一般用Smooth L1 Loss,然後兩者進行加權;在這裏插入圖片描述
在這裏插入圖片描述
在訓練過程中,我們只需要確保prior box的分類準確,並且讓每一個prior box儘可能迴歸到GT box;

##SSD使用細節

1.注意分類和迴歸網絡的權重分配;

2.注意正負樣本之比;

3.難例挖掘默認只去64個最高預測損失來從中尋找負樣本;

4.SSD輸入尺寸越大,mAP越高,但是會導致檢測速度的下降,因此要具體需求進行選擇;

5.更多的feature map,更多的default box,都可以使得結果更好;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章