1. 程式人生 > >SSD 學習與研究

SSD 學習與研究

目標檢測–SSD

論文地址:https://arxiv.org/abs/1512.02325

project:https://github.com/apache/incubator-mxnet/tree/master/example/ssd

其他參考連結:

1、https://blog.csdn.net/a8039974/article/details/77592395
2、https://www.cnblogs.com/fariver/p/7347197.html
3、https://www.sohu.com/a/168738025_717210
4、https://www.cnblogs.com/lillylin/p/6207292.html


5、https://cloud.tencent.com/developer/article/1052779


一、理解

1、對比

SSD的提出,為了解決實時性和準確性的問題。下面這種圖給出了對比,SSD有兩種模型,300和512代表不同size的輸入影象。

在這裡插入圖片描述

SSD的主要思想就以下幾點:

  1. 提出類似faster rcnn中的anchor機制,default box(與faster rcnn的區別:每個位置的default box一般是4~6個,Faster rcnn預設9個anchor;同時default box是設定在不同尺度的feature maps上的,且大小不同);
  2. 使用特徵金字塔的方式,類似FPN,取多個feature map的預測結果,可以同時監測大目標和小目標;
  3. 同樣是one-stage訓練,採用迴歸的思想;
  4. 使用多種size的輸入資料;

優缺點:

  1. 速度比YOLO快,準確率比faster rcnn高;
  2. 但是需要人工設定default box的min_size,max_size和aspect_ratio值,且每一層feature map下的值都不一樣;
  3. 對小目標的召回仍然不理想,作者認為,這是由於SSD使用conv4_3低階feature去檢測小目標,而低階特徵卷積層數少,存在特徵提取不充分的問題;

2、核心思想

2.0 特徵金字塔

與YOLO直接在卷積層後加全連線不同,SSD使用多個卷積層進行預測,即不同size的feature map結果。SSD使用conv4_3、conv7(fc7)、conv8_2、conv9_2、conv10_2和conv11_2來預測定位和confidence,如下圖所示。

在這裡插入圖片描述

特徵金字塔的意思如下圖所示。

在這裡插入圖片描述

2.1 default box

在這裡插入圖片描述

SSD中引入了default box,類似於faster rcnn中的anchor。但是不同於faster rcnn中,faster rcnn的預設anchor是9個,且只有最後特徵層進行anchor提取。

下面介紹SSD中的default box。其優點就是default box在不同的feature層有不同的scale,在同一個feature層又有不同的aspect ratio,基本上可以覆蓋輸入影象中的各種形狀和大小的object。

  • 以feature map的每個location,都會生成多個同心的default box;
  • 寬高比為1,2,3,1/2,1/3;
  • 當寬高比為1時,方形box,最小邊長為min_size,最大邊長為根號下(min_size*max_size);
  • 長方形的長和寬分別為根號下(aspect_ratio)*min_size、1/根號下(aspect_ratio)*min_size;
  • 每個feature map的min_size、max_size都不一樣。

在這裡插入圖片描述

第一層feature map對應的min_size=S1,max_size=S2;第二層min_size=S2,max_size=S3;其他類推。在原文中,Smin=0.2,Smax=0.9,m是feature map的數量,SSD-300中m=6。

多個feature map生成的default box後,還經過 PriorBox 層生成 prior box(生成的是座標)。每個feature map中每一層的default box的數量是給定的(8732個)。最後將前面三個計算結果分別合併然後傳給loss層。

假定有8×8和4×4兩種不同的feature map。假設每個feature map cell有k個default box,那麼對於每個default box都需要預測c個類別score和4個offset,如果一個feature map的大小是m×n,則這個feature map就一共有(c+4)k * mn 個輸出。

prior box,是指實際中選擇的default box(每一個feature map cell 不是k個default box都取)。也就是說default box是一種概念,prior box則是實際的選取。

如果是圖中的5層feature map,最後會得到(38384 + 19196 + 10106 + 556 + 334 + 114)= 8732個prior box。

2.2 匹配策略

  • 正樣本:與每一個groundtruth box有最大交併比的default box;或者default box與任意有一個groundtruth box的交併比超過了閾值;
  • 負樣本:正樣本剩下的

