分類技巧:Fixing the train-test resolution discrepancy

【GiantPandaCV導語】調研分類方法的時候師姐推薦的一篇paper,其核心是訓練的時候使用小分辨率,測試的時候使用大分辨率(訓練分辨率的1.15倍),能夠有效提升驗證精度。

Motivation

ImageNet數據集分類模型通常採用的數據增強方式會導致訓練時和測試時的模型看到的目標尺寸出現差異。即訓練分辨率的降低可以一定程度上提高測試階段的精度。

舉個例子:

圖一:原先的ImageNet訓練方法

上圖代表訓練階段圖片處理流程:訓練階段主要通過隨即選擇一塊矩形區域,然後resize到224固定大小,這樣訓練得到的尺度可能是上圖右側對應的。

下圖代表測試階段圖片處理流程:圖片直接resize到固定範圍256x256, 然後從中間crop一個224x224大小的圖片。

通過上圖就可以看出,訓練過程中模型看到的圖片與測試的時候看到的分類區域 (Region of Classification)是不一樣的:訓練過程看到的目標更大,測試過程看到的目標更小 。這可能導致訓練過程學到的分佈並不能非常好的應用到測試過程中,本文致力於解決這個問題。

根據以上簡單的觀察提出了一種策略,使得模型在訓練和測試過程中使用不同的分辨率然後在高分辨率上進行微調

方法簡單但效果驚人:可以將ResNet50從77.1%提升至79.8%!

Fixing Resolution方法

簡單表述實現方案(不關心原理的看到這裏就可以了):

  • 縮小訓練過程的分辨率,變爲原分辨率/1.15,進行普通的訓練過程。 以下圖爲例訓練分辨率爲128。

  • 測試過程使用更大分辨率的圖片進行測試。以下圖爲例測試分辨率爲384。

  • 想進一步提高準確率,可以固定FC層的參數並在高分辨率384下進行微調少量epoch。

訓練過程採用的增強:

transforms.RandomResizedCrop(224, scale=(0.08, 1.0), ratio=(0.75, 1.33)),
transforms.RandomHorizontalFlip()

測試過程採用的增強:

transforms.Resize(256)
transforms.CenterCrop(224)

以上就是操作方法,那麼不看推導,僅憑直覺,爲何這種想法能work呢?

  • 訓練集增強使用隨機Crop,如果crop的分辨率比較高,就如圖一所示,訓練過程中看到的馬目標更大。測試過程中採用CenterCrop,如果保持相同分辨率,圖片中馬的目標就比較小。

  • 從感受野的角度理解,假如我們想要分類馬,那麼模型的感受野會自動調整,轉向訓練集中比較大的目標。測試的過程中遇到更小的目標,可能並不會識別的很好。(最優的情況是理論感受野=目標大小)

  • 如圖二所示,本文提出訓練過程中使用小分辨率,提升測試過程的分辨率,這個時候可以看出這兩匹馬的大小是差不多大的。

  • 總體的直覺是:

    • 訓練使用更小分辨率,模型在訓練過程中看到的RoC與原先相比會變小。

    • 測試使用更大的分辨率,模型在測試過程中看到的RoC與原先相比會大。

    • 正好和Motivation中的 訓練過程看到的目標更大,測試過程看到的目標更小 的觀察相反,從而保證了訓練和測試過程的RoC儘可能一致。

圖二:本文提出的數據增強方法

可以看出整個過程可以通過推導得到,論文中也進行了推導,具體內容可以查看原論文,這裏只給出最終結論:在使用默認RandomResizedCrop參數情況下,即scale=(0.08, 1.0), ratio=(0.75, 1.33),放大倍數應該爲:

\[1/(0.7\times \frac{K_{test}}{K_{train}}) \]

舉例:以ImageNet中數據增強爲例:測試過程分辨率應爲訓練過程分辨率的=$1 / (0.7\times \frac{256}{224}) = 1.25
$倍。

增大的分辨率倍數確定好了之後,爲了更有效提升測試精度,可以選擇調整spatial pooling之後的數據分佈,即對FC層進行微調,令模型更加適應新的分辨率。

實驗部分

在ImageNet數據集上使用224進行訓練,然後再各種分辨率上進行測試:

可以發現:隨着驗證集分辨率的增加,準確率先增後降

上圖展示了訓練分辨率、測試分辨率對精度的影響。可以明顯發現,黑色點是低於紅色三角的,驗證了本文的觀點:訓練過程中分辨率應低於測試過程分辨率。

與SOTA方法的比較:

PS: paddleClas中也對論文中方法進行了實現,詳見:https://github.com/PaddlePaddle/PaddleClas

參考文獻

https://arxiv.org/abs/2003.08237

[https://www.cnblogs.com/shuimuqingyang/p/14337918.html](https://www.cnblogs.com/shuimuqingyang/p/14337918.html#:~:text=FixRes是Facebook在19年提出的一個應用於圖像分類的簡單優化策略,論文名是Fixing the train-test,resolution discrepancy,在這篇論文中作者發現了在ImageNet數據集上的分類模型中常採用的數據增強會導致訓練和測試時的物體分辨率(resolution)不一致,繼而提出FixRes策略來改善這個問題: 常規訓練後再採用更大的分辨率對模型的classifier或最後的幾層layers進行finetune 。)

https://github.com/PaddlePaddle/PaddleClas

https://zhuanlan.zhihu.com/p/151001354

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