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損失:
前面已經提到,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
作者在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在不失速度的情況下,檢測精度仍然更夠保持很好。