天天看點

【目标檢測 深度學習】2.SSD系列算法原理1.SSD系列算法簡介2.詳細介紹3.SSD系列算法優化及擴充

目錄

  • 1.SSD系列算法簡介
    • 1.1 SSD算法介紹
      • 1.1.1架構圖
  • 2.詳細介紹
    • 2.1主幹網絡介紹
    • 2.2多尺度Feature Map預測:
    • 2.3樣本構造
    • 2.4損失函數
    • 2.5 SSD系列網絡結構
    • 2.6使用細節
    • 2.7算法性能比較
      • 2.7.1與不同算法的比較
      • 2.7.2 資料增強對SSD算法的影響
      • 2.7.3不同尺度的輸入的影響
  • 3.SSD系列算法優化及擴充
    • 3.1DSSD
      • 3.1.1綜述
      • 3.1.2網絡結構
      • 3.1.3實驗結果
    • 3.2DSOD:
      • 3.2.1綜述
      • 3.2.2預訓練模型優缺點
      • 3.2.3DSOD設計原則
      • 3.2.4DSOD網絡結構圖
      • 3.2.5實驗結果

1.SSD系列算法簡介

1.1 SSD算法介紹

(1)它是one-stage算法

  1. Wei Liu在ECCV2016提出
  2. 直接回歸目标類别和位置
  3. 不同尺度的特征圖上進行預測
  4. 端到端的訓練
  5. 圖像的分辨率時 比較低也能保證檢測的精度

1.1.1架構圖

它的架構圖如下:

【目标檢測 深度學習】2.SSD系列算法原理1.SSD系列算法簡介2.詳細介紹3.SSD系列算法優化及擴充
  1. 主幹網絡:VGGNet。上面圖中主幹網絡裡隻用了5層卷積
  2. 多尺度Feature Map預測。指的是在預測的時候會對VGG後面六個不同的尺寸分别進行預測。這六個尺寸分别包括六個feature map,分别作為後面檢測層的輸入。
  3. Default bouding boxes的類别分數、偏移量。将上面六層的每一層進行此操作。每個尺度都會提取anchor box。

2.詳細介紹

2.1主幹網絡介紹

(1)VGG、ResNet、MobileNets等各種卷積神經網絡都可以作為主幹網絡提取特征。

(2)VGG作為輸入的時候,最後兩個FC改成卷積,并增加4個卷積層

2.2多尺度Feature Map預測:

(1)針對不同層不同尺度的feature map進行預測。在上面圖中分别對應了3838,1919,1010,55,33,11,這六種不同尺度的feature map分别作為後續預測網絡的輸入,不同尺度的網絡通常會使用max pooling的方法來進行下采樣

(2)Prior box:不同尺寸的feature map會輸入到後層的預測網絡中,後續網絡中會包括Prior box層的提取過程,prior box對應faster rcnn中anchor的概念,在prior box層中,針對于feature map每一個點都會将它作為一個cell,以這個cell為中心,會通過等比的方法找到它在原始圖像中的位置,以這個點為中心提取不同尺度的bounding box,這些不同尺度的bounding box即為prior box。對于不同的prior box通過和真值的比較就能拿到它的label。對于每個prior box會預測它的類别機率和坐标(x,y,w,h)。如果有C類,則prior box的輸出大小則為C+4, 如果目前feature map大小為mn,即有mn個anchor,如果每個anchor提取k個prior box,則最終的prior box的次元為(c+4)km*n。總結如下:

  1. m*n個cell
  2. 每個cell上生成固定scale和aspect ratio的box,這是兩個超參數

    假設一個feature Map有mc×n個cell,每個cell對應k個default box,每個defaultbox預測C個類别score和4個o則一共有(c+4)×k×m×n個輸出。

  3. Scale:sk=Smin+(Smax-Smin)*(K+1)/(m-1),k∈[1,m]。這裡表示第k個bouding box的尺度

    其中,Smin=0.2,最底層的scale是0.2;Smax=0.9,最高層的scale是0.9

  4. aspect ratio:ar={1,2,3,1/2,1/3} 。這裡表示長寬比例
  5. 寬:wka=sk√ar

    高:hka=sk/√ar …這裡是最終長和寬的大小

  6. aspect ratio=1,增加一種scale的default box:sk’=√(skSk+1)
  7. 每個feature map cell定義6種default box。這裡的6是通過五個不同的ar長寬比例以及6裡面增加的scale來得到
  8. 實際上面那個圖裡我們提取的box數量為:38×38×4+19×19×6+10×10×6+5×5×6+3×3×4+1×1×4=8732個prior box。這裡每個加号前面兩個數字指的是feature map的尺寸。
  9. 一般pror box 層shape數量越多形狀越豐富,效果越好。

