1. 程式人生 > >SSD論文閱讀筆記

SSD論文閱讀筆記

SSD類似YOLO,和YOLO同屬於目標檢測演算法中基於迴歸的演算法。

Abstract

作者提出了SSD模型,把輸出的bounding boxes看成一組不同尺度,不同大小的boxes。說白了,就是在不同尺度上的feature map上設定一系列不同大小的default boxes。實現了多尺度的檢測,這個思路有點類似於faster rcnn裡面的anchor boxes。不過anchor boxes實現多尺度的方法不是在不同的feature map上做迴歸,而是直接設定不同比例的boxes。SSD模型相比於rcnn系列模型,取消了region proposal的過程,即沒有畫素,特徵重取樣(對應於faster rcnn 的ROI Pooling)的過程,提升了執行速度,並且得益於多尺度的檢測,精度上並沒有損失,甚至在512x512大小的圖片上超過了faster rcnn。

Introduction

基於深度學習的目標檢測網路主要有兩大類,一類是以RCNN為代表的region proposals方法,該類方法速度較慢,最快的faster rcnn在GPU上也只有7FPS,另一類是以YOLO為代表的基於迴歸的演算法。YOLO雖然在速度上很快(45 FPS),但是精度很低。作者本文就是解決了速度與精度的矛盾問題,提升了模型的速度,同時避免了精度的損失,SSD和YOLO同屬一類基於迴歸的演算法。

SSD

1794530-d1d408ff5f32379a.png SSD和YOLO結構對比

1.預測過程

  • 圖片統一被縮放到固定大小(300x300),然後送入base network(作者用的是VGG),之後再通過多次卷積,每次卷積具有一定的stride,使得每次卷積後的特徵圖變小。這樣就得到了一系列不同尺度的特徵圖。然後在這些不同尺度的特徵圖直接回歸出目標的位置和類別資訊。
  • 所謂“直接回歸出”:以上述結構中Conv7(FC7)特徵圖為例,該特徵圖大小為19x19x1024,此時,對於該19x19大小的特徵圖中,用(c+4) x k個濾波器去卷積,每個濾波器的大小應該為1024 x kernel_size x kernel_size(這裡作者的kernel_size = 3)。那麼卷積之後輸出的就是19 x 19 x (c+4) x k 的張量。(c + 4) x k表示對於19 x 19特徵圖中的每一個畫素都預測k個框,每個框有c+4個評分,c表示物體的屬於哪一個類別,4表示框相對於default box(寬,高,中心位置座標)的偏移量

2.訓練過程

  • 首先需要對每一個ground truth匹配相應的default box,一個ground truth可以匹配多個default box。如果ground truth和default box的重疊率大於一個閾值,則匹配為正樣本,否則為負樣本。
  • 目標函式:偏置偏差損失+類別置信度損失


    1794530-82dc31f968e22b6f.png 目標函式

    其實就是位置偏移量以及是目標的置信度兩項的和。具體計算公式參見論文,不贅述

  • default boxes大小設定
    根據相應的特徵圖的尺度,設定不同大小的default box,具體計算公式參見論文。作者用了6個default box
  • 其他trick
    Hard negative mining: 只有那些有最高訓練損失(training loss)的負面樣本(negative example)子集才會在每次訓練迭代中被使用。SSD 的「正負」比一直保持在 1:3。
    Data augmentation: 隨機裁剪

實驗結果

取得了速度上的提升,精度也還不錯。作者做的工作其實就是速度和精度的一個trade-off。主要創新之處在於:

  • 多尺度的特徵圖上回歸出座標位置資訊,這是精度的保證
  • 相比於YOLO,SSD利用卷積而不是全連線進行迴歸出位置資訊,這樣引數少了很多,這是速度的保證
  • 利用default boxes進行粗定位,類似於anchor機制,相比於YOLO直接劃分cell進行迴歸一定程度上也可以保證其精度。