天天看點

目标檢測——SSD

我們知道Yolo的核心思想是将物體檢測問題轉化了單一的回歸問題(之前的是分類和回歸問題),而SSD算法是一種直接預測目标類别和bounding box的多目标檢測算法。在正式介紹SSD之前,我們先來看一下論文,了解了這篇論文之後,SSD的思路就會清晰很多。

Paper:Scalable Object Detection using Deep Neural Networks 論文:基于深度網絡的可擴目标檢測

【01. 解決的主要問題】

檢測一張圖檔中同一類别的多個物體。之前的方法一般都是将訓練好的某一類檢測器在圖檔的每個位置進行移動、縮放來檢測物體(窮舉法),當類别增多的時候計算上就很費力。

【02. 主要貢獻】

(1)将物體檢測定義為多個邊界框坐标的回歸問題。對于每個預測框,網絡輸出一個置信度得分,顯示該框包含對象的可能性。(傳統方法在預先定義的框中對特性進行評分),效率高。

(2)将邊界框預測器作為網絡的一部分進行訓練,根據預測框和ground truth來調整并通過反向傳播算法更新框的位置、置信度和特征。

(3)在訓練邊界預測器時不考慮物體的類别。

【03. 創新點】

本文主打的就是scalable,可擴充性,具體是指物體類别增多的情況下,bounding box的數目不會成線性增加。這樣就很容易擴充到其他更大的資料集上。

【04. 主要方法】

用一個Deep Neural Network(DNN)産生固定數量的邊界框,每一個邊界框都有其包含某個物體的置信度(此時并不知道每個框中具體是什麼,置信度隻代表了其包含物體的可能性大小)。【延伸:Faster RCNN的思想也是如此,其RPN就是做region proposal ,然後利用Fast RCNN進行分類。】

【05. 模型】

采用Alexnet作為基礎網絡,但是将Alexnet最後一層的輸出改為回歸,輸出邊界框的坐标(左上和右下)以及其置信度(介于0~1之間)。這些坐标都是用圖像尺度進行了歸一化的,目的是為了讓網絡适用于各種尺度的圖像。

【06. 訓練過程】

訓練DNN來預測邊界框和他們的置信度(分數),使最高分的邊界框和ground truth最比對。假設有一個訓練樣本,有M個物體被打了标簽(根據M個ground truth打标簽,K遠大于M)(K是預測框,M是ground truth框)。然後隻優化最比對ground truth 的邊界框,修改它的坐标來提升比對度,最大化置信度,并減小其餘的預測器的置信度(本來就定位不是很好的預測框)。

論文構造了一個配置設定的問題,如果第i個預測框被配置設定給第j個目标,則x_ij=1,否則為0,配置設定的目标函數為:

F m a t c h ( x , l ) = 1 2 ∑ i , j ∣ ∣ l i − g i ∣ ∣ 2 2 F_{match}(x,l) = \frac{1}{2} \sum_{i,j} || l_i - g_i ||_2^2 Fmatch​(x,l)=21​i,j∑​∣∣li​−gi​∣∣22​其中, l i l_i li​是預測框的坐标向量, g j g_j gj​是真實框的坐标向量(左上和右下),用L2距離來度量。

然後要最優化置信度,減少loss:

F c o n f ( x , c ) = − ∑ i , j x i j l o g ( c i ) − ∑ i ( 1 − ∑ j x i j ) l o g ( 1 − c i ) F_{conf}(x,c) = -\sum_{i,j} x_{ij}log(c_i)-\sum_{i}(1-\sum_{j}x_{ij})log(1-c_i) Fconf​(x,c)=−i,j∑​xij​log(ci​)−i∑​(1−j∑​xij​)log(1−ci​)最終的損失函數為:

F ( s , l , c ) = α F m a t c h ( x , l ) + F c o n f ( x , c ) F(s,l,c) = \alpha F_{match}(x,l) + F_{conf}(x,c) F(s,l,c)=αFmatch​(x,l)+Fconf​(x,c)【07. 訓練細節】

對ground truth的location進行聚類得到K個典型的聚類中心作為priors,得到物體的幾個典型位置,利用他們來進行輔助比對。這樣學習算法就可以隻要學習每個prior box的和Ground Truth的殘差,而不用學習所有預測框和Ground Truth的殘差。

【08. 優化過程】

利用反向傳播算法最小化loss(x是配置設定方法)

【09. 網絡結構】

Adagrad來控制學習率的衰減,mini-batch為128,并行計算加快收斂,聚類時使用k-means,α為0.3來平衡定位和置信度的損失。定位超出圖檔的進行映射或者裁剪,利用非極大值抑制,門檻值0.5。

【10. 樣本】

正樣本:10million 個裁剪後的圖檔,與Groundtruth的 Jaccard重疊相似度門檻值大于0.5;

負樣本:20million個裁剪後的圖檔,與Groundtruth Jaccard重疊相似度門檻值小于0.2(背景類);

【11. 評估方法】

先計算每張圖像的中心點,然後以它為中心從圖像上裁剪出來一個最大的正方形,為了滿足AlexNet的網絡結構,每張圖像還要resize到220x220大小,再進行定位。

門檻值0.5的非極大值抑制後,保留打分最高的10個區域,然後将這些區域送到分類CNN裡面進行分類,輸出每個區域的機率值,得到10*(N+1)的機率矩陣(N為目标的個數)每個區域的置信度分數乘上機率值作為它最終的分數,這些分數用于估計和計算P-R曲線。

了解了上一篇的論文以後,我們現在來正式的介紹SSD:

SSD: Single Shot MultiBox Detector
目标檢測——SSD

來源:CSDN

原文:https://blog.csdn.net/neu_chenguangq/article/details/79057655

基于”Proposal + Classification”的Object

Detection的方法,RCNN系列(R-CNN、SPPnet、Fast R-CNN以及Faster

R-CNN)取得了非常好的效果,因為這一類方法先預先回歸一次邊框,然後再進行骨幹網絡訓練,是以精度要高,這類方法被稱為two

stage的方法。但也正是由于此,這類方法在速度方面還有待改進。由此,YOLO[8]應運而生,YOLO系列隻做了一次邊框回歸和打分,是以相比于RCNN系列被稱為one;

stage的方法,這類方法的最大特點就是速度快。但是YOLO雖然能達到實時的效果,但是由于隻做了一次邊框回歸并打分,這類方法導緻了小目标訓練非常不充分,對于小目标的檢測效果非常的差。簡而言之,YOLO系列對于目标的尺度比較敏感,而且對于尺度變化較大的物體泛化能力比較差;

針對YOLO和Faster R-CNN的各自不足與優勢,WeiLiu等人提出了Single Shot MultiBox;

Detector,簡稱為SSD。SSD整個網絡采取了one stage的思想,以此提高檢測速度。并且網絡中融入了Faster;

R-CNN中的anchors思想,并且做了特征分層提取并依次計算邊框回歸和分類操作,由此可以适應多種尺度目标的訓練和檢測任務。SSD的出現使得大家看到了實時高精度目标檢測的可行性。

摘要:

SSD 輸出一系列離散化的 bounding boxes,這些 bounding boxes 是在不同層次(layers)上的 feature maps 上生成的,并且有着不同的縱橫比(aspect ratio)。

在預測時,網絡對default box中每一個目标的分類進行打分(它屬于所有類的可能性,若有10類,就會得到10個分數),然後調整邊界框來更好的比對目标的形狀。同時,SSD結合了不同分辨率的特征圖來處理物體不同尺寸的問題。相對于需要object proposals的方法,SSD完全消除了object proposals和随後的像素和特征重采樣階段,并将所有計算封裝在一個網絡中。這樣使得 SSD 更容易去優化訓練,也更容易地将檢測模型融合進系統之中。在 PASCAL VOC、MS COCO、ILSVRC 資料集上,SSD 在保證精度的同時,其速度要比用 region proposals 的方法要快很多。SSD 相比較于其他單結構模型(YOLO),即是是在輸入圖像較小的情況下也能有更好的精度。