由於負樣本數量遠大於正樣本數量,所以在訓練時,會挑選confidence高的box進行匹配,正負樣本比為1:3;

2.3 損失函式

損失函式仍然分為兩部分,confidence損失和location損失,如下面公式,其中N是所有default box的數量。

在這裡插入圖片描述

location損失採用smooth-L1損失,如下所示:

在這裡插入圖片描述

confidence損失使用softmax損失,如下,

在這裡插入圖片描述
其中
在這裡插入圖片描述
表示第i個default box匹配到了第j個groundtruth box,類別是p。

粘來別人的具體解釋

在這裡插入圖片描述

2.4 訓練

  • 使用資料增強:有6.7%的mAP提升;包括隨機裁剪,使得裁剪部分與目標重疊為0.1, 0.3, 0.5, 0.7, 0.9,剪裁完resize到固定尺寸;以0.5的概率進行水平翻轉;
  • 使用基礎網路中的conv4_3進行檢測,提升小目標的召回率;增加這一部分大概會提示4%mAP;
  • 使用不同寬高比的default box會提升2.9%mAP;
  • 使用atrous卷積,預訓練模型VGG-16採用了atrous卷積,可以保持感受野不變的條件下,減少padding噪聲。使用這種預訓練模型會提高0.7mAP;

2.5 網路結構

SSD的結構在VGG16網路的基礎上進行修改,

針對conv4_3(4),fc7(6),conv6_2(6),conv7_2(6) ,conv8_2(4),conv9_2(4)(括號裡數字是每一層選取的default box種類)中的每一個再分別採用兩個3*3大小的卷積核進行卷積,這兩個卷積核是並列的,

  • 這兩個33的卷積核一個是用來做localization的(迴歸用,如果prior box是6個,那麼就有64=24個這樣的卷積核,卷積後map的大小和卷積前一樣,因為pad=1,下同),
  • 另一個是用來做confidence的(分類用,如果prior box是6個,VOC的object類別有20個,那麼就有6*(20+1)=126個這樣的卷積核)。

假設,conv6_2的localizaiton的33卷積核操作,卷積核個數是24(64=24,由於pad=1,所以卷積結果的map大小不變,下同),

這裡的permute層就是交換的作用,比如你卷積後的維度是32×24×19×19,那麼經過交換層後就變成32×19×19×24,順序變了而已。

而flatten層的作用就是將32×19×19×24變成32*8664,32是batchsize的大小。

另一方面結合conv4_3(4),fc7(6),conv6_2(6),conv7_2(6),conv8_2(4),conv9_2(4)中的每一個和資料層(ground truth boxes)經過priorBox層生成prior box。

經過上述兩個操作後,對每一層feature的處理就結束了。對前面所列的5個卷積層輸出都執行上述的操作後,就將得到的結果合併:採用Concat,類似googleNet的Inception操作,是通道合併而不是數值相加。

二、論文翻譯

1、摘要

提出一個比較小的深度神經網路用做影象中的目標檢測。本文的方法稱為SSD,對於每個feature map定位,將bounding box的輸出空間描述為一組default box,有不同的寬高比、大小。在預測時,這個網路對每個default box,生成每個目標類別可能存在的分數,然後調整box以適合目標的shape。此外,這個網路結合了多種解析度的feature map的預測,可以自然地處理各種大小的目標。SSD相對於那些需要目標proposal的方法來說要簡單,因為它完全消除了proposal的產生和隨後畫素或特徵的重取樣步驟,將所有計算都壓縮在一個簡單網路中。這使得SSD很容易訓練,並且可以直接整合到需要檢測成分的系統中。在PASCAL VOC、COCO、ILSVR資料集上的實驗結果證明,SSD對比那些使用額外目標proposal的方法具有可競爭性的準確率,並且比這些方法更快,為訓練和推斷提供了一個統一的框架。使用英偉達Titan X,對於300x300的輸入,SSD在VOC2007測試資料集上,74.3%mAP,59FPS,對於512x512的輸入,SSD是76.7%mAP,超過了faster RCNN。相對其他single-stage方法,SSD使用更小size的輸入影象有更高的準確率。原始碼見: https://github.com/weiliu89/caffe/tree/ssd .

