其實這個問題很好回答,基於目前最新成果,可以知道:

1 如果你數據量比較少,例如少於500張且任務較難,那麼肯定推薦用預訓練權重,快速收斂,效果也不會太差

2 如果你檢測任務比較簡單,數據量少,那麼其實用不用預訓練權重都行

3 如果你數據量多,不管是簡單任務還是複雜任務,如果你對訓練時間不敏感,可以考慮不用預訓練權重。但是對於一般小項目來說(圖片少於5000),還是推薦用預訓練權重。原因是收斂速度比較快,而且通常效果不會差。

個人從應用角度的淺見,不是學術研究角度來看


有人提到了Kaiming的Rethinking ImageNet Pre-training,除此之外,谷歌的Rethinking Pre-training and Self-training[1]進一步探討了檢測任務標註數據量對結果的影響。

實驗表明,標註數據量少的時候,預訓練有幫助;標註數據量越多,預訓練的影響越微小,甚至還不如沒有預訓練。

Supervised object detection performance under various COCO dataset sizes

參考

  1. ^[2020] Rethinking Pre-training and Self-training https://arxiv.org/abs/2006.06882


自己實驗一下就知道了,對於你想訓的數據集,可以先在res50上做個實驗,看加上coco預訓練在相同epoch下是否會更高。以個人經驗,即使都訓很長epoch加上coco預訓練基本上都會更高,除非你的數據集和coco差別非常大,比如crowdhuman等極端擁擠的數據集。

當然這裡默認你的數據集數量級比coco小了,做研究做項目做比賽的數據集基本上也都沒coco大。其實市面上比coco量級還大的數據集似乎也就object365和Open Images,也沒幾家公司願意投入去訓它們。

建議看看object365的論文,object365預訓練後的coco同模型精度簡直開掛,各種檢測trick折騰半天堆疊起來,可能還不如一個超強的預訓練。去年coco比賽實例分割之所以分為不用額外數據集(商湯、阿里)和用了額外數據集(曠視)的3個冠軍,大概就是為了公平吧,不過曠視似乎即使不用object365預訓練也可能第一(只是聽說)。


參見何愷明大佬的Rethinking ImageNet Pre-training和張士峰大佬的ScratchDet: Training Single-Shot Object Detectors from Scratch.

理論上來說,沒有預訓練的模型在足夠的epoch訓練後是可以和預訓練模型相媲美的,有時候甚至會跟好點.

但就個人經驗而言,這中間就有好幾個問題,比如需要多訓練幾倍的epoch是和數據集和模型有關的。當計算資源不足的時候這個調參難度真心負擔不起。我之前試過把ResNet50的BN全換成GN然後從頭訓練,然後參照Rethinking ImageNet Pre-training的結論在WIDERFACE上訓練了2X的epoch (沒敢嘗試6X,真心做不起),最後結果特別差不說還花了我一周時間(從imagenet上重新訓練的時間都出來了啊哭)。

當然我也試過用ResNet18在小數據集上測試(這次是classification),在同樣的epoch訓練下,沒有預訓練的雖然還是比有預訓練的差但基本差不多。

總的來說,只要你的計算資源支持你調參並且數據集足夠大,就可以試試沒有預訓練的,畢竟大力出奇蹟嘛。


如果是新手,建議使用預訓練吧


  1. 如果你訓練的網路basenet沒改,能找到對應的預訓練模型,那就用上
  2. 如果你改了網路,找不到合適的預訓練模型,那就直接訓,訓的時間長點,火大點,才香


看數據量


推薦閱讀:
相关文章