Introduction

目前的物體檢測都是先假設出一堆邊界框,然後對像素或特征重采樣,再用分類器進行分類,雖然這類方法能夠在PASCAL VOC, COCO, ILSVRC資料集上表現不錯,但是太費計算資源,在嵌入式系統上很慢,很難做到實時檢測。目前為止,都是犧牲檢測精度來換取時間。

這篇文章就第一個提出了在保證精度的情況下,不需要像素或特征重采樣的基于目标檢測的深度網絡,速度的提升來自于消除region proposals和随後的像素或特征重新取樣階段(雖然并不是第一個這樣做的–YOLO)。SSD實作了一系列的改進,提升了準确率。改進包括使用一個小卷積濾波器來預測物體邊界框位置中的類别和偏移,為了在多個尺度上進行檢測,使用不同的縱橫比檢測,并在網絡的後期将這些過濾器應用于多個特征圖。本文的貢獻如下:

  1. SSD比YOLO快,準确。能夠和Faster R-CNN之類需要region proposals和池化的方法一樣準确。
  2. SSD的核心是預測分類的得分和在 feature map 上使用小的卷積核來預測邊界框偏移量。
  3. 在不同尺度的feature map上進行預測來提高準确性,并根據縱橫比來分類。
  4. 即使低分辨率圖檔,也能達到高精度。端到端的設計更加簡單。在檢測速度和檢測精度之間取得較好的 trade-off。
  5. 在PASCAL VOC, COCO, ILSVRC資料集上與目前的方法進行了速度和準确性的比較。

SSD架構

先弄清楚下文所說的 default box 以及 feature map cell 是什麼。看下圖:

• feature map cell 就是将 feature map 切分成的一個個格子;

• 而 default box 就是每一個格子上,一系列固定大小的 box,即圖中虛線所形成的一系列 boxes。

目标檢測——SSD
  1. SSD隻需要輸入一個帶有GT框的圖檔,然後在不同尺度的特征圖上(如88和44)的每個位置以卷積的方式,評估一系列不同縱橫比小集合(如4個)default boxes。每一個box都是預測出器偏移量和裡面物體的類别置信度。
  2. 訓練時,首先用default boxes和GT box比較,SSD模型的損失就是坐标的損失和置信度的損失之和。
目标檢測——SSD

SSD網絡中分為了6個stage,每個stage能學習到一個特征圖,然後進行邊框回歸和分類。SSD網絡以VGG16的前5層卷積網絡作為第1個stage,然後将VGG16中的fc6和fc7兩個全連接配接層轉化為兩個卷積層Conv6和Conv7作為網絡的第2、第3個stage。接着在此基礎上,SSD網絡繼續增加了Conv8、Conv9、Conv10和Conv11四層網絡,用來提取更高層次的語義資訊。在每個stage操作中,網絡包含了多個卷積層操作,每個卷積層操作基本上都是小卷積。

模型

SSD是基于前饋卷積網絡的,能夠産生固定尺寸的邊界框集合和其中的目标類别分數,然後用非極大值抑制來進行最後的檢測。

SSD 模型的最開始部分,本文稱作 base network,是用于圖像分類的标準架構。在 base network 之後,本文添加了輔助的網絡結構:

  1. 多尺度特征圖

    在基礎網絡最後添加了卷積層,這些卷積層的大小是逐層遞減的,可以在多尺度下進行預測。(Yolo是在單一尺度的特征圖上進行操作)

  2. 卷積預測器

    每一個添加的特征層(或者基礎網絡中的特征層)都可以使用一系列卷積,去産生一系列固定大小的預測。這些預測要麼是類别的得分,要麼就是box的偏置。(Yolo就用了一個中間層的全連接配接層來替代卷積)

  3. default boxes和縱橫比

    對每一個feature map cell來說,都對應一組default boxes,default boxes用卷積的方式來覆寫特征圖,是以每一個box就固定對應一個feature map cell。在每一個feature map cell上,預測它對應的default boxes的偏置和類别置信度。

