paper核心:针对EfficientNets的不足提出了Fused-MBConv结构,应用训练感知NAS和缩放联合优化模型精度、训练速度和参数大小,还提出渐进性学习方法加快了训练时间。
ps:这篇笔记的图片来源与参考资料
1.EfficientNetV2介绍
- EfficientNetV1的不足:
使用非常大的图像尺寸进行训练是缓慢的。并且容易导致Out Of Memery
- depthwise convolutions在早期层是缓慢的。DW卷积比常规卷积具有更少的参数和失败,但它们往往不能充分利用现代加速器。Fused-MBConv与MBConv的部分结合效果比较好。(如下图所示,1-3层用Fused-MBConv而其他层用MBConv效果最好)
两者的结构图:
- 同等地扩大每个阶段是次优的。EfficientNetV2将使用非统一的缩放策略,逐步添加更多的层到后面的阶段。并稍微修改了缩放规则,将图像的最大尺寸限制为较小的值。
EfficientNetV2的贡献:
- 提出EfficientNetV2,一个更小更快的新系列。通过我们的训练感知NAS和缩放发现,EfficientNetV2在训练速度和参数效率方面都优于以前的模型。
- 提出一种改进的渐进式学习方法,它可以自适应地调整正则化与图像大小。试验表明,它加快了训练,同时提高了准确性。
- 在ImageNet、CIFAR、Cars和Flowers数据集上演示了比现有技术快11倍的训练速度和6.8倍的参数效率。
EfficientNetV2的主要工作:
- 主要关注训练速度与参数量
- 对于小尺寸的图片采用小强度的正则化;对于大尺寸的图片采用高强度的正则化,提高了准确率,从而实现自适应正则化操作
- 使用NAS搜索技术优化训练速度与参数效率
2.EfficientNetV2改进
1)NAS Search
这里采用的是trainning-aware NAS framework,搜索工作主要还是基于之前的Mnasnet以及EfficientNet. 但是这次的优化目标联合了accuracy、parameter efficiency以及trainning efficiency三个维度。这里是以EfficientNet作为backbone,设计空间包含:
- convolutional operation type :{MBConv, Fused-MBConv}
- number of layer
- kernel size :{3x3, 5x5}
- expansion ratio (MBConv中第一个expand conv1x1或者Fused-MBConv中第一个expand conv3x3): {1, 4, 6}
另外,作者通过以下方法来减小搜索空间的范围:
- 删除不必要的搜索选项,如pooling skip操作,因为它们从来没有在最初的EfficientNets中使用
- 重用EfficientNet中搜索的channel sizes
2)EfficientNetV2 Architecture
与EfficientNetV1类似,但是有几点不同:(注意是EfficientNetV2-S的结构)
- 第一个不同点在于EfficientNetV2中除了使用到MBConv模块外,还使用了Fused-MBConv模块(主要是在网络浅层中使用)。
- 第二个不同点是EfficientNetV2会使用较小的expansion ratio(MBConv中第一个expand conv1x1或者Fused-MBConv中第一个expand conv3x3)比如4,在EfficientNetV1中基本都是6. 这样的好处是能够减少内存访问开销。
- 第三个不同点是EfficientNetV2中更偏向使用更小(3x3)的kernel_size,在EfficientNetV1中使用了很多5x5的kernel_size。通过下表可以看到使用的kernel_size全是3x3的,由于3x3的感受野是要比5x5小的,所以需要堆叠更多的层结构以增加感受野。
- 最后一个不同点是移除了EfficientNetV1中最后一个步距为1的stage(就是EfficientNetV1中的stage8),可能是因为它的参数数量过多并且内存访问开销过大(由于网络是通过NAS搜索出来的,所有这里也是作者的猜测)。
通过上表可以看到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结构的(原论文图中有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的1/ 4
.注意当stride=1且输入输出Channels相等时才有shortcut连接。同样这里的Dropout层是Stochastic Depth
Stride就是步距,注意每个Stage中会重复堆叠Operator模块多次,只有第一个Opertator模块的步距是按照表格中Stride来设置的,其他的默认都是1。 #Channels表示该Stage输出的特征矩阵的Channels,#Layers表示该Stage重复堆叠Operator的次数。
3)EfficientNetV2 Scaling
使用复合缩放来扩展EfficientNetV2-S以获得EfficientNetV2-M/L并进行了一些额外的优化:
- 将最大的推理图像大小限制为480,因为非常大的图像通常会导致昂贵的内存和训练速度开销
- 逐渐添加更多的层到后面的阶段(如表4中的阶段5和阶段6),以增加网络容量但又不增加太多的运行开销
4)Progressive Learning
对于同一个网络,较小的图像尺寸也会导致较小的网络容量,因此需要较弱的正则化;反之,图像尺寸越大,计算量越大,容量越大,因此更容易出现过拟合。
当图像大小很小时,它在弱增强时具有最好的准确性;但对于更大的图像,增强效果更好。这种洞察力促使我们在训练过程中随着图像大小自适应地调整正则化,从而产生了我们改进的渐进学习方法。
渐进学习的训练过程:
在早期的训练时代,我们用较小的图像和较弱的正则化来训练网络,这样网络可以轻松快速地学习简单的表示。然后,我们逐渐增加图像的大小,但也使学习更加困难,增加更强的正则化。这里所说的regularization包括dropout rate,RandAugment magnitude以及mixup ratio(包括了数据增强)。如图所示:
下表给出了EfficientNetV2(S,M,L)三个模型的渐进学习策略参数:
对于渐进式学习,我们将训练过程分为四个阶段,每个阶段约87个epoch:早期阶段使用较小的图像尺寸,弱正则化,而后期阶段使用较大的图像尺寸,强正则化,如算法1所述。表6显示了图像大小和正则化的最小值(第一阶段)和最大值(最后阶段)。为简单起见,所有模型都使用相同的最小值大小和正则化,但它们采用不同的最大值,因为更大的模型通常需要更多的正则化来对抗过拟合。其中用于训练的最大图像大小大约比推理小20%,但我们在训练后不会对任何图层进行微调。
3.EfficientNetV2性能指标
ImageNet21k (Russakovsky et al., 2015)包含约13M训练图像,21,841个类。原始的ImageNet21k没有train/eval分割,所以作者保留随机抽取的100,000张图像作为验证集,其余的作为训练集。在很大程度上重复使用了与ImageNet ILSVRC2012相同的训练设置,但有一些变化:
- 将训练时点改为60或30以减少训练时间,并使用余弦学习率衰减,可以适应不同的步骤,而无需额外的调整;
- 由于每个图像有多个标签,作者将这些标签归一化,使之和为1,然后计算softmax loss。在ImageNet21k上进行预训练后,每个模型在ILSVRC2012上使用余弦学习速率衰减对15个时点进行微调。
表7显示了性能比较,其中标记为21k的模型在ImageNet21k上进行预训练,并在ImageNet ILSVRC2012上进行微调。与最近的ViT-L/16(21k)相比,EfficientNetV2L(21k)将top1准确率提高了1.5% (85.3% vs. 86.8%),使用的参数减少了2.5倍,FLOPs减少了3.6倍,同时在训练和推理方面提高了6 - 7倍。
EfficientNetV2的参数效率略好一些,但是用于推理的运行速度要快3倍
参考资料: