目录

  • EfficientNet
    • 网络结构
    • MBConv 结构

EfficientNet

单独适当增大深度、宽度或分辨率都可以提高网络的精确性,但随着模型的增大,其精度增益却会降低。此外,这三个维度并不是独立的(如:高分辨率图像需要更深的网络来获取更细粒度特征等),需要我们协调和平衡不同尺度的缩放,而不是传统的一维缩放。EfficientNet 的设想就是能否设计一个标准化的卷积网络扩展方法,既可以实现较高的准确率,又可以充分的节省算力资源。其通过 NAS(Neural Architecture Search)技术来搜索网络的图像输入分辨率 r,网络的深度 depth 以及 channel 的宽度 width 三个参数的合理化配置。

  • 增加网络的深度 depth 能够得到更加丰富、复杂的特征并且能够很好的应用到其它任务中。但网络的深度过深会面临梯度消失,训练困难的问题
  • 增加网络的 width 够获得更高细粒度的特征并且也更容易训练,但对于 width 很大而深度较浅的网络往往很难学习到更深层次的特征
  • 增加输入网络的图像分辨率能够潜在地获得更高细粒度的特征模板,但对于非常高的输入分辨率,准确率的增益也会减小。并且大分辨率图像会增加计算量

第i个层的操作可以看成映射函数:Yi=Fi(Xi)若网络N由k个层组成的,则可表示为:N=Fk⨀...⨀F2⨀F1(X1)=⨀j=1...kFi(X1)论文中对整个网络的运算进行抽象:N=⨀i=1...sFiLi(X<Hi,Wi,Ci>)\begin{aligned} &第 i 个层的操作可以看成映射函数:Y_i = F_i(X_i) \\ &若网络 N 由 k 个层组成的,则可表示为:N = F_k \bigodot ... \bigodot F_2 \bigodot F_1(X_1) = \bigodot_{j=1...k}F_i(X_1) \\ &论文中对整个网络的运算进行抽象:N = \bigodot_{i=1...s}F_i^{L_i}(X_{<H_i, W_i, C_i>}) \\ \end{aligned} ​第i个层的操作可以看成映射函数:Yi​=Fi​(Xi​)若网络N由k个层组成的,则可表示为:N=Fk​⨀...⨀F2​⨀F1​(X1​)=j=1...k⨀​Fi​(X1​)论文中对整个网络的运算进行抽象:N=i=1...s⨀​FiLi​​(X<Hi​,Wi​,Ci​>​)​

:FiLiF_i^{L_i}FiLi​​ 表示在 stage(i)stage^{(i)}stage(i) 中 FiF_iFi​ 被重复执行了 LiL_iLi​ 次,X 表示输入 stage(i)stage^{(i)}stage(i) 的特征矩阵,其维度是 <Hi,Wi,Ci><H_i,W_i,C_i><Hi​,Wi​,Ci​>。

为了探究 d, r, w 这三个因子对最终准确率的影响,则将 d, r, w 加入到公式中,我们可以得到抽象化后的优化问题

max⁡d,w,rAccuracy(N(d,w,r))s.t.N(d,w,r)=⨀i=1...sFid⋅Li^^(X<r⋅Hi^,r⋅Wi^,ω⋅Ci^>)Memory(N)≤target_memoryFLOPS(N)≤target_flops\begin{aligned} &\max_{d, w, r}Accuracy(N(d, w, r))\\ &s.t.\quad N(d, w, r) = \bigodot_{i=1...s}\hat{F_i^{d \cdot \hat{L_i}}}(X_{<r \cdot \hat{H_i}, r \cdot \hat{W_i}, \omega \cdot \hat{C_i}>}) \\ &Memory(N) \leq target\_memory \\ &FLOPS(N) \leq target\_flops \\ \end{aligned} ​d,w,rmax​Accuracy(N(d,w,r))s.t.N(d,w,r)=i=1...s⨀​Fid⋅Li​^​​^​(X<r⋅Hi​^​,r⋅Wi​^​,ω⋅Ci​^​>​)Memory(N)≤target_memoryFLOPS(N)≤target_flops​
:d 用来缩放深度 Li^\hat{L_i}Li​^​;rrr 用来缩放分辨率即影响 Hi^\hat{H_i}Hi​^​ 和 Wi^\hat{W_i}Wi​^​;ω\omegaω 用来缩放特征矩阵的 channel 即 Ci^\hat{C_i}Ci​^​。

