Rethinking ImageNet Pre-training
論文: ofollow,noindex">Rethinking ImageNet Pre-training
這篇paper因為其想法比較具有顛覆性(還有作者是Kaiming He大佬),剛放出來就引發了大量的討論。通常來說,對於絕大部分CV問題的慣常做法就是,不管三七二十一,先在ImageNet預訓練一下,然後針對具體的問題fine-tuing。在這裡,作者發現,從零開始訓練,不用fine-tuing效果也和使用預訓練一樣。那就引發了一個思考?為什麼需要去ImageNet預訓練?
作者使用從零初始化,依然可以得到和COCO2017冠軍的結果,且結果十分魯棒性。即便是在以下三種情況下:
- 使用10%的訓練資料
- 使用更深,更寬的網路(依舊沒有過擬合,依舊很魯棒)
- 在多種任務下,多種評價指標下
先看一張作者實驗結果對比圖:

實驗結果
從圖中可以看出:
- 迭代次數足夠多的時候(達到
次的時候),隨機初始化與預訓練結果一樣
- 圖中的精度曲線分叉表示使用/不使用學習率衰減
- 使用預訓練收斂更快。
總結起來,其實就是,使用預訓練可以加快收斂,但是精度不會上升。其實也沒有媒體吹得那麼神。在這一行越久,就越發現,在深度學習領域,沒有什麼事是絕對的。一個結論可以被反覆推翻,歸根結底,還是因為神經網路的模型引數太多,可解釋性太差。作者得到的這個結論,也是完全有可能和自己工作中的實際結論出現偏差的。
作者的比較方法
為了公平的比較使用預先訓練和隨機初始化的結果,作者採用的模型沒有針對隨機初始化進行特定的網路結構設計。除了以下兩點不同:
- 隨機初始化模型使用了Group Normalization,因為Batch Normalization在batch size太小的時候效果不好。對於檢測問題,由於圖片太大,使得batch size上不去,因此用Group Normalization比較合適。而對於預訓練模型,由於分類問題的圖片比較小,batch size可以比較大,那麼BN算出來的
就靠譜很多,因此直接用BN就可以了。
- 隨機初始化模型訓練時間更久,因為預訓練模型沒有算上預訓練的時間,所以直接比是不公平的。
對於第一點,作者為了保證實驗結果的合理性,對於隨機初始化模型也使用BN,並結合多GPU訓練(增大batch size)實現了隨機初始化訓練。此外,作者發現即便不使用歸一化,通過選擇初始化方式,依舊可以實現隨機初始化訓練,並且結果比肩預訓練。
實驗
整片文章思想就是如上面所說,接下來就是大量的對比實驗以驗證論述。
使用10%的資料進行隨機初始化訓練

10%資料訓練結果
可以看出,即便是少量資料,依舊結果不差。驗證了作者的第一條結論
使用更深,更寬的網路

使用更深,更寬的網路
這裡使用的模型是Mask RCNN,backbone分別是ResNet101, ResNeXt152。後者引數是前者的四倍。實際實驗發現,即使使用更深,更寬的網路,結果不僅沒有過擬合,精度還上升了。這裡驗證了作者的第二條結論。第三天結論驗證方式類似,不再贅述。
總結
- 預訓練可以加快收斂,沒別的用處。
- 實際工程中,還是可以使用預訓練,收斂快,省事
- 本文的實驗設計非常嚴密,基本上考慮到了每一個疑問點。值得借鑑。
- 對於許多“可能是”理論,要多思考,多問幾個為什麼。尤其是對於深度學習這種“黑盒子”,換個實驗條件,結論可能就相反。這篇paper的結論也是如此,不能奉為聖旨