論文筆記:Fixing the train-test resolution discrepancy

前言

本文僅個人理(nao)解(bu),如有錯誤,歡迎指正!

論文地址:https://arxiv.org/pdf/1906.06423v3.pdf,該文章被NeurIPS 2019收錄。

該文章探究了在深度學習的圖像分類任務中,訓練及測試圖像分辨率對模型的影響。作者給出了自己的結論:a lower train resolution improves the classification at test time!

 

簡介

爲了使模型獲得較好的性能,訓練數據和測試數據在分佈上應該是一致的。然而,針對訓練數據和測試數據的一些操作,如數據集的製作、訓練前的預處理、數據增強等,是不一致的。例如,針對訓練集中的圖像,研究者可能會先從中隨機裁剪一塊矩形圖像區域,並通過進一步的裁剪、放縮使其符合模型的輸入要求。而對於測試集中的圖像,往往只是簡單的中心裁剪(CenterCrop)。作者認爲這會導致訓練數據和測試數據在縮放尺度上的不同,從而導致兩者數據分佈不一,最終影響模型性能。

對於以上的問題,以往研究提出了一些基於更改分辨率的解決思路。例如:

  • 數據增強,通過將不同分辨率(或者說,不同縮放尺寸)的圖像輸入網絡,使網絡學習學習到這種尺度的不變性。
  • feature pyramid net,通過網絡將圖像縮放成不同分辨率進行學習。

不同於以上工作,作者提出自己的解決方法:應該對訓練和測試數據加以聯合優化,縮小訓練集的分辨率,或者增大測試集的分辨率,從而使它們的數據分佈相符合。而對於該聯合優化所帶來的分佈上的變化,輔以網絡結構上的微調,可以帶來更好的模型性能。

 

增強及預處理的影響

此處探討前文所述的區別對待訓練集和測試集的處理策略,以及具體預處理或增強方式(RandomResizedCrop、CenterCrop)的影響。

RoC(Region of Classification)

RoC是輸入圖像的一部分,一般爲一塊矩形圖像,一般在數據增強、預處理等過程中從輸入圖像中取得。注意:RoC圖像不一定

然而,前文提到,針對訓練集和測試集,有不同的數據增強或預處理策略,因此訓練集和測試集的RoC基本不同。例如,對於測試集圖像使用中心裁剪,對訓練集使用隨機裁剪縮放(RandomResizedCrop)後,這兩部分的RoC所佔原輸入圖像比例的概率分佈情況:

可見訓練集數據與測試集數據分佈完全不同。

目標大小

針對訓練集的預處理或增強方式:對於原圖進行Pytorch自帶RandomResizedCrop後,再通過指定的縮放因子s縮放到指定大小Ktrain × Ktrain。

針對測試集的預處理或增強方式:將原圖按縮放因子s縮放後再CenterCrop,得到指定大小Ktest × Ktest

測試集中的目標大小,爲訓練集中的80%。

對網絡結構的影響

訓練集輸入圖像分辨率固定爲224×224,不同分辨率的測試集圖像輸入網絡後,網絡中激活層和池化層的結構也將不同,網絡輸出結果也會不同,下圖展示了不同分辨率的圖像輸入下,average pooling層輸出結果的分佈函數:

當測試集圖像分辨率從224降爲64時,ReLU激活層尺寸(activation map)從7×7變爲2×2,這意味着其輸出值爲0的可能性變高了,輸出值在分佈上也變得更爲稀疏,從而直接影響到池化層的輸出。相反,提升測試集圖像的分辨率,則輸出的分佈會相對集中。

對精度的影響

同樣是保持Ktrain=224,探究不同Ktest對精度的影響,可見當Ktest=288時精度最高。前文作者證明了在默認的預處理或增強下,測試集中的目標大小爲訓練集的80%,因此將Ktest擴大到原來的1.25倍後(224×1.25=280),訓練集和測試集的目標大小將大致相同,這將減少CNN對尺寸不變性的學習(作者前文提到過,CNN對於尺寸的變化是不敏感的,換言之,CNN難以學習到尺寸不變性),從而實現性能的提升。

 

改進方法

正如前文所述,對輸入圖像分辨率的更改的確起到作用,但由於其扭曲了數據的分佈,網絡可能無法通過數據的“本來面貌”去學習,對此,作者提出以下補償策略:

  • Parametric adaptation:測試時,在網絡的pooling層後,作者提出加入一個equalization操作,通過標量變換(scalar transformation)將數據分佈調整爲原分辨率大小的數據分佈。但作者認爲該做法效果有限,因爲網絡過於簡單,難以區分經過pooling後的不同的數據分佈。
  • Fine-tuning:通過對測試數據分佈的分析,作者發現,應該對分佈的稀疏性進行調整,這需要在pooling前引入批歸一化操作並進行微調。通過下圖可以看出,微調後,數據在經過average pooling後的分佈情況與訓練數據的分佈更爲接近。然而,作者也提到,這些做法只是對於數據分佈的一個修正,不一定能帶來精度的提升。

 

實驗結果

右圖展示的是對最後一層的批歸一化層微調後的結果,可見fine-tune對性能有一定的正向影響。同樣,fine-tune令達到最佳性能所需要的測試集分辨率更高了,當訓練集分辨率爲224時,使用fine-tune使達到最佳精度的測試集分辨率從288增加到384。

至於該實驗在ImageNet上達到的各種SOTA性能的闡釋,詳見論文,這裏就不贅述了。

 

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