目標檢測訓練優化Tricks:《Bag of Freebies for Training Object Detection Neural Networks》

目標檢測訓練Tricks論文筆記

轉載請註明出處:https://blog.csdn.net/ouyangfushu/article/details/88686189

作者:SyGoing

QQ:  244679942

一、論文概述及創新點

    深度學習中各種SOTA的模型除了網絡架構設計的精妙之外,研究者在對模型進行訓練的過程中也探索了很多有用的tricks,比如模型優化方法(SGD、Adam和RMSprop等)、數據層面的增強方法、學習率更新策略、損失函數優化(人臉識別的各種loss函數)、正則化、著名的BatchNorm等,這些方法最初的驗證幾乎都是在分類問題中。論文《Bag of Freebies for Training Object Detection Neural Networks》(下面以文[1]簡稱)提到對於目標檢測模型訓練技巧則缺少系統的總結。

    我們知道目標檢測主要分爲以YOLO和SSD爲代表的one stage系列和Faster-RCNN爲代表的two stage系列,他們各自訓練時也有着自己的特點,文[1]似乎在提煉目標檢測算法通用訓練tricks,論文說是Bag of Freebies,並且更傾向於對One-stage系列優化,one-stage計算量更小,在落地上更爲普遍。論文[1]稱有四點貢獻:

1、第一次系統地評估各種訓練Tricks(多借鑑於分類)在不同目標檢測算法上的應用效果,爲研究者提供了很有價值參考。

2、借鑑分類問題(或對抗生成網絡)中mixup數據增強的思路,提出一種適合於目標檢測問題的mixup數據增強,並證明能顯著提升目標檢測模型泛化性能。

3、在不改變模型網絡結構及損失函數情況下,應用文中的Tricks取得了5%-30%的AP提升。

4、擴展了目標檢測數據增廣領域的研究深度,顯著增強了模型泛化能力,有助於減少過度擬合問題。實驗還揭示了可以在不同網絡結構中一致地提高目標檢測性能的良好技術。

    個人認爲文章的殺手鐗(創新點)便是借鑑mixup數據增強方法的思路提出適合於目標檢測模型的訓練的mixup,並且性能(AP)提升效果非常顯著(一個打十個),然後配合其他的Tricks進一步增強模型的泛化性能。

二、目標檢測訓練Tricks

    論文[1]總共提到了六種通用的訓練Tricks,其中有幾種在yolov3原始算法中都有用到,所以說不得不承認yolo系列是非常優秀的目標檢測算法。具體爲

1、Visually Coherent Image Mixup for Object Detection(mixup數劇增強,借鑑文[2])

 與[2]原始的mixup不同點有兩點:

1)文[2]提出的mixup數據增強是一種有特色方法,但是實驗對象是分類與對抗生成網絡,成對圖像的mixup是以resize到相同大小的圖像爲前提完成的。

                        

    目標檢測問題中如果resize圖像到相同大小則會造成圖像畸變,檢測任務對於這種變化較爲敏感,因此作者採用保圖像幾何形狀的方式對圖像進行mixup,我的理解是圖像直接mixup成對圖像,取最大寬高並填充(constant合成的空白區域),最後計算損失時按照mixup的beta分佈產生的權重,對損失進行加權求和,再反向傳播loss更新模型權重。

2)文[2]的mixup方法中成對圖像求加權和的權重是由Beta分佈隨機生成(Beta分佈如圖),Beta的兩個參數默認取值1.0(源碼),原始mixup論文[2]試驗則是從0.2到1.0的幾組試驗值,論文[1]採用的Beta分佈兩個參數則是取值大於等於1,在實驗中Beta分佈的參數值取1.5時效果更好,漲點明顯:

                                       

                                          

