EffcientNet_v1:高效的拓宽卷积网络来达到更好的效率和精度。

目录

1.引言

2.增加模型规模

3.NAS搜索

4.网络详细结构

5.MBConv架构

论文地址:


1.引言

在之前的一些论文中,基本都是通过改变3个参数(通道数、网络层数、输入图像的分辨率)中的一个来提升网络的性能,而这篇论文就是同时来探索这三个参数的影响。在论文中提到,本文提出的EfficientNet-B7在Imagenet top-1上达到了当年最高准确率84.3%,与之前准确率最高的GPipe相比,参数数量(Params)仅为其1/8.4,推理速度提升了6.1倍。。下图是EfficientNet与其他网络的对比(注意,参数数量少并不意味推理速度就快)。

2.增加模型规模

图(b),通过增加卷积核个数,增加输出特征矩阵的通道数来增加width,能够获得更高细粒度的特征并且也更容易训练,但对于width很大而深度较浅的网络往往很难学习到更深层次的特征。

图(c),通过增加网络层数(stage or block个数)来增加网络深度depth,能够得到更加丰富、复杂的特征并且能够很好的应用到其它任务中。但网络的深度过深会面临梯度消失,训练困难的问题。

图(d),增加输入网络的图像分辨率(22*224—>600*600)能够潜在得获得更高细粒度的特征模板,但对于非常高的输入分辨率,准确率的增益也会减小。并且大分辨率图像会增加计算量。

在基准EfficientNetB-0上分别增加width、depth以及resolution后得到的统计结果。通过上图可以看出大概在Accuracy达到80%时就趋于饱和了。

接着作者又做了一个实验,采用不同的d , r组合,然后不断改变网络的width就得到了如下图所示的4条曲线,通过分析可以发现在相同的FLOPs下,同时增加d和r的效果最好。

3.NAS搜索

接着作者又提出了一个混合缩放方法 ( compound scaling method) 在这个方法中使用了一个混合因子ϕ去统一的缩放width,depth,resolution参数,具体的计算公式如下,其中s . t 代表限制条件:

FLOPs(理论计算量)与depth的关系是:当depth翻倍,FLOPs也翻倍。

FLOPs与width的关系是:当width翻倍(即channal翻倍),FLOPs会翻4倍,因为卷积层的FLOPs=featurew×featureh×featurec×kernelw×kernelh×kernelnumber

​(假设输入输出特征矩阵的高宽不变),当width翻倍,输入特征矩阵的channels和输出特征矩阵的channels或卷积核的个数都会翻倍。

FLOPs与resolution的关系是:当resolution翻倍,FLOPs也会翻4倍,和上面类似因为特征矩阵的宽度featurew和特征矩阵的高度featureh 都会翻倍。

所以总的FLOPs倍率可以用近似用(α*β2*γ2)ϕ表示,当α*β2*γ2≈2时,对任意一个ϕ而言,FLOPs相当于增加2ϕ倍。

接下来作者在基准网络EfficientNetB-0(在后面的网络详细结构章节会详细讲)上使用NAS来搜索α、β、γ三个参数。

(step1)首先固定ϕ = 1,并基于上面给出的公式(2)和(3)进行搜索,作者发现对于EfficientNetB-0最佳参数为α=1.2、β=1.1、γ=1.15

(step2)接着固定α=1.2、β=1.1、γ=1.15在EfficientNetB-0的基础上使用不同的ϕ分别得到EfficientNetB-1至EfficientNetB-7

需要注意的是,对于不同的基准网络搜索出的α、β、γ也不定相同。还需要注意的是,在原论文中,作者也说了,如果直接在大模型上去搜索α、β、γ可能获得更好的结果,但是在较大的模型中搜索成本太大,所以这篇文章就在比较小的EfficientNetB-0模型上进行搜索的。

4.网络详细结构

下表为EfficientNet-B0的网络框架(B1-B7就是在B0的基础上修改Resolution,Channels以及Layers),可以看出网络总共分成了9个Stage。

第一个Stage就是一个卷积核大小为3x3步距为2的普通卷积层(包含BN和激活函数Swish)。

Stage2~Stage8都是在重复堆叠MBConv结构(最后一列的Layers表示该Stage重复MBConv结构多少次)。

Stage9由一个普通的1x1的卷积层(包含BN和激活函数Swish)一个平均池化层和一个全连接层组成。

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

5.MBConv架构

MBConv其实就是MobileNetV3网络中的InvertedResidualBlock,但也有些许区别。一个是采用的激活函数不一样(EfficientNet的MBConv中使用的都是Swish激活函数),另一个是在每个MBConv中都加入了SE(Squeeze-and-Excitation)模块。

MBConv结构主要由一个1x1的普通卷积(升维作用,包含BN和Swish),一个k*k的Depthwise Conv卷积(包含BN和Swish)k的具体值可看EfficientNet-B0的网络框架主要3*3和5*5两种情况,一个SE模块,一个1*1的普通卷积(降维作用,包含BN),一个Droupout层构成。搭建过程中还需要注意几点:

第一个升维的1*1卷积层,它的卷积核个数是输入特征矩阵channel的n倍,n =1或n=6,当n=1时,不要第一个升维的1*1卷积层,即Stage2中的MBConv结构都没有第一个升维的1*1卷积层(这和MobileNetV3网络类似)。

关于shortcut连接,仅当输入MBConv结构的特征矩阵与输出的特征矩阵shape相同时才存在。

SE模块如下所示,由一个全局平均池化,两个全连接层组成。第一个全连接层的节点个数是输入该MBConv特征矩阵channels的1 /4,且使用Swish激活函数。第二个全连接层的节点个数等于Depthwise Conv层输出的特征矩阵channels,且使用Sigmoid激活函数。

Dropout层的dropout_rate在tensorflow的keras源码中对应的是drop_connect_rate后面会细讲(注意,在源码实现中只有使用shortcut的时候才有Dropout层)。

input_size代表训练网络时输入网络的图像大小。

width_coefficient代表channel维度上的倍率因子,比如在 EfficientNetB0中Stage1的3x3卷积层所使用的卷积核个数是32,那么在B6中就是32×1.8=57.6接着取整到离它最近的8的整数倍即56,其它Stage同理。

depth_coefficient代表depth维度上的倍率因子(仅针对Stage2到Stage8),比如在EfficientNetB0中Stage7的L^ i = 4 ,那么在B6中就是4×2.6=10.4接着向上取整即11。

drop_connect_rate是在MBConv结构中dropout层使用的drop_rate,注意,在源码实现中只有使用shortcut的时候才有Dropout层。还需要注意的是,这里的Dropout层是Stochastic Depth,即会随机丢掉整个block的主分支(只剩捷径分支,相当于直接跳过了这个block)也可以理解为减少了网络的深度。

dropout_rate是最后一个全连接层前的dropout层(在stage9的Pooling与FC之间)的dropout_rate。

论文地址:

https://arxiv.org/abs/1905.11946https://arxiv.org/abs/1905.11946

强烈推荐参考:

9.1 EfficientNet网络详解_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1XK4y1U7PX?spm_id_from=333.999.0.0EfficientNet网络详解_太阳花的小绿豆的博客-CSDN博客_efficientnet网络结构目录前言论文思想网络详细结构MBConv结构EfficientNet(B0-B7)参数前言原论文名称:EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks论文下载地址:https://arxiv.org/abs/1905.11946原论文提供代码:https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet自己使用Pythttps://blog.csdn.net/qq_37541097/article/details/114434046

EfficientNET_V1相关推荐

  1. chainer-骨干网络backbone-EfficientNet_V1代码重构【附源码】

    文章目录 前言 代码实现 调用方式 前言 本文基于chainer实现EfficientNet_V1网络结构,并基于torch的结构方式构建chainer版的,并计算EfficientNet_V1的参数 ...

最新文章

  1. html表格重置标签,HTML——表格标签
  2. 洛奇6里很喜欢的一段话!洛奇6经典台词!而是你能挨多重,并且坚持向前,你能承受多少并且坚持向前,这样才叫胜利!
  3. 基于opencV的动态背景下运动目标检测及跟踪(修改版)
  4. Codeforces 516D Drazil and Morning Exercise (栈、二分)
  5. linux中文输入法怎么安装目录,Linux怎么安装中文输入法
  6. 人工智能之入门大数据
  7. OpenStack峰会喊你回家吃饭
  8. onclick获取当前节点
  9. HDU5828 Rikka with Sequence
  10. [VB.NET]请教一个如何对姓名进行同音字查询?
  11. 企业级代码静态测试工具Helix QAC——Helix QAC Dashboard基于团队的工程质量管理系统/Helix QAC资质认证
  12. 联合概率密度函数的基本结论
  13. WEBTIMER控件研究的心得:WebTimer的启示
  14. 《强化学习周刊》第3期:深度强化学习如何提升鲁棒性和性能
  15. 基于OBD系统的量产车评估测试(PVE)
  16. MySQL基础学习_第016章节_简单的查询语句
  17. npm包--rimraf
  18. jetty9 Form too large 异常解决方案
  19. 富兰克林的风筝:ReID产业化拉开的计算视觉新序幕
  20. 中国未来只有三种人:资源者、配置者、投资人

热门文章

  1. 正牌韦小宝之奉旨沟女 解说
  2. 定时器/计数器、中断
  3. ROS实验笔记之——SLAM无人驾驶初入门
  4. 世界上最伟大的十大公式
  5. 【Kevin Learn 小程序】--> navigator
  6. threejs-自定义着色器材质
  7. flutter入门之理解Isolate及compute
  8. Springcloud config 出现Error occured cloning to base directory.
  9. 微信云开发之小游戏排行榜的实现,云数据库,云函数【白玉无冰】每天进步一点点
  10. Matplotlib 绘制条形图