目標檢測算法之SSD

2021-02-23 GiantPandaCV
前言

昨天介紹了特徵金字塔網絡用於目標檢測,提升了多尺度目標檢測的魯棒性,今天開始講講One-Stage目標檢測算法中SSD算法。這個算法是我平時做工程中最常用到的,嚴格來說平時最常用的是Mobilenet做Backbone的SSD算法,因為要考慮到實際部署的時候的速度要求,不過原理都一樣。

摘要

本文提出了僅需要單個卷積神經網絡就能完成目標檢測的算法,並命名為SSD(Single Shot Detector)。SSD算法將目標框的輸出空間離散化為一組在每個特徵圖位置不同大小和形狀的默認框。預測時,網絡對位於每個默認框類的物體類別進行打分,並修正默認框位置來更好的匹配物體的位置。此外,SSD網絡在不同解析度的特徵圖上預測,這樣就可以處理大小不同的物體。SSD比那些需要搜索物體候選框的算法簡單,因為它完全去除了proposal生成和隨後的特徵再篩選的過程,把所有的計算封裝在一個網絡裡面。這使得SSD訓練起來很容易,可以直接加入到檢測系統裡面。在PASCAL VOC,COCO,和ILSVRC數據集上的實驗也證明,與那些需要object proposal的算法相比,SSD在保證準確性的同時,速度更快。SSD只需一個完整的框架來訓練和測試。在NVIDIA Titan X對於一個大小是300  300的輸入圖像,SSD在VOC2007測試上的MAP是74.3%,速度是59FPS。對於512  512的輸入,SSD的MAP是76.9%,比Faster RCNN更準。和其他單階段的方法比,即便是輸入較小的圖像,SSD的準確性也會更高。

介紹

目前,目標檢測系統基本採用以下的流程:假設物體邊框,對每個邊框內進行特徵再採樣,最後使用分類器進行分類。這個流程比較流行,基於Faster-RCNN的方法通過選擇性搜索在PASCAL VOC, COCO和ILSVRC上檢測效果都很好。但是這些方法對於嵌入式設備來說計算量過大,甚至需要高端硬體的支持,對於實時系統來說太慢。最快的檢測器-Faster RCNN的檢測速度也只能到7FPS。人們嘗試了很多其他方法來構建更快的檢測器,但是增加速度大多以損失檢測精度為代價。本文提出了基於目標檢測器的網絡(object detector),它不需要為邊框進行搜索,但是精度卻不降反升。此方法實現了高精度和高速度,在VOC2007 上的測試速度是59FPS,mAP是74.3%;而Faster R-CNN的mAP是73.2%,速度是7FPS;YOLO的mAP是63.4%,速度的是45FPS。速度的提升得益於去除了邊框提議(RPN或者Selective Search)和隨後的特徵再採樣。使用了一個小卷積濾波器來預測目標分類和邊框位置的偏移,對於不同橫縱比檢測使用不同的濾波器去處理,然後把這些濾波器應用在後面網絡階段的特徵圖上,這是為了用檢測器檢測不同比例的圖片,這樣我們在相對低解析度的圖像上也能獲得高精度的輸出,還提升了檢測速度。本文的貢獻如下:

提出了SSD算法---多類別單階檢測器, 要比其它的單階段檢測器(YOLO)快,而且更準確;SSD的核心部分是,在特徵圖上應用小卷積濾波器,預測分類得分和一個固定集合的默認邊界框的偏移;為了實現高檢測精度,在不同比例的特徵圖上產生不同的預測,通過縱橫比來分開預測;以上的設計可以端到端訓練,精度還高,甚至在低解析度的圖像上效果也不錯;關於速度和精度的試驗,主要在PASCAL VOC, COCO 和 ILSVRC數據集上進行,與其它方法進行比較。SSD模型

SSD基於前饋式卷積神經網絡,針對那些方框裡的目標檢測實例,產生一個固定大小邊界框集合和分數,緊接著是一個非極大值抑制步驟來產生最後的檢測。網絡前半部分是個標準結構(用於高質量圖片分類),成為基網絡。然後對網絡增加了輔助結構來實現以下特徵:

