本文介绍了EfficientNetV2及其中的MBConv模块,并探讨了将MBConv模块应用于Yolo11中的可能性。通过替换Yolo11中的BottleNeck模块为MBConv模块,可以显著加快训练速度并提高模型性能。这一改进为Yolo11的目标检测任务提供了更高效、更准确的解决方案。
本文介绍了EfficientNetV2,这是一系列新的卷积神经网络,其训练速度更快,参数效率更高,优于之前的模型。为了开发这些模型,我们结合了训练感知神经架构搜索和缩放技术,以共同优化训练速度和参数效率。这些模型是在包含Fused-MBConv等新操作的丰富搜索空间中搜索得到的。我们的实验表明,EfficientNetV2模型的训练速度比最先进的模型快得多,同时参数规模缩小了多达6.8倍。
我们可以通过在训练过程中逐步增加图像大小来进一步加快训练速度,但这通常会导致准确率下降。为了弥补这种准确率下降,我们提出了一种改进的渐进学习方法,该方法可以随着图像大小的改变自适应地调整正则化(例如数据增强)。
通过渐进学习,我们的EfficientNetV2在ImageNet和CIFAR/Cars/Flowers数据集上显著优于之前的模型。通过在相同的ImageNet21k上进行预训练,我们的EfficientNetV2在ImageNet ILSVRC2012上实现了87.3%的top-1准确率,比最近的ViT模型高出2.0%的准确率,同时使用相同的计算资源训练速度提高了5倍至11倍。代码可在https://github.com/google/automl/tree/master/efficientnetv2获取。
随着模型大小和训练数据量的不断增加,训练效率对深度学习而言至关重要。例如,GPT-3(Brown等人,2020)拥有更大的模型和更多的训练数据,展示了在少样本学习方面的卓越能力,但其训练需要数千个GPU数周的时间,难以重新训练或改进。
最近,训练效率引起了广泛关注。例如,NFNets(Brock等人,2021)旨在通过移除昂贵的批量归一化来提高训练效率;一些近期工作(Srinivas等人,2021)通过将注意力层添加到卷积网络(ConvNets)中来提高训练速度;Vision Transformers(Dosovitskiy等人,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上,我们以3倍至9倍的速度进行训练,同时模型大小比之前的模型小多达6.8倍,却实现了85.7%的top-1准确率(图1)。我们的EfficientNetV2和渐进学习方法还使得在更大数据集上训练模型变得更加容易。例如,ImageNet21k(Russakovsky等人, 2015)的数据量比ImageNet ILSVRC2012大约10倍,但我们的EfficientNetV2使用32个TPUv3核心的适中计算资源可以在两天内完成训练。通过在公开的ImageNet 21k上进行预训练,我们的EfficientNetV2在ImageNet ILSVRC2012上实现了87.3%的top-1准确率,比最近的ViT-L/16模型高出2.0%的准确率,同时训练速度提高了5倍至11倍(图1)。
我们的贡献主要有三个方面:
训练和参数效率:许多工作,如DenseNet(Huang等人, 2017)和EfficientNet(Tan和Le, 2019a),专注于参数效率,旨在用更少的参数实现更高的准确率。一些更近的工作旨在提高训练或推理速度,而不是参数效率。例如,RegNet(Radosavovic等人, 2020)、ResNeSt(Zhang等人, 2020)、TResNet(Ridnik等人, 2020)和EfficientNet-X(Li等人, 2021)专注于GPU和/或TPU的推理速度;NFNets(Brock等人, 2021)和BoTNets(Srinivas等人, 2021)专注于提高训练速度。然而,它们的训练或推理速度往往是以更多的参数为代价的。本文旨在显著提高训练速度和参数效率,超越先前技术。
渐进训练:先前的工作已经提出了不同类型的渐进训练,这些训练动态地改变训练设置或网络,适用于生成对抗网络(GANs,Karras等人, 2018)、迁移学习(Karras等人, 2018)、对抗学习(Yu等人, 2019)和语言模型(Press等人, 2021)。渐进调整尺寸(Howard, 2018)与我们的方法最为相关,旨在提高训练速度。然而,它通常以准确率下降为代价。另一个密切相关的工作是Mix&Match(Hoffer等人, 2019),它为每个批次随机采样不同的图像尺寸。渐进调整尺寸和Mix&Match都对所有图像尺寸使用相同的正则化,导致准确率下降。在本文中,我们的主要不同之处在于我们还自适应地调整正则化,从而可以同时提高训练速度和准确率。我们的方法还部分受到了课程学习(Bengio等人, 2009)的启发,该方法按照从简单到困难的顺序安排训练样本。我们的方法也通过添加更多的正则化来逐渐提高学习难度,但我们不选择性地挑选训练样本。
神经架构搜索(NAS):通过自动化网络设计过程,NAS已被用于优化图像分类(Zoph等人, 2018)、目标检测(Chen等人, 2019; Tan等人, 2020)、分割(Liu等人, 2019)、超参数(Dong等人, 2020)和其他应用(Elsken等人, 2019)的网络架构。先前的NAS工作主要关注提高FLOPs效率(Tan和Le, 2019b;a)或推理效率(Tan等人, 2019; Cai等人, 2019; Wu等人, 2019; Li等人, 2021)。
与先前的工作不同,本文使用NAS来优化训练和参数效率。
在本节中,我们研究了EfficientNet(Tan & Le, 2019a)的训练瓶颈,并介绍了我们的训练感知神经架构搜索(Neural Architecture Search,简称NAS)和缩放方法,以及EfficientNetV2模型。
EfficientNet(Tan & Le, 2019a)是一系列针对浮点运算数(FLOPs)和参数效率优化的模型。它利用NAS搜索具有更好准确性和FLOPs权衡的基线模型EfficientNet-B0。然后,通过复合缩放策略将该基线模型扩展为一系列B1-B7模型。虽然最近的工作在训练或推理速度上取得了很大进展,但在参数和FLOPs效率方面,它们往往不如EfficientNet(表1)。在本文中,我们的目标是在保持参数效率的同时提高训练速度。
在这里插入图片描述
我们研究了EfficientNet(Tan & Le, 2019a,以下简称EfficientNetV1)的训练瓶颈,并提出了一些提高训练速度的简单技术。
使用非常大的图像尺寸进行训练速度较慢:如之前的工作(Radosavovic等,2020)所指出,EfficientNet的大图像尺寸导致内存使用量显著增加。由于GPU/TPU上的总内存是固定的,因此我们必须使用较小的批量大小来训练这些模型,这会极大地减慢训练速度。一个简单的改进方法是应用FixRes(Touvron等,2019),即训练时使用的图像尺寸小于推理时。如表2所示,较小的图像尺寸会减少计算量并允许使用较大的批量大小,从而将训练速度提高多达2.2倍。值得注意的是,如(Touvron等,2020;Brock等,2021)所指出的,使用较小的图像尺寸进行训练还会导致准确性略有提高。但与(Touvron等,2019)不同,我们在训练后不对任何层进行微调。
在第4节中,我们将探索一种更先进的训练方法,即在训练过程中逐步调整图像大小和正则化。
深度卷积在早期层中速度较慢但在后期阶段有效:EfficientNet的另一个训练瓶颈来自大量的深度卷积(Sifre,2014)。深度卷积的参数和FLOPs少于常规卷积,但它们通常无法充分利用现代加速器。最近,(Gupta & Tan,2019)提出了Fused-MBConv,并在(Gupta & Akin,2020;Xiong等,2020;Li等,2021)中用于更好地利用移动或服务器加速器。它用单个常规卷积替换了MBConv(Sandler等,2018;Tan & Le,2019a)中的深度卷积和扩展卷积,如图2所示。为了系统地比较这两种构建块,我们逐渐将EfficientNet-B4中的原始MBConv替换为FusedMBConv(表3)。当在第1-3阶段应用时,FusedMBConv可以在参数和FLOPs略有增加的情况下提高训练速度,但如果我们用Fused-MBConv替换所有块(第1-7阶段),则会显著增加参数和FLOPs,同时减慢训练速度。找到这两种构建块MBConv和Fused-MBConv的正确组合并非易事,这促使我们利用神经架构搜索来自动搜索最佳组合。
每个阶段均匀缩放是次优的:EfficientNet使用简单的复合缩放规则均匀缩放所有阶段。例如,当深度系数为2时,网络中的所有阶段都会将层数加倍。然而,这些阶段对训练速度和参数效率的贡献并不相同。在本文中,我们将使用非均匀缩放策略逐步向后期阶段添加更多层。此外,EfficientNets激进地增加图像尺寸,导致内存消耗大且训练速度慢。为了解决这个问题,我们稍微修改了缩放规则,并将最大图像尺寸限制为较小的值。
为此,我们已经了解了多种提高训练速度的设计选择。为了搜索这些选择的最佳组合,我们现在提出了一种训练感知NAS。
NAS搜索:我们的训练感知NAS框架在很大程度上基于之前的NAS工作(Tan等,2019;Tan & Le,2019a),但旨在在现代加速器上联合优化准确性、参数效率和训练效率。具体来说,我们以EfficientNet为主干网络。我们的搜索空间是一个基于阶段的分解空间,与(Tan等,2019)类似,包括卷积操作类型{MBConv, Fused-MBConv}、层数、核大小{}和扩展比{1,4,6}的设计选择。另一方面,我们通过(1)移除不必要的搜索选项(如池化跳跃操作),因为它们在原始EfficientNets中从未使用过,从而减少了搜索空间大小;(2)重用主干网络中已经搜索过的相同通道大小(Tan & Le, 2019a)。由于搜索空间较小,我们可以在与EfficientNetB4大小相当的大型网络上应用强化学习(Tan等,2019)或简单的随机搜索。具体来说,我们采样多达1000个模型,并使用较小的训练图像尺寸对每个模型进行约10个周期的训练。我们的搜索奖励结合了模型准确性、归一化训练步长时间和参数大小,使用一个简单的加权乘积,其中和是通过经验确定的,以平衡类似于(Tan等,2019)的权衡。
EfficientNetV2架构:表4展示了我们搜索得到的模型EfficientNetV2-S的架构。与EfficientNet主干网络相比,我们搜索得到的EfficientNetV2有以下几个主要区别:(1)第一个区别是,EfficientNetV2在早期层中广泛使用了MBConv(Sandler等人,2018;Tan和Le,2019a)和新添加的fused-MBConv(Gupta和Tan,2019)。(2)其次,EfficientNetV2更倾向于对MBConv使用较小的扩展率,因为较小的扩展率往往具有更低的内存访问开销。(3)第三,EfficientNetV2更倾向于使用较小的卷积核大小,但它增加了更多的层来弥补因卷积核尺寸较小而减少的感受野。(4)最后,EfficientNetV2完全移除了原始EfficientNet中的最后一个步长为1的阶段,这可能是因为其参数规模和内存访问开销较大。
训练速度对比:图3比较了我们新提出的EfficientNetV2的训练步长时间,其中所有模型都使用固定图像尺寸进行训练,没有采用渐进式学习。对于EfficientNet(Tan和Le,2019a),我们展示了两条曲线:一条是使用原始推理尺寸训练的,另一条是使用比EfficientNetV2和NFNet(Touvron等人,2019;Brock等人,2021)大约小30%的图像尺寸训练的。所有模型都训练了350个周期,除了NFNets训练了360个周期,因此所有模型的训练步数大致相同。有趣的是,我们发现,当训练得当时,EfficientNets仍然能实现非常强大的性能权衡。更重要的是,通过我们的训练感知神经架构搜索(NAS)和缩放方法,我们提出的EfficientNetV2模型的训练速度比其他最近的模型快得多。这些结果也与我们在表7和图5中显示的推理结果一致。
如第3节所述,图像尺寸在训练效率中起着重要作用。除了FixRes(Touvron等人,2019)之外,许多其他工作也在训练过程中动态改变图像尺寸(Howard,2018;Hoffer等人,2019),但它们往往会导致精度下降。
我们假设精度下降的原因是正则化不平衡:当使用不同尺寸的图像进行训练时,我们也应该相应地调整正则化的强度(而不是像之前的工作那样使用固定的正则化)。事实上,大型模型通常需要更强的正则化来对抗过拟合是很常见的:例如,EfficientNet-B7使用的dropout和数据增强比B0更强。在本文中,我们认为即使是对于相同的网络,较小的图像尺寸会导致较小的网络容量,因此需要较弱的正则化;反之,较大的图像尺寸会导致更大的计算量和容量,因此更容易过拟合。
为了验证我们的假设,我们从搜索空间中采样了一个模型,并使用不同的图像尺寸和数据增强方法进行了训练(表5)。当图像尺寸较小时,使用较弱的数据增强方法可以获得最佳精度;但对于较大的图像,使用更强的数据增强方法效果更好。这一见解促使我们在训练过程中根据图像尺寸自适应地调整正则化,从而提出了改进的渐进式学习方法。
图4展示了我们改进的渐进式学习的训练过程:在训练早期,我们使用较小的图像和较弱的正则化来训练网络,这样网络可以容易且快速地学习简单的表示。然后,我们逐渐增加图像尺寸,但同时也通过增加更强的正则化来使学习变得更加困难。我们的方法建立在Howard(2018)的基础上,该方法逐步改变图像尺寸,但在这里我们还自适应地调整了正则化。
形式上,假设整个训练有个总步长,目标图像尺寸为,并有一系列正则化强度,其中表示正则化类型,如dropout率或mixup率值。我们将训练过程分为个阶段:对于每个阶段,模型都使用图像尺寸和正则化强度进行训练。最后一个阶段将使用目标图像尺寸和正则化。为了简化,我们启发式地选择初始图像尺寸和正则化,然后使用线性插值来确定每个阶段的值。算法1总结了该过程。在每个阶段的开始,网络将继承上一阶段的所有权重。与权重(例如位置嵌入)可能依赖于输入长度的转换器不同,卷积网络(ConvNet)的权重与图像尺寸无关,因此可以容易地继承。
我们改进的渐进式学习一般与现有的正则化方法兼容。为了简化,本文主要研究了以下三种正则化方法:
本节介绍了我们的实验设置、在ImageNet上的主要结果以及在CIFAR-10、CIFAR-100、Cars和Flowers数据集上的迁移学习结果。
设置:ImageNet ILSVRC2012(Russakovsky等,2015)包含约128万张训练图像和5万张验证图像,共1000个类别。在架构搜索或超参数调整期间,我们从训练集中保留25,000张图像(约)作为小型验证集(minival),用于精度评估。我们还使用小型验证集来执行早停。我们的ImageNet训练设置基本遵循EfficientNets(Tan和Le,2019a):使用衰减为0.9、动量为0.9的RMSProp优化器;批量归一化动量为0.99;权重衰减为。每个模型以总批量大小为4096训练350个周期。学习率首先从0增加到0.256,然后每2.4个周期衰减0.97。我们使用衰减率为0.9999的指数移动平均、RandAugment(Cubuk等,2020)、Mixup(Zhang等,2018)、Dropout(Srivastava等,2014)和随机深度(Huang等,2016),其中随机深度的存活概率为0.8。
对于渐进学习,我们将训练过程分为四个阶段,每个阶段约87个周期:早期阶段使用较小的图像尺寸和较弱的正则化,而后期阶段使用较大的图像尺寸和更强的正则化,如算法1所述。表6显示了图像尺寸和正则化的最小值(第一阶段)和最大值(最后阶段)。为简化起见,所有模型都使用相同的最小尺寸和正则化值,但它们采用不同的最大值,因为较大的模型通常需要更多的正则化来防止过拟合。根据(Touvron等,2020),我们的训练最大图像尺寸比推理时小约,但我们在训练后不对任何层进行微调。
结果:如表7所示,我们的EfficientNetV2模型在ImageNet上显著更快,并且比之前的卷积神经网络(ConvNets)和Transformer实现了更高的精度和参数效率。特别是,我们的EfficientNetV2M在使用相同计算资源的情况下,训练速度比EfficientNet-B7快11倍,同时实现了相当的精度。我们的EfficientNetV2模型在精度和推理速度上也明显优于所有最近的RegNet和ResNeSt。图1进一步可视化了训练速度和参数效率的比较。值得注意的是,这种加速是渐进训练和更好网络的结合,我们将在消融研究中研究它们各自的影响。
最近,Vision Transformers在ImageNet精度和训练速度上取得了令人印象深刻的结果。然而,在这里我们表明,经过改进训练方法的适当设计的ConvNets在精度和训练效率上仍然可以大大优于视觉Transformer。特别是,我们的EfficientNetV2-L实现了的top-1精度,超过了在更大的ImageNet21k数据集上预训练的更大Transformer模型ViT-L/16(21k)。在这里,ViT在ImageNet ILSVRC2012上没有得到很好的调整;DeiT使用与ViT相同的架构,但通过添加更多的正则化获得了更好的结果。
尽管我们的EfficientNetV2模型针对训练进行了优化,但它们在推理方面也表现良好,因为训练速度通常与推理速度相关。图5基于表7可视化了模型大小、浮点运算数(FLOPs)和推理延迟。由于延迟通常取决于硬件和软件,因此在这里我们使用相同的PyTorch Image Models代码库(Wightman,2021),并在同一台机器上使用批量大小为16运行所有模型。总的来说,我们的模型在参数/FLOPs效率上略优于EfficientNets,但我们的推理延迟比EfficientNets快3倍。与最近专为GPU优化的ResNeSt相比,我们的EfficientNetV2-M在推理速度上快2.8倍的同时,实现了的更高精度。
设置:ImageNet21k(Russakovsky等,2015)包含约1300万张训练图像,共21,841个类别。原始的ImageNet 21k没有训练/评估划分,因此我们随机挑选10万张图像作为验证集,其余作为训练集。我们基本上重用了与ImageNet ILSVRC2012相同的训练设置,但做了一些更改:(1)我们将训练周期更改为60或30以减少训练时间,并使用余弦学习率衰减,它可以在不需要额外调整的情况下适应不同的步长;(2)由于每张图像有多个标签,我们在计算softmax损失之前将标签归一化为和为1。在ImageNet21k上预训练后,每个模型在ILSVRC2012上微调15个周期,使用余弦学习率衰减。
结果:表7显示了性能比较,其中标记为21k的模型是在ImageNet 21k上预训练并在ImageNet ILSVRC2012上微调的。与最近的ViT-L/16(21k)相比,我们的EfficientNetV2 L(21k)在使用2.5倍更少的参数和3.6倍更少的FLOPs的情况下,将top-1精度提高了( vs.),同时在训练和推理方面运行速度快6-7倍。
我们想强调几个有趣的观察结果:
设置:我们在四个迁移学习数据集上评估我们的模型:CIFAR-10、CIFAR-100、Flowers和Cars。表9包含了这些数据集的统计数据。 在这里插入图片描述
对于本实验,我们使用在ImageNet ILSVRC2012上训练的检查点。为了公平比较,这里不使用ImageNet21k图像。我们的微调设置大多与ImageNet训练相同,但做了一些类似于(Dosovitskiy等,2021;Touvron等,2021)的修改:我们使用较小的批量大小512,较小的初始学习率0.001,并带有余弦衰减。对于所有数据集,我们固定训练每个模型10,000步。由于每个模型都仅用很少的步骤进行微调,因此我们禁用了权重衰减,并使用简单的cutout数据增强。
结果:表8比较了迁移学习的性能。总的来说,我们的模型在这些数据集上的表现优于之前的卷积神经网络(ConvNets)和视觉转换器(Vision Transformers),有时优势还相当明显:例如,在CIFAR-100上,
EfficientNetV2-L的准确率比之前的GPipe/EfficientNets提高了0.6%,比之前的ViT/DeiT模型提高了1.5%。这些结果表明,我们的模型在ImageNet之外也有很好的泛化能力。
在本节中,我们将在相同的训练和推理设置下,将我们的EfficientNetV2(简称V2)与EfficientNets(Tan & Le, 2019a)(简称V1)进行比较。
相同训练下的性能:表10显示了使用相同的渐进学习设置进行的性能比较。当我们对EfficientNet应用相同的渐进学习时,其训练速度(从139小时减少到54小时)和准确率(从84.7%提高到85.0%)均优于原文(Tan & Le, 2019a)。然而,如表10所示,我们的EfficientNetV2模型在很大程度上仍然优于EfficientNets:EfficientNetV2M减少了17%的参数和37%的FLOPs(浮点运算数),同时在训练和推理上的速度分别比EfficientNet-B7快了4.1倍和3.1倍。由于我们在这里使用的是相同的训练设置,我们将这些增益归因于EfficientNetV2架构。
缩小规模:前几节主要关注大规模模型。在这里,我们通过使用EfficientNet复合缩放来缩小我们的EfficientNetV2-S,从而比较较小的模型。为了便于比较,所有模型均未使用渐进学习进行训练。与小型EfficientNets(V1)相比,我们的新EfficientNetV2(V2)模型通常速度更快,同时保持了相当的参数效率。
我们针对不同网络测试了渐进式学习的性能。表12展示了使用相同的ResNet和EfficientNet模型时,我们的渐进式训练与基线训练的性能对比。在这里,基线ResNet的准确率高于原文(He等,2016),因为它们采用了我们改进的训练设置(见第5节),使用了更多的训练周期和更好的优化器。我们还将ResNet的图像大小从224增加到380,以进一步提高网络容量和准确率。
如表12所示,我们的渐进式学习通常可以减少训练时间,同时提高所有不同网络的准确率。毫不意外,当默认图像尺寸非常小时,如大小的ResNet50(224),训练加速效果有限(加速比为1.4倍);然而,当默认图像尺寸较大且模型更复杂时,我们的方法在准确率和训练效率上取得了更大的提升:对于ResNet152(380),我们的方法将训练速度提高了2.1倍,且准确率略有提升;对于EfficientNet-B4,我们的方法将训练速度提高了2.2倍。
我们训练方法的一个关键见解是自适应正则化,它根据图像尺寸动态调整正则化。本文选择了一种简单的渐进方法,因其简单性,但它也是一种可以与其他方法相结合的一般方法。
表13研究了我们的自适应正则化在两种训练设置下的表现:一种是图像尺寸从小到大逐步增加(Howard,2018),另一种是每批随机采样不同的图像尺寸(Hoffer等,2019)。由于TPU需要为每个新尺寸重新编译图,因此这里我们每八个训练周期随机采样一个图像尺寸,而不是每批都采样。与对所有图像尺寸使用相同正则化的渐进式或随机调整大小的原始方法相比,我们的自适应正则化将准确率提高了。图6进一步比较了渐进式方法的训练曲线。我们的自适应正则化在训练初期对小图像使用更小的正则化,从而使模型更快收敛,并达到更好的最终准确率。
本文提出了EfficientNetV2,这是一个用于图像识别的新型更小、更快的神经网络系列。通过训练感知的神经架构搜索(NAS)和模型缩放优化,我们的EfficientNetV2在性能上显著优于之前的模型,同时在参数方面更快、更高效。为了进一步加快训练速度,我们提出了一种改进的渐进学习方法,该方法在训练期间同时增加图像大小和正则化。大量实验表明,我们的EfficientNetV2在ImageNet、CIFAR/Flowers/Cars上取得了显著成果。与EfficientNet和最近的工作相比,我们的EfficientNetV2训练速度提高了11倍,同时体积缩小了6.8倍。
特别感谢Lucas Sloan在帮助开源方面的工作。我们感谢Ruoming Pang、Sheng Li、Andrew Li、Hanxiao Liu、Zihang Dai、Neil Houlsby、Ross Wightman、Jeremy Howard、Thang Luong、Daiyi Peng、Yifeng Lu、Da Huang、Chen Liang、Aravind Srinivas、Irwan Bello、Max Moroz、Futang Peng等人的反馈。
# 这个函数的目的是确保Channel能被8整除。
def _make_divisible(v, divisor, min_value=None):
"""
这个函数的目的是确保Channel能被8整除。
:param v:
:param divisor:
:param min_value:
:return:
"""
if min_value is None:
min_value = divisor
new_v = max(min_value, int(v + divisor / 2) // divisor * divisor)
# Make sure that round down does not go down by more than 10%.
if new_v < 0.9 * v:
new_v += divisor
return new_v
class SELayer(nn.Module):
def __init__(self, inp, oup, reduction=4):
super(SELayer, self).__init__()
self.avg_pool = nn.AdaptiveAvgPool2d(1)
self.fc = nn.Sequential(
nn.Linear(oup, _make_divisible(inp // reduction, 8)),
nn.SiLU(),
nn.Linear(_make_divisible(inp // reduction, 8), oup),
nn.Sigmoid()
)
def forward(self, x):
b, c, _, _ = x.size()
y = self.avg_pool(x).view(b, c)
y = self.fc(y).view(b, c, 1, 1)
return x * y
class MBConv(nn.Module):
"""
定义MBConv模块和Fused-MBConv模块,将fused设置为1或True是Fused-MBConv,否则是MBConv
:param inp:输入的channel
:param oup:输出的channel
:param stride:步长,设置为1时图片的大小不变,设置为2时,图片的面积变为原来的四分之一
:param expand_ratio:放大的倍率
:return:
"""
def __init__(self, inp, oup, stride, expand_ratio, fused):
super(MBConv, self).__init__()
assert stride in [1, 2]
hidden_dim = round(inp * expand_ratio)
self.identity = stride == 1 and inp == oup
if fused:
self.conv = nn.Sequential(
# fused
nn.Conv2d(inp, hidden_dim, 3, stride, 1, bias=False),
nn.BatchNorm2d(hidden_dim),
nn.SiLU(),
SELayer(inp, hidden_dim),
# pw-linear
nn.Conv2d(hidden_dim, oup, 1, 1, 0, bias=False),
nn.BatchNorm2d(oup),
)
else:
self.conv = nn.Sequential(
# pw
nn.Conv2d(inp, hidden_dim, 1, 1, 0, bias=False),
nn.BatchNorm2d(hidden_dim),
nn.SiLU(),
# dw
nn.Conv2d(hidden_dim, hidden_dim, 3, stride, 1, groups=hidden_dim, bias=False),
nn.BatchNorm2d(hidden_dim),
nn.SiLU(),
SELayer(inp, hidden_dim),
# pw-linear
nn.Conv2d(hidden_dim, oup, 1, 1, 0, bias=False),
nn.BatchNorm2d(oup),
)
def forward(self, x):
if self.identity:
return x + self.conv(x)
else:
return self.conv(x)
https://blog.csdn.net/m0_47867638/article/details/144384057?spm=1001.2014.3001.5501
YOLO11l summary: 752 layers, 34,092,240 parameters, 0 gradients, 117.7 GFLOPs
Class Images Instances Box(P R mAP50 mAP50-95): 100%|??????????| 15/15 [00:20<00:00, 1.36s/it]
all 230 1412 0.947 0.983 0.991 0.734
c17 40 131 0.97 0.992 0.995 0.819
c5 19 68 0.957 0.99 0.994 0.833
helicopter 13 43 0.967 1 0.98 0.606
c130 20 85 0.965 0.978 0.994 0.666
f16 11 57 0.942 0.965 0.985 0.677
b2 2 2 0.789 1 0.995 0.722
other 13 86 0.926 0.953 0.973 0.535
b52 21 70 0.986 0.986 0.975 0.803
kc10 12 62 0.995 0.984 0.99 0.834
command 12 40 1 0.999 0.995 0.805
f15 21 123 0.979 0.967 0.994 0.681
kc135 24 91 0.981 0.989 0.989 0.695
a10 4 27 1 0.87 0.967 0.431
b1 5 20 1 0.991 0.995 0.709
aew 4 25 0.942 1 0.993 0.749
f22 3 17 0.917 1 0.995 0.751
p3 6 105 0.996 1 0.995 0.798
p8 1 1 0.746 1 0.995 0.697
f35 5 32 0.966 0.887 0.989 0.556
f18 13 125 0.989 0.992 0.99 0.825
v22 5 41 0.99 1 0.995 0.687
su-27 5 31 0.98 1 0.995 0.852
il-38 10 27 0.982 1 0.995 0.823
tu-134 1 1 0.759 1 0.995 0.895
su-33 1 2 1 1 0.995 0.759
an-70 1 2 0.843 1 0.995 0.796
tu-22 8 98 0.999 1 0.995 0.818