目標檢測 | 清晰易懂的SSD算法原理綜述

2021-02-13 機器學習算法那些事

SSD(Single Shot Detection)是一個流行且強大的目標檢測網絡,網絡結構包含了基礎網絡(Base Network),輔助卷積層(Auxiliary Convolutions)和預測卷積層(Predicton Convolutions)。

本文包含了以下幾個部分:

(1)理解SSD網絡算法所需要理解的幾個重要概念

(2)SSD網絡框架圖

(3)SSD網絡中幾個重要概念的詳細解釋

(4)SSD網絡如何定位目標

(5)SSD網絡的算法流程圖

(5)小結

Single Shot Detection :早期的目標檢測系統包含了兩個不同階段:目標定位和目標檢測,這類系統計算量非常耗時,不適用實際應用。Single Shot Detection模型在網絡的前向運算中封裝了定位和檢測,從而顯著提高了運算速度。

多尺度特徵映射圖(Multiscale Feature Maps):小編認為這是SSD算法的核心之一,原始圖像經過卷積層轉換後的數據稱為特徵映射圖(Feature Map),特徵映射圖包含了原始圖像的信息。SSD網絡包含了多個卷積層,用多個卷積層後的特徵映射圖來定位和檢測原始圖像的物體。

先驗框(Priors):在特徵映射圖的每個位置預先定義不同大小的矩形框,這些矩形框包含了不同的寬高比,它們用來匹配真實物體的矩形框。

預測矩形框:每個特徵映射圖的位置包含了不同大小的先驗框,然後用預測卷積層對特徵映射進行轉換,輸出每個位置的預測矩形框,預測矩形框包含了框的位置和物體的檢測分數。比較預測矩形框和真實物體的矩形框,輸出最佳的預測矩形框。

損失函數:我們知道了預測的矩形框和真實物體的矩形框,如何計算兩者的損失函數?

損失函數包含了位置損失函數和分類損失函數,由於大部分矩形框只包含了背景,背景的位置不需要定位,因此計算兩者的位置損失函數用L1函數即可。我們把背景稱為負類,包含了物體的矩形框稱為正類,不難理解圖像中大部分的矩形框只包含了負類,若用全部的負類和正類來計算損失函數,那麼訓練出來的模型偏向於給出負類的結果。解決辦法是在計算分類損失函數時,我們只選擇最難檢測的幾個負類和全部正類來計算。

非極大值抑制(Non-maximum Suppression):若兩個矩形框都包含了相同的物體,且兩個矩形框的重疊度較高,則選擇分數較高的矩形框,刪除分數較低的矩形框。

SSD網絡包含了基礎網絡,輔助卷積層和預測卷積層:

基礎網絡:提取低尺度的特徵映射圖

輔助卷積層:提取高尺度的特徵映射圖

預測卷積層:輸出特徵映射圖的位置信息和分類信息

下面介紹SSD網絡的這三個部分

基礎網絡

基礎網絡的結構採用了VCG-16網絡架構,VCG-16網絡如下圖:

VCG-16網絡包含了卷積層和全連接層(FC Layers),全連接層的任務用來分類,由於基礎網絡只需要提取特徵映射圖,因此需要對全連接層用卷積層代替,這一部分的參數和VCG-16網絡的卷積層參數用遷移學習的方法獲取。

基於VCG網絡架構的基礎網絡如下圖:

輔助卷積層

輔助卷積層連接基礎網絡最後的特徵映射圖,通過卷積神經網絡輸出4個高尺度的特徵映射圖:

預測卷積層

預測卷積層預測特徵映射圖每個點的矩形框信息和所屬類信息,如下圖:

如何表示矩形框

我們用矩形框定位物體的位置信息和所屬類,如下圖:

常用四個維度表示矩形框信息,前兩個維度表示矩形框的中心點的位置,後兩個維度表示矩形的寬度和高度。為了統一,我們使用歸一化的方法表示矩形框:

上圖貓的矩形框為:(0.78,0.80,0.24,0.30)

如何衡量兩個矩形框的重疊度

SSD算法中有兩處需要計算矩形框的重疊度,第一處是計算先驗矩形框和真實矩形框的重疊度,目的是根據重疊度確定先驗框所屬的類,包括背景類;第二處是計算預測矩形框和真實矩形框的重疊度,目的是根據重疊度篩選最優的矩形框。

