1. 程式人生 > >SSD 論文理解

SSD 論文理解

paper:: SSD Single Shot MultiBox Detector(單攝多框檢測器)
linkSSD paper
codehttps://github.com/weiliu89/caffe/tree/ssd

摘要

  • 提出目標檢測方法SSD:
    • one-stage的檢測方法,不需要額外的proposal生成過程;
    • 將bbox的輸出空間離散化到每個feature map預設的多長寬比例和多尺度的boxes上;(具體含義是將學習到的bbox直接對映到預設的box上
    • 通過合併不同size feature map的方法來處理檢測目標多尺度的問題;
  • SSD效能:
    • 300 × 300 300\times300 的輸入解析度,SSD在VOC07 test資料集上能達到74.3%mAP,59FPS(Titan X);
    • 512
      × 512 512\times512
      輸入解析度能達到76.9%mAP,比Faster-RCNN的精度更高;
    • 在提升了資料增強策略後效能有了進一步的提升: 300 ×
      300 300\times300
      達到77.2%mAP, 512 × 512 512\times512 達到79.8%mAP;

引言

  • SSD方法帶來的提升和貢獻:
    • 提出一個one-stage的目標檢測方法:在速度比同為one-stage方法YOLO v1快的同時精度能達到two-stage方法Faster-RCNN的水平;
    • SSD的核心思想是用小尺寸卷積核對預設的bbox預測對應的classes score和coord offsets;
    • 在不同尺寸的feature map上預測不同長寬比例的bbox提升檢測精度;
    • 實現了同時權衡精度和速度的端到端的目標檢測訓練框架;
    • 在實驗階段進行了全方位的速度和效能的對比;

Single Shot Detector

本節主要內容是針對SSD演算法框架和對應的訓練方法進行描述:

  • SSD在訓練階段需要訓練影象以及對應object的ground truth label;
  • 在卷積預測階段:針對不同尺寸feature map上每一個location按照不同長寬比例預測和預設bbox集合相對的座標偏移和類別置信度;
  • 訓練階段的loss是座標Smooth L1 loss和類別Softmax loss的加權求和;

SSD model design

SSD原始實現的backbone是VGG-16,在此基礎上添加了一些輔助結構以產生最後的檢測預測結果:

  • 多尺度feature map檢測:SSD同時在多個尺度的feature map上預測結果,相反在YOLO v1的方法中只在單一的feature map預測檢測結果;上圖SSD pipeline中最終會產生8732個bbox,對此number進行解析:
    • 38 × 38 38\times38 feature map box數目: 38 × 38 × 4 = 5776 38\times38\times4 = 5776
    • 19 × 19 19\times19 feature map box數目: 19 × 19 × 6 = 2166 19\times19\times6 = 2166
    • 10 × 10 10\times10 feature map box數目: 10 × 10 × 6 = 600 10\times10\times6 = 600
    • 5 × 5 5\times5 feature map box數目: 5 × 5 × 6 = 150 5\times5\times6 = 150
    • 3 × 3 3\times3 feature map box數目: 3 × 3 × 4 = 36 3\times3\times4 = 36
    • 1 × 1 1\times1 feature map box數目: 1 × 1 × 4 = 4 1\times1\times4 = 4
  • YOLO v1最後使用全連線層來生成最後的預測結果,SSD則採用 3 × 3 × p 3\times3\times p 直接對輸出的特徵圖進行卷積操作計算預測值(注意:同一個特徵圖中每個單元的先驗框數目相同,每一個單元的先驗框的設定<大小和長寬比>不同);
  • 先驗框priorBox的設定:針對特徵圖上每一個cell需要預測k個bbox,因此每一個輸出的特徵圖都需要 ( c + 4 ) k (c+4)k 個卷積核,其中c表示類別數(SSD中將背景也當做特殊的類別,SSD實際要預測c+1個類別置信度,其中包括bbox屬於背景的置信度,論文中c類別已經包含了背景這個類別),4表示座標相關數目,SSD中priorBox的設計參考了Faster-RCNN的anchor boxes,不同的是SSD的priorBox應用在不同解析度的特徵圖;
  • 從priorBox到Bbox解析的實現細節(結合Faster-RCNN部分內容):
    • 當背景類的置信度最高時,表示預測的bbox不包含目標,當其他類別置信度最高時就代表bbox所含目標的類別,SSD網路對feature map上的每一個cell的每一個priorBox都要預測兩組值 C l a s s e s c o n f 0 c Classesconf_{0\dots c} p c x , p c y , p w , p h (p^{cx},p^{cy},p^{w},p^{h}) ,通常bbox的位置資訊由中心座標和長寬表示,但是實際上SSD的預測值只是priorBox到Bbox的轉換值(offset/transformation),SSD裡面使用的座標轉換策略和Faster-RCNN相同;
    • 已知先驗框 p r i o r B o x = ( d c x , d c y , d w , d h ) priorBox = (d^{cx},d^{cy},d^{w},d^{h}) 和目標邊界框 B b o x = ( b c x , b c y , b w , b h ) Bbox = (b^{cx},b^{cy},b^{w},b^{h}) ,其轉換過程為: p c x = ( b c x d c x ) / d w ; p c y = ( b c y d c y ) / d h ; p w = l o g ( b w / d w ) ; p h = l o g ( b h / d h ) p^{cx}=(b^{cx}-d^{cx})/d^{w};p^{cy}=(b^{cy}-d^{cy})/d^{h};p^{w}=log(b^w/d^{w});p^{h}=log(b^h/d^{h}) ,在目標檢測領域中這個過程叫做bbox位置資訊的編碼encode,預測解析是其逆向過程為位置資訊的解碼decode,從預測值和priorBox解析得到預測Bbox;
    • 位置資訊解碼階段: b c x = d w p c x + d c x ; b c y = d h p c y + d c y ; b w = d w e x p ( p w ) ; b h = d h e x p ( p h ) b^{cx}=d^{w}p^{cx}+d^{cx};b^{cy}=d^{h}p^{cy}+d^{cy};b^{w}=d^{w}exp(p^{w});b^{h}=d^{h}exp(p^{h})