SSD目標檢測算法精講

2021-02-13 計算機視覺知識星球
文章目錄

5.1 在VOC2007測試集上的檢測性能

5.2 在VOC2012測試集上的檢測性能

5.3 在COCO測試集上的檢測性能

4.1 多尺度多比例默認框

4.2 負樣本均衡

4.3 數據增強

2.1 核心思想

2.2 多尺度預測

2.3 卷積網絡結構

一、SSD簡介

二、SSD網絡結構

三、目標損失函數

四、一些改進技巧

五、性能比較

六、總結

一、SSD簡介

2016年,Wei Liu等人提出了SSD算法,它是繼YOLOv1算法提出後的又一單階段目標檢測算法。在當時,單階段算法相比於以R-CNN系列為主的雙階段算法更快,所以被學術界和工業界所青睞。為了提高檢測的精度,SSD創造性地提出了多尺度預測的目標檢測算法,使得網絡更容易適應對不同大小物體的檢測。

開原始碼: https://github.com/weiliu89/caffe/tree/ssd

實驗表明,SSD在VOC2007數據集上的表現,比當時一流的Faster R-CNN算法更佳。

SSD的提出主要有以下5大貢獻:

這是一種適用於多種類別的單階段目標檢測器,其速度比之前的最新的單階段目標檢測器YOLOv1更快,精度更高。並且相比基於候選區域的雙階段目標檢測器Faster R-CNN精度不相上下,而速度更快。

使用錨框的思想,通過應用於特徵圖的小型卷積核來預測一組固定的錨框的類別得分和框偏移,從而得到預測框的類別和位置。

為了獲得較高的檢測精度,作者從不同大小的特徵圖中生成了不同比例和不同寬高比的錨框來預測目標。

即使在低解析度輸入圖像上也可以輕鬆地實現的端到端訓練和不錯的精度,進一步提高了速度與精度之間的權衡。

做了大量實驗,包括在PASCAL VOC,COCO和ILSVRC等數據集上評估了具有可變輸入大小的SSD模型的速度和精度,並將其與一系列最新技術進行了比較。

二、SSD網絡結構2.1 核心思想

大家都知道,在深度學習中,衡量目標檢測算法優劣的唯二標準是:速度和精度。提出一種速度快,精度佳的算法成為專家學者的一致目標。SSD算法摒棄了RPN的思想,是一種單階段的目標檢測器,速度上比Faster R-CNN快很多。於此同時,提出了多尺度預測的想法。這種多尺度,不僅在於多個尺度的Anchors,更在於選取了不同大小的特徵圖做預測,使得SSD算法的目標檢測精度更好,勝於當時最新的YOLOv1。


對於目標檢測算法而言,目標框的生成過程是大家最關心的問題之一。在SSD中,這一過程仍然採用的是Anchors機制。這一方法自從在R-CNN系列中提出以來,就應用到了大量的目標檢測網絡中,比如經典的YOLO系列等。

所謂Anchors,也就是提前設置的錨框,可以理解成預選框,和Faster R-CNN中的候選區域類似。在特徵圖中的每一個格子中,都會設置n個不同的尺寸和大小的錨框。在訓練過程中,會將這些錨框和真實的標籤框(ground truth)進行匹配。通常會以交並比IOU作為評價指標,判斷錨框是否與目標匹配。如果匹配,則會進一步根據定位損失、置信度損失和類別損失函數進行迭代計算,來預測所有目標類別(c1,c2,···,, cp)的偏移和置信度。

2.2 多尺度預測

(1) 多尺度特徵圖

相比於Overfeat和YOLO算法採用一個尺度的特徵圖進行預測不同,SSD採用了多個不同尺度的特徵圖對目標進行預測。

作者將卷積特徵層添加到骨幹網絡的末尾。這些層的特徵圖大小逐漸減小,並可以預測多個尺度的目標。每個特徵層用於預測檢測結果的卷積模型不同。

(2) 多尺度默認框

這裡的默認框與Faster R-CNN中使用的Anchors相似,但是在SSD算法中,作者將Anchors應用於多個不同分別率的特徵圖,並且在每個不同大小的特徵圖中允許使用形狀不同的Anchors(比如採用長寬分別比為1:1,1:2,2:1的Anchors)。

具體來說,對於給定m×n特徵圖中的每個格子,需要預測k個邊界框。對於每個邊界框,我們要計算c類得分和相對於Anchors的4個位置偏移量。這將使得一共需要(c + 4)* k個卷積應用在特徵圖中的每個位置,從而網絡輸出的特徵圖大小為(c + 4)* k * m * n。

2.3 卷積網絡結構


上圖是兩種單階段目標檢測器的網路整體結構圖:SSD和YOLOv1。