2、Classification Head Label Smoothing(目標類別標籤光滑,參考[3])

    在目標檢測算法中,除了目標框Bounding Box的定位任務,還有對目標的分類,對於目標分類任務通常採用softmax函數處理類別輸出神經元

                                                     

    如果類別標籤採用one-hot編碼(一個一維向量,維數爲類別數目,僅在目標所屬類別取1,其餘位置取0),則損失函數:

                                                 

    對於任意不同的兩個類別,目標類別的分佈在完全沒有交集的情況下,交叉熵損失纔有可能爲0,而實際上這種情況不很難達到,即softmax損失函數對於任意兩個不同的類別,懲罰兩個類別相差很遠(在訓練中幾乎很難達到)。

                                     

    這樣很容易逼上梁山,即使得置信度過高,出現過擬合問題。具體可以參見另一篇博客《熵的概念》。而smooth label 個人感覺則是對標籤放鬆處理(改變類別的分佈),使得目標函數不至於太嚴格,降低不同類別的置信度,一定程度上使得模型更易於收斂且能避免模型過度擬合(over fitting)數據。對目標類別的Ground Truth做如下處理,對原始標籤稱上一個小於1且接近於1的數,再加上一個類似正則項的東東,其實也就是一種對目標函數做的正則化處理

                                                 

    其中,K爲類別數目,分子爲小正數(懶得打公式)。具體的描述可以參看論文[3]。

3、Data Preprocessing(數據預處理,純粹意義上的數據增強)

    數據預處理,這個就是較爲純粹的數據增強了,分類問題中經常用到各種七七八八的數據增強方法,但是文中提到分類問題使用的某些數據增強方式並不適合於目標檢測問題,尤其是圖像幾何形狀變換的方法。

    文[1]着重研究評估了:1)隨機幾何變換,如:隨機裁剪、隨機擴張、隨機水平翻轉、隨機resize;2)隨機顏色抖動,如亮度、色調、曝光度、對比度。

   目標檢測有基於anchors的one stage系列,如經典而優秀的YOLO系列和SSD系列,這類算法的最終檢測結果是基於輸出Feature Map的每個像素,即基於Anchors的輸出特徵圖像素級預測,如416x416輸入的YOLOv2,輸出爲13x13的特徵圖,每個像素有5個anchors。

    另一種就是基於提名的two stage系列,如基於RPN的Faster-RCNN,RPN階段產生大量候選框,然後候選框印射到共享特徵圖中,在ROI Pooling 採樣得到候選特徵圖進行下一步類別預測及位置的Refine,如下圖所示爲Faster-RCNN。

                                                              

     Two stage系列的算法由於在第二階段本身具有大量的基於候選框crop的操作配合ROI Pooling或者ROI Align獲取統一尺度的ROI,因此這類算法在訓練階段可以不採用隨機幾何變換。

4、Training Scheduler Revamping(訓練策略改進)

 1)Cosine schedule

    文[1]中提到基於step的學習率策略,達到預設的epoch或iterations就按照一定比例減小學習率,學習率的陡然變化使得模型學習發生震盪而不穩定,而採用cosine schedule[4],cosine 函數自變量爲0-pi,值域在0-1之間,這樣基礎學習率乘上以迭代步爲自變量的cosine函數,這樣學習率隨着迭代進行緩慢減小。具體建模方式參看[4],試驗對比效果如圖,

                                           

2) Warm up learning rate

    如果讀過darknet源碼就可以看到,YOLOv2-v3訓練就是用了這種策略,如cfg中設置burn in參數爲1000,warm up學習策略在訓練前一千步,從0開始逐漸增大到預設的基礎學習率,所以YOLOv2-v3是一種非常優秀的目標檢測算法,個人也非常喜歡。

    這樣做的好處呢? Warm可以避免訓練初期的梯度爆炸問題,模型梯度更加穩定。過了1000步,後續迭代步配合cosine 策略,學習率再緩慢降低(模擬退火)。

5、Synchronized Batch Normalization

    這個策略是針對土豪提的,對於大規模數據集的多卡訓練,Batch會被分割成很多小部分(小 Batch)在不同的顯卡,這樣實際上雖然加速了訓練,但是Batch卻變小了,可能會限制Batch Normalization的作用,與大Batch訓練的初衷向左。對於分類問題可能影響不到,但是對於對Batch敏感的目標檢測任務則影響很大。基於此採用Synchronized Batch Normalization。

