天天看點

再讀ssd

       如轉載請注明來自abrams的部落格:http://blog.csdn.NET/abrams90       

        目前有兩種常見的圖檔目标檢測方式,一種是基于滑動窗的,一種是基于目标區域提取與分類的。在深度學習時代之前,Deformable Part Model(DPM)與Selective Search是效果最好的方法,他們的效果差距不大。R-CNN的提出的區域提取與分類的的思路結合卷積神經網絡強大的能力,使得R-CNN成為了最流行也是效果最好的方法。

        R-CNN的方法有很多的改進。最初R-CNN的最大問題是時效性太差,SS提取的大量區域通用CNN分别提取特征并進行分類,使得計算量特别的大。這時提出的SPPNET通過與spatial pyramid pooling層共用featureMap,巧妙的解決了不同大小的特征區域放到同一個分類網絡中進行分類的問題,這樣也同時解決了每個區域都要提取一次特征的問題,提升了分類的效率。Fast Rcnn對SPPNET進行了擴充,使用了RoiPooling層做特征提取,并且可以初步端到端的finetune所有層來優化目标分類與區域回歸的損失函數。其中ROIPooling可以說是spatial pyramid pooling思想的簡化版,而區域回歸的思想來自MultiBox算法中。

        第二種改進思路是用深度神經網絡來改進區域提取的效果。MultiBox算法提出了直接用一個網絡分支進行區域提取,替代之前使用傳統特征的SS算法。這種思路很值得借鑒,但是分别訓練兩個相關的網絡卻不是一件容易的事。Faster R-CNN用RPN替代了SS用于區域提取,并且通過共享卷積層整合了兩個網絡,并且提出一種輪流優化兩個任務的訓練模式。這樣rpn使用的中層的特征,最終的分類的計算量也低了下來。SSD的思路跟rpn的思路類似,也使用了一系列固定的預設框做區域提取,類似Faster R-CNN中錨點的思路。SSD沒有使用RoiPooling進行區域分類特征提取,而是在區域提取的同時對每個區區域進行了分類,得到一個區域每個類别的得分。是以,SSD避免了RPN與Fast R-CNN結合的問題,更容易進行訓練,速度更快,并且更容易與其它任務結合。

        目标檢測的另外一種思路是不進行區域提取直接預測區域與分類的得分,這與SSD的思路很一緻。OverFeat提出了一種直接在已知目标類型後對區域進行預測的方法。YOLO使用整個頂層的特征圖來預測區域與類别,這裡區域的預測是所有類别共享的。與YOLO相比,SSD使用了不同比例與大小的預設框,在不同層的特征上。如果自在頂層使用一個預設框的話SSD的結構就跟OverFeat的結構類似了。如果使用整個頂層特征,使用fc而不是卷積層作為分類結構,并且不考慮不同長寬比的話,就跟YOLO的結構相似了。

        SSD可以說是集各家所長的一種目标檢測算法,結合了目标檢測領域YOLO的暴力回歸思路與RCNN的RPN,達到了速度與準确率的齊頭并進。在論文中,作者做了展示,使用500*500的樣本甚至超過了标準FASTER-RCNN最短邊600的準确率,卻達到了23fps的速度。這對工程界來說,不得不說是一個很大的突破,甚至在cpu模式下也可以勉強使用深度學習做目标檢測了。這裡引用文中的表格展示下它的性能,可以看出來SSD300達到了性能與準确率極佳的一種平衡:

方法 mAP FPS
Faster R-CNN VGG16 73.2 7
Faster R-CNN ZF 62.1 17
YOLO 63.4 45
FAST YOLO 52.7 155
SSD300 72.1 58
SSD500 75.1 23

        作者在論文中總結SSD的創新點有如下幾個:

1、  提出了SSD算發,比YOLO的速度更快,比FasterR-CNN準确率更高。

2、  在特征圖上使用全卷積來預測目标的得分與目标區域的偏移量。

3、  為了提高檢測分類的準确率,使用不同尺度的的特征圖來預測不同長寬比與尺度的目标。

4、  這樣的設計是的訓練可以端到端的進行,并且即使使用低分辨率的樣本作為輸入準确率也較高。達到了準确與與速度的平衡。

   盡管每個創新點看起來都不想RPN這樣石破天驚,但是幾點結合起來的效果卻不容小觑。

   作者在文中對不同的改進點的作用有個對比測試:

             SSD300
More data augmentation
Use conv4_3
Include{1/2,2}box
Include{1/3,3}box
Use atrous
VOC2007 map 65.4 68.1 69.2 71.2 71.4 72.1

        可以很容易的看出來,作者使用的資料擴充方法對map的提升是最大的,達到了7個點,從訓練代碼中也可以看出來,作者的資料層還是比較複雜的。其次使用中層的特征影響第二大,如果特征越高層,一些小目标在特征圖上可能都表現不出來了,是以中層的特征對小目标的影響比較明顯。不同尺度的目标框也有差不多兩個點的影響值。這裡對Atrous算法還不知道是啥,就先不說了。

        最後,文中也介紹了,SSD有兩個小缺點。一個是對目标大小比較敏感,特别是對小目标的檢測比對大目标的檢測要差不少。另外,對相似類别的分類能力較弱。我想結合SSD的網絡結構特點,這兩個缺點也很好了解。對于将深度學習應用與目标檢測産品中的需求來說SSD的出現無疑是個福音。

繼續閱讀