昨天介紹了特徵金字塔網絡用於目標檢測,提升了多尺度目標檢測的魯棒性,今天開始講講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
目前,目標檢測系統基本採用以下的流程:假設物體邊框,對每個邊框內進行特徵再採樣,最後使用分類器進行分類。這個流程比較流行,基於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基於前饋式卷積神經網絡,針對那些方框裡的目標檢測實例,產生一個固定大小邊界框集合和分數,緊接著是一個非極大值抑制步驟來產生最後的檢測。網絡前半部分是個標準結構(用於高質量圖片分類),成為基網絡。然後對網絡增加了輔助結構來實現以下特徵:
多比例特徵圖檢測:在基網絡後增加卷積特徵層,這些層按大小減少的次序連接,能夠進行多尺度預測。卷積檢測預測器:通過一個卷積濾波器集合,每個新增的特徵層可以產生一個預測集合。假設特徵層大小為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