我們用Jaccard Index或交並比(IoU)衡量矩形框的重疊度。

交並比等於兩個矩形框交集的面積與矩形框併集的面積之比,如下圖:

損失函數算法

預測層預測了映射圖每個點的矩形框信息和分類信息,該點的損失值等於矩形框位置的損失與分類的損失之和。

首先我們計算映射圖每個點的先驗框與真實框的交並比,若交並比大於設置的閾值,則該先驗框與真實框所標記的類相同,稱為正類;若小於設置的閾值,則認為該先驗框標記的類是背景,稱為負類。

然後預測層輸出了映射圖每個點的預測框,預測框的標記與先驗框的標記相同。

預測框與真實框的損失函數等於預測框位置的損失與分類的損失之和。

1. 預測框位置的損失:

由於不需要用矩形框定位背景類,所以只計算預測正類矩形框與真實矩形框的位置損失:

我們用 nn.L1Loss函數計算矩形框位置的損失。

n1.L1Loss函數:

torch.nn.L1Loss(size_average=None, reduce=None, reduction='mean')

公式:

其中N表示樣本個數。

如果reduction不為'none'(默認設為'mean'),則

假設共有N個正類的預測矩形框,每個矩形框的位置為

其中 i = 1,2,...,N

每個預測矩形框對應的正類真實矩形框的位置為:

如下圖的預測矩形框和對應的正類真實矩形框:

損失函數為:

2.預測類的損失:

由第一節的損失函數介紹可知,大部分的預測矩形框包含了負類(背景類),容易知道一張圖中負類的個數遠遠多於正類,若我們計算所有類的損失值,那麼訓練出來的模型會偏向於預測負類的結果。

因此我們選擇一定數量的負類個數和全部的正類個數來訓練模型,負類個數N_hn,正類個數N_p,負類個數與正類個數滿足下式:

我們知道了負類個數,如何從數量龐大的負類中選擇所需要的負類個數?本文採用了最難檢測到負類的預測框作為訓練的負類,稱為Hard Negative Mining。

現在我們知道了如何選擇負類,那麼如何預測分類損失函數?關於多分類任務,我們常用交叉熵來評價分類損失函數。

若預測的類個數為K(包含了背景類),交叉熵公式如下:

其中為真實類屬於第 i 類概率,若屬於第 i  類則

;若不滿足則為預測類屬於第i類的概率,每個先驗框的預測類是一個1行K列的矩陣。

若交叉熵損失函數為CE Loss,預測類的損失為,有:

 

 

其中N_P和N_hn分別為正類、負類個數。

 

總損失函數為預測類損失和預測位置損失之和,記為L,有:

α常設置為1,或者也可作為待學習的參,SSD論文中設置α等於1。

前面介紹通過先驗框和真實框的交並比來分類,若交並比大於閾值則為正類(包含某個特定物體的類),若交並比小於閾值則為負類(背景類)。

 

預測框與先驗框的個數相等,若有多個相同正類的預測框的交並比很大(如下圖),如何選擇最優的預測框?

上圖的五個預測框預測了三隻狗和兩隻貓,三隻狗的交並比如下表:

設置閾值為0.5,因為預測dog B的分數最大(0.96),且dog B和dog C的交並比大於閾值,因此一致dog C的預測框。由於dog A與其他預測框的交並比小於閾值,因此保留dog A的預測框。即狗的輸出結果為兩個。

貓的預測矩形框如下表:

同理,由於cat A的預測分數最高,且cat B與cat A交並比大於閾值,因此抑制cat B預測框。

上述方法稱為非極大值抑制(Non-Maximum Suppression)。

根據非極大值抑制方法,貓狗的預測框如下圖:

介紹了SSD網絡結構以及理解該網絡所需要的基礎概念,基於這些知識,下面介紹SSD網絡的算法流程。

訓練階段:

預測階段



本文介紹了SSD算法框架及原理,由於算法細節較多以及篇幅的關係,小編選擇了幾個非常重要且設計很巧妙的細節進行介紹,更詳細內容的連結https://github.com/sgrvinod/a-PyTorch-Tutorial-to-Object-Detection,對於英文不好的同學,可參考該文幫助理解,若有不懂歡迎交流。

推薦閱讀