6、Random shapes training for single-stage object detection networks(即輸入圖像的多尺度訓練)

    這個Trick其實也是借鑑於YOLOv2/v3,我們知道YOLOv2/v3在訓練時,每隔10個iterations就會變化訓練圖片的尺度,這樣做可以實現跨尺度特徵融合,也能使得模型在多種輸入大小下訓練以適應不同的圖像大小輸入,yolov2論文稱之爲多尺度訓練,文[1]同時也提到這樣做也可以使得模型不容易過擬合以增強泛化性能。下面爲darknet源碼(detector.c 119行):

                          

三、試驗與總結

  作者首先在Pascal VOC數據集上做了細粒度評估對比實驗,然後在MSCOCO數據集上主要測試整體性能和泛化性能,參與實驗的有one stage的YOLOv3和two stage的Faster RCNN。

1、YOLOv3 改進實驗結果(在VOC數據集上)

                                    

2、Faster R-CNN 改進實驗結果(在VOC數據集上)

                                    

兩組對比都是以無任何數據增強方法的訓練和基準原始訓練作爲基準對照,可以看到數據增強對於one stage的yolov3有着顯著的影響,不加任何數據增強方法mAP很低,加了之後天壤之別;而two stage的目標檢測算法則對於數據增強不太敏感,這可能是因爲two stage的目標檢測算法(Faster RCNN)是最後預測結果是基於特徵圖的ROI Pooling映射採樣,最後影響迴歸分類的是一個經過crop的特徵圖,而不像one stage的目標檢測算法依賴於單位像素,文[1]在第三個trick中提到對於幾何變換不敏感。

 

採用文中提到的訓練tricks之後,模型的mAP提升較爲明顯,尤其是mixup的漲點明顯,其次是class label smoothing.總體上可以實現5+點漲幅。雖然貌似只有幾個點,但是模型的泛化能力提升不容忽視。

3、MSCOCO數據集上的提升

還是one stage的yolov3對於文中的tricks非常受用,畢竟單階段目標檢測算法比較吃數據增強。

值得注意的是mixup在ImageNet預訓練Backbone+目標檢測算法訓練上分別使用時則會有進一步提升,作者特地還做了幾組對比。在預訓練Backbone上採用mixup訓練分類,以及接入檢測head的以後的整體訓練採用mixup,若都採用漲點最優。

                                

 

論文中涉及的訓練tricks或者(Bags of freebies)已經開源在mxnet中,鏈接:https://github.com/dmlc/gluon-cv

 

該論文的縮影在官網也能見到:

https://gluon-cv.mxnet.io/build/examples_detection/index.html

 

我們來找一下mixup的縮影:

https://github.com/dmlc/gluon-cv/blob/master/gluoncv/data/mixup/detection.py

                          

 

https://github.com/dmlc/gluon-cv/blob/master/gluoncv/data/transforms/presets/yolo.py

                         

 

 

參考文獻:

[1]  Zhang Z, He T, Zhang H, et al. Bag of Freebies for Training Object Detection Neural Networks[J]. arXiv preprint arXiv:1902.04103, 2019.

[2]  H. Zhang, M. Cisse, Y. N. Dauphin, and D. Lopez-Paz.mixup: Beyond empirical risk minimization. arXiv preprintarXiv:1710.09412, 2017.

[3]  C. Szegedy, V. Vanhoucke, S. Ioffe, J. Shlens, and Z. Wojna.Rethinking the inception architecture for computer vision. InProceedings of the IEEE conference on computer vision and

pattern recognition, pages 2818–2826, 2016.

[4]  I. Loshchilov and F. Hutter. Sgdr: Stochastic gradient descentwith warm restarts. arXiv preprint arXiv:1608.03983,2016.

[5]  Redmon J, Farhadi A. Yolov3: An incremental improvement[J]. arXiv preprint arXiv:1804.02767, 2018.

[6]  Ren S, He K, Girshick R, et al. Faster r-cnn: Towards real-time object detection with region proposal networks[C]//Advances in neural information processing systems. 2015: 91-99.

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章