我們實際訓練的并不是每個prior box都去計算Loss,prior box也要經過篩選。比如可以用prior box與GT Box做比對,IOU>門檻值則為正樣本。在訓練的時候要確定prior box的分類準确且盡可能回歸到GT box 。

2.3樣本構造

樣本構造的時候我們盡量要進行難例挖掘,而且保證正負樣本在1:3左右

(1)正樣本

  1. 從GT box出發給找到最比對的prior box放入候選正樣本集
  2. 從prior box集出發,尋找與GT box滿足IOU>0.5的最大prior box放入候選正樣本集

(2)負樣本 IOU小于門檻值

(3)難例挖掘

  1. 對預測的loss進行排序
  2. 選擇loss最高的幾個prior box與正樣本集進行比對,如果比對成功,則放入正樣本中。
  3. 選擇loss最高的幾個prior box與負樣本集進行比對,如果比對成功,則放入負樣本中。
  4. 這樣就可以把loss較高的幾個樣本挖掘出來,這幾個樣本是難例

(4)資料增強

  1. 随機采樣多個patch,與物體之間IOU為:0.1,0.3,0.5,0.7與0.9
  2. 采樣的patch比例是[0.3,1.0],aspect ratio在0.5或2
  3. GT box中心在采樣patch中且面積大于0
  4. resize固定大小
  5. 以0.5的機率随機的水準翻轉

2.4損失函數

分類loss+回歸Loss:

  1. 分類loss:softmax loss
  2. 回歸loss:Smooth L1 Loss
    【目标檢測 深度學習】2.SSD系列算法原理1.SSD系列算法簡介2.詳細介紹3.SSD系列算法優化及擴充

損失函數計算思路:

【目标檢測 深度學習】2.SSD系列算法原理1.SSD系列算法簡介2.詳細介紹3.SSD系列算法優化及擴充

2.5 SSD系列網絡結構

【目标檢測 深度學習】2.SSD系列算法原理1.SSD系列算法簡介2.詳細介紹3.SSD系列算法優化及擴充

坐上角是主幹網絡,右邊是prior box層,下面是分類和回歸網絡。主幹網絡的輸出和真值作為prior box層的輸入,prior box層的輸出用于後續loss層的計算。且主幹網絡的輸出也會直接輸入進分類和回歸網絡。我們計算loss的時候,它的次元大小會同prior box層保持一緻。

2.6使用細節

  1. 資料增強時,需要關注Crop采樣大小
  2. 多任務網絡的權重,即分類任務和回歸任務的權重
  3. 正負樣本比例 一般用1:3
  4. 難例挖掘方式預設隻取64個最高的predictions loss來從中尋找負樣本

2.7算法性能比較

2.7.1與不同算法的比較

【目标檢測 深度學習】2.SSD系列算法原理1.SSD系列算法簡介2.詳細介紹3.SSD系列算法優化及擴充

可以看到輸入尺寸變大的時候SSD的算法性能更好 。

【目标檢測 深度學習】2.SSD系列算法原理1.SSD系列算法簡介2.詳細介紹3.SSD系列算法優化及擴充
【目标檢測 深度學習】2.SSD系列算法原理1.SSD系列算法簡介2.詳細介紹3.SSD系列算法優化及擴充
【目标檢測 深度學習】2.SSD系列算法原理1.SSD系列算法簡介2.詳細介紹3.SSD系列算法優化及擴充

它的FPS值相對于YOLO值有所降低,即速度低些,但比faster rcnn快

2.7.2 資料增強對SSD算法的影響

下表是資料增強對SSD算法的影響:

【目标檢測 深度學習】2.SSD系列算法原理1.SSD系列算法簡介2.詳細介紹3.SSD系列算法優化及擴充

可以看到:

  1. 資料增強對于結果提升非常明顯
  2. 使用更多的feature maps對結果提升更大
  3. 使用更多的default boxes,結果也越好
  4. Atrous(空洞卷積)使得SSD又快又好,空洞卷積作用是不采用pooling增大卷積層的感受野。

