聲明:筆者轉載文章僅爲學習研究和個人方便查閱,如有侵權請聯繫作者刪除博文,謝謝!
文章轉載自 最全最先進的檢測算法對比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-coco數據集上的測試效果,從效果可以看出,RetinaNet 在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更優。