2、介紹

前面巴拉巴拉一堆廢話。這篇論文提出第一個基於目標檢測器的深度網路,而不依賴於對bounding box假設的畫素或特徵衝取樣,並且同樣準確。這個結果又很大的提升。在VOC2007測試集上,59FPS,74.3%mAP,而faster RCNN的7 FS,73.2%mAO,YOLO 45FPS,63.4%mAP。速度上的提高主要是消除了bounding box proposal和畫素、特徵的重取樣步驟。本文並不是第一個做這些的,但是通過新增一系列的提高,我們比先前的嘗試準確率有明顯的提高。我們的提高包括,使用小的卷積核來預測目標類別和bounding box定位的偏移。分別使用不同比例的檢測器預測,在網路的最後階段,在多層feature map上應用這些filter,以實現多種scale的檢測。這些修改,特別是使用不同scale的多層預測,我們可以實現相對低解析度的輸入的高準確率,進一步提高檢測速度。儘管這些貢獻似乎每個單獨來說都比較小,但是對於在PASCAL VOC的實時檢測上,YOLO只有63.4%mAP,而SSD有74.3%mAP。從最近有著高收益的殘差網路來說,相對於檢測正確來說,這個相對來說提升更大。進一步,高質量檢測的速度顯著提升可以擴充套件應用範圍,計算機視覺是有用的。

本文的貢獻點如下:

  • 我們介紹了SSD,一個針對多目標的single-shot的檢測器。比之前state-of-the-art的single-shot的檢測器YOLO要快,並且準確率更高。事實上,相同準確率更慢的技術,使用明確的region proposals和池化(包括faster RCNN)
  • SSD的核心是,對於一組default bounding box的修正集合,預測類別分數和box offset,對feature map使用小的卷積核。
  • 為了實現高的檢測準確率,我們對不同scale的feature map產生預測,然後通過寬高比分別採用這些預測。
  • 這些設計的特徵導致簡單的端到端訓練和高準確率,甚至是在低解析度的輸入影象上。進一步提高了速度。
  • 實驗包括模型在PASCAL VOC, COCO, and ILSVRC資料集上,不同輸入大小之間關於時間和準確率的分析。並且於最近的state-of-the-art方法進行了比較。

3、The Single Shot Detector (SSD)

這一部分介紹提出的SSD框架和相關的訓練方法。然後給出具體資料集的模型細節和實驗結果。

在這裡插入圖片描述

3.1 model

SSD方法是基於前饋卷積神經網路,該網路產生固定大小的bounding box的集合,和這些box是否存在目標類別例項的分數,然後使用非極大值一直產生最終的檢測。早期的網路層是基於標準架構,使用高質量影象分類(在任何分類層中刪除頂端),我們稱之為基礎網路,然後將輔助功能新增到網路中以產生檢測,具有以下關鍵特徵:

多尺度feature map檢測. 我們在截斷基礎網路後添加了卷積層,這些層的尺寸逐漸減小,並允許在多個尺度上預測檢測。用於預測檢測的卷積層對每個特徵層(操作在單個尺度的feature map)是不一樣的(參見overfeat、YOLO)。

針對檢測的卷積預測器. 每一個新增的feature層(或者是從基礎網路中選擇已存在的一組),使用一組卷積核,都可以產生一組固定的檢測預測集合。這些可以在圖2中,SSD網路架構的頂端看到。對於一個feature層,其size為mnp通道,潛在檢測的預測引數的基礎元素是33p的卷積核,用來生成類別的分數或者相對於default box座標的shape偏移。對m*n的每一個位置採用卷積核,將產生一個輸出值。對於每個feature map的location,bounding box偏移輸出值是相對於default box的位置計算的(參加YOLO的結構,直接使用全連線層的而不是卷積濾波器用於這一步)

default box和寬高比. 對網路頂層的多個feature map,我們將一組default bounding box的集合與每一個feature map cell相關聯。default box以卷積的方式平鋪feature map,因此每一個box的位置與其相對的cell是固定的。對每一個feature map cell,我們預測每個cell相對default box的shape的偏移,同樣,也預測每一個類別分數,表明在每個box中這個類別例項的存在可能性。特別地,對給定location的k個box的每一個,我們計算c個類別分數和4個相對於原始default box shape的偏移。在feature map的每個location,有(c+4)k個濾波器,因此,對m*n的feature map,有(c+4)kmn個輸出。有關default box的說明,可以參見圖1.我們的default box相對於faster rcnn中使用的anchor box要小,但是我們在不同解析度的幾個feature map上使用。在幾個feature map上允許不同的default box shape使得我們可以有效地離散可能的輸出輸出box shape空間。

在這裡插入圖片描述

3.2 training

在訓練SSD和訓練使用region proposal的典型檢測器來說,其關鍵區別就是,在固定檢測器輸出集合上,groundtruth資訊需要指定特定的輸出。一些版本訓練時也需要指定,如YOLO,還有faster-rcnn、multibox中的region proposal階段。一旦配置決定,損失函式和反向傳播就可以端到端。訓練時也涉及到選擇檢測的default box和scale的集合,同樣需要困難負樣本的挖掘的資料增強策略。

匹配策略. 在訓練時,我們需要確認,哪個default box與groundtruth檢測相關聯,並且進行相關地訓練。對每個groundtruth box,我們從default box中選擇,這些box的寬高比、尺寸都不一樣。通過將每個groundtruth box與default box進行最佳jaccard重疊(如multibox)匹配。但不同於multibox,我們然後將default box與所有groundtruth進行了jaccard重疊超過0.5的進行了匹配。這簡化了學習問題,允許網路對預測多個重疊的default 認box的高分,而不是隻選取最大重疊的那個。

訓練目標. SSD的訓練目標源自multibox,但是擴充套件為處理多個目標類別。在這裡插入圖片描述
可以認為是類別p的第i的default box和第j個groundtruth box的匹配。在以上的匹配策略中,可以使得在這裡插入圖片描述
整個目標損失是定位損失的加權和confidence損失,如下:
在這裡插入圖片描述
其中,N是匹配到的default box的數量。如果N=0,則損失設為0。定位損失採用預測box(l)和groundtruth box(g)引數之間的smooth l1損失。類似faster-rcnn,我們迴歸default bounding box(d)的中心偏置(cx, cy)和寬(w)、高(h)。
在這裡插入圖片描述
confidence損失是多個類別confidence©的softmax損失,其中權重引數α在交叉驗證時設定為1。
在這裡插入圖片描述

為default box選擇尺度和寬高比. 為了處理不同尺度的目標,一些方法建議處理不同size的影象,然後再結合結果。然而,通過利用一個網路中的不同層的feature map來做預測,可以模仿相同的效果,且共享了所有尺度的目標的引數。先前的工作展示出,使用低層的feature map可以提到語義分割質量,因為低層捕捉到了輸入目標更細節的東西。類似的,xx論文展示出,從一個feature map上新增全域性環境池化可以幫助平滑分割結果。受這些方法啟發,我們使用了高層和低層的feature map用來檢測。圖1中,兩個feature map(8x8和4x4)用在了這個框架中。事實上,我們可以用一點小的開銷,使用更多的feature map。

一個網路中不同層的feature map已知是不同感受野大小的。幸運的是,SSD框架,default box不需要與每一層的實際感受野相關聯。我們設計了default box的平鋪,因此指定feature map學習相應的特定尺度的目標。假設我們想要使用feature map來預測,每個feature map default box的尺度如下計算:
在這裡插入圖片描述
其中,s_min=0.2,s_max=0.9,意味著最低層的scale是0.2,最高層是0.9,中間所有層都是規律間隔。我們對default box施以不同寬高比,表示
在這裡插入圖片描述在這裡插入圖片描述
我們可以為每一個default box計算其寬和高
在這裡插入圖片描述
對於寬高比為1,我們新增一個default box,其scale是
在這裡插入圖片描述
這樣可以造成每個feature map location有6個default 認box。我們設定每個default box的中心是
在這裡插入圖片描述
其中|f_k|是第k個feature map的大小,切i,j屬於[0, [f_k]]。事實上,也可以設計成default box的分佈以最好的擬合特定資料集。如何設計最好tiling是一個開放的問題。