2.7.3不同尺度的輸入的影響

【目标檢測 深度學習】2.SSD系列算法原理1.SSD系列算法簡介2.詳細介紹3.SSD系列算法優化及擴充

輸入尺寸越大,SSD算法性能越好,檢測速度會下降。

3.SSD系列算法優化及擴充

【目标檢測 深度學習】2.SSD系列算法原理1.SSD系列算法簡介2.詳細介紹3.SSD系列算法優化及擴充

對于SSD算法,進行優化的時候主要強調對于主幹網絡的改進和對于後續預測網絡的改進。

  1. 對于主幹網絡的改進比如我們可以采用resnet densenet。
  2. 對于後續預測層的改進主要集中在如何去優化loss層的輸入的feature map

3.1DSSD

3.1.1綜述

(1)2017年的CVPR,WeiLiu

(2)SSD算法對小目标不夠魯棒的主要原因是淺層feature map的表征能力不夠強,改進措施:

  1. 加入上下文資訊
  2. 更好的基礎網絡(Resnet)和Deconvolution(反卷積)層,skip連接配接來給淺層feature map更好的表征能力。

3.1.2網絡結構

【目标檢測 深度學習】2.SSD系列算法原理1.SSD系列算法簡介2.詳細介紹3.SSD系列算法優化及擴充

我們可以看到DSSD中,對于prior box層的輸入,分别采用反卷積以及結合之前的feature map通過相加來完成之前的prior box層的輸入。對于1×1的prior box 輸入是不變的,對于3×3層的prior box會通過1×1層的prior box反卷積之後得到3×3的卷積層,然後這個3×3的卷積層和原始3×3的卷積層相加得到後續的loss層的輸入。通過反卷積的過程可以提取更多上下文的資訊。

3.1.3實驗結果

DSSD與SSD對比:

【目标檢測 深度學習】2.SSD系列算法原理1.SSD系列算法簡介2.詳細介紹3.SSD系列算法優化及擴充

3.2DSOD:

3.2.1綜述

(1)2017年的ICCV2017

(2)DSOD可以從0開始訓練資料,不需要預訓練模型,而且效果可以和fine-tune的模型媲美

(3)SSD+DenseNet=DSOD

(4)它的核心思想如下:

  1. 可以從0開始訓練得到一個好的目标檢測網絡嗎?
  2. 如果可以,設計這樣的網絡有沒有什麼原則可以遵守?

3.2.2預訓練模型優缺點

預訓練模型的優點:

  1. 開源模型多,可以直接将他們用于目标檢測
  2. 可以快速得到最終的模型,需要的訓練資料也相對較少

預訓練模型缺點:

  1. 預訓練模型大,參數太多,模型結構靈活性差,難以改變網絡結構,計算量也大,限制其應用場合
  2. 分類和檢測任務的損失函數和類别分布是不一樣的,優化空間存在差異
  3. 盡管微調可以減少不同目标類别分布的差異性,但是差異太大時,微調效果依然不理想

3.2.3DSOD設計原則

(1)基于候選區域提取的方法(two-stage)無法從0開始訓練,不收斂,隻有proposal-free方法(one stage)可以從0開始訓練并收斂,作者認為(不一定正确)可能是ROI Pooling的原因,由于ROI Pooling層的存在可能會導緻需要得到一些比較好的proposal,如果不采用預訓練模型我們可能會得到一些較差的ROI Pooling的輸出。

(2)densenet中更多的skip connections實作supervised signals傳遞

(3)作者設計densenet的時候增加dense blocks數量差別原先的固定數量

(4)stem block層優化,用3個3×3的卷積層和1個2×2的最大池化層來優化stem block層

(5)作者同樣采用6個尺度特征圖進行目标檢測,再融合

3.2.4DSOD網絡結構圖

【目标檢測 深度學習】2.SSD系列算法原理1.SSD系列算法簡介2.詳細介紹3.SSD系列算法優化及擴充

3.2.5實驗結果

與SSD對比:

【目标檢測 深度學習】2.SSD系列算法原理1.SSD系列算法簡介2.詳細介紹3.SSD系列算法優化及擴充
【目标檢測 深度學習】2.SSD系列算法原理1.SSD系列算法簡介2.詳細介紹3.SSD系列算法優化及擴充

繼續閱讀