Fixing the train-test resolution discrepancy论文解读

这篇论文的思想比较独特,从数据的训练集和测试集的输入分辨率着手进行分析,得出训练数据和测试数据的输入分辨率应该是不一样的,才能在图像分类上达到较好的精度。以前的大部分研究在网络输入的分辨率上基本上是一致的,然而由于训练数据和测试数据在预处理上的不同,导致了网络对图像的表观尺寸上是有偏差的,没有在测试集上达到最好的效果。

表观尺寸和分辨率对性能的影响

在图像分类的神经网络中,通常是接受一个固定大小的输入尺寸,比如,AlexNet的输入分辨率是224 × 224 224\times224224×224。在当前的数据预处理中存在两个问题:

  1. resize的操作改变了物体在图像中的表观尺寸大小;
  2. 不同大小的剪切(crop)尺寸对于网络的激活层有着重要的影响,尤其是在global pooling之后。

在第一个问题上,作者从相机拍摄和训练验证时对图像的预处理等角度进行了分析与论证,得出的观点是因为训练集和测试集的数据增强和预处理方式不同,作为网络的输入时,测试图像中物体的表观尺寸差不多是训练图像中物体大小的80%。这一部分更多是理论分析,有兴趣的读者自行阅读文章的3.1部分。

在这里插入图片描述

如果想让测试时物体的表观尺寸和训练时的物体是一致的,最简单的方法就是将测试图像进行放大,就像上面这张图一样。但是放大图片会导致另一个问题,就是输入图片的分辨率比训练时更大了。我们都知道,在分类网络的最后一层卷积操作后面通常会跟着一层全局池化层,如果输入分辨率更大的话,全局池化就得操作在更大的分辨率特征图上。作者以在ResNet-50上计算了不同分辨率下的测试集分类精度(训练时都是用224 × 224 224\times224224×224的分辨率)。

在这里插入图片描述

从上图可以看出,当小于224的分辨率时,分类精度快速下降,当输入分辨率大于224时,分类精度随着分辨率的提升先是递增然后差不多从288开始递减。

改进方法

基于上节的讨论和分析后,作者给出了分类网络的两个改进建议:

  1. 放大测试集数据的输入分辨率,以消除测试和训练时物体表观尺寸的偏差
  2. 由于放大了输入分辨率,需要在网络的全局池化之前作出细微的调整,以补偿这种变化给后面激活带来的影响

在改进建议1中作者建议放大的倍率为1.25,这是从训练集数据增强的表观尺寸分布相对测试集的整体分析中得到的。在测试集的数据增强操作中,首先在Resize时,就要放大1.25倍,然后在crop剪裁尺寸上也要放大相应的倍数。

在改进建议2中,作者尝试了两种方法来调整网络:

  1. 在全局池化后加一个标量变换(scalar transformation),补偿增大分辨率输入对ReLU激活带来的影响;
  2. fine-tune网络,将训练集的输入分辨率变大(和测试输入分辨率一样),只fine-tune网络的最后一层,此外为了适应不同分辨率给网络带来的稀疏性的分布影响,fine-tune应该也要包括全局池化的前面一个batch normalization;fine-tune时使用测试集的数据增强方法。

实验和结果

作者在ResNet-50上进行实验,得到结果如下图所示。

扫描二维码关注公众号,回复: 12661248 查看本文章

左图是在没有fine-tune的情况下,ResNet-50重复使用数据增强方法,在分辨率为224时精度的基线为77.0%,然后增大测试集的分辨率,大概在312上达到最佳水平,精度为78.4%。右图是在左图的基础上进行fine-tune,测试集分辨率为384时达到最佳水平,精度为79.1%。

在这里插入图片描述

在2020年初,作者又将该方法应用在EfficientNet上,使用同样的增强设置,唯一不同的是加入了标签光滑(Label Smoothing),得到如下实验结果。

在这里插入图片描述

在EfficentNet上,FixEfficientNet取得了比AdvPropNoisy Student两种方法更好的成绩。另外,在EfficientNet-L2的网络上,通过使用弱监督方法在300M无标签数据上预训练后,再进一步使用FixRes的方法优化,作者将top-1精度提升至88.5%的高度(top-5为98.7%),这是截止目前为止ImageNet测试集上的最优水平。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u013066730/article/details/112369794
今日推荐