何愷明“終結”ImageNet預訓練時代:從0開始訓練神經網絡,效果比肩COCO冠軍

何愷明,RBG,Piotr Dollár。

 

三位從Mask R-CNN就開始合作的大神搭檔,剛剛再次聯手,一文“終結”了ImageNet預訓練時代。

 

他們所針對的是當前計算機視覺研究中的一種常規操作:管它什麼任務,拿來ImageNet預訓練模型,遷移學習一下。

 

但是,預訓練真的是必須的嗎?

 

這篇重新思考ImageNet預訓練(Rethinking ImageNet Pre-training)就給出了他們的答案。

 

FAIR(Facebook AI Research)的三位研究員從隨機初始狀態開始訓練神經網絡,然後用COCO數據集目標檢測和實例分割任務進行了測試。結果,絲毫不遜於經過ImageNet預訓練的對手。

 

甚至能在沒有預訓練、不借助外部數據的情況下,和COCO 2017冠軍平起平坐。

 

結果

 

訓練效果有圖有真相。

 

他們用2017版的COCO訓練集訓練了一個Mask R-CNN模型,基幹網絡是用了羣組歸一化(GroupNorm)的ResNet-50 FPN。

 

 

隨後,用相應的驗證集評估隨機權重初始化(紫色線)和用ImageNet預訓練後再微調(灰色線)兩種方法的邊界框平均檢測率(AP)。

 

可以看出,隨機權重初始化法開始不及預訓練方法效果好,但隨着迭代次數的增加,逐漸達到了和預訓練法相當的結果。

 

爲了探索多種訓練方案,何愷明等人嘗試了在不同的迭代週期降低學習率。

 

結果顯示,隨機初始化方法訓練出來的模型需要更多迭代才能收斂,但最終收斂效果不比預訓練再微調的模型差。

 

主幹網絡換成ResNet-101 FPN,這種從零開始訓練的方法依然呈現出一樣的趨勢:從零開始先是AP不及預訓練法,多次迭代後兩者終趨於不分上下。

 

效果究竟能有多好?答案前面也說過了,和COCO 2017冠軍選手平起平坐。

 

從零開始模型的效果,由COCO目標檢測任務來證明。在2017版驗證集上,模型的bbox(邊界框)和mask(實例分割)AP分別爲50.9和43.2;

 

他們還在2018年競賽中提交了這個模型,bbox和mask AP分別爲51.3和43.6。

 

這個成績,在沒有經過ImageNet預訓練的單模型中是最好的。

 

這是一個非常龐大的模型,使用了ResNeXt-152 8×32d基幹,GN歸一化方法。從這個成績我們也能看出,這個大模型沒有明顯過擬合,非常健壯(robust)。

 

實驗中,何愷明等人還用ImageNet預訓練了同樣的模型,再進行微調,成績沒有任何提升。

 

這種健壯性還有其他體現。

 

比如說,用更少的數據進行訓練,效果還是能和預訓練再微調方法持平。何愷明在論文中用“Even more surprising”來形容這個結果。

當他們把訓練圖像數量縮減到整個COCO數據集的1/3(35000張圖)、甚至1/10(10000張圖)時,經過多次迭代,隨機初始化看起來還略優於預訓練法的效果。

 

不過,10000張圖已經是極限,繼續降低數據量就不行了。當他們把訓練數據縮減到1000張圖片,出現了明顯的過擬合。

 

怎樣訓練?

 

想拋棄ImageNet預訓練,用不着大動干戈提出個新架構。不過,兩點小改動在所難免。

第一點是模型的歸一化方法,第二點是訓練長度。

 

我們先說模型歸一化(Normalization)。

 

因爲目標檢測任務的輸入數據通常分辨率比較高,導致批次大小不能設置得太大,所以,批歸一化(Batch Normalization,BN)不太適合從零開始訓練目標檢測模型。

於是,何愷明等人從最近的研究中找了兩種可行的方法:羣組歸一化(Group Normalization,GN)和同步批歸一化(Synchronized Batch Normalization,SyncBN)。

 

GN是吳育昕和何愷明合作提出的,發表在ECCV 2018上,還獲得了最佳論文榮譽提名。這種歸一化方法把通道分成組,然後計算每一組之內的均值和方差。它的計算獨立於批次維度,準確率也不受批次大小影響。

 

SyncBN則來自曠視的MegDet,和香港中文大學Shu Liu等人的CVPR 2018論文Path Aggregation Network for Instance Segmentation。這是一種跨GPU計算批次統計數據來實現BN的方法,在使用多個GPU時增大了有效批次大小。

 

歸一化方法選定了,還要注意收斂問題,簡單說是要多訓練幾個週期。

 

道理很簡單:你總不能指望一個模型從隨機初始化狀態開始訓練,還收斂得跟預訓練模型一樣快吧。

 

所以,要有耐心,多訓練一會兒。

 

 

上圖就是這兩種方法的對比。假設微調的模型已經預訓練了100個週期,那麼,從零開始訓練的模型要迭代的週期數是微調模型的3倍,見到的像素數量才能差不多,實例級、圖片級的樣本數量依然差距很大。

 

也就是說,要想從隨機初始化狀態開始訓練,要有大量樣本。

 

到底要不要用ImageNet預訓練?

 

這篇論文還貼心地放出了從實驗中總結的幾條結論:

 

  • 不改變架構,針對特定任務從零開始訓練是可行的。

  • 從零開始訓練需要更多迭代週期,才能充分收斂。

  • 在很多情況下,甚至包括只用10000張COCO圖片,從零開始訓練的效果不遜於用ImageNet預訓練模型微調。

  • 用ImageNet預訓練能加速在目標任務上的收斂。

  • ImageNet預訓練未必能減輕過擬合,除非數據量極小。

  • 如果目標任務對定位比識別更敏感,ImageNet預訓練的作用較小。

 

所以,關於ImageNet預訓練的幾個關鍵問題也就有了答案:

 

它是必需的嗎?並不是,只要目標數據集和計算力足夠,直接訓練就行。這也說明,要提升模型在目標任務上的表現,收集目標數據和標註更有用,不要增加預訓練數據了。

 

它有幫助嗎?當然有,它能在目標任務上數據不足的時候帶來大幅提升,還能規避一些目標數據的優化問題,還縮短了研究週期。

 

我們還需要大數據嗎?需要,但一般性大規模分類級的預訓練數據集就不用了,在目標領域收集數據更有效。

 

我們還要追求通用表示嗎?依然需要,這還是個值得讚賞的目標。

 

想更深入地理解這個問題,請讀論文:

 

Rethinking ImageNet Pre-training

Kaiming He,Ross Girshick,PiotrDollár
https://arxiv.org/abs/1811.08883

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