摘要

在COCO數據集上面做物體檢測(object detection)和實例分割(instance segmentation)的時候,我們發現通過使用隨機初始化來從頭開始訓練模型得到的結果,並沒有比那些從ImageNet上面預訓練,然後再微調的模型得到的結果要差,當然伴隨了訓練迭代次數增加以及可能不收斂的缺點。令人驚奇的是,這種訓練方式是魯棒的,訓練得到的結果在很多場合下都是成立的,例如i)僅僅使用百分之10的訓練數據ii)更深更寬的模型iii)多種評判標準下的多任務模型。實驗結果表明:使用ImageNet預訓僅僅在訓練早期可以加速收斂,但是並不能提高最鍾任務的準確度。這些發現引導著大家重新思考一下「pretraining and fine-tuning」這種在計算機視覺

任務中的範式(de facto paradigm )

背景介紹:

大家發現,使用ImageNet來預訓練一個模型,模型學到的特徵表達能力能夠很好地遷移到我們需要的任務上。因為,這種訓練方式也成為了一個固定的範式:就是在大規模數據上(例如ImageNet)預訓練好模型,然後再自己特定的任務上微調(Fine-tuning)。這種預訓練的方式也已經在很多任務上取得了較好的結果,包括物體檢測,圖像分割和動作識別。

因此這篇paper主要來重新思考一下,我們是否一定需要使用這種 pretraining and fine-tuning 這一固定的範式。我們的實驗結果表明:使用隨機初始化來從頭開始訓練我們的模型,一樣可以得到較好的結果。我們發現,如果i)使用初始化技巧來加速擬合2)能夠有足夠長的時間來幫助訓練,我們並沒有什麼障礙來從頭開始訓練我們的模型。

接著,本文證明了對於各種AP(Average Precision) 在40-50上面的baseline 網路,參數隨機初始化的訓練方式可以與在imagenet預訓練的方式媲美。更進一步,我們同時發現,在我們僅僅使用10%的數據時,這種結論依舊成立。同時,我們在沒有過擬合的情況下,還能夠從頭開始訓練4倍於ResNet參數的網路。基於以上的實驗,我們得出下列結論:

  1. ImageNet 預訓練可以加速網路收斂,在訓練早期尤為明顯。這是主要因為,隨機初始化訓練需要一定的時間來學習提起low -level的特徵(例如邊緣,紋理)
  2. ImageNet 預訓練並不能自動地給模型一個好的正則項。在pretrain的實驗中,當減少數據至10%的時候,我們必須重新選在超參數來防止過擬合。但是這種問題在隨機初始化中,就沒有出現。
  3. ImageNet 預訓練對那些 對於空間位置非常敏感的任務並沒有太大的用處。主要問題在於ImageNet 預訓練是用來做分類任務,而物體檢測還需要輸出空間位置坐標。

上述的實驗和討論已經超出了我們對ImageNet 預訓練的認知。從歷史的角度來看,當我們在自己的task中,ImageNet 預訓練是一個可行的方式去解決缺乏足夠訓練資源的問題。此外,ImageNet能夠看成一個免費的數據資源去幫我們提供大量的標註數據。但是我們翻開這些歷史觀點,向前看的時候,數據和計算資源不足以成為制約我們演算法的時候,我們該如何訓練我們的模型, 尤其當我們自己的task和以imagenet為基礎的分類任務有差距的時候。因此,這個paper提供了一些新的實驗和討論來為大家對於ImageNet 預訓練有一些新的思考。

演算法原理:

這篇paper的主要目的是看看ImageNet 預訓練到底在網路的訓練中起到什麼樣的作用。因此,網路結構的設計不是我們的重點。我們基於一些通用的網路,並做出最小的改動來進行我們的對比實驗。以下是一些改動設計和演算法考量

  1. 標準化(Normalization)

BN(batch Normalization)是一種常見的標準化方式,基於BN的網路設計能夠加速網路訓練以及擬合。物體檢測需要大size的圖像作為輸入,受限於顯卡的顯存,就只能降低batch-size,降低batch-size 則會降低模型的準確度。如果使用imagenet 預訓練的方式,可以避開這種問題,但是隨機初始化訓練則需要從頭開始使用BN。

本文主要採用以下兩種方式來減少小batch-size帶來的問題:

  • GN(Group Normalization)-GN是介於LN(layer normalization)和IN(instance normalization)之間的一種標準化方式
  • SyncBN:這是一種多機多卡分散式的一種方式。通過多塊GPU來增加batch-size

2. 收斂

關於收斂的問題,如果我們希望從零開始隨機初始化訓練我們的演算法所需的時間,要小於那個使用ImageNet預訓練初始化所需的時間,這是不現實也是不公平的。如果忽視這個事實,那我們很可能得到的是不正確的結論。

典型的ImageNet 預訓練涉及到了百萬張圖像的上百個epoch的迭代訓練。這種大規模的學習過程除了能夠學到高階語義信息之外,還能夠學到一些低階的圖像的特徵。因此,在fine-tuning的時候就不需要重新學習這些低階的圖像特徵描述了。因此,我們在比較兩個收斂速度的時候,需要選取那些訓練周期較長的model。(trained for longer than typical fine-tuning schedules).