舉個栗子:

一個nm的特征圖,每一個cell上有k個default boxes,共有c個類,每個default box需要預測4個坐标相關的值和c+1個類别機率,是以需要每個位置要k(c+4)個過濾器,一個就會有kmn*(c+4)個輸出(實際code是分别用不同數量的3*3卷積核對該層feature map進行卷積,比如卷積核數量為(c+1)k對應confidence輸出,表示每個default box的confidence,就是類别;卷積核數量為4k對應localization輸出,表示每個default box的坐标)。作者的實驗也表明default box的shape數量越多,效果越好。

是以這裡用到的default box和Faster RCNN中的anchor很像,在Faster RCNN中anchor隻用在最後一個卷積層,但是在本文中,default box是應用在多個不同層的feature map上。

訓練

在訓練時,SSD 的訓練方法與之前那些使用 region proposal + pooling 方法的差別是,SSD 訓練圖像中的 ground-truth 需要賦予到那些固定輸出的 boxes 上。在上文中也已經提到,SSD 輸出的是實作定義好的,一系列固定大小的 bounding boxes。事實上,這種方法在 YOLO, Faster R-CNN 中的 RPN 階段以及 MultiBox 中都有使用。隻要将訓練圖像中的 ground truth 與固定輸出的 boxes 對應之後,就可以進行端到端的損失函數計算以及反向傳播的計算更新了。

來源:CSDN 原文:https://blog.csdn.net/qq_34784753/article/details/78889206

目标檢測——SSD

在訓練過程中同樣會引入一些其他的問題。大緻如下所示:

Matching stategy -> 也就是如何選擇一系列的 default boxes

Training objective -> 目标損失函數的選擇

Choosing scales and aspect ratios for default boxes -> 選擇 default boxes 的尺度問題

hard negative mining -> 負樣本問題

Data augmentation -> 資料增強問題

比對政策:

在訓練過程中,首先需要确定的一個問題是:如何将 ground truth boxes 與 default 進行比對,以此組成 label ?

對于每個 ground truth box,我們都從預設的框中進行選擇,這些框根據位置,長寬比和比例而變化。在開始的時候,使用 MultiBox 中的 best jaccard overlap(也就是 IoU)來比對每一個 ground truth box 與 default box,這樣就能保證每一個 ground truth box 與唯一一個 default box 對應起來。但是又不同于 MultiBox,SSD将 default box 與任意的 ground truth box 進行比對,隻要兩者之間的 jaccard overlap 大于一個門檻值即可,本文中的門檻值取的是 0.5。(某個ground truth可能與多個先驗框比對,但是反過來卻不可以,因為一個先驗框隻能比對一個ground truth,如果多個ground truth與某個先驗框IOU大于門檻值,那麼先驗框隻與IOU最大的那個先驗框進行比對)

這簡化了學習問題,使得網絡可以對多覆寫(multiple overlapping)預設框預測得到高分,而不是選出最大覆寫的那個覆寫。

訓練目标

SSD 的訓練時的目标函數源自于 MultiBox 的目标函數,但是 SSD 的目标函數又将其進行拓展,使其能夠處理多個目标類别。這裡使用 x i j p = ( 1 , 0 ) x_{ij}^p=({1,0}) xijp​=(1,0)表示第i個 default box與類别p的第j個ground truth box相比對,否則如果不比對的話,則有 x i p j = 0 x^p_ij=0 xip​j=0。

根據上面這種比對政策,我們會得到 ∑ i x i p j ≥ 1 ∑_i x^p_ij ≥1 ∑i​xip​j≥1。最後總的目标函數是由 localization loss (loc)與 confidence loss(conf)的權重求和:

L ( x , c , l , g ) = 1 N ( L c o n f ( x , c ) + α L l o c ( x , l , g ) ) L(x,c,l,g) = \frac{1}{N}(L_{conf}(x,c) + \alpha L_{loc}(x,l,g)) L(x,c,l,g)=N1​(Lconf​(x,c)+αLloc​(x,l,g))

其中N是比對的default boxes,如果N=0,則把loss也設為0;localization loss是平滑的L1 損失,l代表預測框參數,g代表GT box參數;和Faster R-CNN類似,用回歸偏置來得到預設邊界框(d)的中心坐标(cx,cy)和寬度(w)、高度(h)。

選擇預設框的尺度和縱橫比

為了處理對不同尺度的物體,之前的一些方法(Overfeat,SPP-Net 等)将圖像處理成不同的大小,然後再用于計算。

但是,通過使用一個網絡結構中的不同層次的特征(feature map)我們同樣可以得到相同的效果,同時在所有物體尺度中共享參數。

之前的論文(FCN 等)就是使用了 CNN 前面的層,以此來提高圖像的分割的效果,因為越是底層的 layers越能保留目标的細節資訊。

受到上面方法的啟示,在 SSD 中同時利用底層特征和高層特征進行目标檢測。

不同層次的特征圖有不同大小的感受野,但是SSD并不需要将default boxes 與每一層實際的感受野相比對。SSD設計了一種default boxes的堆疊方式,使得特定的特征圖就能夠負責特定的尺度。假設我們用m個特征圖進行預測,每一個default boxes的尺度就是:

s k = s m i n + s m a x − s m i n m − 1 ( k − 1 ) , k ∈ [ 1 , m ] s_k = s_{min} + \frac{s_{max}-s_{min}}{m-1}(k-1),k \in[1,m] sk​=smin​+m−1smax​−smin​​(k−1),k∈[1,m]

s m i n = 0.2 s_{min}=0.2 smin​=0.2, s m a x = 0.9 s_{max}=0.9 smax​=0.9,意味着最底層的尺度為0.2,最高層的尺度為0.9,其他層也按規律設計。我們對預設盒子加上不同的縱橫比,即 a r ∈ ( 1 , 2 , 3 , 1 / 2 , 1 / 3 ) a_r∈({1,2,3,1/2,1/3}) ar​∈(1,2,3,1/2,1/3).我們可以計算每個default box寬( w k a = s k a r w_k^a=s_k \sqrt{a_r} wka​=sk​ar​

​)和高( h k a = s k / a r h_k^a= {s_k}/{\sqrt{a_r}} hka​=sk​/ar​

​),縱橫比為1時,添加一個尺度為 s k ′ = s k s k + 1 s'_k=\sqrt{{s_k}{s_{k+1}}} sk′​=sk​sk+1​

​的default box,這就在每個位置都有6個default box了,把它們的中心設為 ( i + 0.5 ∣ f k ∣ , j + 0.5 ∣ f k ∣ ) (\frac{i+0.5}{|f_k|},\frac{j+0.5}{|f_k|}) (∣fk​∣i+0.5​,∣fk​∣j+0.5​),其中 ∣ f k ∣ |f_k| ∣fk​∣是第 k 個 feature map 的大小,且 i , j ∈ [ 0 , ∣ f k ∣ ) i,j∈[0,|f_k|) i,j∈[0,∣fk​∣),可以設計不同的 default boxes 的尺度的分布以此來适應各種不同的資料集。

負樣本解決辦法

大多數的default box都是負樣本,導緻了正負樣本的不平衡,是以我們要想辦法減少負樣本的數量,而不是全用,是以在訓練過程中采用了Hard Negative Mining的政策,根據Confidence Loss對所有的box進行排序,再挑選前面最高的 default boxes,使得負樣本與正樣本之間的比例大緻為 3:1。使用這種方法可以加快優化速度以及使訓練過程更加穩定。