接着作者又提出了一个混合缩放方法 ( compound scaling method) 在这个方法中使用了一个混合因子 ϕ 去统一的缩放 width,depth,resolution 参数,具体的计算公式如下:
depth:d=αϕwidth:w=βϕresolution:r=γϕs.t.α⋅β2⋅γ2≈2α≥1,β≥1,γ≥1\begin{aligned} &depth: d = \alpha^\phi \\ &width: w = \beta^\phi \\ &resolution: r = \gamma^\phi \\ &s.t. \quad \alpha \cdot \beta^2 \cdot \gamma^2 \approx 2 \qquad \alpha \geq1, \beta \geq 1, \gamma \geq 1 \\ \end{aligned} ​depth:d=αϕwidth:w=βϕresolution:r=γϕs.t.α⋅β2⋅γ2≈2α≥1,β≥1,γ≥1​
:FLOPs(理论计算量)=> depth 翻倍,也翻倍(一次);width 或 resolution 翻倍,则翻四倍(平方)。总的FLOPs倍率可以用近似用 (α,β2,γ2)ϕ(\alpha, \beta^2, \gamma^2)^\phi(α,β2,γ2)ϕ 来表示,当限制 α⋅β2⋅γ2≈2\alpha \cdot \beta^2 \cdot \gamma^2 \approx 2α⋅β2⋅γ2≈2 时,对于任意一个 ϕ\phiϕ 而言 FLOPs 相当增加了 2ϕ2^{\phi}2ϕ 倍。对于不同的基准网络搜索出的 α,β,γ\alpha, \beta, \gammaα,β,γ 也不一定相同。

网络结构

下表为EfficientNet-B0的网络框架(B1-B7就是在B0的基础上修改 Resolution、Channels 和 Layers),第一个 Stage 就是一个卷积核大小为 3x3 步距为 2 的普通卷积层(包含 BN 和激活函数 Swish),Stage2~Stage8 都是在重复堆叠 MBConv 结构(最后一列的 Layers 表示该 Stage 重复 MBConv 结构多少次),而 Stage9 由一个普通的 1x1 的卷积层(包含 BN 和激活函数 Swish)、一个平均池化层和一个全连接层组成。表格中每个 MBConv 后会跟一个数字 1 或 6,这里的 1 或 6 就是倍率因子 n 即 MBConv 中第一个 1x1 的卷积层会将输入特征矩阵的 channels 扩充为 n 倍,其中 k3x3 或 k5x5 表示 MBConv 中 Depthwise Conv 所采用的卷积核大小。Channels 表示通过该 Stage 后输出特征矩阵的 Channels。

MBConv 结构


如图所示,MBConv 结构主要由一个 1x1 的普通卷积(升维作用),一个 kxk 的 Depthwise Conv 卷积。k 的具体值主要有 3x3 和 5x5 两种情况,一个 SE 模块,一个 1x1 的普通卷积(降维作用),一个 Droupout 层构成

  • 第一个升维的 1x1 卷积层,它的卷积核个数是输入特征矩阵 channel 的 n 倍,n ∈ { 1 , 6 }
  • 当 n = 1 时,不要第一个升维的 1x1 卷积层,即 Stage2 中的 MBConv 结构都没有第一个升维的 1x1 卷积层?
  • 仅当输入 MBConv 结构的特征矩阵与输出的特征矩阵 shape 相同时才存在 shortcut 连接
  • 在源码实现中只有使用 shortcut 的时候才有 Dropout 层
Model input_size width_coefficient depth_coefficient drop_connect_rate dropout_rate
EfficientNetB0 224x224 1.0 1.0 0.2 0.2
EfficientNetB1 240x240 1.0 1.1 0.2 0.2
EfficientNetB2 260x260 1.1 1.2 0.2 0.3
EfficientNetB3 300x300 1.2 1.4 0.2 0.3
EfficientNetB4 380x380 1.4 1.8 0.2 0.4
EfficientNetB5 456x456 1.6 2.2 0.2 0.4
EfficientNetB6 528x528 1.8 2.6 0.2 0.5
EfficientNetB7 600x600 2.0 3.1 0.2 0.5
  • width_coefficient 代表 channel 维度上的倍率因子,比如在 EfficientNetB0 中 Stage1 的 3x3 卷积层所使用的卷积核个数是 32,那么在 B6 中就是 32 × 1.8 = 57.6,接着取整到离它最近的 8 的整数倍即 56
  • depth_coefficient 代表 depth 维度上的倍率因子(仅针对Stage2到Stage8),比如在 EfficientNetB0 中 Stage7 的 \hat{L_i} = 4,那么在 B6 中就是 4 × 2.6 = 10.4 接着向上取整即 11
  • drop_connect_rate 是在 MBConv 结构中 dropout 层使用的 drop_rate
  • dropout_rate 是最后一个全连接层前的 dropout 层

补充:EfficientNet、EfficientNet网络详解、【一看就懂】EfficientNet详解。凭什么EfficientNet号称当今最强?、Depthwise卷积与Pointwise卷积

