1. 程式人生 > >轉載:最全最先進的檢測演算法對比Faster R-CNN, R-FCN, SSD, FPN, RetinaNet and YOLOv3

轉載:最全最先進的檢測演算法對比Faster R-CNN, R-FCN, SSD, FPN, RetinaNet and YOLOv3

很難衡量一個檢測演算法的好壞,因為除了演算法本身的思路之外,還有許多因素影響它的速度和精度,比如:

  • 特徵提取網路(VGG, ResNet, Inception, MobileNet);
  • 輸出的步長,越大分類數目越多,相應的速度也會受影響;
  • IOU的評判方式;
  • nms的閾值;
  • 難樣本挖掘的比率(正樣本和負樣本的比率);
  • 生成的proposal的數目(不同的方法輸出是不同的);
  • bbox的編碼方式,是預測offset還是相對位置?
  • 資料預處理的資料增廣方法;
  • 用哪個特徵層來做檢測;
  • 定位誤差函式的實現方法;
  • 不同的框架;
  • 訓練時候的不同設定引數,如batch_size, 輸入圖片大小,學習率,學習衰減率等因素;

為了對比不同的演算法,可以不考慮上述的所有影響因素,直接對論文結果評測,應該能大體看出不同方法的速度差異。

上圖是一個所有方法的預覽。從圖中可以看出RFCN的準確度是最高的。

上圖可以看出,速度最快的還是yolo和SSD一體化的方法。

這是在ms-coo資料集上的測試效果,從效果可以看出,Retina-Net在mAP效果是最好的。其中Faster-RCNN改用Resnet作為特徵抽取網路準確率有較大的提升。

最後是Google做的一個research,在TensorFlow上統一的實現了所有的檢測演算法,yolo沒有包含在內。最終的測試結果可以表示為:

從上面可以大致的看出,Faster-RCNN的準確度更加精確,而RFCN和SSD更快。

上述只是一個預覽,但是除了這些之外,我們還需要考慮一些更加細化的因素。

不同的特徵抽取網路

特徵抽取網路不通,最終的結果也不同。簡單來說,一個更加複雜的特徵抽取網路可以大大的提高Faster-RCNN和RFCN的精確度,但是對於SSD,更好的特徵抽取網路對結果影響不大,所以你看SSD+MobileNet也不會太大的影響結果。從這個圖可以看得很清楚:

目標物體的大小

對於大物體,SSD即使使用一個較弱的特徵抽取器也可以獲取較好的精確度。但在小物體上SSD的表現結果非常不好。

具體來看,SSD在一張圖片裡面就經常漏檢測小物體,比如:

Proposal的數目

不同的Proposal數目會影響檢測器的速度和精度。這個很重要,很多人想加速Faaster-RCNN但是不知道從何下手,顯然這裡是一個很好的切入點。
將Proposal的數目從300削減到50,速度可以提高3倍,但是精度僅僅降低4%,可以說非常值了。我們從這張圖可以看得很清楚:

最終我們可以得到一個很科學的結果:

1. 最高精度

使用Faster-RCNN毫無疑問,使用Inception ResNet作為特徵抽取網路,但是速度是一張圖片1s;
還有一種方法是一種叫做整合的動態選擇模型的方法(這個你就不要追求速度了);

2. 最快

SSD+MobileNet是速度最快的,但是小目標檢測效果差;

3. 平衡
如果既要保證精度又要保持速度,採用Faster-RCNN將proposla的數目減少到50,同時還能夠達到RFCN和SSD的速度,但mAP更優。