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

一、参考资料

原始论文:[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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花花少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值