# SSD論文系列報告-SSD ## SSD: Single Shot MultiBox Detector ## 整理的ppt簡報下載:[網址](https://drive.google.com/drive/folders/1y1MjtDchSJEQMDdaab0d5kE0zD1ju6_s?usp=sharing) --- ## SSD > 論文:SSD: Single Shot MultiBox Detector > 位置:https://arxiv.org/abs/1512.02325 > 2015年提出,引用20382次 SSD貢獻總結如下: –SSD是種用於多個類別的單次檢測器,比YOLOv1更快更準,與有ROI pooling的fast R-CNN一樣準 –SSD核心:是使用應用於特徵地圖的小卷積篩檢程式預測一組固定默認邊界框的類別分數和框偏移。 –為了實現高檢測精度,我們從不同尺度的特徵圖中生成不同尺度的預測,並通過縱橫比明確區分預測。 –這些設計功能可實現簡單的端到端訓練和高精度,即使在低分辯率輸入影像上也是如此,進一步改善了速度與精度之間的權衡。 –實驗包括:VOC、COCO、ILSVRC對照(輸入大小不同的模型)進行計時和精度分析 --- (1)object detection systems 簡介: (1.1) 傳統方法 由三個部分構成,分別為: a. Object Localization (Hypothesize bounding boxes), ex: Sliding Windows. b. Feature Extraction (Resample pixels or features for each box), ex: SIFT, HOG… c. Image Classification (Apply a highquality classifier), ex: SVM, Adabosst… object detection = Object Localization + Feature Extraction + Classification (1.2) Deep Learning 方法: Deep Learning出現之後,object detection有了取得重大突破。主要有個兩方向: a. 以R-CNN為代表(基於 Region Proposal)的深度學習目標檢測算法,如: R-CNN,Fast R-CNN,Faster R-CNN。尤其是基於Faster-RCNN的檢測都在 PASCAL VOC,COCO和ILSVRC上都取不錯的成果。 b. 以YOLO為代表(基於 Regression)的深度學習目標檢測算法,如: YOLO (You Only Look Once),SSD (Single Shot MultiBox Detector)。 --- ### 簡介SSD (ppt-p2) (2) 為甚麼會有 SSD,與優點為何? (2.1) SSD論文中提到,Faster R-CNN這一類方法雖然準確率高,但伴隨的就是計算量過大的問題。就算是在等級較較高的硬體,也很難達到 real-time檢測。通常檢測速度的度量是以 FPS( Frame per Second),每秒幾張畫面在計算,而 Faster R-CNN僅能以每秒7個畫面的速度運作,而且就算有調整流程中步驟來加快檢測速度,但卻是以犧牲檢測精度方式來處理。 改進包括使用小型捲積濾波器應用於網路後期的多個特徵映射中,以執行多尺度檢測。 通過這些修改——特別是使用多層進行不同尺度的預測——我們可以使用相對較低的解析度輸入實現高精度,進一步提高檢測速度。 準確度從YOLO的63.4%的mAP提高到我們的SSD的74.3%的mAP。 ![](https://i.imgur.com/c6Zytkj.png) --- ### 圖片1 (ppt-p4) 圖 1:SSD架構。 1.在訓練期間,SSD僅需要每個目標的輸入圖像和真實邊界框。 以捲積方式, 2.我們評估具有不同尺度(例如(b)和(c)中的 8x8 和 4x4)的幾個特徵映射中每個位置處不同長寬比的預設框的小集合(例如4個)。 3.對於每個默認邊界框,我們預測所有目標類別(c1, c2, .... cp)的形狀偏移量和置信度。 4.在訓練時,我們首先將這些默認邊界框與實際的邊界框進行匹配。 例如,我們已經與貓匹配兩個默認邊界框,與狗匹配了一個,這被視為積極地,其餘的是消極的。 模型損失是定位損失(例如,Smooth L1【16】和置信度損失(例如Softmax)之間的加權和)。 --- ### 2.1 ### ppt-p8 * **用於檢測的多尺度特徵映射**(**Multi-scale feature maps for detection**): 我們將捲積特徵層添加到截取的基礎網路的末端。 這些層在尺度上逐漸減小,並允許在多個尺度上對檢測結果進行預測。 ### ppt-p11 * **採用卷積做檢測**(**Convolutional predictors for detection**) ![](https://i.imgur.com/PTCpQJI.png) * 每個添加的特徵層可以使用一組卷積濾波器產生固定的檢測預測集合。對於具有 p 通道的大小為 mxn 的特徵層,潛在檢測的預測參數的基本元素是 3x3xp 的小核得到某個類別的分數,或者相對預設框座標的形狀偏移。 在應用卷積核的 MxN 的每個位置,它會產生一個輸出值。 邊界框偏移輸出值是相對每個特徵映射位置的相對預設框位置來度量的 * 不同於YOLO使用全連接層做預測,SSD使用卷積層對nxnxp 的特徵圖通過conv layer輸出score和location offsets,即上圖中的Classifier,使用3x3xp的卷積核。 ### ppt-p13 **默認邊界框和長寬比(Default boxes and aspect ratios ):** * 於每個default box,預測c個類別的score和4個offsets,所以對於每個feature layer的每個位置來說,共有(c+4)*k個輸出,其中k表示的是default box的數目,這個值在不同分辨率的feature map上不一樣,例如上圖中Classifier的k值有4和6兩種。 (後面會提到如何計算出這個值) --- ### ppt-p15 2.2訓練 Matching strategy: 訓練的時候如何把default box和gt box匹配上? 首先最大overlap的default box置爲正, 另外overlap>閾值(0.5)的也置爲正。 這個設定簡化了學習問題, 可以容許一個gt box對應多個default box。 如圖,在兩個scale的feature map上, 貓這個object有兩個default box對應, 狗有一個default box對應。 ![](https://i.imgur.com/ZqTOsh9.png) --- Training objective: ### 跳過 loss由分類loss和迴歸loss兩部分組成,其中α 表示迴歸loss的權重,交叉驗證得α=1 。N表示和該物體相匹配的default box的數目,如果N=0,loss=0 ![](https://i.imgur.com/K3Swjic.png) 類似於 Faster R-CNN【2】,我們回歸默認邊界框(d)的中心偏移量(cx, cy)和其寬度(w),高度(h)的偏移量。 ![](https://i.imgur.com/JAc2lj9.png) 置信度損失是在多類別置信度(c)上的Softmax損失 ![](https://i.imgur.com/XGoHfVi.png) --- ### ppt-p21 Choosing scales and aspect ratios for default boxes: 為默認邊界框選擇尺度和長寬比: 如何選擇default box的scale和aspect ratios? 設計default box使得特定層的feature maps學習特定scale的物體。 ![](https://i.imgur.com/G52o88a.png) 根據公式,最低層學習scale爲0.2的box,最高層學習scale爲0.9的box。 另外,aspect ratios取{1,2,3,1/2,1/3},這樣我們就能計算每個default box的寬高: ![](https://i.imgur.com/Hmk7Jls.png) 另外在aspect ratio爲1時本文還增加了一個default box,這個box的scale是: ![](https://i.imgur.com/KASUEHC.png) ``` 一個是正方形, 其最小邊框的size是min_size, 最大邊框是Sqrt(min_size *max_size) 長方形有兩種, 其中一種長方形的長寬為 Sqrt(aspect_ratio *min_size)與 1/ Sqrt(aspect_ratio *min_size), 另外一種就是長方形的長寬對調 由於aspect_ratio又有值為2與3 所以我們統計一下所有形狀, 兩個正方形跟四個長方形, 一共六種形狀 ``` --- ### ppt-p22 Hard negative mining:爲了避免數據imbalance的問題,選擇default box中最高loss的那些負樣本,使得正負樣本比例接近於1:3。(白話:使用那些難學的副樣本) ### ppt-p23.24 Data augmentation:每張圖片將通過以下方式之一進行randomly sampled: 使用原始的整張圖片 sample一個patch, 它和物體的overlap佔物體的gt box面積的係數分別爲0.1,0.3,0.5,0.7,0.9. 隨機sample一個patch. (jaccard overlap大於0.5的default box都可以看做是正樣本) ![](https://i.imgur.com/sPRArR4.png) 採樣的patch和原始圖像大小的比例是[0.1,1], aspect ratio在[0.5,2]之間。 如果gt box的中心落在採樣的patch中, 我們保留重疊部分。 經過sampling以後, 每個patch會被resize到固定大小, 並且以0.5的概率進行水平翻轉, 另外還使用了亮度扭曲 ![](https://i.imgur.com/Ptl0PnI.png) 引用[14]之圖片示例↑ 3.Experimental Results ![](https://i.imgur.com/vWoIkCA.png) 從上圖中可以看出以下幾點: ### ppt-p26 * 數據擴充對於結果的提升很明顯 Fast和Faster R-CNN所採用的數據擴充策略是: 使用原始圖像, 以及 0.5 的概率對原始圖像進行水平翻轉, 然後進行訓練。採樣策略可以提高**8.8%的mAP** ![](https://i.imgur.com/7h7qnUT.png) ### ppt-p27 * 使用更多的 default boxes,結果也越好 如2.2節所述,預設情況下,我們每個位置使用 6個默認邊界框。 如果我們刪除長寬比為 1/3 和 3 的邊界框,性能下降了 0.6%。 通過進一步去除 1/2 和 2長寬比的盒子,性能再下降 2.1%。 使用各種預設邊界框形狀似乎使網路預測邊界框的任務更容易。 ### ppt-p28 * Atrous 使得 SSD 又好又快 使用atrous version的 VGG16 版本。 如果我們使用原始的 VGG16 版本,即保留 pool5 的參數爲2×2−s2,且不從 FC6/FC7 上採樣 parameters,同時添加 conv5_3 來做 prediction,結果下降 0.7%,看起來差不太多,但是關鍵是速度慢了20%。 ### ppt-p30 * 使用更多的不同分辨率的feature layers對結果提升更大 SSD的一個主要貢獻在於在不同的輸出層上使用不同scale的default box。爲了驗證其對性能的提升,我們 逐步減少layer,然後比較結果。爲了公平期間,減少層的時候我們保持總box的數目不變,即在剩下的層中加多scale。下表顯示了當逐步減少layer的時候,acc從74.3下降到了63.4。我們發現有一點,當去掉conv11_2的時候acc反而提升了,這說明這個層太coarse了,我們沒有足夠的large box來cover大的物體。[當我們在一層上堆疊多尺度的邊界框時,很多邊界框在圖像邊界上需要小心處理。 我們嘗試了在Faster R-CNN【2】中使用這個策略,忽略在邊界上的邊界框。 我們觀察到了一些有趣的趨勢。 例如,如果我們使用非常粗糙的特徵映射(例如conv11_2(1x1)或 conv10_2(3x3)),他會大大傷害性能。 原因可能是修剪后我們沒有足夠大的邊界框來覆蓋大的目標。 當我們主要使用更高解析度的特徵映射時,性能開始再次上升,因為即使在修剪之後仍然有足夠數量的大邊界框。] ![](https://i.imgur.com/xHncSXz.png) ### ppt-31 小目標精度的數據增強: SSD沒有如Faster R-CNN中後續的特徵重採樣步驟,小目標的分類任務對SSD來說相對困難,正如我們的分析(見圖4)所示。 2.2描述的數據增強有助於顯著提升性能,特別是在PASCAL VOC等小數據集上。 策略產生的隨機裁剪可以被認為是「放大」操作,並且可以產生許多更大的訓練樣本。 為了實現創建更多小型訓練樣本的"縮小"操作,我們首先將圖像隨機放置在填充了平均值的原始圖像大小為 16x 的畫布上,然後再進行任意的隨機裁剪操作。 因為通過引入這個新的"擴展"數據增強技巧,我們有更多的訓練圖像,所以我們必須將訓練反覆運算次數加倍。 我們已經在多個數據集上看到了一致的 2%~3%的mAP增長,如表6所示。 具體來說,圖6顯示新的增強技巧顯著提高了模型在小目標上的性能。 這個結果強調了數據增強策略對最終模型精度的重要性。 --- ### NMS-每張圖像花費大約 1.7毫秒 3.7 推斷時間 考慮到我們的方法產生大量邊界框,在推斷機器執行非極大值抑制(NMS)是必要的。 通過使用 0.01 的置信度閾值,我們可以過濾大部分邊界框。 然後,我們應用NMS,每個類別0.45的Jaccard重疊,並保留每張圖像的前200個檢測。 對於SSD 300和20個VOC類別,這個步驟每張圖像花費大約 1.7毫秒,接近在所有新增層上花費的總時間(2.4毫秒)。 我們使用 Titan X,cuDNN v4,Intel Xeon E5-2667v3@3.20GHz以及批大小為 8來測量速度。 --- ### 參照ppt即可 結論: 本文介紹了SSD,一種快速的單次多類別目標檢測器。 我們模型的一個關鍵特徵是使用多個特徵映射的多尺度捲積邊界框輸出。 這種表示使我們能夠高效的建模可能的邊界框形狀空間。 我們通過實驗驗證,在給定合適訓練策略的情況下,大量仔細選擇的默認邊界框會提高性能。 我們構建的SSD模型比現有的方法至少要多一個數量級的邊界框預測採樣位置,尺度和長寬比【5, 7】。 我們證明瞭給定相同的VGG-16基礎架構,SSD在準確性和速度方面與其對應的最先進的而目標檢測器相比毫不遜色。 在PASCAL VOC 和COCO上,我們的SSD512模型的性能明顯優於最先進的 Faster R-CNN【2】,而速度提高了3倍。 我們的即時SSD 300模型允許速度為 59fps,比目前的即時YOLO【5】更快,同時顯著提高了檢測精度。 --- 參考資料: [1]https://medium.com/@bigwaterking01/ssd-single-shot-multibox-detector-%E4%BB%8B%E7%B4%B9-1fe95073c1a3 [2]https://github.com/LeBron-Jian/DeepLearningNote/tree/master/DeepLearningPapersTranslation [3]https://www.youtube.com/watch?v=zm_6IZ29Cok&ab_channel=llll [4]https://medium.com/ching-i/single-shot-multibox-detector-ssd-%E8%AB%96%E6%96%87%E9%96%B1%E8%AE%80-1f2cc7a452e0 [5]https://iter01.com/558251.html [6]全文分析:https://www.cnblogs.com/wj-1314/p/11955967.html [7]筆記:https://www.twblogs.net/a/5b7c95c22b71770a43dbb047