通俗易懂理解EfficicentNet系列网络模型

news2025/1/15 11:05:14

一、参考资料

原始论文:[1]

github代码:efficientnet

EfficientNet系列(1): EfficientNetV2网络详解

EfficientNet网络详解

二、EfficientNet相关介绍

在之前的文章中,单独增加图像分辨率或增加网络深度或单独增加网络的宽度,来提高网络的准确率。在EfficientNet这篇论文中,作者使用网络搜索技术(NAS)去同时探索网络的 宽度(width)深度(depth)分辨率(resolution)对模型准确率的影响

1. widthdepthresolution对网络的影响

宽度(width),表示特征图的通道数(channels),channels越多,网络越宽;

深度(depth),表示网络层(layers)的深度,layers越多,网络越深;

分辨率(resolution),表示输入图像的分辨率,输入图像的分辨率越大,输出特征图尺寸越大。

根据以往的经验,widthdepthresolution 对网络的影响如下:

  • 增加网络的depth能够得到更加丰富、复杂的特征并且能够很好的应用到其他任务中。但网络的深度过深会面临梯度消失,训练困难的问题。

  • 增加网络的width能够获得更细粒度的特征并且也更容易训练,但对于width很大而且深度较浅的网络,往往很难学习到更深层次的特征。

  • 增加输入图像的resolution能够潜在得获得更高细粒度的特征模板,但对于非常高的输入分辨率,准确度的增益也会减少。并且大分辨率图像会增加计算量。

在这里插入图片描述

解释说明

  • 图a,是基准网络,表示传统的卷积神经网络;
  • 图b,在图a的基础上单独增加网络的宽度
  • 图c,在图a的基础上单独增加网络的深度
  • 图d,在图a的基础上单独增加图像的分辨率
  • 图e,对网络同时增加网络的宽度深度以及输入图像的分辨率

在这里插入图片描述

从上图可以看出,scale by widthscale by depthscale by resolution,这三条虚线在准确率达到80%后达到饱和,准确率不再增加。对于红色的线,同时增加网络的widthdepthresolution,它达到了80%的准确率后并没有出现饱和的现象,并且还可以继续增长。说明同时增加网络的widthdepthresolution,可以得到一个更好的结果。并且当理论的计算量相同时,同时增加网络的widthdepthresolution,网络的效果会更好。

2. EfficientNet-B0 Network

下表为 EfficientNet-B0 的网络框架,可以看出网络总共分成了9个Stage,第一个Stage就是一个卷积核大小为3x3步距为2的普通卷积层(包含BN和Swish激活函数),Stage2~Stage8都是在重复堆叠MBConv结构,而 Stage 9 由3部分构成:一个普通的1x1的卷积层(包含BN和Swish激活函数),一个平均池化层和一个全连接层组成。

在这里插入图片描述

表格中每个MBConv后会跟一个数字1或6,这里的1或6就是倍率因子n,即MBConv中第一个1x1的卷积层会将输入特征矩阵的channels扩充为n倍,其中k3x3k5x5表示MBConvDepthwise Conv所采用的卷积核大小。Channels表示通过该Stage后输出特征图的Channels

  • Resolution,对应每个Stage输入特征图尺寸;
  • Channels,对应每个Stage输出特征图的channels;
  • Layers,表示该Stage重复堆叠MBConv结构多少次,比如stage3对应的Layers为2,则对MBConv6重复两次;
  • stride,对应Layers的第一层的stride,其他的stride都等于1。

2.1 MBConv 模块

MBConv模块与 MobileNetV3 网络中的Inverted Residual Block类似,不同的是,MBConv模块中使用Swish激活函数,MobileNetV3网络中使用h-swish激活函数;每个MBConv模块都加入SE模块。MBConv模块的结构如下图所示:

在这里插入图片描述

图片来源:EfficientNet网络详解