從Images 這一欄對比可以看出,除去ImageNet預訓練的固定100epoch,隨機初始化訓練(72epoch)是fine-tuning(24epoch)的三倍。儘管使用了較多的iteration,但是如果我們從image-level sample的角度來看,其ImageNet預訓練固定的100epoch佔了大頭。但是如果我們從pixel-level的角度來看,因為object detection task 需要大size的輸入,而image classification不需要那麼大的輸入尺寸。實驗結果表明,從頭開始隨機初始化訓練的方式能夠趕上ImageNet預訓練的訓練方式。這就暗示了如果想要從頭開始隨機初始化訓練這種方式收斂的話, 就需要大量的數據(就pixel-level的數據而言)

實驗設置:

我們盡量遵循最小改動這個標準來去設計對照實驗。主要使用Detectron裡面的Mask-RCNN這一基本baseline框架。

  1. 網路結構:以ResNet或者ResNeXt為基礎的Mask-RCNN,主要使用GN和SyncBN來取代凍結BN的操作。同時Fine-tuning的模型也採用同樣的操作。
  2. 學習率:在初始學習率(比較大的)的情況下長時間的訓練對於模型的收斂是有幫助的,但是如果初始學習率較小的話,可能就會過擬合。
  3. 超參數:所有的超參數設置參照Detectron設置。初始學習率為0.02,權重衰減為0.0001 ,動量參數值為0.9. 所有的模型訓練在8GPU上,batch-size為2. 對於數據增強策略,訓練的時候只有水平翻轉,測試沒有增強融合的操作。

結果:

  1. 準確率(Accuracy)
  • 第一個令人驚奇的發現就是僅僅使用coco數據集,從頭訓練的模型能夠趕得上那個fine-tuning的模型。

2. 使用少量的數據來從頭開始訓練模型

  • 第二個發現就是 使用少量的數據來隨機初始化訓練的模型的結果,不比那些imageNet預訓練的模型得到的結果要差

最終的討論:

  1. 在特定的目標任務上,從頭開始訓練一個深度神經網路是可行的
  2. 從頭開始訓練網路需要更久的訓練時間來讓網路收斂
  3. 即使在只有10K的coco數據集上面來從頭開始訓練,得到的結果也不必fine-tuning的差
  4. ImageNet 預訓練的方式可以加速網路收斂
  5. ImageNet 預訓練並不會減少網路的過擬合現象,除非我們真的有一批很小的數據集(PS:例如醫學圖像)
  6. 在一些對於空間位置比較敏感的task中(例如定位這些),ImageNet 預訓練對網路訓練的幫助不如classification多

基於上述的發現,作者給出了一些關於ImageNet 預訓練的常見問題的解答,希望引導大家對於imagenet pretraining有著更多的考量。

  • ImageNet 預訓練真的是必要的嗎?-----回答是NO!在你有足夠的數據和計算資源的情況下
  • ImageNet 預訓練真的有幫助嗎?------回答是Yes!ImageNet 預訓練提供了一個較好的參數初始化方式,輕而易舉的獲得較好的結果,減少了迭代次數,加速了網路收斂,降低了訓練時間。
  • 是否我們需要收集Big Data---回答是Yes!但是如果僅僅是視覺的分類任務,就沒有必要了。ImageNet pretraining是一個很好的工具
  • 我們是否應該追求一個真正意義上的通用的特徵表達表徵能力?---回答是Yes!

In closing, ImageNet and its pre-training role have been incredibly influential in computer vision, and we hope that our new experimental evidence about ImageNet and its role will shed light into potential future directions for the community to move forward.

對於我們醫學AI 分割而言,數據集真的是太小了、例如血管分割DRIVE 數據集只有幾十張圖像,cell segmentation 最初也只提供了30張圖像,因此醫學圖像的分割task裡面帶有ground truth的數據真是太少、太珍貴了。

因為數據量比較少,所以我們現在在用ImageNet 來預訓練我們的模型,來提取一些基本的圖像特徵,但是這些特徵是否真的對我們的醫學圖像有用呢?醫學圖像有以下幾個特點:

  1. 圖像解析度高,彩色眼底圖4k*5K,而病灶特徵很小,例如微動脈血管瘤只佔有幾十個像素
  2. 不同成像方式帶來的圖像格式不一。除了上述的color fundus, 還有CT,MRI,OCT這些。每一種成像方式帶來的圖像雜訊風格都是不一樣的。即使是同一種類型的數據,例如OCT,Topcon的機器和 Heidelberg的機器拍出來的圖像也不一樣(即使同樣屬於speckle noise)。
  3. 不同醫生標註的ground truth之間的誤差比較大
  4. 帶有醫生準確標註的數據量很少

因此,醫學圖像分割是否使用imageNet pretraining 也是我們需要仔細考慮的問題。


推薦閱讀:
查看原文 >>
相关文章