轻量级网络——EfficientNetV2

2023-11-22 14:40

本文主要是介绍轻量级网络——EfficientNetV2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1.EfficientNetV2介绍
  • 2.EfficientNetV2改进
    • 1)NAS Search
    • 2)EfficientNetV2 Architecture
    • 3)EfficientNetV2 Scaling
    • 4)Progressive Learning
  • 3.EfficientNetV2性能指标

paper链接:EfficientNetV2: Smaller Models and Faster Training
官方代码:https://github.com/google/automl/tree/master/efficientnetv2

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

借助强化学习的思想,接着在搜索空间中随机采样了1000个模型,并针对每个模型训练10个epochs(使用较小的图像尺度)。搜索奖励结合了模型准确率A,标准训练一个step所需时间S以及模型参数大小P,奖励函数可写成: A ⋅ S w ⋅ P v A·S^{w}·P^{v} ASwPv,其中,w = − 0.07与v = − 0.05 (经验所得)

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 \frac{1}{4} 41.注意当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(包括了数据增强)。如图所示:
在这里插入图片描述
作者将渐进式学习策略抽象成了一个公式来设置不同训练阶段使用的训练尺寸以及正则化强度。假设整个训练过程有N步,目标训练尺寸(最终训练尺度)是 S e S_{e} Se,正则化列表(最终正则强度) ϕ e = { ϕ e k } \phi_{e} = \{ \phi_{e}^{k} \} ϕe={ϕek}其中k代表k种正则方法(为了简单起见,作者这里用了3种:有Dropout、RandAugment以及Mixup)。初始化训练尺寸 S 0 S_{0} S0,初始化正则化强度为 ϕ 0 = { ϕ 0 k } \phi_{0} = \{\phi_{0}^{k}\} ϕ0={ϕ0k}。接着将整个训练过程划分成M个阶段,对于第i个阶段(1 ≤ i ≤ M)模型的训练尺寸为 S i S_{i} Si,正则化强度为 ϕ i = { ϕ i k } \phi_{i} = \{\phi_{i}^{k}\} ϕi={ϕik}。对于不同阶段直接使用线性插值的方法递增。具体流程如下:
在这里插入图片描述
下表给出了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倍
在这里插入图片描述

参考资料:
https://blog.csdn.net/qq_37541097/article/details/116933569
https://arxiv.org/abs/2104.00298

这篇关于轻量级网络——EfficientNetV2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/410852

相关文章

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

poj 3181 网络流,建图。

题意: 农夫约翰为他的牛准备了F种食物和D种饮料。 每头牛都有各自喜欢的食物和饮料,而每种食物和饮料都只能分配给一头牛。 问最多能有多少头牛可以同时得到喜欢的食物和饮料。 解析: 由于要同时得到喜欢的食物和饮料,所以网络流建图的时候要把牛拆点了。 如下建图: s -> 食物 -> 牛1 -> 牛2 -> 饮料 -> t 所以分配一下点: s  =  0, 牛1= 1~

poj 3068 有流量限制的最小费用网络流

题意: m条有向边连接了n个仓库,每条边都有一定费用。 将两种危险品从0运到n-1,除了起点和终点外,危险品不能放在一起,也不能走相同的路径。 求最小的费用是多少。 解析: 抽象出一个源点s一个汇点t,源点与0相连,费用为0,容量为2。 汇点与n - 1相连,费用为0,容量为2。 每条边之间也相连,费用为每条边的费用,容量为1。 建图完毕之后,求一条流量为2的最小费用流就行了

poj 2112 网络流+二分

题意: k台挤奶机,c头牛,每台挤奶机可以挤m头牛。 现在给出每只牛到挤奶机的距离矩阵,求最小化牛的最大路程。 解析: 最大值最小化,最小值最大化,用二分来做。 先求出两点之间的最短距离。 然后二分匹配牛到挤奶机的最大路程,匹配中的判断是在这个最大路程下,是否牛的数量达到c只。 如何求牛的数量呢,用网络流来做。 从源点到牛引一条容量为1的边,然后挤奶机到汇点引一条容量为m的边

配置InfiniBand (IB) 和 RDMA over Converged Ethernet (RoCE) 网络

配置InfiniBand (IB) 和 RDMA over Converged Ethernet (RoCE) 网络 服务器端配置 在服务器端,你需要确保安装了必要的驱动程序和软件包,并且正确配置了网络接口。 安装 OFED 首先,安装 Open Fabrics Enterprise Distribution (OFED),它包含了 InfiniBand 所需的驱动程序和库。 sudo

【机器学习】高斯网络的基本概念和应用领域

引言 高斯网络(Gaussian Network)通常指的是一个概率图模型,其中所有的随机变量(或节点)都遵循高斯分布 文章目录 引言一、高斯网络(Gaussian Network)1.1 高斯过程(Gaussian Process)1.2 高斯混合模型(Gaussian Mixture Model)1.3 应用1.4 总结 二、高斯网络的应用2.1 机器学习2.2 统计学2.3