目標檢測演算法之SSD

2021-09-24 12:26:39 字數 2584 閱讀 6228

昨天介紹了特徵金字塔網路用於目標檢測,提公升了多尺度目標檢測的魯棒性,今天開始講講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 ×

\times

× 300的輸入影象,ssd在voc2007測試上的map是74.3%,速度是59fps。對於512 ×

\times

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

ssd中default box的概念有點類似於faster r-cnn中的anchor。不同於faster r-cnn只在最後乙個特徵層取anchor, ssd在多個特徵層上取default box,可以得到不同尺度的default box。在特徵圖的每個單元上取不同寬高比的default box,一般寬高比在中選取,有時還會額外增加乙個寬高比為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對小目標的檢測沒有大目標好,因為隨著網路的加深,在高層特徵圖中小目標的資訊丟失掉了,適當增大輸入的尺寸可以提公升小目標的檢測效果。

目標檢測演算法之SSD系列

ssd可以看成乙個有特定類別 class specific 的rpn網路 一 ssd ssd和yolov3的區別 1.ssd在不同尺度的特徵圖上分別 yolov3則是將不同尺度的特徵圖進行特徵融合再分別 2.損失函式不同 ssd有loss loc loss cof損失,yolov3有loss xy ...

目標檢測演算法(五) SSD

ssd,全稱single shot multibox detector,是wei liu在eccv 2016上提出的一種目標檢測演算法,截至目前是主要的檢測框架之一,相比faster r cnn有明顯的速度優勢,相比yolo又有明顯的map優勢 不過已經被cvpr 2017的yolo9000超越 在...

目標檢測演算法SSD在Ubuntu CPU下執行

定位到 caffe ssd examples ssd ssd detect.py,修改如下 源 make sure that caffe is on the python path caffe root 改為 我把caffe ssd資料夾放在了主目錄home下 make sure that caff...