EfficientNet v2网络学习记录--更小更快

论文地址:2021 CVPR --Google

EfficientNetV2: Smaller Models and Faster Training

亮点:

使用训练感知神经结构搜索缩放的组合,以共同优化训练速度和参数效率;

在EfficientNet的基础上,引入了Fused-MBConv到搜索空间中;

引入渐进式学习策略、自适应正则强度调整机制使得训练更快;

进一步关注模型的推理速度与训练速度。

1. 引言

论文提出一种训练速度更快、参数量更少的卷积神经网络EfficientNetV2。采用了训练感知NAS与缩放技术对训练速度与参数量进行联合优化,NAS的搜索空间采用了新的op(比如Fused-MBConv)进行扩充。实验表明:相比其他SOTA(state of the art,目前技术水平)方案,论文所提EfficientNetV2收敛速度更快,模型更小(6.8x)。

在训练过程中,通过逐步提升图像大小得到加速,但通常会造成精确度下降。为补偿该性能损失,提出了一种改进版的渐进学习方式,它自适应的根据图像大小调整正则化因子,比如dropout、数据增广、mixup。受益于渐进学习方式,所提EfficientNetV2在CIFAR/Cars/Flowers数据集上显著优于其他模型;通过在ImageNet21K数据集上预训练,所提模型在ImageNet上达到了87.3%的top1精度,以2.0%精度优于ViT,且训练速度更快(5x-11x)。

如下图所示,很明显能够看出EfficientNetV2网络不仅Accuracy达到了当前的SOTA水平,而且训练速度更快参数数量更少,比当前火热的Vision Transformer还要强。EfficientNetV2-XL (21k)在ImageNet ILSVRC2012的Top-1上达到87.3%。红色实线可以看出训练时间短并且准确率较高。

2.  EfficientNetV1存在的问题

作者系统性的研究了EfficientNetV1的训练过程,并总结出了三个问题:

1. Training with very large image sizes is slow(训练图像的尺寸很大时,训练速度很慢)

EfficientNet的大图像尺寸会显著的导致内存占用。由于GPU/TPU的总内存是固定的,不得不采用更小的batch size训练这些模型,这无疑会降低训练速度。在之前使用EfficientNet时发现当使用到B3(img_size=300)- B7(img_size=600)时基本训练不动,而且非常吃显存。

一种简单的改进方式是采用更小的图像尺寸进行训练,但是推理时采用较大的图像尺寸。采用更小的图像块会导致更小的计算量、更大的batch size,可以加速训练;与此同时,更小的图像块训练还会导致精度提高。

如下表所示,在Tesla V100上当训练的图像尺寸为380x380时,batch_size=24还能跑起来,当训练的图像尺寸为512x512时,batch_size=24时就报OOM(out of memory,显存不够)了。

2. Depthwise convolutios are slow in early layers but effective in later stages(在网络浅层中使用Depthwise convolutions速度会很慢但在网络深层是有效的)

与常规卷积相比,深度卷积的参数和FLOPS更少,但它们往往不能充分利用现代加速器。虽然理论上计算量很小,但实际使用起来并没有想象中那么快。

Fused MBConv能够更好地利用移动或服务器加速器。它使用一个常规的conv3x3取代了MBConv中的深度conv3x3和扩展conv1x1。(又回去了。。)

为系统地比较这两个构建块,逐渐用FusedMBConv替换EfficientNet-B4中的原始MBConv。当在网络浅层stage中应用时,FusedMBConv可以在参数和FLOPs上以较小的开销提高训练速度,但如果我们用FusedMBConv(阶段1-7)替换所有块,则它会显著增加参数和FLOPs,同时也会减慢训练速度。找到这两个构建块MBConv和Fused MBConv的正确组合并非易事,这促使利用神经架构搜索来自动搜索最佳组合。如表所示, 将stage2,3,4都替换成Fused-MBConv结构后,在Tesla V100上从每秒训练155张图片提升到216张。但如果将所有stage都替换成Fused-MBConv结构会明显增加参数数量以及FLOPs,训练速度也会降低。