多比例特徵圖檢測:在基網絡後增加卷積特徵層,這些層按大小減少的次序連接,能夠進行多尺度預測。卷積檢測預測器:通過一個卷積濾波器集合,每個新增的特徵層可以產生一個預測集合。假設特徵層大小為個通道,預測參數的基本單元是一個的小核,它要麼產生一個類別的得分,要麼產生一個相對於默認方框的位置偏移。核一共要應用在個位置上,在每個位置上它都有一個輸出值。邊界框的偏移輸出值是相對於默認的位置的。默認方框和縱橫比:將每個特徵圖單元(cell) 與默認邊界框的集合關聯起來,這是對於網絡頂層的多特徵圖來說的。默認方框用卷積的方式覆蓋特徵圖,這樣,每個方框對應的單元(cell) 是固定的。在每個特徵映射單元上,我們預測相對於默認方框形狀的偏移,以及每一類別的分數(表明每一個方框中一個類的出現)。在給定的位置有個框,對於其中的每一個,計算類類別的分數,和相對於原來默認方框形狀的個偏移。這就一共有個濾波器被應用到特徵圖的每個位置上;對於的特徵圖,產生個輸出。默認方框跟Faster R-CNN中的Anchor類似,但是作者將它們應用到不同解析度的特徵圖上時,由於在一些特徵圖上有不同的默認框形狀,這使得算法對不同尺度的目標有較好的探測作用。SSD 在訓練中只需一張輸入圖像和圖像中每個目標的ground truth邊界框信息。在卷積操作中,我們產生一個默認方框的集合,這些方框在每個位置有不同的縱橫比,在一些特徵圖中有不同的比例,如上圖所示。對於每個默認方框,預測它形狀的偏移和類別的置信度()。訓練時,首先將這些默認方框和 ground truth 邊界框對應上。就像圖中,作者匹配了2個默認方框,一個是貓,一個是狗,它們被認定為positive, 其餘部分被認定為 negative. 模型損失函數是 localization loss(smooth L1) 和 confidence loss(Softmax) 的加權之和。怎麼設置default boxes?

SSD中default box的概念有點類似於Faster R-CNN中的anchor。不同於Faster R-CNN只在最後一個特徵層取anchor, SSD在多個特徵層上取default box,可以得到不同尺度的default box。在特徵圖的每個單元上取不同寬高比的default box,一般寬高比在{1,2,3,1/2,1/3}中選取,有時還會額外增加一個寬高比為1但具有特殊尺度的box。上面那張圖展示了在8x8的feature map和4x4的feature map上的每個單元取4個不同的default box。原文對於300x300的輸入,分別在conv4_3, conv7,conv8_2,conv9_2,conv10_2,conv11_2的特徵圖上的每個單元取4,6,6,6,4,4個default box. 由於以上特徵圖的大小分別是38x38,19x19,10x10,5x5,3x3,1x1,所以一共得到38x38x4+19x19x6+10x10x6+5x5x6+3x3x4+1x1x4=8732個default box.對一張300x300的圖片輸入網絡將會針對這8732個default box預測8732個邊界框。

訓練

訓練SSD和訓練其他使用區域提議檢測器的主要區別是,ground truth信息在固定檢測器輸出的情況下需要指定到特定的輸出。這樣,損失函數和反向傳播就可以端到端的應用。訓練需要選擇默認方框的集合,檢測比例,以及hard negative mining(也就是不存在目標的樣本集合)和數據增強策略。

實驗結果

在PSCAL VOC2012上面:在COCO數據集上面:速度和精度的整體對比:

結論

SSD優勢是速度比較快,整個過程只需要一步,首先在圖片不同位置按照不同尺度和寬高比進行密集抽樣,然後利用CNN提取特徵後直接進行分類與回歸,所以速度比較快,但均勻密集採樣會造成正負樣本不均衡的情況使得訓練比較困難,導致模型準確度有所降低。另外,SSD對小目標的檢測沒有大目標好,因為隨著網絡的加深,在高層特徵圖中小目標的信息丟失掉了,適當增大輸入圖片的尺寸可以提升小目標的檢測效果。

代碼

https://github.com/weiliu89/caffe/tree/ssd

參考文章

https://blog.csdn.net/calvinpaean/article/details/84301031https://www.jianshu.com/p/e13792628bac