資料增強

圖像增強的方法(每一張随機選下面的一項):

(1)使用整張原始輸入圖像

(2)使用IOU和目标物體為0.1、0.3、0.5、0.7和0.9的patch

(3)随機采取一個patch

這些patch在原圖的大小的[0.1, 1]之間,相應的寬高比在[1/2, 2]之間。如果ground truth的中心在樣本塊裡,我們保留那個重疊部分的ground truth box,在完成前面的采樣之後,我們把樣本塊重新調整成固定大小,并且以 0.5 的機率進行随機 水準翻轉。再用到了另一篇論文中提及一些光學變化方法。

傳統的資料增強方法就是:

(1)從256256中随機裁剪出224224,獲得一些平移不變性

(2)水準翻轉,獲得翻轉不變性

(3)随即增加光照,獲得對光線變化的不變性和次要顔色變化的不變性

這篇文章擴充了一些翻轉不變性和顔色不變性:

1. 将圖像裁剪擴充到額外像素

一般地,将圖檔調整到256256的尺度再随機裁剪成224224會丢失很多資訊(約30%),雖然裁剪後的像素很可能比中間像素的資訊量少,但利用這些額外的像素能夠改進模型。

想要利用全部的圖檔,就把圖檔尺度變為256N或N256(最小的邊變為256),然後随機選取224*224進行裁剪作為訓練圖檔。就能夠産生更多的樣本圖檔,引入了更多的平移不變性。

2. 額外的顔色操作

處理随機增加光噪聲,還用python圖像庫(PIL)随機操作對比度、亮度和顔色。使得覆寫更大範圍的圖檔變化。

随機選擇一個處理這三項的順序,然後選擇一個0.5到1.5之間的數值來做圖檔增強(1就沒有改變),最後再随機添加光噪聲。

3. 測試時的其他資料增強方法

不僅用傳統的10個圖像,還在三個不同尺度上的預測改進了聯合預測。還對資料的三個不同視圖進行了預測,這些視圖捕獲了先前裁剪掉的像素。利用了5個變化,2個翻轉,3個尺度和3個視圖,産生了90個預測,将預測速度降低了幾乎一個數量級,為了加快速度,還使用了一個簡單的貪婪算法。

3.1. 多尺度預測

用256和228和284三個尺度。當把圖檔尺度擴大時,一個好的插值方法就很重要,如雙三次插值算法。還要注意不能使用為縮小圖像而設計的抗混疊過濾器。

3.2. 從多個視角進行預測

為了利用全部的像素,如對256N或N256的圖檔用三個不同的正方形圖檔視角(左/上,中間,右/下)256*256,然後在這三個視角上分别用裁剪、翻轉和尺度縮放。

目标檢測——SSD

實驗結果

基礎網絡全部是基于VGG16的,預先在ILSVRC CLS-LOC資料集上訓練過的。具體資料自行參考論文第七頁。

【模型分析】 用控制變量法來評估每個部分的功能。輸入圖檔300*300。

目标檢測——SSD

【資料增強很關鍵】 使用資料增強方法以後mAP提升了8.8%,但是這種方法可能在Fast/Faster R-CNN上增益不大,因為他們在分類時使用了特征池化操作,對目标變化相對魯棒。

【Default box越多效果越好】 使用多種預設框形狀能夠使網絡更容易去預測。

【多分辨率上的多層輸出更好】 如下圖:

目标檢測——SSD

今天無意中翻到之前有一篇部落格沒有及時更新完,是以今天把他更新了,希望小夥伴們多多包容(比心)!前兩天在單向曆上看到一句話覺得特别适合我們,也拿出來分享給大家。這句活是這麼說的:熬夜不是出于苦工,而是為了自由的滋味——梁文道《我執》。啊哈哈哈哈哈,内心有些小崩潰,宜夜貓子~我們下篇文章見啦!

繼續閱讀