3. Equally scaling up every stage is sub-optimal(同等的放大每个stage是次优的)

 在EfficientNetV1中,每个stage的深度和宽度都是同等放大的。但每个stage对网络的训练速度以及参数数量的贡献并不相同,所以直接使用同等缩放的策略并不合理。在论文中,使用一种非均匀缩放策略来逐渐向网络后期添加更多层。此外,EfficientNets激进地扩大图像大小,导致大量内存消耗和缓慢的训练。为了解决这个问题,论文作者稍微修改了缩放规则,并将最大图像大小限制为较小的值。

3. Training-Aware NAS and Scaling(训练感知NAS和缩放)

3.1. Training-Aware NAS(训练感知NAS)

训练感知NAS框架主要基于以前的NAS工作,但旨在联合优化精度、参数效率和现代加速器的训练效率。具体来说,使用EfficientNet作为主干。搜索空间是一个类似于EfficientNet v1的基于阶段的因式分解空间(stage-based factorized space),包括卷积运算类型{MBConv,Fused MBConv},层数,核大小{3x3,5x5},扩展比{1,4,6}的设计选择,优化目标包括accuracy,parameter efficiency和training efficiency。

通过以下几点减少搜索空间:

  • 删除不必要的搜索选项,如pooling skip操作,来减少搜索空间的大小,因为它们从未在原始的有效网中使用。
  • 复用EfficientNet中的通道数信息channel sizes,即重用与在 EfficientNets 中已经搜索过的通道大小。

由于搜索空间更小,我们可以采用简单的随机搜索进行更大网络的搜索。具体来说,我们采样1000个模型,每个模型训练10个epoch。搜索奖励包含模型精度A、归一化训练时长S、参数量P,并通过加权方式A*S^{w}*P^{v }组合。其中w=-0.07和v=-0.05是经验确定来平衡权衡的超参数。

3.2 搜索得到的EfficientNetV2-S模型

结构如下表所示。

相比V1结构,V2在前1~3个stage采用Fused MBConv(网络浅层);

另外可以看出前面stage的MBConv的expansion ratio较小,而V1的各个stage的expansion ratio几乎都是6;MBConv中第一个expand conv1x1或者Fused-MBConv中第一个expand conv3x3比如4,在EfficientNetV1中基本都是6. 这样的好处是能够减少内存访问开销;

V1部分stage采用了5x5卷积核,而V2只采用了3x3卷积核,但包含更多layers来弥补感受野;可以看到使用的kernel_size全是3x3的,由于3x3的感受野是要比5x5小的,所以需要堆叠更多的层结构以增加感受野。

V2中也没有V1中的最后的 stride-1的stage。这些区别让EfficientNetV2参数量更少,显存消耗也更少。

Stride是步距,注意每个Stage中会重复堆叠Operator模块多次,只有第一个Opertator模块的步距是按照表格中Stride来设置的,其他的默认都是1。 Channels表示该Stage输出的特征矩阵的Channels,Layers表示该Stage重复堆叠Operator的次数。

可以看到EfficientNetV2-S分为Stage0到Stage7(EfficientNetV1中是Stage1到Stage9)。Operator表示在当前Stage中使用的模块:

Conv3x3就是普通的3x3卷积 + 激活函数(SiLU)+ BN

Fused-MBConv模块名称后跟的1,4表示expansion ratio,k3x3表示kenel_size为3x3,注意当expansion ratio等于1时是没有expand conv的,还有这里是没有使用到SE结构的。注意当stride=1且输入输出Channels相等时才有shortcut连接。还需要注意的是,当有shortcut连接时才有Dropout层,而且这里的Dropout层是Stochastic Depth,即会随机丢掉整个block的主分支(只剩捷径分支,相当于直接跳过了这个block)也可以理解为减少了网络的深度。

Fused-MBConv

MBConv模块和EfficientNetV1中是一样的,其中模块名称后跟的4,6表示expansion ratio,SE0.25表示使用了SE模块,0.25表示SE模块中第一个全连接层的节点个数是输入该MBConv模块特征矩阵channels的1\4。同样这里的Dropout层是Stochastic Depth

MBConv