整體結構上,SSD採用了VGG-16作為骨幹網絡提取特徵。在骨幹網絡末尾添加了若干個特徵層,特徵層與特徵層之間使用1x1和3x3的卷積核計算特徵和降採樣,並從中選擇了6個不同大小的特徵層來預測目標。

需要注意的是,用來預測目標的每一個特徵層上預設的Anchors數量不一定是相同的。比如對於38x38的特徵層,每個格子預設4個不同比例的Anchors;對於19x19的特徵層,每個格子預設了6個不同比例的Anchors。

三、目標損失函數

每一個目標檢測網絡都具有其獨特的目標損失函數,它決定著網絡訓練迭代的方向,因此研究損失函數的意義也是學習SSD算法過程中必不可少的一步。

根據目標檢測網絡的一般定義,我們知道總損失函數一般由兩部分組成:定位損失和置信度損失。


其中,定位損失計算公式為:


定位損失函數借鑑了Faster R-CNN中的S m o o t h L 1 Smooth_{L1}SmoothL1函數,用來計算預測邊界框 l ll 和真實邊界框 g gg 之間的損失誤差。其中,m是代表邊界框位置信息的集合{cx,cy,w,h}。

真實邊界框(標籤)的計算公式:


容易看出,SSD沒有直接將目標的中心位置、長寬作為真實標籤。而是採取真實框與預選框Anchors的偏移作為真實標籤。那麼在學習的過程中,也會去主動預測偏移值,這樣更有利於網絡的訓練,避免在訓練初期產生較大的振蕩。

置信度損失函數是在多個類別置信度c上的softmax損失:

四、一些改進技巧4.1 多尺度多比例默認框

前面已經提到,SSD算法中採用了類似於Faster R-CNN中的Anchors機制用於目標框的回歸。值得一提的是,SSD採用的Anchors方法更為靈活,不僅在每一個特徵層設置了不同大小和比例的預選框,而且針對於不同的特徵層,也設計了相應的大小的預選框。

每個feature map對應預選框的min_size和max_size計算公式如下:


其中,m是指進行預測時使用feature map的數量,如SSD300使用了包括conv4-3在內的6個feature maps進行預測,所以 m=6。同時原文設定:S m i n = 0.2 , S m a x = 0.9 S_{min}=0.2, S_{max}=0.9Smin=0.2,Smax=0.9

於是,每一個用於預測的特徵層對應預選框的min_size和max_size可以算得:

經過計算可知,對于越深的特徵層(尺寸越小),設置的預選框尺寸越大。這是因為,尺寸越小的特徵層,感受野越大。SSD的目的就是:要讓感受野小的特徵層檢測小目標,使用感受野大的特徵層檢測更大的目標。

4.2 負樣本均衡

在訓練過程中,大部分的預選框Anchors並不能和真實框匹配上,因此負樣本很多,而正樣本卻很少,正負樣本數量嚴重失衡,不利於訓練。

考慮到這個問題,SSD在訓練過程中,沒有選取所有的負樣本。而是先將負樣本的置信度損失進行排序,僅選取置信度高的一些負樣本,使得負樣本數與正樣本數之間的比率最大不超過3:1。作者認為,這樣使得訓練更穩定更快。

4.3 數據增強

數據增強又叫數據增廣,是擴大數據集的一種方式,經常用於深度學習中來防止過擬合。在SSD算法中,也使用了一些數據增強的技巧。採用數據增強後,目標檢測性能也得到了明顯的提升,具體實驗結果如下:

想具體了解數據增強的過程,推可以參考這篇博文:https://blog.csdn.net/mzpmzk/article/details/100161187

五、性能比較5.1 在VOC2007測試集上的檢測性能

作者在VOC2007測試數據集上,對不同的目標檢測算法性能進行了對比。實驗結果如下:


分析上表,容易得出結論:

對比檢測精度可知,SSD算法的性能整體上優於Fast R-CN 和 Faster R-CNN算法。

對比SSD300和SSD512可知,圖像輸入尺寸為512x512的SSD算法比輸入尺寸為300x300的SSD算法檢測性能更好。

對比07、 07+12、07+12+COCO可知,訓練集的擴充有助於檢測性能的提升。

註:表格名詞解釋(下同):

07:表示網絡模型僅在VOC2007數據集上進行訓練

07+12:表示網絡模型同時在VOC2007和VOC2012數據集上進行訓練

07+12+COCO:表示網絡模型先在COCO數據集上進行訓練,再在VOC2007和VOC2012數據集上進行微調。

5.2 在VOC2012測試集上的檢測性能

作者在VOC2012測試數據集上,對不同的目標檢測算法性能進行了對比。實驗結果如下:

分析上表,容易得出以下結論:

在VOC2012測試數據集上,整體的檢測精度表現:SSD512>SSD300>Faster R-CNN>Fast R-CNN>YOLOv1

對比SSD300和SSD512可知,較大尺寸的圖像輸入,對SSD的檢測精度更有利。

對比07+12、07+12+COCO可知,訓練集的擴充有助於檢測性能的提升。

5.3 在COCO測試集上的檢測性能

為了進一步驗證SSD框架,作者在在COCO數據集上訓練了SSD300和SSD512。並且在COCO測試數據集上,對不同的目標檢測算法性能進行了對比。實驗結果如下:


分析上表,容易得出以下結論:

六、總結

SSD是一種適用於多種類別的單階段目標檢測器,檢測速度比Faster R-CNN更快,檢測精度比YOLOv1更高。經典的SSD算法分為SSD300和SSD512兩種,分別代表網絡輸入的圖像大小為:300x300和512x512。SSD512的檢測精度要優於SSD300,同時對小目標的檢測性能更好;SSD300的檢測速度比SSD512更快,同時它的檢測精度也比同期的其他檢測器要好。

SSD的整體網絡結構,其實很容易理解。可以簡單的看做是YOLOv1和特徵金字塔的融合,即主幹網絡採用了與YOLOv1類似的VGG16,與YOLOv1不同的是,SSD採用多個不同的特徵層用來預測,這些不同的特徵層其實就可以看做是特徵金字塔。因此,SSD在不失速度的情況下,檢測精度仍然更夠保持很好。