解释说明

  • Conv 1x1, s1层,一个 1x1 的标准卷积,用于升维,然后通过BN以及Swish激活函数;
  • Depwise Conv, kxk, s1/s2层,一个 kxk 的逐深度卷积(DWConv),然后通过BN和Swish激活函数。k 的具体值取决于EfficientNet的网络框架,主要有3x3和5x5两种情况;
  • SE模块,后文有介绍
  • Conv 1x1, s1层,一个 1x1 的标准卷积,用于降维,然后通过一个BN,没有swish激活函数。
  • Droupout层,其 dropout_rate 对应的是 drop_connect_rate
  • shortcut连接,执行 add 操作。

这里需要注意几个点:

  • 第一个升维的 1x1 卷积层,它的卷积核个数是输入特征图 channelsn 倍, n ∈ { 1 , 6 } n \in \left\{1, 6\right\} n{1,6}
  • n = 1 n = 1 n=1 时,不要第一个升维的 1x1 卷积层,即Stage2中的 MBConv结构没有第一个升维的 1x1 卷积层;
  • 关于 shortcut连接,仅当输入MBConv模块的特征图与输出特征图的尺寸相同,进行shortcut连接;
  • 只有使用 shortcut 连接时才有 Dropout 层。

2.2 SE(Squeeze-and-Excitation)模块

如下图所示,SE模块由一个全局平均池化(AvgPooling),两个FC层组成。第一个全连接层的节点个数是 MBConv 模块的输入特征图 channels 1 4 \frac{1}{4} 41 ,且使用 Swish激活函数。第二个全连接层的节点个数等于 MBConv模块中 DWConv 层输出特征图的 channels,且使用 Sigmoid激活函数。

简单理解,SE模块的总体思想是:给每个特征图不同的权重,关注更有用的特征。

在这里插入图片描述

3. EfficientNet(B0-B7)

EfficientNet-B1~ EfficientNet-B7 就是在EfficientNet-B1的基础上修改ResolutionChannels以及Layers 得到的。EfficientNet(B0-B7)网络参数,如下表:

Modelinput_sizewidth_coefficientdepth_coefficientdrop_connect_ratedropout_rate
EfficientNetB0224x2241.01.00.20.2
EfficientNetB1240x2401.01.10.20.2
EfficientNetB2260x2601.11.20.20.3
EfficientNetB3300x3001.21.40.20.3
EfficientNetB4380x3801.41.80.20.4
EfficientNetB5456x4561.62.20.20.4
EfficientNetB6528x5281.82.60.20.5
EfficientNetB7600x6002.03.10.20.5

参数解释

  • input_size,表示输入特征图尺寸;
  • width_coefficient,表示 channel 维度上的倍率因子。比如在EfficientNetB0中Stage1的3x3卷积层所使用的卷积核个数是32,那么在B6中就是 32 × 1.8 = 57.6 32 \times 1.8=57.6 32×1.8=57.6,然后取整到离它最近的8的整数倍即56,其它Stage同理;
  • depth_coefficient代表depth维度上的倍率因子(仅针对Stage2到Stage8),比如在EfficientNetB0中Stage7的 L ^ i = 4 {\widehat L}_i=4 L i=4,那么在B6中就是 4 × 2.6 = 10.4 4 \times 2.6=10.4 4×2.6=10.4,然后向上取整即11;
  • drop_connect_rate是在MBConv结构中dropout层使用的dropout_rate,在官方keras模块的实现中MBConv结构的drop_rate是从0递增到drop_connect_rate,具体实现可以看下官方源码;
  • dropout_rate是最后一个全连接层前的dropout层(在stage9的Pooling与FC之间)的dropout_rate

三、参考文献

[1] Tan M, Le Q. Efficientnet: Rethinking model scaling for convolutional neural networks[C]//International conference on machine learning. PMLR, 2019: 6105-6114.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1470718.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

matlab滤波器设计