SE模块 

 由一个全局平均池化,两个全连接层组成。第一个全连接层的节点个数是输入该MBConv特征矩阵channels的1\4 且使用Swish激活函数。第二个全连接层的节点个数等于Depthwise Conv层输出的特征矩阵channels,且使用Sigmoid激活函数。
semodule

Stochastic Depth

在这里插入图片描述3.3 Scaling(缩放)

我们在EfficientNetV2-S的基础上采用类似EfficientNet的复合缩放,并添加几个额外的优化,得到EfficientNetV2-M/L。额外的优化描述如下:

  • 限制最大推理图像尺寸为480;
  • 在网络的后期添加更多的层提升模型容量且不引入过多耗时。

如下图所示,EfficientNetV2模型在ImageNet上top-1 acc和train step time,这里的训练采用固定的图像大小,不过比推理时图像大小降低30%,而图中的EffNet(reprod)也是采用这样的训练策略,可以看到比baseline训练速度和效果均有明显提升,而EfficientNetV2在训练速度和效果上有进一步地提升。

4. Progressive Learning(渐进式学习)

我们假设精度的下降来自于不平衡的正则化:在使用不同图像大小的训练时,我们也应该相应地调整正则化强度,而不是像以前的工作那样使用固定的正则化。事实上,大型模型通常需要更强的正则化来对抗过度拟合,简单来说就训练过程渐进地增大图像大小,但在增大图像同时也采用更强的正则化策略,训练的正则化策略包括数据增强和dropout等,这里更强的正则化指的是采用更大的dropout rate,RandAugment magnitude和mixup ratio。

例如,EfficientNet-B7采用了更大的dropout和更强的数据增强。在论文中,我们认为即使对于相同的网络,较小的图像大小也会导致网络容量较小,因此需要较弱的正则化;反之亦然,较大的图像大小会导致更多的计算容量,因此更容易过拟合。

为了验证我们的假设,我们训练了一个模型,从我们的搜索空间中采样,具有不同的图像大小和数据增强功能。当图像大小较小时,弱增强的精度最好;但对于较大的图像,更强的增强效果更好。这一见解激励我们在训练过程中自适应地调整正则化和图像大小,从而导致我们改进的渐进式学习方法。不同的图像输入采用不同的正则化策略,这不难理解,因为图像输入越大,模型容量越大,此时应该采用更强的正则化来防止过拟合,而小的输入模型容量小,应该采用较轻的正则化策略以防止欠拟合。从下表中可以看到,大的图像输入要采用更强的数据增强,而小的图像输入要采用较轻的数据增强才能训出最优模型效果。

在实现上,首先对模型设定训练过程的输入图像大小以及数据增强的范围,然后将训练过程分成4个阶段(每个阶段87个epoch),每进入一个阶段,图像大小以及数据增强均线性提升。EfficientNetV2的训练设置如下所示(这里的训练最大image size大约比推理时小30%:380 vs 480)

 实验结果:

 上表给出了所提方法与其他方案在精度、参数量、FLOPs以及耗时方面的对比。从中可以看到:

  • 相比其他方法,所提EfficientNetV2训练速度更快、精度更高、参数量更少
  • 相比EfficientNet-B7,EfficientNetV2精度相当,但训练速度快11倍。
  • 相比RegNet和ResNeSt,EfficientNetV2精度更高、推理速度更快。
  • 相比ViT,EfficientNetV2以85.7%的精度超越了ViT-L/16(21k)。
  • 在推理速度方面,相比EfficientNet,EfficientNetV2精度更高、速度更快;相比ResNeSt,EfficientNetV2-M精度高0.6%,速度快2.8倍。
  • 缩放数据尺寸要比简单的缩放模型大小更有效:当top1精度超过85%后,很难通过加单的提升模型大小提升精度;然而,ImageNet21K预训练可以显著提升模型精度。

参考:

EfficientNetV2网络详解

时隔两年,EfficientNet v2来了!更快,更小,更强! 

EfficientNetV2 

yyds!EfficientNetV2:更小,更快! 

仅为学习记录,侵删! 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖虎记录学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值