歡迎掃碼關注:

相關焦點

  • 目標檢測|SSD原理與實現
    前言目標檢測近年來已經取得了很重要的進展,主流的算法主要分為兩個類型(參考RefineDet):(1)two-stage方法,如R-CNN系算法,其主要思路是先通過啟發式方法(selective search)或者CNN網絡(RPN)產生一系列稀疏的候選框,然後對這些候選框進行分類與回歸,two-stage
  • 目標檢測算法之SSD
    前言昨天介紹了特徵金字塔網絡用於目標檢測,提升了多尺度目標檢測的魯棒性,今天開始講講One-Stage目標檢測算法中SSD算法。這個算法是我平時做工程中最常用到的,嚴格來說平時最常用的是Mobilenet做Backbone的SSD算法,因為要考慮到實際部署的時候的速度要求,不過原理都一樣。
  • SSD目標檢測算法精講
    年,Wei Liu等人提出了SSD算法,它是繼YOLOv1算法提出後的又一單階段目標檢測算法。在當時,單階段算法相比於以R-CNN系列為主的雙階段算法更快,所以被學術界和工業界所青睞。為了提高檢測的精度,SSD創造性地提出了多尺度預測的目標檢測算法,使得網絡更容易適應對不同大小物體的檢測。
  • 基於深度學習的目標檢測算法綜述
    本文針對目前主流的目標檢測方法進行簡單的介紹,文章分為兩個部分:第一部分介紹R Girshick提出的以R-CNN為代表的結合region proposal和CNN分類的目標檢測框架(R-CNN, SPP-NET, Fast R-CNN, Faster R-CNN); 第二部分介紹以YOLO為代表的將目標檢測轉換為回歸問題的目標檢測框架(YOLO, SSD); 第三部分介紹一些最新的目標檢測算法的進展
  • SSD目標檢測
    後臺回復CV入坑必備獲得CV入坑學習資料SSD,全稱Single Shot MultiBox Detector,是Wei Liu在ECCV 2016上提出的一種目標檢測算法但是在SSD300中prior box設置並不能完全和上述公式對應:不過依然可以看出:SSD使用感受野小的feature map檢測小目標,使用感受野大的feature map檢測更大目標。
  • 目標檢測算法SSD結構詳解
    今天我們學習一種新的目標檢測算法SSD(Single Shot MultiBox Detector),該算法屬於One-Stage類算法範疇。首先我們先看一下One-Stage和Two-Stage類算法到底有哪些區別。
  • 從RCNN到SSD,深度學習目標檢測算法盤點
    本文對目標檢測進行了整體回顧,第一部分從RCNN開始介紹基於候選區域的目標檢測器,包括Fast R-CNN、Faster R-CNN 和 FPN等。第二部分則重點討論了包括YOLO、SSD和RetinaNet等在內的單次檢測器,它們都是目前最為優秀的方法。機器之心之前已經討論過非常多的目標檢測算法,對計算機視覺感興趣的讀者也可以結合以前的文章加強理解。
  • 深度學習第24講:計算機視覺之目標檢測算法綜述
    在正式的學習各類目標檢測算法之前,本節將首先對影響目標檢測算法發展歷史的主要算法進行一個綜述,以期對後面的內容起到一個提綱挈領的作用。       在 2012 年深度學習正式介入計算機視覺目標檢測任務之前,傳統的目標檢測算法一直是以滑動窗口卷積等較為傳統的方式進行區域選擇、特徵提取和分類回歸等步驟,例如在深度學習興起之前目標檢測領域較為優秀的可變形的組件模型(DPM)方法等。
  • 華為MIT韓松論文;DeepMind開源OpenSpiel;目標檢測算法全面綜述
    其他還有微眾銀行楊強等提出的內容推薦新模型、對BERT的反思、GAN在時尚領域的研究,以及目標檢測算法綜述等。做算法的讀者朋友可以參考,將算法的研究成果和現實場景結合起來。論文提出的推薦算法,有可能給現有的基於協同過濾的算法帶來更好的性能提升。
  • SSD物體檢測算法詳解
    物體檢測算法,按算法結構,可以分為one-stage和two-stage兩類。
  • 從RCNN到SSD,這應該是最全的一份目標檢測算法盤點
    目標檢測是很多計算機視覺任務的基礎,不論我們需要實現圖像與文字的交互還是需要識別精細類別,它都提供了可靠的信息。本文對目標檢測進行了整體回顧,第一部分從RCNN開始介紹基於候選區域的目標檢測器,包括Fast R-CNN、Faster R-CNN 和 FPN等。
  • 「深度學習基礎」SSD之二:網絡結構及代碼實現
    01SSD結構論文:通過wx搜索「AI算法面試分享」回復「ssd」獲取輸入:300x300(512x512)Backbone:VGG16>顯著特點:利用多尺度特徵圖做檢測。然後移除dropout層和fc8層,並新增一系列卷積層,在檢測數據集上做finetuing。03SSD網絡結構Keras代碼實現SSD300 Keras實現代碼如下:
  • 深度學習第25講:目標檢測算法經典論文研讀之R-CNN
    正如筆者在上一篇目標檢測算法綜述中所言,作為將深度學習引入目標檢測領域的開山之作,R-CNN 在目標檢測和計算機視覺發展歷史上具有舉足輕重的地位
  • 最強目標檢測算法YOLOv4論文解讀
    通過了解YOLO v4,我們就可以知道最近幾年有哪些方法被提出來,整篇論文更像是一篇綜述。自動對抗訓練(SAT)MISH激活鑲嵌數據增強CmBNDROPBOLD正則化CIOU損失目標檢測算法比較通過上圖可以看出,在MSCOCO數據集上,YOLO v4和其它比較先進的目標檢測算法比較,從速度和精度綜合來看,明顯優於其它算法。
  • SSD多盒實時目標檢測教程
    端到端目標檢測(來源:Microsoft)本文的目的是構建一個SSD多盒目標檢測技術的直觀解釋。我嘗試儘可能少地使用數學,相反,緩慢地引導你了解整個架構的原則,包括解釋多盒算法的作用。閱讀本文之後,我希望你更好地理解了SSD,並可以自行嘗試使用這一模型。
  • 高速公路目標邊緣檢測的算法對比分析
    摘要:目標邊緣檢測是高速公路目標辨識的關鍵技術。雖然現在有多種邊緣檢測算法,但是不同算法有著各自的適用範圍,通過對比Roberts算子、Prewitt算子、Sobel算子和Canny算子等算子,並以高速公路高清監控採集的視頻截圖作為樣本,採用不同邊緣檢測算法對車輛、護欄等高速公路上的主要目標進行對比分析。
  • 《機器學習-原理、算法與應用》出版了
    基於深度學習的目標檢測算法綜述用一張圖理解SVM的脈絡深度卷積神經網絡演化歷史及結構改進脈絡理解梯度下降法用一句話總結常用的機器學習算法機器學習算法地圖深度學習算法地圖其他的不再一一列舉。這些文章有一個共同的特點:脈絡清晰,深入淺出,一針見血。
  • 2017目標跟蹤算法綜述
    2017目標跟蹤算法綜述本文所提的跟蹤主要指的是單目標跟蹤,多目標跟蹤暫時不作為考慮範圍。
  • 目標檢測mAP計算原理
    為什麼國內學者寫的那些博客晦澀難懂,而國外人寫的博客更通俗易懂?因為國內的學者只是你問什麼我告訴你什麼,而外國學者會從頭到尾、一五一十告訴你這個過程的詳細經過!比如我要問你mAP怎麼計算的,我就只會告訴你它是怎麼計算的。
  • 小白解讀SSD目標檢測(一)
    (ps:僅供參考,如有誤解,還望指出)簡單來說,目標檢測就是對目標進行特徵分割自動提取,在複雜場景中,能夠實時處理,並將其識別出來,識別的準確率和速度是判斷模型優劣的重要標準。在現有的基於深度學習的圖像目標檢測模型中,主要分為兩大類,一類是基於候選框的模型,一類是基於回歸的模型:1.基於候選框的目標檢測模型,也稱雙階段(Two-stages)目標檢測模型,顧名思義,整個算法過程需要進行2個步驟:首先,對輸入圖像提取候選框(主要方法有滑窗法和選擇性搜索,具體的方法在這裡就不贅述了),候選框的目的就是為了進行圖像的特徵提取(通俗來說就是找一些特點以方便識別),以方便後期對這些候選框進行分類和位置回歸