1. 程式人生 > >對SSD的初步認識

對SSD的初步認識

1、SSD網路結構

在這裡插入圖片描述

SSD採用VGG16的基礎網路結構,使用前面的前5層,然後利用astrous演算法將fc6和fc7層轉換成兩個卷積層,並且對conv4_3輸出做正則化處理。再額外增加3個卷積層,和一個average pool層。不同層次的feature map分別用於default box的偏移以及不同類別得分預測,最後通過NMS得到最終的檢測結果。不同卷積層的feature map大小變化比較大,能夠檢測出不同尺度下的物體,在不同的feature map進行卷積,可以達到多尺度的目的。 在這裡插入圖片描述 橫向流程圖 2、分類和迴歸 這步主要完成三個操作:生成prior box、做卷積->定位(localization)、做卷積->分類(confidence)。(以5x5x256為例) 在這裡插入圖片描述

2.1、卷積->迴歸 對feature map做卷積,使用的卷積核都是3x3,迴歸得到每個預測框的x、y、w、h。輸出的通道數為default box的個數4。 2.2、卷積->分類 卷積核的數目跟分類數目相關。對feature map做卷積,使用3x3的卷積核,輸出的通道數(卷積核個數)為default box的個數分類數目。

2.3、生成prior box 區別於default box,default box有4個引數,而prior box是從位置迴歸的feature map中生成的,它有8個引數,4個location維度+4個偏置(迴歸所需的引數)。從程式碼看,default box輸入重寫的Keras層生成prior box。 2.4、如何生成default box 按照不同的scale和ratio生成s個default box,s預設是6,對於conv4_3,s的值為4。  scale:假設使用m個不同層的feature map來做預測,論文中最低層的feature map的scale的值 在這裡插入圖片描述

為0.2,最高層的值 在這裡插入圖片描述為0.9,其他層通過下面的公式計算得到 在這裡插入圖片描述 當前網路使用了6個feature map,即m=6。  ratio:使用ratio的值 在這裡插入圖片描述,計算default box的寬度和高度, 在這裡插入圖片描述,另外對ratio=1的情況,額外指定scale為 在這裡插入圖片描述,即生成6個不同的default box。  default box中心:每個default box的中心位置設定成 在這裡插入圖片描述,其中 在這裡插入圖片描述表示第k個特徵圖的大小,在這裡插入圖片描述 。 這些引數都是相對於原圖的引數,不是最終值。

2.5、如何生成prior box 將原圖切割成feature_map_width*feature_map_height個小矩形格,比如原圖大小為300x300,feature map大小為5x5,那麼每個小格的尺寸為60x60。獲取每個小格的寬和高,獲取每個小格的起始座標。 首先,boxes_tensor=np.zeros((feature_map_height, feature_map_width, self.n_boxes, 4))建立一個四維矩陣,代表的是每個feature map的每個特徵點有n_boxes個prior box,而每個prior box有x,y,w,h四個引數來定義一個prior box。接下來是把prior box超出原圖邊界的修正下. 然後再建立一個variances_tensor,它和上面的boxes_tensor維度一樣,只不過它的值都為0加上variance.然後將variances_tensor和boxes_tensor做連線操作。所以生成的prior box 會變成 size= [feature_map_height,feature_map_width,n_boxes,8]。

2.6、轉換特徵矩陣  對【分類】步驟的結果reshape:[n_boxes_conv6_2n_classes,5,5]即[21x4,5,5])–>[-1,n_classes]  對【迴歸】步驟的結果reshape: [n_boxes_conv6_24,5,5] 即[4x4,5,5])–>[-1,4]  對【priorbox】步驟的結果reshape:[n_boxes_conv6_2*8,5,5]即[4x8,5,5])–>[-1,8]

2.7、連線 連線所有的分類,迴歸,prior box。從程式碼上來看,所有的分類走一條線,迴歸走一條線,生成prior box走一條線。迴歸和prior box所生成的結果是相互獨立的,而分類的結果之間是相互影響的,最後做一個softmax實現多分類。 3、非極大值抑制NMS  將所有框的得分排序,選中最高分及其對應的框  遍歷其餘的框,如果和當前最高分框的重疊面積(IOU)大於一定閾值,我們就將框刪除。  從未處理的框中繼續選一個得分最高的,重複上述過程。 4、損失函式 損失函式定義為位置誤差(locatization loss,loc)與置信度誤差(confidence loss, conf)的加權和: 在這裡插入圖片描述 其中 在這裡插入圖片描述是先驗框的正樣本數量。這裡 在這裡插入圖片描述為一個指示引數,當 在這裡插入圖片描述時表示第 在這裡插入圖片描述個先驗框與第在這裡插入圖片描述 個ground truth匹配,並且ground truth的類別為在這裡插入圖片描述在這裡插入圖片描述 為類別置信度預測值。 在這裡插入圖片描述為先驗框的所對應邊界框的位置預測值,而 在這裡插入圖片描述是ground truth的位置引數。對於位置誤差,其採用Smooth L1 loss,定義如下: 在這裡插入圖片描述 由於 在這裡插入圖片描述的存在,所以位置誤差僅針對正樣本進行計算。值得注意的是,要先對ground truth的在這裡插入圖片描述 進行編碼得到在這裡插入圖片描述 ,因為預測值在這裡插入圖片描述 也是編碼值。對於置信度誤差,其採用softmax loss: 在這裡插入圖片描述 權重係數在這裡插入圖片描述 通過交叉驗證設定為1。

在這裡插入圖片描述 5、Hard Negative Mining 用於預測的 feature map 上的每個點都對應有 6 個不同的 default box,絕大部分的 default box 都是負樣本,導致了正負樣本不平衡。在訓練過程中,採用了 Hard Negative Mining 的策略(根據confidence loss對所有的box進行排序,使正負例的比例保持在1:3) 來平衡正負樣本的比率。這樣做能提高4%左右。 6、匹配策略 這裡的匹配是指的ground truth和Default box的匹配。 主要是分為兩步:第一步是根據最大的overlap將ground truth和default box進行匹配(根據ground truth找到default box中IOU最大的作為正樣本)。 第二步是將default boxes與overlap大於某個閾值的ground truth進行匹配。 7、Data Augmentation 使用整張影象作為輸入。 使用IOU和目標物體為0.1、0.3、0.5、0.7和0.9的patch,這些patch在原圖的大小的[0.1, 1]之間,相應的寬高比在[1/2, 2]之間。 隨機採取一個patch。 8、 VGG 16結構如下圖所示:

在這裡插入圖片描述

為什麼使用3x3的卷積核,設定步長=1:

在這裡插入圖片描述