相關焦點

  • 目標檢測|SSD原理與實現
    前言目標檢測近年來已經取得了很重要的進展,主流的算法主要分為兩個類型(參考RefineDet):(1)two-stage方法,如R-CNN系算法,其主要思路是先通過啟發式方法(selective search)或者CNN網絡(RPN)產生一系列稀疏的候選框,然後對這些候選框進行分類與回歸,two-stage
  • 目標檢測算法之SSD
    前言昨天介紹了特徵金字塔網絡用於目標檢測,提升了多尺度目標檢測的魯棒性,今天開始講講One-Stage目標檢測算法中SSD算法。這個算法是我平時做工程中最常用到的,嚴格來說平時最常用的是Mobilenet做Backbone的SSD算法,因為要考慮到實際部署的時候的速度要求,不過原理都一樣。
  • 目標檢測算法SSD結構詳解
    今天我們學習一種新的目標檢測算法SSD(Single Shot MultiBox Detector),該算法屬於One-Stage類算法範疇。首先我們先看一下One-Stage和Two-Stage類算法到底有哪些區別。
  • SSD目標檢測
    後臺回復CV入坑必備獲得CV入坑學習資料SSD,全稱Single Shot MultiBox Detector,是Wei Liu在ECCV 2016上提出的一種目標檢測算法但是在SSD300中prior box設置並不能完全和上述公式對應:不過依然可以看出:SSD使用感受野小的feature map檢測小目標,使用感受野大的feature map檢測更大目標。
  • 從RCNN到SSD,深度學習目標檢測算法盤點
    本文對目標檢測進行了整體回顧,第一部分從RCNN開始介紹基於候選區域的目標檢測器,包括Fast R-CNN、Faster R-CNN 和 FPN等。第二部分則重點討論了包括YOLO、SSD和RetinaNet等在內的單次檢測器,它們都是目前最為優秀的方法。機器之心之前已經討論過非常多的目標檢測算法,對計算機視覺感興趣的讀者也可以結合以前的文章加強理解。
  • 基於深度學習的目標檢測算法綜述
    本文針對目前主流的目標檢測方法進行簡單的介紹,文章分為兩個部分:第一部分介紹R Girshick提出的以R-CNN為代表的結合region proposal和CNN分類的目標檢測框架(R-CNN, SPP-NET, Fast R-CNN, Faster R-CNN); 第二部分介紹以YOLO為代表的將目標檢測轉換為回歸問題的目標檢測框架(YOLO, SSD); 第三部分介紹一些最新的目標檢測算法的進展
  • 目標檢測 | 清晰易懂的SSD算法原理綜述
    SSD(Single Shot Detection)是一個流行且強大的目標檢測網絡,網絡結構包含了基礎網絡(Base Network),輔助卷積層
  • 深度學習第24講:計算機視覺之目標檢測算法綜述
    而圖像分割則是需要實現像素級的圖像分割,以圖中為例就是要把每個物體以像素級的標準分割開來,這對算法的要求則更高。       從本節開始,筆者將花費數講的時間對計算機視覺的第二大任務——目標檢測進行一個全面細緻的學習和講解。既是對前面的 CNN 圖像分類的內容延伸,也是繼續深入研究圖像算法的必走之路。
  • 小白解讀SSD目標檢測(一)
    (ps:僅供參考,如有誤解,還望指出)簡單來說,目標檢測就是對目標進行特徵分割自動提取,在複雜場景中,能夠實時處理,並將其識別出來,識別的準確率和速度是判斷模型優劣的重要標準。在現有的基於深度學習的圖像目標檢測模型中,主要分為兩大類,一類是基於候選框的模型,一類是基於回歸的模型:1.基於候選框的目標檢測模型,也稱雙階段(Two-stages)目標檢測模型,顧名思義,整個算法過程需要進行2個步驟:首先,對輸入圖像提取候選框(主要方法有滑窗法和選擇性搜索,具體的方法在這裡就不贅述了),候選框的目的就是為了進行圖像的特徵提取(通俗來說就是找一些特點以方便識別),以方便後期對這些候選框進行分類和位置回歸
  • SSD多盒實時目標檢測教程
    端到端目標檢測(來源:Microsoft)本文的目的是構建一個SSD多盒目標檢測技術的直觀解釋。我嘗試儘可能少地使用數學,相反,緩慢地引導你了解整個架構的原則,包括解釋多盒算法的作用。閱讀本文之後,我希望你更好地理解了SSD,並可以自行嘗試使用這一模型。
  • 深度學習第25講:目標檢測算法經典論文研讀之R-CNN
    正如筆者在上一篇目標檢測算法綜述中所言,作為將深度學習引入目標檢測領域的開山之作,R-CNN 在目標檢測和計算機視覺發展歷史上具有舉足輕重的地位
  • SSD物體檢測算法詳解
    物體檢測算法,按算法結構,可以分為one-stage和two-stage兩類。
  • 深度學習第31講:目標檢測算法經典論文研讀之 yolo v2/yolo 9000
    其實 yolo 9000 的檢測網絡主體還是 yolo v2,只是對檢測圖像數據進行了融合,使得檢測網絡能夠檢測超過 9000 種物體,因而叫 yolo 9000。所以就檢測算法而言,我們的核心仍然是 yolo v2。
  • 從RCNN到SSD,這應該是最全的一份目標檢測算法盤點
    目標檢測是很多計算機視覺任務的基礎,不論我們需要實現圖像與文字的交互還是需要識別精細類別,它都提供了可靠的信息。本文對目標檢測進行了整體回顧,第一部分從RCNN開始介紹基於候選區域的目標檢測器,包括Fast R-CNN、Faster R-CNN 和 FPN等。
  • 目標檢測算法YOLO-V2詳解
    ❝上期我們一起學習了YOLO-V1算法的框架原來和損失函數等知識,如下:目標檢測算法YOLO-V1算法詳解目標檢測模型YOLO-V1損失函數詳解【文末領福利】❞今天,我們一起學習下YOLO-V2跟YOLO-V1比起來都做了哪些改進?
  • 目標檢測算法YOLO-V1算法詳解
    ❝前面我們一起學了SSD算法的相關知識,如下:SSD目標檢測算法必須知道的幾個關鍵點目標檢測算法SSD結構詳解❞
  • 高速公路目標邊緣檢測的算法對比分析
    摘要:目標邊緣檢測是高速公路目標辨識的關鍵技術。雖然現在有多種邊緣檢測算法,但是不同算法有著各自的適用範圍,通過對比Roberts算子、Prewitt算子、Sobel算子和Canny算子等算子,並以高速公路高清監控採集的視頻截圖作為樣本,採用不同邊緣檢測算法對車輛、護欄等高速公路上的主要目標進行對比分析。
  • ECCV2018目標檢測(object detection)算法總覽
    2、DetNet論文:DetNet: A Backbone network for Object連結:https://arxiv.org/abs/1804.06215詳細博客介紹:DetNet 算法筆記 這篇關於目標檢測的文章,主要是對檢測算法的特徵提取網絡(backbone
  • 一文詳解YOLO 2與YOLO 9000目標檢測系統 | 分享總結
    在今年CVPR上,Joseph Redmon和Ali Farhadi發表的YOLO 2進一步提高了檢測的精度和速度。這次講座的主講人為王東,前矽谷資深工程師。講解順序和論文結構類似,先講YOLO 2的網絡結構,重點分析如何產生目標邊框和分類,以及相關的損失函數。
  • 目標檢測第3步-模型訓練
    1 前言開發環境:python3.6Windows10tensorflow_gpu1.10跟隨本篇文章實踐之前,需要先閱讀前置文章《目標檢測第2步-數據準備》,連結:https://www.jianshu.com/p/3d9436b4cb66現在桌面的目標檢測文件夾中需要有object_detection工程文件夾和training