1、内容简介 略 51-可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 matlab滤波器设计-butter、ellip、cheby1、cheby2_哔哩哔哩_bilibili 4、参考论文 略

自动驾驶---行业发展及就业环境杂谈

进入21世纪以来,自动驾驶行业有着飞速的发展,自动驾驶技术(L2---L3)也逐渐落地量产到寻常百姓家。虽然最早期量产FSD的特斯拉有着深厚的技术积累,但是进入2010年以后,国内的公司也逐渐发展起来自己的自动驾…

CSS 的盒模型

CSS 的盒模型 在HTML里,每一个元素就相当于是一个矩形的 “盒子” ,这个盒子由以下这几个部分构成:1.边框border,2.内容content,3.内边距padding,4.外边距margin 边框border 基础属性描述border-width粗…

基于容器和集群技术的数据自动化采集设计和实现

目标:部署mysql服务容器并使用docker构建包含python爬虫脚本的容器采集数据到mysql数据库。 环境:Centos7、已配置Kubernetes集群及docker。 环境配置请参考以下文章: CentOS7搭建Kubernetes集群 Kubernetes集群信息如下(虚拟机主机名和IP…

apache 模式、优化、功能 与 nginx优化、应用

一、I/O模型——Input/Output模型 1.同步/异步 A程序需要调用B程序的某一个功能,A发送一个请求需要B完成一个任务 同步:B不会主动去通知A是否完成需要A自己去问 异步:B会主动通知A是否完成 2.阻塞/非阻塞 A发送一个请求需要B完成一个任务 …

【大数据】Flink SQL 语法篇(四):Group 聚合

Flink SQL 语法篇(四):Group 聚合 1.基础概念2.窗口聚合和 Group 聚合3.SQL 语义4.Group 聚合支持 Grouping sets、Rollup、Cube 1.基础概念 Group 聚合定义(支持 Batch / Streaming 任务):Flink 也支持 G…

Python及Pycharm专业版下载安装教程(Python 3.11版)附JetBrains学生认证教程

目录 一、Python下载及安装1、Python下载2、Python安装3、验证是否安装成功 二、PyCharm下载及安装1、PyCharm下载2、PyCharm安装3、激活PyCharm 三、JetBrains学生认证 本篇主要介绍Python和PyCharm专业版的下载及安装方式,以及通过两种方式进行JetBrains学生认证。…

第十篇【传奇开心果系列】Python的文本和语音相互转换库技术点案例示例:Microsoft Azure开发语音翻译应用程序经典案例

传奇开心果博文系列 系列博文目录Python的文本和语音相互转换库技术点案例示例系列 博文目录前言一、雏形示例代码二、扩展思路介绍三、Azure多语种支持示例代码四、Azure实时对话模式示例代码五、Azure自定义翻译模型示例代码六、Azure语音合成示例代码七、Azure用户界面优化示…

openGauss学习笔记-229 openGauss性能调优-系统调优-配置Ustore

文章目录 openGauss学习笔记-229 openGauss性能调优-系统调优-配置Ustore229.1 设计原理229.2 核心优势229.3 使用指导 openGauss学习笔记-229 openGauss性能调优-系统调优-配置Ustore Ustore存储引擎,又名In-place Update存储引擎(原地更新&#xff09…

java面试(网络)

TCP和UDP有什么区别?TCP三次握手不是两次? TCP:面向连接,可靠的,传输层通信协议。点对点,占用资源多,效率低。 UDP:无连接,不可靠,传输层通信协议。广播&…

Nvidia Jetson Orin NX配置环境

Nvidia Jetson Orin NX配置环境配置环境 一、安装jetson5.1.2二、安装jtop三、配置CUDA和cuDNN四、安装Pytorch 先导片:Jetson采用arm64架构 一、安装jetson5.1.2 安装好jetson自带cuda、cudnn和tensorRT 官方文档 更换源 sudo vi /etc/apt/sources.list.d/nvidia…

力扣技巧题:丢失的数字

先排后找可以让结果更简单 int cmp(const void* a, const void* b){return *(int*)a - *(int*)b; } int missingNumber(int* nums, int numsSize){qsort(nums, numsSize, 4, cmp);for(int i0; i<numsSize; i){if(nums[i] i){continue;}else{return i;}}return numsSize; }…

10 在线逻辑分析仪的使用

在线逻辑分析仪简介 传统的 FPGA 板级调试是将逻辑分析仪连接到 FPGA 的 IO 引脚上 &#xff0c;然后将内部信号引出至 IO 引脚&#xff0c;再进行板级调试&#xff0c;这种方法的缺点是我们需要一个逻辑分析仪&#xff0c;且还要在 PCB 中预留测试点。在线逻辑分析仪克服了以…

使用 C++23 协程实现第一个 co_yield 同步风格调用接口--Qt计算排列组合

在C23的协程特性里&#xff0c; co_yield 用于从协程执行过程中返回值。这个功能乍一听起来很奇怪&#xff0c;网上的例子大多是用一个计数器来演示多次中断协程函数&#xff0c;返回顺序的计数值。这看起来毫无意义。 其实这个功能主要想演示的就是协程 co_yield 具备打断一个…

【数据结构】图——最短路径

最短路径问题&#xff1a;从在带权有向图G中的某一顶点出发&#xff0c;找出一条通往另一顶点的最短路径&#xff0c;最短也就是沿路径各边的权值总和达到最小。 最短路径分为图中单源路径和多源路径。 本文会介绍Dijkstra和Bellman-Ford解决单源路径的问题 Floyd-Warshall解…

SCI一区 | Matlab实现ST-CNN-MATT基于S变换时频图和卷积网络融合多头自注意力机制的多特征分类预测

SCI一区 | Matlab实现ST-CNN-MATT基于S变换时频图和卷积网络融合多头自注意力机制的故障多特征分类预测 目录 SCI一区 | Matlab实现ST-CNN-MATT基于S变换时频图和卷积网络融合多头自注意力机制的故障多特征分类预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍…

【牛客】2024牛客寒假算法基础集训营6ABCDEGHIJ

文章目录 A 宇宙的终结题目大意主要思路代码 B 爱恨的纠葛题目大意主要思路代码 C 心绪的解剖题目大意主要思路代码 D 友谊的套路题目大意主要思路代码 E 未来的预言题目大意主要思路代码 G 人生的起落题目大意主要思路代码 I 时空的交织题目大意主要思路代码 J 绝妙的平衡题目…

ChatGPT调教指南 | 咒语指南 | Prompts提示词教程(三)

在人工智能成为我们日常互动中无处不在的一部分的时代&#xff0c;与大型语言模型(llm)有效沟通的能力是无价的。“良好提示的26条原则”为优化与这些复杂系统的交互提供了全面的指导。本指南证明了人类和人工智能之间的微妙关系&#xff0c;强调清晰、专一和结构化的沟通方法。…

leetcode hot100 买卖股票最佳时机3

本题中&#xff0c;依旧可以采用动态规划来进行解决&#xff0c;之前的两个题我们都是用二维数组dp[i][2]来表示的&#xff0c;其中i表示第i天&#xff0c;2表示长度为2&#xff0c;其中0表示不持有&#xff0c;1表示持有。 本题中&#xff0c;说至多完成两笔交易&#xff0c;也…

RabbitMQ 面试八股题整理

前言&#xff1a;本文是博主网络自行收集的一些RabbitMQ相关八股文&#xff0c;还在准备暑期实习&#xff0c;后续应该会持续更新...... 参考&#xff1a;三天吃透RabbitMQ面试八股文_牛客网 目录 RabbitMQ概述 什么是 RabbitMQ&#xff1f; 说一说RabbitMQ中的AMQP 为什么…