漲點神器FixRes:兩次超越ImageNet數據集上的SOTA
點藍色字關注“機器學習算法工程師”
設為星標,干貨直達!
FixRes是Facebook在19年提出的一個應用于圖像分類的簡單優(yōu)化策略,論文名是Fixing the train-test resolution discrepancy,在這篇論文中作者發(fā)現了在ImageNet數據集上的分類模型中常采用的數據增強會導致訓練和測試時的物體分辨率(resolution)不一致,繼而提出FixRes策略來改善這個問題:常規(guī)訓練后再采用更大的分辨率對模型的classifier或最后的幾層layers進行finetune。利用FixRes這個簡單的策略對ImageNet數據集上的SOTA進行優(yōu)化,FixRes都達到了更高的accuracy:
FixResNeXt-101 32x48d(224訓練,320測試):top-1 acc達到86.4%,超過ResNeXt-101 32x48d所達到的85.4%; FixEfficientNet-L2(475訓練,600測試):top-1 acc達到88.5%,超過Noisy Student Training (L2)所達到的88.4%;

首先,問題的所在是在ImageNet圖像分類中會采用random size的數據增強,這是因為CNN雖然具有translation invariance,但是并不具有scale invariance,那么就需要通過數據增強來讓模型學習到這種特性。以torchvision官方代碼為例,訓練ImageNet的數據預處理如下所示:
#?訓練
dataset?=?torchvision.datasets.ImageFolder(
????????traindir,
????????transforms.Compose([
????????????transforms.RandomResizedCrop(224,?scale=(0.08,?1.0),?ratio=(0.75,?1.3333333333333333)),
????????????transforms.RandomHorizontalFlip(),
????????????transforms.ToTensor(),
????????????normalize,
????????]))
#?測試
dataset_test?=?torchvision.datasets.ImageFolder(
????????valdir,
????????transforms.Compose([
????????transforms.Resize(256),
????????transforms.CenterCrop(224),
????????transforms.ToTensor(),
????????normalize,
????????]))
可以看到訓練和測試的數據預處理流程并不一樣,在訓練時,主要的數據增強是通過transforms.RandomResizedCrop來完成:從輸入圖像隨機選擇一塊矩形區(qū)域(Region of Classification, RoC),然后resize到固定大?。?24),scale參數控制RoC的變化范圍,這樣訓練過程模型學習到不同scale的物體。在測試過程中,是直接將圖像resize到一個固定大小(256,Resize最短邊為256),然后從中間區(qū)域center crop一個固定大小的圖像塊(224)。模型在訓練和測試時圖像的輸入大小均為224,但是由于訓練和測試時的處理流程不同,實際上物體的分辨率并不匹配,如下圖所示,可以明顯看到雖然訓練和測試時的輸入大小均為224,但是訓練圖像中物體(這里是牛)的分辨率明顯比測試圖像中高。雖然訓練過程中的隨機scale可以讓模型學習到scale invariance能力,但是如果測試時的分辨率可以接近訓練過程中的平均分辨率,那么理論效果是最好的。下面我們從理論上計算一下訓練和物體的分辨率的差異。

首先假定原始圖像(大小為)中物體的分辨率是大?。ㄏ袼攸c),如果對圖像進行縮放,那么物體的大小將變?yōu)?span style="cursor: pointer;line-height: 1.6 !important;">。這里先來分析訓練過程,對于transforms.RandomResizedCrop函數,其主要有兩個參數來控制RoC的生成,第一個是縮放參數,這里滿足(默認參數為),另外一個參數是長寬比系數,其滿足(默認參數為)。這里忽略長寬比系數,那么RoC的大小。然后將RoC直接resize到 大?。ǚ峭壤齬esize),這里的縮放因子為。如果輸入圖像是正方形大小(W=H),那么訓練過程中的縮放比例為。所以訓練輸入的物體大小為:
測試過程中圖像處理方式和訓練過程不同,首先是將輸入圖像resize到(這里是同比例resize,這樣最短邊保證為這個大?。缓髲闹虚g區(qū)域crop出大小區(qū)域作為測試圖像輸入模型。這樣測試過程中縮放比例為。那么測試時輸入的物體大小就變?yōu)椋?/p>
那么訓練和測試時物體分辨率比值為:
這里是固定值,而的平方滿足均勻分布(0.08,1.0),這里我們計算期望值:
所以從理論上講,訓練時的輸入物體的分辨率要高于測試時,那么要達到兩者較好的比配,就需要增加測試時輸入分辨率,如果直接增加(按理論計算需要增加1/0.8=1.25)但是依然保持,雖然輸入的分辨率提高了,但是crop的區(qū)域少了,可能物體的邊緣部分丟失了,所以理想的方法是同比例增加和。論文中用ResNet50做了實驗(訓練224不變,但是改變測試時size),結果如下表所示:

可以看到時ResNet50取得了78.4%的acc,比原始的224效果要好。注意這里的size都是32的倍數(分類CNN的stride都是32),具體可以看附錄B。另外這里也看到,持續(xù)增大size,其實acc反而有所下降,說明分辨率并不是越大越好,而要和訓練size匹配好。
當輸入size發(fā)生變化后,我們還要考慮對模型輸出的影響。由于模型的卷積部分對輸入變化是適應的,就是說改變輸入大小,并不會改變卷積部分的感受野,但是卷積得到的特征圖大小是不同的,特征圖會經過global average pooling后送入classifier。特征圖的改變會直接影響pooling得到的特征分布,這將會給后面的分類器帶來影響,這是論文的第二點重要的部分。下圖給出了不同test size下的ResNet50的pooling后特征的累積分布函數(Cumulative Distribution Function),可以看到當test size較小時,特征更容易稀疏化,時為0的比重占29.8%,而時為0的比重占0.5%,這不難理解,前者的特征圖大小只有2x2,而后者的特征圖大小為7x7,經過pooling后前者更可能出現0。這說明不同的size輸入會直接改變特征分布。

解決辦法就是對特征進行校正,論文里面給出了兩種解決方案。第一個方法是采用建模的方法進行Parametric adaptation,但是效果并不佳。這里重點是第二種方案,那就是通過fine-tunng的方法來校正特征分布,但是這里的finetune只限于最后的分類器以及pooling之前的BN層就足夠了,在finetune時輸入的size由切換到。至于數據增強,論文中共嘗試了三種方法:
test DA:和test階段一樣的數據增強,resizing the image and then take the center crop; test DA2:相比test DA增加了更多的增強, resizing the image, random horizontal shift of the center crop, horizontal flip and color jittering; train DA:和train階段一樣的數據增強
從論文的結果來看,三種方法的結果是接近的,默認采用test DA是最簡單的,test DA2的結果要稍微好一點點。最終在ResNet50的結果如下所示,可以看到在224訓練,采用384進行finetune,Top-1 acc從77%提升至79%。

另外論文中還對不同的train size以及test size做了詳細地實驗,如下圖所示(右圖是finetune后的結果),不如當采用128訓練時,然后采用224進行finetune,Top-1 Acc可達77.1%,這超過了原始的ResNet50的224訓練結果,但采用128訓練成本更低。

靠著FixRes這個簡單的技巧,Facebook分別兩次超越ImageNet數據集上的SOTA:FixResNeXt-101 32x48d(224訓練,320測試),top-1 acc達到86.4%;FixEfficientNet-L2(475訓練,600測試),top-1 acc達到88.5%。
最后簡單總結一個FixRes:
FixRes is a very simple fine-tuning that re-trains the classifier or a few top layers at the target (higher) resolution.
開源代碼地址:https://github.com/facebookresearch/FixRes.
參考
Fixing the train-test resolution discrepancy Fixing the train-test resolution discrepancy: FixEfficientNet

推薦閱讀
CondInst:性能和速度均超越Mask RCNN的實例分割模型
mmdetection最小復刻版(十一):概率Anchor分配機制PAA深入分析
MMDetection新版本V2.7發(fā)布,支持DETR,還有YOLOV4在路上!
無需tricks,知識蒸餾提升ResNet50在ImageNet上準確度至80%+
不妨試試MoCo,來替換ImageNet上pretrain模型!
mmdetection最小復刻版(七):anchor-base和anchor-free差異分析
mmdetection最小復刻版(四):獨家yolo轉化內幕
機器學習算法工程師
? ??? ? ? ? ? ? ? ? ? ? ? ??????? ??一個用心的公眾號
?