EfficientNet 简介相关推荐

  1. 集效率之大成的EfficientNet

    基于EfficientNet实现分类任务 目录 基于EfficientNet实现分类任务 EfficientNet简介 算法解析 模型优化目标 模型缩放算法 模型结构 MBConv结构 ConvNor ...

  2. 基于深度学习的岩石样本智能识别研究——第九届“泰迪杯”挑战赛B题优秀作品

    1 前言 1.1 研究背景 岩石是现代建筑业和制造业的重要原材料,除了作为原材料使用以外,还可以对其进行勘探开发挖掘岩油气藏,若能智能且准确地识别岩石岩性.计算岩石含油量,这将会是一笔巨大的社会财富. ...

  3. 独家 | 使EfficientNet更有效率的三种方法(附链接)

    作者:Dominic Masters翻译:王可汗校对:欧阳锦本文约3300字,建议阅读5分钟本文为大家介绍了提升EffcientNet效率和性能的三个策略. 在实践中有更好性能的EfficientNe ...

  4. AI:人工智能的多模态融合模型的简介、发展以及未来趋势

    AI:人工智能的多模态融合模型的简介.发展以及未来趋势 目录 人工智能的多模态融合模型的简介.发展以及未来趋势 多模态融合模型的简介 多模态融合模型的发展趋势 多模态常见应用分类 1.按照模态分类 2 ...

  5. yolov8 做图片分类和 ResNet Efficientnet 等常用分类网络的对比

    文章大纲 yolo v8 图片分类 简介与原理说明 训练代码 数据集的组织 多尺度训练 参考内容 ResNet 简介与原理说明 训练代码与使用说明 Usage EfficientNet 推理代码 其他 ...

  6. PyTorch:生态简介

    PyTorch生态简介 PyTorch的强大并不仅局限于自身的易用性,更在于开源社区围绕PyTorch所产生的一系列工具包(一般是Python package)和程序,这些优秀的工具包极大地方便了Py ...

  7. TensorFlow2微调EfficientNet

    文章目录 简介 安装 数据可视化 浏览数据 主成分分析 训练模型并保存 加载模型并预测 使用最新 EfficientNet 权重 封装 只取部分数据集训练 不同EfficientNet模型大小 参考文 ...

  8. ENAS:通过参数共享实现高效的神经架构搜索《EfficientNet Neural Architecture Search via Parameter Sharing》

    本文总结多篇相关博客:https://www.sohu.com/a/222705024_129720.https://zhuanlan.zhihu.com/p/60592822.https://blo ...

  9. EfficientDet(EfficientNet+BiFPN)论文超详细解读(翻译+学习笔记+代码实现)

    前言 在之前我们介绍过EfficientNet(直通车:[轻量化网络系列(6)]EfficientNetV1论文超详细解读(翻译 +学习笔记+代码实现) [轻量化网络系列(7)]EfficientNe ...

  10. 【项目实战课】基于Pytorch的EfficientNet血红细胞分类竞赛实战

    欢迎大家来到我们的项目实战课,本期内容是<基于Pytorch的EfficientNet血红细胞分类竞赛实战>.所谓项目课,就是以简单的原理回顾+详细的项目实战的模式,针对具体的某一个主题, ...

最新文章

  1. 国内网络环境优化qiime2安装过程-QIIME 2安装慢或无法下载的解决方案
  2. SAP MM 存储条件 - Room Temperature Vs Ambient
  3. LeetCode-数学-9. 回文数
  4. java并发之SynchronousQueue实现原理
  5. 我的Ubuntu9.10安装与配置
  6. 没有一部是烂片 香港最强水准的10部影片
  7. 实际案例演示:一行 Python 代码实现并行
  8. 使用Nexus2.x为Maven3.x搭建私服构件仓库
  9. mysql索引篇之覆盖索引、联合索引、索引下推
  10. CentOS7 安装 Jenkins( 构建 Vue 和 dotNET Core )
  11. 数组名和取数组名的区别
  12. Chrome用户不喜新版:宁用其他浏览器也不要用旧版本
  13. 程序员,该注意下啦!
  14. 反向题在测试问卷信效度_运动员积极心理品质结构模型与问卷信效度
  15. ps裁剪和裁切的区别_PS剪切、裁剪、裁切的区别
  16. mysql查询出的数据转换为数字,关于sql:在MySQL查询中将文本转换为数字
  17. 自旋锁(spin lock)学习
  18. RPG Maker MV之起始队伍设置
  19. stm32之中断系统
  20. 组件化 得到 DDComponent JIMU 模块 插件 MD

热门文章

  1. Mybatis---简单缓存了解
  2. Android NDK不得不说的秘密
  3. Python代码格式化工具autopep8安装及使用极简版
  4. 神棍节前夕,沃商店迎来1岁生日
  5. 虚拟机如何使用计算机中文件,如何从电脑往虚拟机复制文件
  6. mysql冒号_mysql语句中的冒号是什么意思?
  7. ajax removeclass,Ajax成功后的jQuery addClass/removeClass
  8. windows下 利用CoreAudio,Libmad,和3D环绕音效原理实现的MP3播放器
  9. 可伸缩系统的架构经验
  10. vue实现手机验证码登录