在训练神经网络解决图像分类问题时,数据增强是获得卓越效果的一个关键手段。针对目前主流的数据增强手段,当训练与测试时使用的图像分辨率差异较大时,分类器模型会出现性能差异。针对这一问题,Facebook 人工智能研究院(FAIR)在论文“Fixing the Train-test Resolution Discrepancy”中提出了一种新的策略来优化分类器,这一策略可以减小训练与测试时的分辨率不同引起的性能差异。目前,此方法已在 Github 开源,链接附在本文文末。
FAIR 首席科学家 Yann LeCun 表示,通过在 Instagram 图片标签上预训练并在 ImageNet 上微调(finetune),论文提出的全新 ResNext101 模型再次刷新了 ImageNet 数据集图像分类竞赛的准确度,在图像分类、目标检测等计算机视觉技术领域立下了新标杆。诸如目标检测、图像分割等等计算机视觉基础任务都可以将其骨干网络替换为这一新模型,借助其强大的特征提取能力,有望取得更好的效果。换言之,整个计算机视觉业界都有机会因之受益。本文是 AI 前线第 90 篇论文导读,我们将对该数据增强方法及其技术实现进行具体介绍。
1 背景介绍
CNN 被广泛的用于诸多计算机视觉任务,如图像分类、目标检测、图像恢复、风格转换以及图像压缩等。为了尽可能的提升 CNN 模型的性能,训练数据与测试数据的分布需要尽可能的接近。在图像识别任务中,普遍会使用一种随机裁剪的数据增强方法。被裁剪出来的区域也被称为类别区域(Region of Classification,RoC),这部分内容会被变形成神经网络输入所要求的固定大小(即固定分辨率,如 ResNet 的输入为 224224,AlexNet 的输入为 227*227)然后加载到网络中。在测试阶段,RoC 会被设置为包含图像中央部分内容的一个矩形区域。当测试和训练阶段的 RoC 不同时,网络看到的数据之间的分布会存在一个较大的差异,这会影响到网络模型的性能表现。如图 1 所示,使用标准数据增强方法时,在测试和训练阶段用来表示白马的像素数量是不同的。调整测试和训练时输入网络的图像区域大小,可以保证用来表示白马的像素数量一致。
图 1:训练与测试时输入网络的目标大小差异。前两列表示使用标准数据增强方法导致的训练与测试时目标大小的差异,后两列是使用本文作者新提出的数据增强手段在测试和训练阶段对图像进行调整后输入模型的目标大小对比。
随着近些年深度学习的发展,训练和测试时的数据预处理方法被广泛应用于提升 CNN 模型的性能。但目前为止这两类数据预处理方法通常都是独立优化的。在这篇论文中,作者首先展示了独立优化存在的问题——导致显著的分布偏移。随后作者证明了上述问题可以通过在尺度和分辨率层面上同时对训练及测试数据进行优化来改善。本文提出的策略只需要微调(fine-tune)两个网络层即可弥补对图片裁剪时区域大小改变而引起的统计学偏差。同时,该策略并不会影响已有的预处理方法的使用。通过本文提出的方法,CNN 模型仅需在小尺寸(分辨率)的图像上训练即可在大尺寸的测试图像上获得比使用大尺寸训练的模型更好的性能。这使得 CNN 在训练阶段的模型大小可以有效地被压缩,同时也意味着可以使用更大的批大小在 GPU 设备上进行训练。
论文中,作者通过使用 128128 大小的图像进行训练,ResNet-50 可以在 ImageNet 上获得 77.1%的 top-1 精度。使用 224224 的图像进行训练时,可以得到 79.8%的精度。此外,如果使用额外的训练数据,在图像大小为 224224 时,ResNet-50 可以达到 82.5%的精度。相反,当使用弱监督方法训练 ResNext-101 32x48d 模型时,使用 224224 大小的图像进行训练,使用 320*320 大小的图像进行测试时,模型取得了 86.4%的 top-1 精度以及 98.0%的 top-5 精度,这是在 ImageNet 数据库上目前最好的模型。
2 相关工作
图像分类一直是计算机视觉中的一个关键问题,它被广泛的用于模型的基准测试。在图像分类任务上预训练的模型(通常是 ImageNet)会被迁移到其他任务中使用。此外,在图像分类任务上的改进也会相应的用于提升其他任务的效果。在这篇文章中,作者使用的先进的图像分类模型包括 ResNeXt-101 32x48d、PNASNet-5-Large、ResNet-50 以及 EfficientNet-B7。其中主要研究工作是针对 ResNet-50 进行研究的,因为这个模型在性能和成本之间有良好的权衡。
数据增强通常用在训练阶段,以提高模型的泛化能力、减少过拟合。具有代表性的数据增强手段有:随机裁剪、水平翻转以及色彩抖动。在这篇论文中,作者使用 Pytorch 提供的数据增强方法对通用的数据增强手段进行了测试。在测试阶段,使用数据增强手段处理同样可以提高模型的性能,尽管这意味的前向网络需要更多的计算消耗。此外,如特征金字塔这种多尺度策略会直接在网络整合不同分辨率的信息,可以同时用于训练和测试阶段,这种方法在类型级别的检测上体现出了显著的优越性。
特征池化一些近期的工作提出使用 p-池化而不是平均池化使得网络在测试阶段可以处理比训练时候分辨率更高的图像。类似的池化技巧在图像检索领域已经使用了一段时间,这些池化技巧使用更高分辨率的图像获得更好的模型性能。
3 问题分析
在数据预处理时,对 RoC 区域的两个处理方法会影响到 CNN 模型的性能:
一是缩放操作会改变图像中目标的表观形状,由于 CNN 不能对尺度变化做出可预测的响应,这一点会严重影响 CNN 的性能。
其次,不同的裁剪尺寸会影响到网络激活值的统计数据,尤其是经过全局池化后的数据。
作者使用了两部分章节来简要说明这两点对模型的影响,在下文中,“输入图像”指原始的训练或测试图像,RoC 指输入图像中的矩形区域,“裁剪块”指 RoC 中的像素点。作者使用双线性插值法将裁剪块的分辨率调节到固定大小,然后输入 CNN 网络中。
3.1 目标的表观尺寸与实际尺寸间的关系
考虑下面这种图像建模过程:照相机将 3D 世界投影到 2D 图像上,所以目标的表观尺寸与其距照相机的距离是成反比的。假设一个 3D 目标(物体)是一个尺寸为 RR(高乘宽)的立方体(与其深度无关),它与相机间的距离为 Z,同时假设有 R*R 这个面与相机成像平面平行,如下图所示。
通过投影,该目标被投影成一个 rr 尺寸的矩形,其表观尺寸 r 可以由 r =fR/Z 计算得到。上面这个公式可以改写为 r = f · r_1,其中国 r_1 = R/Z,其中 r_1 的概率分布 p(r_1)是与相机无关的。相机的焦距 f 是一个变量,大多数相机的可视角度是[40,60]。因此对于一个 HW 的图像,其焦距可以由下面这个公式计算:f=k·sqrt(H*W),其中 sqrt 表示平方根运算。
通过这样的定义,物体的表观尺寸可以由其像素表示。
如果一个物体在图像上占据 rr 大小的像素区域,s 是输入图像与裁剪区域的缩放比,当图像被输入网络时,目标的实际输入大小会变成 srsr,s 的值由预处理程序决定。以 Pytroch 中的 RandomResizeCrop 为例,对于一个输入为 H*W 的图像,预处理程序会对其进行随机裁剪和缩放,输出一个如下图所示的裁剪区域。
RoC 的范围由尺度参数σ和方向比例α共同决定,其中
输入图像是一个正方形(即 H=W),缩放系数可以由下面这个公式计算得到:
其中 H_RoC 和 W_RoC 可以是在得到最终的裁剪图像前的输入图像中矩形区域的长宽,H_RoC=!
W_RoC=!
通过上面的计算,目标的表观大小可表示为:
其中(kK_train)是常量,与 r 不同,r_train 不依赖于输入图像的尺寸 H*W。在测试阶段,使用中心裁剪的方式进行预处理,则有如下公式:
比较训练图片和测试图片表观尺寸的计算公式,可以发现,对于包含了目标尺寸为 r_1 的一张图像,经过两种不同的预处理手段后,两种表观尺寸的关系为:
通常,对于标准的 CNN 网络,例如 AlexNet,K^iamge_test 与 K_train 的比值为 1.15,放缩因子 sigma 的采样范围为[0.28,1]。因此,对于图片中具有相同大小的物体,在输入网络时其表观大小在测试阶段可能是训练阶段大小的三分之一。假设预处理阶段的参数都使用了标准值,这个尺寸关系的期望则为:
3.2 尺度与激活统计
预处理程序除了会影响目标的表观大小外,还会影响到 CNN 的激活值的统计值。尤其是网络框架允许不同大小的裁剪区域输入时。论文的作者统计了 ResNet-50 在均值池化层后的激活值,结果如下图所示:
图 2:不同尺寸图像输入对 ResNet-50 池化层输出的分布影响曲线。
由于经过了 ReLU 函数,所有激活值都是非负的。在标准裁剪尺寸的设置条件下(K_test = K_train = 224),激活图是 2048 通道的 77 相应图。当 K_test=64 时,激活图大小仅为 22,此时的网络的响应变得更为稀疏(0 所占的比例从 0.5 增加到了 29.8%),并且其分布更加分散。当 K_test=448 时,激活图大小为 14*14,输出的稀疏性明显减小,且分布更密集。
3.3 更大的测试裁剪尺寸可以得到更高的精度
尽管增加裁剪区域的大小会影响到激活值的统计值,但这一操作通常对于精度的提高是有利的,因为它可以有效地减少训练和测试时目标的尺寸不匹配问题。作者使用 ResNet-50 在 ImageNet 数据库上验证了 K_test 的改变对于模型精度的影响:
当 K_test=228 时模型的精度为 78.4%,这比训练时使用的 K_train=224 的效果要好。下图中有更全面的实验结可以说明在测试阶段使用比训练阶段更高的分辨率可以获得更好的模型精度。
4 算法介绍
基于第三部分的分析,作者针对标准数据预处理方法提出了两个改进。首先,测试与训练阶段目标尺寸的差异可以通过增加测试阶段的裁剪尺寸来减少(根据 3.3 部分的实验观察结果)。其次,作者微调了网络在全局均值池化层前的结构,从而对测试阶段裁剪区域尺寸增加引起的激活值分布的变化进行补偿。
4.1 通过调节裁剪尺寸校准目标尺寸
3.1 部分介绍了测试与训练阶段目标尺寸的变化关系。如果在测试阶段,通过调整 alpha 增加了 K^image_test 的尺寸,目标的表观尺寸也会以相同的 alpha 值增加。但是在 K_test 固定的时候增加 K^image_test 意味着网络仅能看到目标比较小的一部分。这种情况并不理想:因为拍摄者在拍摄目标时往往都有比较合理的构图,因此这种裁剪方式会导致目标的细节部分丢失。因此,除了增加 K^image_test 外,作者也增加了裁剪尺寸 K_test 从而保持(如下图所示)是一个常数。
然而,这就意味着(如下图所示),因此网络输出的统计值就会改变。
4.2 在空间池化前调整统计量
通过 4.1 中的步骤,在测试和训练阶段的目标尺寸得到了校准,但是这会导致网络的激活值的统计学特征发生变化,因此作者同时介绍了一个调整统计量的方法。
参数适应 作者使用含参的弗雷切特分布在完成上述目标尺寸校准后对均值池化层的输出进行了调整。然后,作者通过标量转换定义从新分布到旧分布的均衡映射,并将其应用为池层之后的激活函数)。这种补偿方法在精度方面提供了可衡量但有限的改进,可能是因为模型过于简单,并且该方法不能区分通过池运算符的不同组件的分布。
微调适应 在测试时提高裁剪分辨率实际上是一种域转移策略,补偿这种转变的一种常见方法是微调模型。在实验中,当输入分辨率从 K_train 切换到 K_test 之后,作者在同一组训练集上进行了微调。 微调阶段,作者仅对网络最后几层的参数进行了调整。
下图为 ResNet-50 均值池化层输出的累积分布函数(Cumulative Distribution Function,CDF),它显示了优化前后池运算符的激活值的统计信息。微调后,激活统计信息与训练时的统计信息非常相似,这表明统计信息适应是成功的。
图 4:优化前后均值池化层输出的激活值统计信息
实验
基准数据集 作者在 ImageNet-2012 数据集上对提出的数据增强手段进行了验证。作者分别展示了 Top-1 精确度和 Top-5 精确度,前者对模型的改进更为敏感,而后者则是一个更鲁棒的评价指标。为了对结果的显著性进行评估,作者使用留一法计算了 Top-1 精度的标准偏差。对于所有设置,精确度的标准差为 0.03%。因此,作者在实验结果中为精确度百分比保留了 1 位有效数字。
网络结构 作者使用了目前最好的标准 CNN 框架,尤其是 ResNet-50 网络。同时作者也在 PNASNet-5-Large 进行了验证,PNASNet-5-Large 的参数量为 86.1M,Top-1 精确度达到了 82.9%。此外,作者还使用了 ResNeXt-101 32x48d 进行验证,它的准确率为 85.4%,模型参数达到了 829M。
训练方案 作者在训练过程中使用 SGD 对模型进行优化,同时使用了学习率衰减策略。所有的实验都是在 8 块 TeslaV100GPU 和 80 个 CPU 核心上运行的。更多训练细节可参考原文 Training protocol 部分。
微调数据增强 作者对三种数据增强手段进行了微调实验:第一个是缩放后进行中心裁剪(testDA),第二个是缩放后对中心裁剪区域进行随机水平偏移、水平翻转与色彩抖动(testDA2),最后一个是上文中提到的训练-测试数据增强(trainDA)。实验过程中 ResNet-50 和 PNASNet-5-Large 使用了 testDA,而 ResNeXt-101 32x48d 则使用了 testDA2。
基线结果 基线实验使用上面提出的数据增强方法提高了图像的分辨率。重复的增强手段已经将基于 PyTorch 实现的 ResNet-50 的 Top-1 精确度从 76.2%提升到了 77.0%。上文中的图 3 展示了随着分辨率的增加,网络精确度会逐渐增加。例如,使用 224 分辨率训练的 ResNet-50 的精确度从 77.0 上升到了 78.4。
实验结果
作者给出了在 PNASNet-5-Large 以及 ResNet-101 32x48d 的实验结果,如表 1 所示,表一中数据均为 single-crop 的测试结果。对于 PNASNet-5-Large,作者发现除了对分类器和 Batch-norm 层进行微调外,对网络的最后三个单元进行微调同样有益处。在测试分辨率从 331 升到 480 的过程中,分类精确度提升了一个百分点。将该策略应用到 10-crops 的测试方法进行测试时,分类精确度达到了 83.9%。对于 ResNeXt-101 32x48d 网络,当分辨率增加到 320,模型的精确度提升了一个百分点,达到了 86.4%。
表 2 展示了文中提到的方法与目前最好的方法的对比试验结果。“Our ResNet-50” 比 ResNet50-D 和 MultiGrain 稍差一些,但这是因为不同的 ResNet-50 的结构并不完全一样。另一方面,“Our ResNet-50 CutMix” 拥有经典的 ResNet-50 架构,优于其他 ResNet-50,包括稍加修改的版本。经过作者微调的 PNASNet-5 优于 MultiGrain 版本的 PNASNet-5。目前,本文实验中的 ResNeXt-101 32x48d 超过了文献中所有其他模型的性能。
同时,作者还使用了迁移学习方法验证了模型在其他数据库上的效果,详见表 3。从表 3 可以卡出,在所有情况下,本文的数据增强方法都提能够基线模型的性能。此外,我们注意到图像分辨率越高,本文提出的数据增强方法的提升效果就越明显。随着数据集中图像质量的逐年提高,这点在如今显得更为重要。
论文原文链接:
https://arxiv.org/pdf/1906.06423v2.pdf
Github 链接:
https://github.com/facebookresearch/FixRes
评论