相關焦點

  • 目標檢測|SSD原理與實現
    前言目標檢測近年來已經取得了很重要的進展,主流的算法主要分為兩個類型(參考RefineDet):(1)two-stage方法,如R-CNN系算法,其主要思路是先通過啟發式方法(selective search)或者CNN網絡(RPN)產生一系列稀疏的候選框,然後對這些候選框進行分類與回歸,two-stage
  • SSD目標檢測算法精講
    年,Wei Liu等人提出了SSD算法,它是繼YOLOv1算法提出後的又一單階段目標檢測算法。在當時,單階段算法相比於以R-CNN系列為主的雙階段算法更快,所以被學術界和工業界所青睞。為了提高檢測的精度,SSD創造性地提出了多尺度預測的目標檢測算法,使得網絡更容易適應對不同大小物體的檢測。
  • 目標檢測算法之-SSD檢測器
    SSD 參考了 Faster R-CNN 和 YOLO 的長處,通過結合 YOLO 的回歸、分類方法和 Faster R-CNN 的 anchor 機制提升其檢測識別的速度和平均檢測精度。傳統的卷積神經網絡都有著前面特徵圖比後面的特徵圖大的特點,通過不斷卷積和池化特徵圖也會逐步變小。
  • 目標檢測算法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),輔助卷積層
  • SSD多盒實時目標檢測教程
    端到端目標檢測(來源:Microsoft)本文的目的是構建一個SSD多盒目標檢測技術的直觀解釋。我嘗試儘可能少地使用數學,相反,緩慢地引導你了解整個架構的原則,包括解釋多盒算法的作用。閱讀本文之後,我希望你更好地理解了SSD,並可以自行嘗試使用這一模型。
  • (附代碼)總結|SSD原理與實現
    目標檢測近年來已經取得了很重要的進展,主流的算法主要分為兩個類型(參考RefineDet):(1)two-stage方法,如R-CNN系算法,其主要思路是先通過啟發式方法(selective search)或者CNN網絡(RPN)產生一系列稀疏的候選框,然後對這些候選框進行分類與回歸,two-stage方法的優勢是準確度高
  • 深度學習「吃雞外掛」——目標檢測 SSD 實驗
    不過這時候一張圖片吸引了我的興趣:網易《荒野行動》的車輛檢測能識別出視頻中的汽車和人,這,不是外掛麼?想到專業制裁 LYB 們的透視掛,這波我很強好吧。為探秘這 「外掛」 效果有多強,那我就來復現這個深度學習界的 「吃雞掛」——SSD 目標檢測。
  • SSD物體檢測算法詳解
    物體檢測算法,按算法結構,可以分為one-stage和two-stage兩類。
  • 小白解讀SSD目標檢測(一)
    (ps:僅供參考,如有誤解,還望指出)簡單來說,目標檢測就是對目標進行特徵分割自動提取,在複雜場景中,能夠實時處理,並將其識別出來,識別的準確率和速度是判斷模型優劣的重要標準。在現有的基於深度學習的圖像目標檢測模型中,主要分為兩大類,一類是基於候選框的模型,一類是基於回歸的模型:1.基於候選框的目標檢測模型,也稱雙階段(Two-stages)目標檢測模型,顧名思義,整個算法過程需要進行2個步驟:首先,對輸入圖像提取候選框(主要方法有滑窗法和選擇性搜索,具體的方法在這裡就不贅述了),候選框的目的就是為了進行圖像的特徵提取(通俗來說就是找一些特點以方便識別),以方便後期對這些候選框進行分類和位置回歸
  • 目標檢測算法之YOLOv2
    前言昨天介紹了YOLO系列的第一個算法YOLOv1,並詳細分析了YOLOv1的網絡結構以及損失函數等。今天我們將來分析一下YOLO目標檢測算法系列的YOLOv2和YOLO9000。YOLOv2原理YOLOv1作為One-Stage目標檢測算法的開山之作,速度快是它最大的優勢。但我們知道,YOLOv1的定位不夠準,並且召回率低。
  • tensorflow+目標檢測:龍哥教你學視覺—LabVIEW深度學習教程
    /openvino 模型pb/IR文件的圖像測試目標檢測11、案例:貓狗數據集,引腳缺陷檢測數據集,金屬切削缺陷檢測數據集,塗膠缺陷檢測數據集,元件缺陷檢測數據集,開關缺陷檢測數據集,藥丸缺陷檢測數據集,12、動態檢測案例:五金件缺陷檢測購買連結:http://url.elecfans.com/u/43574378f2意向購買或者了解課程都可以聯繫木木
  • 從RCNN到SSD,這應該是最全的一份目標檢測算法盤點
    目標檢測是很多計算機視覺任務的基礎,不論我們需要實現圖像與文字的交互還是需要識別精細類別,它都提供了可靠的信息。本文對目標檢測進行了整體回顧,第一部分從RCNN開始介紹基於候選區域的目標檢測器,包括Fast R-CNN、Faster R-CNN 和 FPN等。
  • 深度學習第24講:計算機視覺之目標檢測算法綜述
    在正式的學習各類目標檢測算法之前,本節將首先對影響目標檢測算法發展歷史的主要算法進行一個綜述,以期對後面的內容起到一個提綱挈領的作用。       在 2012 年深度學習正式介入計算機視覺目標檢測任務之前,傳統的目標檢測算法一直是以滑動窗口卷積等較為傳統的方式進行區域選擇、特徵提取和分類回歸等步驟,例如在深度學習興起之前目標檢測領域較為優秀的可變形的組件模型(DPM)方法等。
  • 目標檢測算法之YOLO
    ,大大縮小了搜索的空間;B和C小朋友雖然都順利達成了目標但是直接在原始圖片中進行分析始終是太耗費精力,而A小朋友的套路則要高明的多,他將圖片一層層在自己的腦海中進行融合縮小,最後在一張濃縮的小圖上快速定位了目標,我們今天要介紹的YOLO[4](You Only Look Once)和第一名A小朋友的思路有異曲同工之妙。
  • 「深度學習基礎」SSD之二:網絡結構及代碼實現
    01SSD結構論文:通過wx搜索「AI算法面試分享」回復「ssd」獲取輸入:300x300(512x512)Backbone:VGG16>顯著特點:利用多尺度特徵圖做檢測。然後移除dropout層和fc8層,並新增一系列卷積層,在檢測數據集上做finetuing。03SSD網絡結構Keras代碼實現SSD300 Keras實現代碼如下:
  • 目標檢測算法YOLO-V1算法詳解
    ❝前面我們一起學了SSD算法的相關知識,如下:SSD目標檢測算法必須知道的幾個關鍵點目標檢測算法SSD結構詳解❞