EfficientNet-V2论文阅读笔记

目录

    • [EfficientNetV2: Smaller Models and Faster Training](#EfficientNetV2: Smaller Models and Faster Training)
      • 摘要
      • Introduction---简介
      • [Related work---相关工作](#Related work—相关工作)
      • [EfficientNetV2 Architecture Design---高效EfficientNetV2架构设计](#EfficientNetV2 Architecture Design—高效EfficientNetV2架构设计)
        • [Understanding Training Efficiency---了解训练效率](#Understanding Training Efficiency—了解训练效率)
        • [Training-Aware NAS and Scaling---训练感知NAS和缩放](#Training-Aware NAS and Scaling—训练感知NAS和缩放)
        • [EfficientNetV2 Architecture---EfficientNetV2 体系结构](#EfficientNetV2 Architecture—EfficientNetV2 体系结构)
        • [Progressive Learning---渐进式学习](#Progressive Learning—渐进式学习)
        • [Stochastic Depth(dropout)](#Stochastic Depth(dropout))
      • 总结

EfficientNetV2: Smaller Models and Faster Training

论文链接:EfficientNetV2: Smaller Models and Faster Training

该网络主要使用训练感知神经结构搜索缩放 的组合;在EfficientNetV1的基础上,引入了Fused-MBConv 到搜索空间中;引入渐进式学习策略自适应正则强度调整机制 使得训练更快;进一步关注模型的推理速度训练速度

摘要

(1)本文使用训练感知神经结构搜索(training-aware NAS)和缩放的组合,以共同优化训练速度和参数效率

(2)从空间搜索领域引入新的操作:Fused-MBConv优化模型

(3)提出了一种改进的渐进式学习方法,它自适应地调整正则化(如dropout和数据增强)以及图像大小,用来加速训练过程

(4)实验表明,EfficientNetV2模型的训练速度比最先进的模型快得多,但参数量小6.8倍

Introduction---简介

之前有关训练效率的工作

  • NFNets: 去除批量归一化

  • 添加注意力机制

  • Vision Transformers: 使用Transformer块

之前的不足

这些方法在大参数规模上往往伴随着大量的参数计算

EfficientNet v1的不足

(1)输入分辨率大时训练比较慢

(2)深度depth-wise卷积在网络浅层中比较慢

(3)用同样的缩放系数缩放网络的每个stage是次优的

本文采用的方法

(1)作者设计了一个包含额外算子ops如Fused-MBConv的搜索空间,并应用训练感知training-aware的NAS和缩放scaling来联合优化模型精度、训练速度和参数大小。

(2)本文还提出了一种改进的渐进式训练progressive learning方法:在训练的早期用较小的输入和较弱的正则化,随着训练的进行,逐渐增大输入分辨率和正则化的强度。

本文主要贡献

(1)本文提出了EfficientNet V2,一个更小更快的模型,基于training-aware NAS和scaling,EfficientNetV2在训练速度和参数效率方面都优于之前的模型。

(2)本文提出了一种改进的渐进式训练方法,它自适应的调整正则化和输入大小,通过实验证明该方法既加快了训练速度,同时也提高了准确性。

(3)EfficientNetV2结合改进的渐进式训练方法,在ImageNet、CIFAR、Cars、Flowers数据集上,比之前的模型训练速度最高提升了11倍,参数效率最高提升了6.8倍。

Training and parameter efficiency---训练和参数效率

  • 以较少的参数实现更高的精度: DenseNet和EfficientNet
  • 侧重于GPU和/或TPU推理速度: RegNet、ResNeSt、TResNet和EfficientNet-X
  • 专注于提高训练速度: NFNET和BoTNets

Progressive training---渐进式训练

先前研究的渐进式训练:GANs、迁移学习、对抗性学习和语言模型

本文方法:本文主要通过自适应地调整正则化 ,提高训练速度和精度。同时也通过增加更多的正则化来逐渐增加学习难度,但没有选择性地选择训练示例。

Neural architecture search (NAS)---神经架构搜索

本文使用NAS优化训练效率和参数效率

EfficientNetV2 Architecture Design---高效EfficientNetV2架构设计

Understanding Training Efficiency---了解训练效率

Training with very large image sizes is slow---使用非常大的图像大小进行训练的速度很慢

存在的问题: 训练图像的尺寸很大时,训练速度非常慢

本文方法: 降低训练图片尺寸,加快训练速度的同时还可以使用更大的 batch_size。

Depthwise convolutions are slow in early layers but ef- fective in later stages---深度卷积在早期阶段较慢,但在后期阶段有效

DW 卷积在现有的硬件下是无法利用很多加速器的,所以实际使用起来并没有想象中那么快(虽然DW理论上计算量很小)。

引入Fused-MBConv,结构如下图就是把EfficientNetV1的MBConv 模块的conv1×1和dw conv 用conv3×3替换

替换后的结果从下表可以看出,用Fused-MBConv替换stage1-3或者stage1-5,精度提升的同时训练速度也有所提升。

但如果用Fused-MBConv替换stage1-7所有模块,不仅会导致参数和FLOPs会增加(这两个指标怎样替换都会增加,从下表可看出),同时训练速度也会降低。

本文目标: 找到MBConv和Fused-MBConv这两个模块的正确组合

本文方法: 使用 NAS 技术进行搜索,将前三个 MBConv 用Fused-MBConv进行替换

Equally scaling up every stage is sub-optimal---对每个阶段做相同的扩展是次优的

之前的问题:

(1)在 EfficientNetV1 中每个 stage 的深度和宽度都是同等放大的。也就是直接简单粗暴的乘上宽度和深度缩放因子就行了,但是不同 stage 对于网络的训练速度,参数量等贡献并不相同。

(2)EfficientNet的采用大尺寸图像导致大计算量、训练速度降低问题。

本文方法:

(1)采用非均匀缩放策略对后面的stage添加更多的层。(每个stage的缩放因子是不同的)

(2)对缩放规则进行了轻微调整并将最大图像尺寸限制在一个较小的数值。

Training-Aware NAS and Scaling---训练感知NAS和缩放

NAS Search---NAS搜索

目的:联合优化精度、参数效率和现代加速器的训练效率

本文使用的方法:

(1)使用EfficientNet作为主干。搜索空间是一个类似于EfficientNet v1的基于阶段的因式分解空间(stage-based factorized space),

(2)这里进行网络搜索的单元是stage ,其中的搜索空间包括:卷积模块的类型(MBConv或Fused-MBConv),stage中layer的数量,卷积kernel的大小3或5,膨胀系数[1,4,6]。

减少了搜索空间的大小的方法:

(1)移除了诸如pooling skip这类非必要的op,因为这类op在EfficientNet中就没有存在

(2)重用EfficientNet中搜索的到的channel数

公式:使用简单加权乘积

其中,w = -0.07和v = -0.05(经验所得)

EfficientNetV2 Architecture---EfficientNetV2 体系结构

与V1的不同:

(1)除了使用 MBConv 之外还使用了 Fused-MBConv 模块,加快训练速度与提升性能

(2)使用较小的 expansion ratio (之前都是6),从而减少内存的访问量

(3)趋向于选择kernel大小为3的卷积核,但是会增加多个卷积用以提升感受野,( V1 中有 5 × 5 )

(4)移除了最后一个stride为1的stage,从而减少部分参数和内存访问

Fused-MBConv模块

当expansion ratio = 1 时,图中conv1 × 1 这一层是没有的。

注意:无论是expansion ratio是否等于1,无论是Fused-MBConv模块还是MBConv模块,dropout和shortcut都是同生共死的,即有shortcut才需要dropout,而shortcut需要channel一致才能执行。

EfficientNetV2 Scaling---EfficientNetV2缩放

作者在EfficientNetV2-S的基础上采用类似EfficientNet的复合缩放,并添加几个额外的优化,得到EfficientNetV2-M/L。

额外的优化描述如下:

(1)限制最大推理图像尺寸为480

(2)在网络的后期添加更多的层提升模型容量且不引入过多耗时

Progressive Learning---渐进式学习

实验探究

当用不同的图像尺寸进行训练时,也应该相应地调整正则化强度(而不是像以前的工作那样使用固定的正则化)

下表就是用同一网络,以不同的输入大小和不同的正则强度进行训练的结果,可以看出需要一起进行共同调整,提高饱和点。

结论:

(1)即使是相同的网络,较小的图像尺寸会导致较小的网络容量,因此需要较弱的正则化

(2)反之,较大的图像尺寸会导致更多的计算,而容量较大,因此更容易出现过拟合

(3)当图像大小较小时,弱增强的精度最好;但对于较大的图像,更强的增强效果更好

Progressive Learning with adaptive Regularization---自适应正则化的渐进学习

训练早期使用较小的训练尺寸以及较弱的正则方法weak regularization,这样网络能够快速的学习到一些简单的表达能力。接着逐渐提升图像尺寸,同时增强正则方法adding stronger regularization。这里所说的regularization包括Dropout,RandAugment以及Mixup。

它从较小的图像大小和弱正则化(epoch=1)开始,然后随着图像大小和强正则化逐渐增加学习难度:dropout rate较大,RandAugment幅度较大,mixup ratio(如epoch=300)较大。

渐进式学习策略可以抽象成了一个公式来设置不同训练阶段使用的训练尺寸以及正则化强度。

以下算法1总结了过程:

下表给出了EfficientNetV2(S,M,L)三个模型的渐进学习策略参数,Image Size越大其他参数也需要适当进行增大。

Stochastic Depth(dropout)

论文链接:Deep Networks with Stochastic Depth

从下图可知,每一层都当作一个残差结构,通过存活率 来控制,存活率是递减的 ,开始为1.0,存活时该层为active,失活时该层为inactive,相当于输入就是输出,没有这一层,因此该网络的深度是随机的

在EfficientNetV2的dropout中也是这种原理,但是不是通过存活率控制,而是用drop_prob(失活率)控制,drop_prob在0 - 0.2之间。

优点:提升训练速度,小幅提升准确率。

注意:EfficientNetV2中,这里的dropout层仅指Fused-MBConv模块以及MBConv模块中的dropout层,不包括最后全连接前的dropout层。

总结

本文是EfficientNet原作者对其进行的一次升级,旨在保持参数量高效利用的同时尽可能提升训练速度。

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

  1. 训练图像的尺寸很大时,训练速度非常慢
  2. 在网络浅层中使用Depthwise convolutions速度会很慢
  3. 同等的放大每个阶段是次优的

在EfficientNet的基础上,引入了Fused-MBConv到搜索空间中;同时为渐进式学习引入了自适应正则强度调整机制,两种改进的组合得到了EfficientNetV2。

相关推荐
GOTXX1 小时前
基于Opencv的图像处理软件
图像处理·人工智能·深度学习·opencv·卷积神经网络
糖豆豆今天也要努力鸭2 小时前
torch.__version__的torch版本和conda list的torch版本不一致
linux·pytorch·python·深度学习·conda·torch
何大春2 小时前
【弱监督语义分割】Self-supervised Image-specific Prototype Exploration for WSSS 论文阅读
论文阅读·人工智能·python·深度学习·论文笔记·原型模式
Suyuoa3 小时前
附录2-pytorch yolov5目标检测
python·深度学习·yolo
余生H4 小时前
transformer.js(三):底层架构及性能优化指南
javascript·深度学习·架构·transformer
罗小罗同学4 小时前
医工交叉入门书籍分享:Transformer模型在机器学习领域的应用|个人观点·24-11-22
深度学习·机器学习·transformer
孤独且没人爱的纸鹤4 小时前
【深度学习】:从人工神经网络的基础原理到循环神经网络的先进技术,跨越智能算法的关键发展阶段及其未来趋势,探索技术进步与应用挑战
人工智能·python·深度学习·机器学习·ai
阿_旭4 小时前
TensorFlow构建CNN卷积神经网络模型的基本步骤:数据处理、模型构建、模型训练
人工智能·深度学习·cnn·tensorflow
羊小猪~~4 小时前
tensorflow案例7--数据增强与测试集, 训练集, 验证集的构建
人工智能·python·深度学习·机器学习·cnn·tensorflow·neo4j
极客代码5 小时前
【Python TensorFlow】进阶指南(续篇三)
开发语言·人工智能·python·深度学习·tensorflow