EfficientNetV2学习笔记
EfficientNetV2论文解读
论文名称:EfficientNetV2: Smaller Models and Faster Training
论文代码:https://github.com/google/automl/tree/master/efficientnetv2
会议:ICML
时间:2021年4月
引用格式:Tan M, Le Q. Efficientnetv2: Smaller models and faster training[C]//International Conference on Machine Learning. PMLR, 2021: 10096-10106.
一、论文翻译
摘要:本文介绍了 EfficientNetV2,这是一个新的卷积网络家族,与以前的模型相比,它具有更快的训练速度和更好的参数效率。 为了开发这些模型,我们结合使用训练感知神经架构搜索和缩放,共同优化训练速度和参数效率。 这些模型是从富含新操作(如 Fused-MBConv)的搜索空间中搜索的。 我们的实验表明,EfficientNetV2 模型的训练速度比最先进的模型快得多,同时体积缩小了 6.8 倍。
通过在训练过程中逐渐增加图像大小可以进一步加快我们的训练速度,但它通常会导致准确性下降。 为了弥补这种精度下降,我们提出了一种改进的渐进式学习方法,它可以自适应地调整正则化(例如数据增强)以及图像大小。
通过渐进式学习,我们的 EfficientNetV2 在 ImageNet 和 CIFAR/Cars/Flowers 数据集上显着优于以前的模型。 通过在相同的 ImageNet21k 上进行预训练,我们的 EfficientNetV2 在 ImageNet ILSVRC2012 上实现了 87.3% 的 top-1 准确度,比最近的 ViT 提高了 2.0%,同时使用相同的计算资源训练速度提高了 5x-11x。 代码位于 https://github.com/google/automl/tree/master/efficientnetv2。
1、简介
随着模型大小和训练数据量越来越大,训练效率对深度学习很重要。 例如,GPT-3 (Brown et al., 2020) 具有更大的模型和更多的训练数据,展示了在少数学习中的卓越能力,但它需要数周的数千个 GPU 训练,因此很难重新训练或改进。
训练效率最近引起了人们的极大兴趣。例如,NFNets (Brock et al., 2021) 旨在通过消除昂贵的BN来提高训练效率; 最近的几项工作(Srinivas 等人,2021 年)专注于通过在卷积网络(ConvNets)中添加注意力层来提高训练速度; Vision Transformers (Dosovitskiy et al., 2021) 通过使用 Transformer 模块提高了大规模数据集的训练效率。 然而,这些方法通常会在参数数量上带来昂贵的开销,如图 1(b) 所示。
在本文中,我们结合使用训练感知神经架构搜索 (NAS) 和缩放来提高训练速度和参数效率。 鉴于 EfficientNets 的参数效率(Tan & Le,2019a),我们首先系统地研究 EfficientNets 中的训练瓶颈。 我们在 EfficientNets 中的研究表明:(1)非常大的图像尺寸的训练速度很慢; (2) 深度卷积在早期层很慢。 (3) 每个阶段均等地扩大规模是次优的。 基于这些观察,我们设计了一个搜索空间,其中包含 Fused-MBConv 等附加操作,并应用训练感知 NAS 和缩放来共同优化模型精度、训练速度和参数大小。 我们发现的网络名为 EfficientNetV2,其训练速度比以前的模型快 4 倍(图 3),同时参数大小小 6.8 倍。
通过在训练期间逐渐增加图像大小,可以进一步加快我们的训练速度。 许多先前的工作,例如渐进式调整大小(Howard,2018)、FixRes(Touvron 等人,2019 年)和 Mix&Match(Hoffer 等人,2019 年),都在训练中使用了更小的图像尺寸; 但是,它们通常对所有图像尺寸保持相同的正则化,导致准确性下降。 我们认为对不同的图像尺寸保持相同的正则化并不理想:对于相同的网络,小图像尺寸导致网络容量小,因此需要弱正则化; 反之亦然,大图像尺寸需要更强的正则化来对抗过度拟合(参见第 4.1 节)。 基于这种见解,我们提出了一种渐进式学习的改进方法:在早期训练阶段,我们训练图像尺寸小、正则化弱(例如 dropout 和数据增强)的网络,然后逐渐增加图像尺寸并添加更强的正则化 . 基于渐进式调整大小(Howard,2018),但通过动态调整正则化,我们的方法可以加快训练速度而不会导致准确性下降。
通过改进的渐进式学习,我们的 EfficientNetV2 在 ImageNet、CIFAR-10、CIFAR100、Cars 和 Flowers 数据集上取得了很好的结果。 在 ImageNet 上,我们实现了 85.7% 的 top-1 准确率,同时训练速度提高了 3 到 9 倍,并且比以前的模型小了 6.8 倍(图 1)。 我们的 EfficientNetV2 和渐进式学习还可以更轻松地在更大的数据集上训练模型。 例如,ImageNet21k (Russakovsky et al., 2015) 大约是 ImageNet ILSVRC2012 的 10 倍,但我们的 EfficientNetV2 可以使用 32 个 TPUv3 核心的中等计算资源在两天内完成训练。 通过在公共 ImageNet21k 上进行预训练,我们的 EfficientNetV2 在 ImageNet ILSVRC2012 上实现了 87.3% 的 top-1 准确率,比最近的 ViT-L/16 的准确率高出 2.0%,同时训练速度提高了 5-11 倍(图 1)。
我们的贡献有三方面:
- 我们引入了 EfficientNetV2,这是一个新的更小更快的模型系列。 通过我们的训练感知 NAS 和扩展发现,EfficientNetV2 在训练速度和参数效率方面都优于以前的模型。
- 我们提出了一种改进的渐进式学习方法,它可以根据图像大小自适应地调整正则化。 我们表明它可以加快训练速度,同时提高准确性。
- 我们在 ImageNet、CIFAR、Cars 和 Flowers 数据集上展示了比现有技术快 11 倍的训练速度和高达 6.8 倍的参数效率。
2、相关工作
训练和参数效率:许多工作,例如 DenseNet (Huang et al., 2017) 和 EfficientNet (Tan & Le, 2019a),专注于参数效率,旨在以更少的参数实现更好的精度。 最近的一些工作旨在提高训练或推理速度,而不是参数效率。 例如,RegNet (Radosavovic et al., 2020)、ResNeSt (Zhang et al., 2020)、TResNet (Ridnik et al., 2020) 和 EfficientNet-X (Li et al., 2021) 专注于提高 GPU或TPU 推理速度; NFNets (Brock et al., 2021) 和 BoTNets (Srinivas et al., 2021) 专注于提高训练速度。然而,它们的训练或推理速度往往伴随着更多参数的成本。 本文旨在比现有技术更加显着的提高训练速度和参数效率。
渐进式训练:以前的工作已经提出了不同类型的渐进式训练,动态改变训练设置或网络,用于 GAN(Karras 等人,2018)、迁移学习(Karras 等人,2018)、对抗性学习(Yu 等人, 2019) 和语言模型 (Press et al., 2021)。 渐进式调整大小(Howard,2018)主要与我们的方法有关,该方法旨在提高训练速度。 然而,它通常伴随着精度下降的代价。 另一个密切相关的工作是 Mix&Match (Hoffer et al., 2019),它为每个批次随机采样不同的图像大小。 渐进式调整大小和 Mix&Match 对所有图像大小使用相同的正则化,导致准确性下降。 在本文中,我们的主要区别是自适应调整正则化,以便我们可以提高训练速度和准确性。 我们的方法也部分受到课程学习的启发(Bengio et al., 2009),它将训练示例从易到难安排。我们的方法还通过添加更多正则化逐渐增加学习难度,但我们不会选择性地选择训练示例。
神经架构搜索 (NAS):通过自动化网络设计过程,NAS 已被用于优化图像分类 (Zoph et al., 2018)、对象检测 (Chen et al., 2019; Tan et al., 2020)、分割 (Liu et al., 2019)、超参数 (Dong et al., 2020) 和其他应用 (Elsken et al., 2019)。之前的 NAS 工作主要集中在提高 FLOPs 效率(Tan & Le, 2019b;a)或推理效率(Tan et al., 2019; Cai et al., 2019; Wu et al., 2019; Li et al., 2021)。与之前的工作不同,本文使用 NAS 来优化训练和参数效率。
3、网络架构设计
在本节中,我们研究了 EfficientNet 的训练瓶颈(Tan & Le,2019a),并介绍了我们的训练感知 NAS 和缩放,以及 EfficientNetV2 模型。
3.1 EfficientNet 回顾
EfficientNet (Tan & Le, 2019a) 是一系列针对 FLOP 和参数效率进行了优化的模型。 它利用 NAS 搜索基线 EfficientNet-B0,该基线 EfficientNet-B0 在准确性和 FLOP 上具有更好的权衡。 然后使用复合缩放策略对基线模型进行缩放以获得一系列模型 B1-B7。 虽然最近的工作声称在训练或推理速度方面取得了很大的进步,但它们在参数和 FLOPs 效率方面往往比 EfficientNet 差(表 1)。 在本文中,我们的目标是在保持参数效率的同时提高训练速度。
3.2 了解训练效率
我们研究了 EfficientNet (Tan & Le, 2019a) 的训练瓶颈,此后也称为 EfficientNetV1,以及一些提高训练速度的简单技术。
使用非常大的图像尺寸进行训练很慢:正如之前的作品(Radosavovic 等人,2020 年)所指出的,EfficientNet 的大图像尺寸会导致大量内存使用。由于 GPU/TPU 上的总内存是固定的,我们必须以较小的批大小来训练这些模型,这大大减慢了训练速度。 一个简单的改进是应用 FixRes (Touvron et al., 2019),通过使用比推理更小的图像尺寸进行训练。 如表 2 所示,较小的图像尺寸会导致较少的计算量并支持较大的批尺寸,从而将训练速度提高多达 2.2 倍。 值得注意的是,正如 (Touvron et al., 2020; Brock et al., 2021) 中所指出的,使用较小的图像尺寸进行训练也可以提高准确性。 但与 (Touvron et al., 2019) 不同的是,我们不会在训练后微调任何层。
在第 4 节中,我们将通过在训练期间逐步调整图像大小和正则化来探索更高级的训练方法。
深度卷积(DW)在早期层很慢,但在后期有效:EfficientNet 的另一个训练瓶颈来自广泛的深度卷积(Sifre,2014)。 深度卷积比常规卷积具有更少的参数和 FLOP,但它们通常不能充分利用现代加速器。 最近,Fused-MBConv 在 (Gupta & Tan, 2019) 中提出,后来在 (Gupta & Akin, 2020; Xiong et al., 2020; Li et al., 2021) 中使用,以更好地利用移动或服务器加速器。它将 MBConv (Sandler et al., 2018; Tan & Le, 2019a) 中的 depthwise conv3x3 和 expansion conv1x1 替换为单个常规 conv3x3,如图 2 所示。为了系统地比较这两个构建块,我们在EfficientNet-B4 中逐渐使用Fused-MBConv替换了原始的 MBConv(表 3)。 在早期阶段 1-3 中应用时,Fused-MBConv 可以在参数和 FLOP 上的开销很小的情况下提高训练速度,但是如果我们用 Fused-MBConv(阶段 1-7)替换所有块,那么它会显着增加参数和 FLOP,同时也会降低训练速度。 找到这两个构建块 MBConv 和 Fused-MBConv 的正确组合并非易事,这促使我们利用神经架构搜索来自动搜索最佳组合。
同等地扩大每个阶段是次优的:EfficientNet 使用简单的复合缩放规则平等地扩大所有阶段。 例如,当深度系数为 2 时,网络中的所有阶段都会使层数翻倍。 然而,这些阶段对训练速度和参数效率的贡献并不相同。 在本文中,我们将使用非均匀缩放策略逐渐向后期添加更多层。 此外,EfficientNets 积极扩大图像大小,导致大量内存消耗和缓慢训练。 为了解决这个问题,我们稍微修改了缩放规则并将最大图像尺寸限制为一个较小的值。
3.3 训练感知 NAS 和缩放
为此,我们学习了多种设计选择来提高训练速度。 为了寻找这些选择的最佳组合,我们现在提出了一种训练感知 NAS。
NAS 搜索:我们的训练感知 NAS 框架主要基于以前的 NAS 工作(Tan 等人,2019;Tan & Le,2019a),但旨在共同优化现代加速器的准确性、参数效率和训练效率。 具体来说,我们使用 EfficientNet 作为我们的主干。我们的搜索空间是类似于 (Tan et al., 2019) 的基于阶段的分解空间,它由卷积操作类型 {MBConv, Fused-MBConv}、层数、内核大小 {3x3, 5x5} 的设计选择组成 , 膨胀比 {1, 4, 6}。 另一方面,我们通过 :
- 删除不必要的搜索选项(例如池化跳过操作)来减小搜索空间大小,因为它们从未在原始 EfficientNets 中使用;
- 从骨干网重用相同的通道大小,因为它们已经在 (Tan & Le, 2019a) 中搜索过。
由于搜索空间较小,我们可以应用强化学习 (Tan et al., 2019) 或简单地在规模与 EfficientNetB4 相当的更大网络上进行随机搜索。 具体来说,我们对多达 1000 个模型进行采样,并对每个模型进行大约 10 个 epoch 的训练,同时减小图像大小进行训练。 我们的搜索奖励结合了模型精度 A、归一化训练步长 S 和参数大小 P,使用简单的加权乘积 A · S w · P v ,其中 w = -0.07 和 v = -0.05 是根据经验确定的平衡权衡类似于 (Tan et al., 2019)。
EfficientNetV2 架构:表 4 显示了我们搜索的模型 EfficientNetV2-S 的架构。 与 EfficientNet 主干相比,我们搜索的 EfficientNetV2 有几个主要区别:
- EfficientNetV2 广泛使用 MBConv(Sandler 等人,2018;Tan & Le,2019a)和新添加的 fused-MBConv(Gupta & Tan,2019)在早期层。
- EfficientNetV2 更喜欢 MBConv 的较小扩展比,因为较小的扩展比往往具有较少的内存访问开销。
- EfficientNetV2 更喜欢更小的 3x3 内核大小,但它增加了更多的层来补偿由于更小的内核大小而导致的感受野减少。
- EfficientNetV2 完全移除了原始 EfficientNet 中的最后一个 stride-1 阶段,这可能是由于其较大的参数大小和内存访问开销。
EfficientNetV2 缩放:我们使用与 (Tan & Le, 2019a) 类似的复合缩放来扩展 EfficientNetV2-S 以获得 EfficientNetV2-M/L,并进行了一些额外的优化:
- 我们将最大推理图像大小限制为 480,因为非常 大图像通常会导致昂贵的内存和训练速度开销;
- 作为一种启发式方法,我们还逐渐向后期阶段添加更多层(例如,表 4 中的阶段 5 和 6),以便在不增加太多运行时开销的情况下增加网络容量。
训练速度比较:图 3 比较了我们新的 EfficientNetV2 的训练步骤时间,其中所有模型都使用固定的图像大小进行训练,没有渐进式学习。 对于 EfficientNet (Tan & Le, 2019a),我们展示了两条曲线:一条使用原始推理尺寸进行训练,另一条使用大约 30% 的小图像尺寸进行训练,与 EfficientNetV2 和 NFNet (Touvron et al., 2019; 布洛克等人,2021)。所有模型都用 350 个 epoch 训练,除了 NFNets 用 360 个 epoch 训练,所以所有模型都有相似数量的训练步骤。有趣的是,我们观察到,当训练得当时,EfficientNets 仍然实现了相当强的性能权衡。 更重要的是,通过我们的训练感知 NAS 和扩展,我们提出的 EfficientNetV2 模型的训练速度比其他最近的模型快得多。这些结果也与我们的推断结果一致,如表 7 和图 5 所示。
4、渐进式学习
4.1 动机
如第 3 节所述,图像大小在训练效率中起着重要作用。 除了 FixRes (Touvron et al., 2019),许多其他工作在训练期间动态改变图像大小 (Howard, 2018; Hoffer et al., 2019),但它们通常会导致准确性下降。
我们假设准确率下降来自不平衡的正则化:当使用不同的图像大小进行训练时,我们还应该相应地调整正则化强度(而不是像以前的工作那样使用固定的正则化)。 事实上,大型模型通常需要更强的正则化来对抗过拟合:例如,EfficientNet-B7 使用比 B0 更大的 dropout 和更强的数据增强。 在本文中,我们认为即使对于相同的网络,较小的图像尺寸会导致较小的网络容量,因此需要较弱的正则化; 反之亦然,更大的图像尺寸会导致更大容量的更多计算,因此更容易受到过度拟合的影响。
为了验证我们的假设,我们训练了一个模型,从我们的搜索空间中采样,具有不同的图像大小和数据增强(表 5)。 当图像尺寸较小时,增强减小时精度最好; 但是对于更大的图像,它在增强增加的情况下表现更好。 这种洞察力促使我们在训练期间自适应地调整正则化和图像大小,从而改进了渐进式学习方法。
4.2 具有自适应正则化的渐进式学习
图 4 说明了我们改进的渐进式学习的训练过程:在早期训练阶段,我们用较小的图像和弱正则化训练网络,这样网络可以轻松快速地学习简单的表示。 然后,我们逐渐增加图像大小,但通过添加更强的正则化也使学习变得更加困难。 我们的方法基于 (Howard, 2018) 逐渐改变图像大小,但在这里我们也自适应地调整正则化。
形式上,假设整个训练总共有 N 个步骤,目标图像大小为,具有正则化幅度 $Φ_e = {φ^k_e} S_i Φ_i = {φ^k_i } S_eΦ_eS_0 Φ_0$,然后使用线性插值来确定每个阶段的值。 算法 1 总结了该过程。在每个阶段开始时,网络将继承前一阶段的所有权重。 与权重(例如位置嵌入)可能取决于输入长度的转换器不同,ConvNet 权重与图像大小无关,因此可以轻松继承。
我们改进的渐进式学习通常与现有的正则化兼容。 为简单起见,本文主要研究以下三种正则化:
- Dropout(Srivastava et al., 2014):一种网络级正则化,通过随机丢弃通道来减少协同适应。 我们将调整失活率。
- RandAugment(Cubuk et al., 2020):每幅图像数据增强,幅度可调。
- Mixup(Zhang et al., 2018):一种跨图像数据增强。 给定两个带有标签和 $(x_j , y_j ) \lambda\tilde{x}_i = \lambda x_j + (1 - \lambda)x_i 和 \tilde{y}_i = \lambda y_j + (1 - \lambda)y_i\lambda$。
5、主要结果
本节介绍我们的实验设置、ImageNet 上的主要结果以及 CIFAR-10、CIFAR-100、汽车和花卉上的迁移学习结果。
5.1 ImageNet ILSVRC2012
设置:ImageNet ILSVRC2012 (Russakovsky et al., 2015) 包含约 128 万张训练图像和 50,000 张验证图像,包含 1000 个类别。 在架构搜索或超参数调整期间,我们从训练集中保留 25,000 张图像(约 2%)作为准确度评估的最小值。 我们还使用 minival 来执行提前停止。 我们的 ImageNet 训练设置很大程度上遵循 EfficientNets (Tan & Le, 2019a):RMSProp 优化器,衰减为 0.9,动量为 0.9; 批量标准动量 0.99; 重量衰减 1e-5。 每个模型训练 350 个 epoch,总批大小为 4096。学习率首先从 0 升温到 0.256,然后每 2.4 个 epoch 衰减 0.97。 我们使用衰减率为 0.9999 的指数移动平均线、RandAugment (Cubuk et al., 2020)、Mixup (Zhang et al., 2018)、Dropout (Srivastava et al., 2014) 和随机深度 (Huang et al., 2016) ) 生存概率为 0.8。
对于渐进式学习,我们将训练过程分为四个阶段,每个阶段大约 87 个 epoch:早期阶段使用较小的图像尺寸且正则化较弱,而后期阶段使用较大的图像尺寸且正则化较强,如算法 1 所述。 表 图 6 显示了图像大小和正则化的最小值(第一阶段)和最大值(最后阶段)。 为简单起见,所有模型都使用相同的最小值和正则化,但它们采用不同的最大值,因为较大的模型通常需要更多的正则化来对抗过度拟合。 遵循 (Touvron et al., 2020),我们用于训练的最大图像大小比推理小 20% 左右,但我们在训练后不微调任何层
结果:如表 7 所示,我们的 EfficientNetV2 模型速度明显更快,并且比之前在 ImageNet 上的 ConvNets 和 Transformers 实现了更好的精度和参数效率。 特别是,我们的 EfficientNetV2M 达到了与 EfficientNet-B7 相当的精度,同时使用相同的计算资源训练速度提高了 11 倍。 我们的 EfficientNetV2 模型在准确性和推理速度方面也显着优于所有最近的 RegNet 和 ResNeSt。 图 1 进一步可视化了训练速度和参数效率的比较。 值得注意的是,这种加速是渐进式训练和更好的网络的结合,我们将在消融研究中研究它们各自的个体影响。
最近,Vision Transformers 在 ImageNet 准确度和训练速度方面取得了令人印象深刻的结果。 然而,在这里我们表明,具有改进训练方法的正确设计的 ConvNets 在准确性和训练效率方面仍然可以大大优于Vision Transformers。特别是,我们的 EfficientNetV2-L 达到了 85.7% 的 top-1 准确率,超过了 ViT-L/16(21k),这是一个在更大的 ImageNet21k 数据集上预训练的更大的Transformer模型。在这里,ViT 在 ImageNet ILSVRC2012 上没有得到很好的调整; DeiT 使用与 ViT 相同的架构,但通过添加更多正则化来获得更好的结果。尽管我们的 EfficientNetV2 模型针对训练进行了优化,但它们在推理方面也表现良好,因为训练速度通常与推理速度相关。 图 5 可视化了基于表 7 的模型大小、FLOP 和推理延迟。由于延迟通常取决于硬件和软件,因此我们使用相同的 PyTorch Image Models 代码库(Wightman,2021)并使用batch-size为 16。一般而言,我们的模型的参数/FLOPs 效率略高于 EfficientNets,但我们的推理延迟比 EfficientNets 快 3 倍。 与最近专门针对 GPU 优化的 ResNeSt 相比,我们的 EfficientNetV2-M 的准确度提高了 0.6%,推理速度提高了 2.8 倍。
5.2 ImageNet21k
设置:ImageNet21k (Russakovsky et al., 2015) 包含大约 1300 万张训练图像和 21841 个类别。 原始 ImageNet21k 没有训练/评估拆分,因此我们保留随机挑选的 100,000 张图像作为验证集,并将剩余的用作训练集。 我们在很大程度上重用了与 ImageNet ILSVRC2012 相同的训练设置,并进行了一些更改:(1)我们将训练 epoch 更改为 60 或 30 以减少训练时间,并使用余弦学习率衰减,无需额外调整即可适应不同的步骤; (2) 由于每个图像都有多个标签,我们在计算 softmax 损失之前将标签归一化为总和为 1。 在 ImageNet21k 上进行预训练后,每个模型在 ILSVRC2012 上使用余弦学习率衰减对 15 个 epoch 进行微调。
结果:表 7 显示了性能比较,其中标记为 21k 的模型在 ImageNet21k 上进行了预训练,并在 ImageNet ILSVRC2012 上进行了微调。 与最近的 ViT-L/16(21k) 相比,我们的 EfficientNetV2L(21k) 将 top-1 准确率提高了 1.5%(85.3% vs.
86.8%),使用的参数减少了 2.5 倍,FLOP 减少了 3.6 倍,同时在训练和推理中运行速度提高了 6 到 7 倍。
我们想强调一些有趣的观察结果:
- 在高精度情况下,放大数据量比简单地放大模型尺寸更有效:当 top-1 精度超过 85% 时,由于严重的过度拟合,很难通过简单地增加模型尺寸来进一步提高它。 但是,额外的 ImageNet21K 预训练可以显着提高准确性。 在之前的工作中也观察到了大型数据集的有效性(Mahajan 等人,2018;Xie 等人,2020;Dosovitskiy 等人,2021)。
- ImageNet21k 上的预训练可能非常有效。尽管 ImageNet21k 的数据量增加了 10 倍,但我们的训练方法使我们能够使用 32 个 TPU 核心在两天内完成 EfficientNetV2 的预训练(而不是 ViT 的几周(Dosovitskiy 等人,2021))。 这比在 ImageNet 上训练更大的模型更有效。 我们建议未来对大规模模型的研究使用公共 ImageNet21k 作为默认数据集。
5.3 Transfer Learning Datasets
设置:我们在四个迁移学习数据集上评估我们的模型:CIFAR-10、CIFAR-100、鲜花和汽车。 表 9 包括这些数据集的统计数据。
对于这个实验,我们使用在 ImageNet ILSVRC2012 上训练的检查点。 为了公平比较,这里没有使用 ImageNet21k 图像。 我们的微调设置与 ImageNet 训练基本相同,只是做了一些类似于 (Dosovitskiy et al., 2021; Touvron et al., 2021) 的修改:我们使用较小的批量大小 512,较小的初始学习率 0.001 和余弦衰减。 对于所有数据集,我们为每个模型训练固定的 10,000 步。 由于每个模型都通过很少的步骤进行微调,因此我们禁用了权重衰减并使用简单的剪切数据增强。
结果:表 8 比较了迁移学习的性能。 一般来说,我们的模型在所有这些数据集上都优于之前的 ConvNets 和 Vision Transformers,有时甚至有很大的优势:例如,在 CIFAR-100 上,EfficientNetV2-L 的准确度比之前的 GPipe/EfficientNets 高 0.6%,准确度高 1.5% 比以前的 ViT/DeiT 模型。 这些结果表明我们的模型的泛化能力也远远超出了 ImageNet。
6、消融实验
6.1 与 EfficientNet 的比较
在本节中,我们将在相同的训练和推理设置下将我们的 EfficientNetV2(简称 V2)与 EfficientNets(Tan & Le,2019a)(简称 V1)进行比较。
相同训练的性能:表 10 显示了使用相同渐进式学习设置的性能比较。 当我们将相同的渐进式学习应用于 EfficientNet 时,其训练速度(从 139 小时减少到 54 小时)和准确率(从 84.7% 提高到 85.0%)优于原始论文(Tan & Le,2019a)。 然而,如表 10 所示,我们的 EfficientNetV2 模型仍然大大优于 EfficientNets:与 EfficientNet-B7 相比,EfficientNetV2M 减少了 17% 的参数和 37% 的 FLOP,同时在训练中运行速度提高了 4.1 倍,推理速度提高了 3.1 倍。 由于我们在这里使用相同的训练设置,我们将收益归因于 EfficientNetV2 架构。
缩小:前面的部分主要关注大型模型。 在这里,我们通过使用 EfficientNet 复合缩放来缩小 EfficientNetV2-S 来比较较小的模型。 为了便于比较,所有模型都是在没有渐进式学习的情况下进行训练的。 与小型 EfficientNets (V1) 相比,我们新的 EfficientNetV2 (V2) 模型通常更快,同时保持相当的参数效率。
6.2 不同网络的渐进式学习
我们消除了不同网络的渐进式学习的性能。 表 12 显示了我们使用相同的 ResNet 和 EfficientNet 模型的渐进式训练和基线训练之间的性能比较。在这里,基线 ResNets 比原始论文 (He et al., 2016) 具有更高的准确度,因为它们是使用我们改进的训练设置(参见第 5 节)使用更多的时期和更好的优化器进行训练的。 我们还将 ResNets 的图像大小从 224 增加到 380,以进一步提高网络容量和准确性。
如表 12 所示,我们的渐进式学习通常减少了训练时间,同时提高了所有不同网络的准确性。 毫不奇怪,当默认图像尺寸非常小时,比如 ResNet50(224) 尺寸为 224x224 时,训练加速是有限的(1.4x 加速); 然而,当默认图像尺寸更大且模型更复杂时,我们的方法在准确度和训练效率上实现了更大的提升:对于 ResNet152(380),我们的方法将训练速度提高了 2.1 倍,准确度略高; 对于 EfficientNet-B4,我们的方法将训练速度提高了 2.2 倍。
6.3 自适应正则化的重要性
我们的训练方法的一个关键见解是自适应正则化,它根据图像大小动态调整正则化。 本文选择了一种简单的渐进式方法,因为它简单,但它也是一种通用方法,可以与其他方法结合使用。
表 13 研究了我们在两种训练设置上的自适应正则化:一种是从小到大逐渐增加图像大小(Howard,2018),另一种是为每批随机采样不同的图像大小(Hoffer 等人,2019) . 因为 TPU 需要为每个新尺寸重新编译图形,所以这里我们每 8 个 epoch 随机采样一个图像尺寸,而不是每批。 与对所有图像大小使用相同正则化的渐进式或随机调整大小的普通方法相比,我们的自适应正则化将准确度提高了 0.7%。 图 6 进一步比较了渐进式方法的训练曲线。
我们的自适应正则化在早期训练时期对小图像使用小得多的正则化,从而使模型能够更快地收敛并获得更好的最终精度。
7、总结
本文介绍了 EfficientNetV2,这是一个用于图像识别的更小更快的新神经网络系列。 通过训练感知 NAS 和模型缩放进行优化,我们的 EfficientNetV2 显着优于以前的模型,同时在参数方面更快、更高效。 为了进一步加快训练,我们提出了一种改进的渐进式学习方法,在训练期间共同增加图像大小和正则化。 大量实验表明我们的 EfficientNetV2 在 ImageNet 和 CIFAR/Flowers/Cars 上取得了很好的效果。 与 EfficientNet 和最近的作品相比,我们的 EfficientNetV2 训练速度提高了 11 倍,同时体积缩小了 6.8 倍。
二、论文解读
在EfficientNetV1中作者关注的是准确率,参数数量以及FLOPs(理论计算量小不代表推理速度快),在EfficientNetV2中作者进一步关注模型的训练速度。
1、V1存在的问题
作者系统性的研究了EfficientNet的训练过程,并总结出了三个问题:(具体可以参照论文翻译中的3.2小节)
- 训练图像的尺寸很大时,训练速度非常慢。
- 在网络浅层中使用Depthwise convolutions速度会很慢。
- 同等的放大每个stage是次优的。
2、V2版本做出的贡献
在之前的一些研究中,大家主要关注的是准确率以及参数数量(注意,参数数量少并不代表推理速度更快)。但在近些年的研究中,大家开始关注网络的训练速度以及推理速度。但他们提升训练速度通常是以增加参数数量作为代价的。而这篇文章是同时关注训练速度以及参数数量的。
- 提出了一种新的网络(EfficientNetV2),该网络在训练速度以及参数数量上都优于先前的一些网络。
- 提出了改进的渐进学习方法,该方法会根据训练图像的尺寸动态调节正则方法(具体参照论文翻译第4节)
- 通过实验与先前的一些网络相比,训练速度提升11倍,参数数量减少为
3、网络框架
V2版本相比于V1主要作出了以下改进:
- 将网络前几层的MBConv改成了Fused-MBConv
- 使用较小的
expansion ratio
(MBConv
中第一个expand conv1x1
或者Fused-MBConv
中第一个expand conv3x3
)比如4
,在EfficientNetV1中基本都是6
. 这样的好处是能够减少内存访问开销。 - 更偏向使用更小(
3x3
)的kernel_size,在EfficientNetV1中使用了很多5x5
的kernel_size。通过下表可以看到使用的kernel_size全是3x3
的,由于3x3
的感受野是要比5x5
小的,所以需要堆叠更多的层结构以增加感受野。 - 移除了EfficientNetV1中最后一个步距为1的stage(就是EfficientNetV1中的stage8,参照EfficientNetV1网络详解),可能是因为它的参数数量过多并且内存访问开销过大(由于网络是通过NAS搜索出来的,所有这里也是作者的猜测)。
网络介绍:
Conv3x3
就是普通的3x3
卷积 + 激活函数(SiLU)+ BN- Fused-MBConv模块如上图,模块名称后跟的1,4表示expansion ratio,k3x3表示kenel_size为3x3,注意当expansion ratio等于1时是没有expand conv的,还有源码中是没有使用到SE结构的(原论文图中有SE)。注意当stride=1且输入输出Channels相等时才有shortcut连接。还需要注意的是,当有shortcut连接时才有Dropout层,而且这里的Dropout层是Stochastic Depth,即会随机丢掉整个block的主分支(只剩捷径分支,相当于直接跳过了这个block)也可以理解为减少了网络的深度。具体可参考Deep Networks with Stochastic Depth这篇文章。
- MBConv模块和EfficientNetV1中是一样的,其中模块名称后跟的4,6表示expansion ratio,SE0.25表示使用了SE模块,0.25表示SE模块中第一个全连接层的节点个数是输入该MBConv模块特征矩阵channels的 ,详情可查看我之前的文章。注意当stride=1且输入输出Channels相等时才有shortcut连接。同样这里的Dropout层是Stochastic Depth。
Stride就是步距,注意每个Stage中会重复堆叠Operator模块多次,只有第一个Opertator模块的步距是按照表格中Stride来设置的,其他的默认都是1。 #Channels表示该Stage输出的特征矩阵的Channels,#Layers表示该Stage重复堆叠Operator的次数。
4、详细参数
首先在官方的源码中有个baseline config注意这个不是V2-S的配置,在efficientnetv2 -> effnetv2_configs.py文件中 。
#################### EfficientNet V2 configs ####################
v2_base_block = [ # The baseline config for v2 models.
'r1_k3_s1_e1_i32_o16_c1',
'r2_k3_s2_e4_i16_o32_c1',
'r2_k3_s2_e4_i32_o48_c1',
'r3_k3_s2_e4_i48_o96_se0.25',
'r5_k3_s1_e6_i96_o112_se0.25',
'r8_k3_s2_e6_i112_o192_se0.25',
]
EfficientNetV2-S的配置是在baseline的基础上采用了width倍率因子1.4, depth倍率因子1.8得到的(这两个倍率因子是EfficientNetV1-B4中采用的)。EfficientNetV2-M的配置是在baseline的基础上采用了width倍率因子1.6, depth倍率因子2.2得到的(这两个倍率因子是EfficientNetV1-B5中采用的)。EfficientNetV2-L的配置是在baseline的基础上采用了width倍率因子2.0, depth倍率因子3.1得到的(这两个倍率因子是EfficientNetV1-B7中采用的)。
v2_s_block = [ # about base * (width1.4, depth1.8)
'r2_k3_s1_e1_i24_o24_c1',
'r4_k3_s2_e4_i24_o48_c1',
'r4_k3_s2_e4_i48_o64_c1',
'r6_k3_s2_e4_i64_o128_se0.25',
'r9_k3_s1_e6_i128_o160_se0.25',
'r15_k3_s2_e6_i160_o256_se0.25',
]
v2_m_block = [ # about base * (width1.6, depth2.2)
'r3_k3_s1_e1_i24_o24_c1',
'r5_k3_s2_e4_i24_o48_c1',
'r5_k3_s2_e4_i48_o80_c1',
'r7_k3_s2_e4_i80_o160_se0.25',
'r14_k3_s1_e6_i160_o176_se0.25',
'r18_k3_s2_e6_i176_o304_se0.25',
'r5_k3_s1_e6_i304_o512_se0.25',
]
v2_l_block = [ # about base * (width2.0, depth3.1)
'r4_k3_s1_e1_i32_o32_c1',
'r7_k3_s2_e4_i32_o64_c1',
'r7_k3_s2_e4_i64_o96_c1',
'r10_k3_s2_e4_i96_o192_se0.25',
'r19_k3_s1_e6_i192_o224_se0.25',
'r25_k3_s2_e6_i224_o384_se0.25',
'r7_k3_s1_e6_i384_o640_se0.25',
]
上面给出的配置是针对带有Fused-MBConv
或者MBConv
模块的Stage,例如在EfficientNetV2-S中就是Stage1到Stage6. 每一行配置对应一个Stage中的信息。其中:
- r代表当前Stage中Operator重复堆叠的次数
- k代表kernel_size
- s代表步距stride
- e代表expansion ratio
- i代表input channels
- o代表output channels
- c代表conv_type,1代表Fused-MBConv,0代表MBConv(默认为MBConv)
- se代表使用SE模块,以及se_ratio
比如r2_k3_s1_e1_i24_o24_c1代表,Operator重复堆叠2次,kernel_size等于3,stride等于1,expansion等于1,input_channels等于24,output_channels等于24,conv_type为Fused-MBConv。
下面是源码中给出的配置信息,我们这里只简单看下efficientnetv2-s,efficientnetv2-m和efficientnetv2-l三个参数,其中的v2_s_block,v2_m_block以及v2_l_block就是上面刚刚讲到过的网络配置参数,剩下就关注下train_size, eval_size, dropout, randaug, mixup, aug即可。比如efficientnetv2-s的train_size=300(注意实际训练中train_size是会变化的,后面讲Progressive Learning中会细讲),eval_size=684,dropout=0.2,randaug=10,mixup=0,aug='randaug'.
efficientnetv2_params = {
# (block, width, depth, train_size, eval_size, dropout, randaug, mixup, aug)
'efficientnetv2-s': # 83.9% @ 22M
(v2_s_block, 1.0, 1.0, 300, 384, 0.2, 10, 0, 'randaug'),
'efficientnetv2-m': # 85.2% @ 54M
(v2_m_block, 1.0, 1.0, 384, 480, 0.3, 15, 0.2, 'randaug'),
'efficientnetv2-l': # 85.7% @ 120M
(v2_l_block, 1.0, 1.0, 384, 480, 0.4, 20, 0.5, 'randaug'),
'efficientnetv2-xl':
(v2_xl_block, 1.0, 1.0, 384, 512, 0.4, 20, 0.5, 'randaug'),
# For fair comparison to EfficientNetV1, using the same scaling and autoaug.
'efficientnetv2-b0': # 78.7% @ 7M params
(v2_base_block, 1.0, 1.0, 192, 224, 0.2, 0, 0, 'effnetv1_autoaug'),
'efficientnetv2-b1': # 79.8% @ 8M params
(v2_base_block, 1.0, 1.1, 192, 240, 0.2, 0, 0, 'effnetv1_autoaug'),
'efficientnetv2-b2': # 80.5% @ 10M params
(v2_base_block, 1.1, 1.2, 208, 260, 0.3, 0, 0, 'effnetv1_autoaug'),
'efficientnetv2-b3': # 82.1% @ 14M params
(v2_base_block, 1.2, 1.4, 240, 300, 0.3, 0, 0, 'effnetv1_autoaug'),
}
5、渐进式学习策略
前面提到过,训练图像的尺寸对训练模型的效率有很大的影响。所以在之前的一些工作中很多人尝试使用动态的图像尺寸(比如一开始用很小的图像尺寸,后面再增大)来加速网络的训练,但通常会导致Accuracy降低。为什么会出现这种情况呢?作者提出了一个猜想:Accuracy的降低是不平衡的正则化unbalanced regularization导致的。在训练不同尺寸的图像时,应该使用动态的正则方法(之前都是使用固定的正则方法)。
为了验证这个猜想,作者接着做了一些实验。在前面提到的搜索空间中采样并训练模型,训练过程中尝试使用不同的图像尺寸以及不同强度的数据增强data augmentations。当训练的图片尺寸较小时,使用较弱的数据增强augmentation能够达到更好的结果;当训练的图像尺寸较大时,使用更强的数据增强能够达到更好的接果。如下表所示,当Size=128,RandAug magnitude=5时效果最好;当Size=300,RandAug magnitude=15时效果最好。
基于以上实验,作者就提出了渐进式训练策略Progressive Learning。如下图所示,在训练早期使用较小的训练尺寸以及较弱的正则方法weak regularization,这样网络能够快速的学习到一些简单的表达能力。接着逐渐提升图像尺寸,同时增强正则方法adding stronger regularization。这里所说的regularization包括dropout rate,RandAugment magnitude以及mixup ratio。(具体参照论文翻译第4节)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律