通過結果來自很多featuremap的所有location的不同scale和寬高比的所有default box的預測,我們有了大量預測集合。覆蓋了不同size和shape的輸入目標。例如,圖一中,狗與4x4的feature map中的一個default 認box匹配,但是與8x8的feature map的所有default box都不匹配。這是因為這些不同scale的box不匹配狗的box,因此在訓練中被認為是負樣本。

hard negative挖掘. 在結束匹配後,大多數default box都是負的,特別是當可能的default box比較大的時候。這裡介紹了一個明顯的正負訓練樣本不均衡的例子。我們不使用所有的負樣本,而是將這些負樣本,按照每個default box的最高confidence 損失進行排序,並且選擇最高的一個,因此正負樣本的比例是1:3。我們發現,這可以導致更快的優化和更穩定的訓練。

資料增強. 為了使得模型對於不同size和shape的輸入更具有魯棒性,每一個訓練影象都使用下列方法進行隨機採用:

  • 使用整個原始的輸入影象
  • 取樣一個影象塊,使得與目標的最小jaccard重疊分別是 0.1, 0.3,0.5, 0.7, or 0.9.
  • 隨機取樣影象塊

每一個取樣的影象塊的發現都是原來影象size的[0.1, 1],並且寬高比在12與2之間。如果groundtruth box的中心在取樣影象塊中,我們保留與groundtruth box重疊的部分。在上述提到的取樣之後,每一個取樣的影象塊被resize為固定的size,並且以0.5的概率進行水平翻轉,此外還新增一些測光扭曲等。

4、Experimental Results

基礎網路. 我們的網路是基於VGG-16的,並且在ILSVRC CLS-LOC資料集上進行了預訓練。類似於DeepLab-LargeFOV,我們將fc6和fc7轉換成了卷積層,下采樣fc6和fc7的引數,改變pool5的池化核,將2x2改為3x3,然後使用 `a trous 演算法來充滿”holes”。我們去除了所有的dropout層和fc8層。使用SGD,初始學習率為0.001,momentum=0.9,weight decay=0.0005,batch size=32,進行微調結果。學習率衰減策略每個資料集都略有不同,細節稍後給出。開原始碼見:https://github.com/weiliu89/caffe/tree/ssd

4.1 PASCAL VOC2007

在PASCAL VOC2007資料集上與fast rcnn、faster rcnn方法進行了比較,測試集是4952張影象。所有方法都是在預訓練的VGG-16模型上微調的。

在這裡插入圖片描述

圖2是SSD-300模型的網路細節。我們使用conv4_3、conv7(fc7)、conv8_2、conv9_2、conv10_2和conv11_2來預測定位和confidence。設定conv4_3的default box,scale=0.1。

4.2 Model analysis

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

4.3 PASCAL VOC2012

在這裡插入圖片描述

4.4 COCO

在這裡插入圖片描述

4.5 Preliminary ILSVRC results

4.6 Data Augmentation for Small Object Accuracy

在這裡插入圖片描述

在這裡插入圖片描述

4.7 Inference time

在這裡插入圖片描述

5、結論

這篇論文介紹了SSD,一個基於多類別的快的single-shot的檢測器。我們這個模型的關鍵特徵是使用與網路頂層多個feature map匹配的mult-scale的卷積bounding box的輸出。這種表示允許我們有效地訓練可能的box的shape空間。我們進行實驗驗證了給定的合理的訓練策略,一組數目很大的經過仔細選擇的default box結果可以提高效能。與現有方法相比,我們建立的SSD模型,至少有一個數量級的box預測取樣位置、scale、寬高比。我們表明,在給定相同的VGG-16基礎架構,SSD相比之前的state-of-the-art目標檢測器在準確率和速度上都實現了超越。我們的SSD-512明顯地比state-of-the-art faster rcnn在PASCAL VOC 和 COCO資料集上的準確率要高,並且有3倍快。我們的實時SSD-300速度是59FPS,比目前的實時YOLO要快,且檢測準確率更高很多。

除了這些獨立的實用性,我們相信,我們的單片和相對簡單的SSD模型為更大的需要目標檢測的系統提供了有用的building block。一個充滿希望的未來方向是探索使用RNN來檢測,並同時跟蹤視訊目標,來作為系統的一部分使用。