系列文章目录

=======================================================
专题-端侧机器学习

第一节 端侧机器学习框架Tensorlfow Lite
第二节 轻量级网络模型之MobileNet系列
第三节 轻量级网络模型之ShuffleNet
第四节 轻量级网络模型之EfficientNet
第五节 Android应用APP: 基于MobileNet和EfficientNet的图像分类模型

=======================================================

轻量级网络模型之EfficientNet

  • 系列文章目录
  • 导读
  • 文章要点
  • 模型结构优化
  • Baseline model: EfficientNet
  • 复合模型缩放方法
    • 问题形式化定义
    • 复合缩放方法
  • 结果分析
  • 代码资源
  • 总结
  • References

参见文章: EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

导读

该文章也是研究计算资源受限场景下的网络模型设计, 然而与以往的众多研究思路不同(以往的研究大都是先提出一个高效的Building block, 然后再利用该building block来设计模型, 例如:MobileNet v1, MobileNet v2ShuffleNet, MnasNet等), 这篇文章研究的是: 计算资源受限场景下, 在各个Stage的building block确定的前提下, 如何同时优化模型的深度depth, 模型的宽度width以及模型的输入分辨率resolution从而使得模型获得最高的精度。这是一个非常有意思的研究问题, 如果该问题得以解决,则可以应用到其他各种各样的baseline卷积网络中以提升其精度。

值得注意的是,尽管之前已经有文章从单个因素出发, 研究其对模型Accuracy的影响 (例如: MobileNet v1中的width multipler实际上就是用来调控模型的宽度),但是,还尚未由文章系统地考虑这三个因素

文章要点

1.提出了一种新的缩放方法: 通过一个简单但十分有效的符复合系数来统一地缩放depth, width, resolution的尺寸。
2.通过神经网络架构搜索NAS设计了baseline model, 并将该缩放方法应用后, 在提升精度的同时所需的参数两大大减少。 并且该缩放方法应用到其他模型(MobileNet, ResNet等)上也有很好的效果。

模型结构优化

Baseline model: EfficientNet

baseline 的设计借鉴了MnasNet: 通过多目标NAS来同时优化Accuracy和FLOPS, 优化目标为:

其中: T为目标FLOPS, 参数w用于trade off AccuracyFLOPS
下表是EfficientNet-B0的配置:
每一行代表一个包含Li 层的stage i, 其中每层的输入分辨率为 Hi x Wi, 输出通道数为Ci

该网络中的building block实际上是这篇文章中提出的mobile inverted bottleneck MBConv, 同时作者还在其基础上添加了channel方向的自注意力机制: Squeeze and Excitation

: **
1.MobileNet V3中也是用NAS, 也是借鉴了MnasNet这篇文章。
2.MobileNet V3 中在其building block中也添加了Squeeze and Excitation自注意力机制机制。

复合模型缩放方法

这篇文章最核心的就是所提出的复合缩放方法,用于求解: 资源约束条件下, width, depth, resolution的最优组合从而获得最优模型。

两个Observation:
(1) 放大网络的 width, depth, resolution中的任意一个参数都能够提升模型的Accuracy, 但是随着网络越来越复杂,Accuracy的提升效果越来越不明显。
(2) 为了获得更好的AccuracyEfficiency, 在缩放过程中, 非常有必要同时考虑width, depth, resolution, 而不是只考虑其中任意一个因素。

这两个Observations 为 符合模型缩放方法的提出铺平了道路。

问题形式化定义

一个基本的事实:经典的卷积网络结构一般由多个Stage组成, 每个Stage中所有的层配置完全相同。例如ResNet。基于此,卷积网络可以定义如下:

其中, FiLiF_{i}^{Li}FiLi​ 表示Stage i 中层Fi重复Li次这样一个操作, 层Fi的输入尺寸为<Hi, Wi, Ci>。 之前已经提过,这篇文章的重点不像其他文章一样探索怎么设计Fi, 而是在Fi已经确定前提下(可以看作是简化问题复杂度的一个假设), 探索如何扩展网络width (i.e. Ci), depth (i.e.Li), resolution (i.e. Hi, Wi)以最求最大Accuracy。即使这样搜索空间依然很大,为了进一步减小搜索空间, 假设所有的层以相同的常数缩放。 这样一来,待优化的参数减少为3个, 优化问题如下:

其中待求解的d, w, r 分别表示baseline网络的depth, width, resolution的缩放系数。

复合缩放方法

作者提出使用复合系数ϕ\phiϕ来统一地缩放width, depth, resolution的缩放系数w, d, r, 具体如下:

其中 α\alphaα, β\betaβ, λ\lambdaλ 为常数,可以通过grid search来确定。

再来分析上面公式中的约束是怎么来的
目标是在资源有限的条件下如何将额外的资源分配给w, d, r, α≥1\alpha \geq 1α≥1, β≥1\beta \geq 1β≥1, λ≥1\lambda \geq 1λ≥1很好理解,ϕ=1\phi=1ϕ=1时表示相应的参数不变,实际上就是baseline 模型。

在常规convolution中, FLOPS与d, w2w^{2}w2, r2r^{2}r2 成正比, 具体将, 将d增加1倍,则FLOPS变为原来的2倍; 将w, r分别增加1倍,则FLOPS变为原来的4倍。 , d⋅w2⋅r2=2d \cdot w^{2} \cdot r^{2}=2d⋅w2⋅r2=2 实际上限制了 α\alphaα, β\betaβ, λ\lambdaλ 这3个参数的搜索空间, 卷积架构中卷积操作的计算代价基本上可以反映整个模型的计算代价, 这样一来意味着: FLOPS变为原来的2ϕ2^{\phi}2ϕ 倍, 可以看到,该约束实际上是FLOPS约束的具体化。

应用该方法的具体步骤为:

计算资源越多, 则 ϕ\phiϕ 的可取值的上限就越大。 如果直接在α\alphaα, β\betaβ, λ\lambdaλ 参数空间上搜索,则搜索的代价太高, 作者提出的方法克服了这个问题先在一个小的网络上进行小的grid search , 然后将其固定, 再通过比例系数$\phi$来统一调节

结果分析


可以看到, 在FLOPS相同的前提下, 相比于单一调节其中一个因素, compound scaleing 极大提升了Accuracy。

可以看到 这种compound scaling 方法在经典的convolution 网络上也具有良好的表现。


可以看到, 采用所提出的EfficientNet作为baseline 网络, 再结合compound scaling 方法 (ϕ\phiϕ 取值从小到大,FLOPS相应增大, 依次得到: EfficientNet-B0, EfficientNet-B1, EfficientNet-B2, EfficientNet-B3, EfficientNet-B4, EfficientNet-B5, EfficientNet-B6, EfficientNet-B7), 最终的模型效果相比于其他经典的方法准确率更高而参数两更少。

代码资源

1.原作者代码,https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet

总结

未完待续。

References

1.EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
2.MnasNet: Platform-aware neural architecture search for mobile.

轻量级网络模型之EfficientNet相关推荐

  1. 轻量级网络模型MobileNet发展脉络(V1-V2-V3)

    卷积神经网络发展 卷积神经网络被广泛应用在图像分类.目标检测等视觉任务中,并取得了巨大的成功.然而,卷积神经网络通常需要较大的运算量和内存占用,在移动端以及嵌入式设备等资源受限的环境中受到限制,因此需 ...

  2. GhostNet : 轻量级网络模型,性能超越MobileNetV3(CVRP2020, 华为诺亚)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 原文链接:https://arxiv.org/pdf/1911.11907.pdf 代码:https: ...

  3. 谷歌开源新模型 EfficientNet:图像识别效率提升 10 倍,参数减少 88%

    转自:https://www.infoq.cn/article/w3-7SmYM6TecLmCh9QHO 卷积神经网络通常是再有限的资源下进行开发,然后在条件允许的情况下将其扩展到更大的计算资源上以获 ...

  4. 【神经网络】(17) EfficientNet 代码复现,网络解析,附Tensorflow完整代码

    各位同学好,今天和大家分享一下如何使用 Tensorflow 复现 EfficientNet 卷积神经网络模型. EfficientNet 的网络结构和 MobileNetV3 比较相似,建议大家在学 ...

  5. 轻量级模型设计与部署总结(关键字定义/架构理解/高效CNN)

    点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心[模型部署]技术交流群 后台回复[模型部署工程]获取基于TensorRT的分类.检测任务 ...

  6. 轻量级神经网络MobileNet全家桶详解

    本文是转载文章,转载自从MobileNet看轻量级神经网络的发展,删除了文中冗余的部分,加入许多自己的理解,有些部分也通过pytorch进行了实现,并通过引入具体的计算更清晰的反映出轻量级神经网络的本 ...

  7. 轻量级模型设计与部署总结

    前言 一些关键字定义及理解 计算量 FLOPs 内存访问代价 MAC GPU 内存带宽 Latency and Throughput 英伟达 GPU 架构 CNN 架构的理解 手动设计高效 CNN 架 ...

  8. 轻量级模型设计/部署

    这里在一些经典的轻量级网络论文阅读理解的基础上,对不同硬件平台部署轻量级模型相关的经验进行了总结. 轻量级网络的核心是在尽量保持精度的前提下,从体积和速度两方面对网络进行轻量化改造.关于如何手动设计轻 ...

  9. 图片分类网络ViT、MobileViT、Swin-Transformer、MobileNetV3、ConvNeXt、EfficientNetV2

    文章目录 一.Vision Transformer 二.Swin-Transformer 三.MobileViT 3.1 为什么引入CNN与Transformer的混合架构 3.2 性能对比 3.3 ...

  10. 【读点论文】PP-LCNet: A Lightweight CPU Convolutional Neural Network,面向CPU级的技巧结合下的低延迟,较高精度模型

    PP-LCNet: A Lightweight CPU Convolutional Neural Network 提出了一个基于MKLDNN加速策略的轻量级CPU网络,命名为PP-LCNet,它提高了 ...

最新文章

  1. dw生日祝福网页制作教程_明星祝福生日视频制作
  2. referenced from 异常
  3. Codeforces Round #762 (Div. 3)
  4. Bootstrap 折叠插件Collapse 调用方式
  5. Java B2B2C o2o多用户商城 springcloud架构-docker-feign-hystrix(六)
  6. POJ1209 UVA158 Calendar题解
  7. Linux shell脚本sed使用
  8. Nginx源码编译及安装
  9. 打造最舒适的webview调试环境 1
  10. mysql水平分表实践记录_MYSQL 分表实践
  11. 腾讯WiFi管家 v3.7.3
  12. 使用百度云API进行人脸对比
  13. Github 标星 3w+,热榜第一,使用 Python实现所有算法!
  14. 杭州电子科技大学计算机学硕复试,2019杭州电子科技大学计算机软件考研复试手册.docx...
  15. 花生壳实现内网穿透教程
  16. 全国电话区号->地址映射表
  17. Python 日期格式总结
  18. linux 系统速度慢,Linux运维人员你知道Linux系统运行速度太慢的原因吗?
  19. Spring Cloud 高并发优化流程
  20. 2.4 放大电路静态工作点的稳定

热门文章

  1. centos7.0KVM虚拟化
  2. 动态数据源四种实现方案对比
  3. codevs 1576 最长上升子序列的线段树优化
  4. 设计模式--组合模式C++实现
  5. 关于fineui中在gird中插入按钮的知识
  6. VS2010启动总是遇到异常提示的解决
  7. redis 数据结构笔记
  8. Winsw将jar包部署为windows服务
  9. VS中使用码云gitee建立源代码管理
  10. 带你一起来理解:函数去抖(debounce)和 函数节流(throttle)的作用和区别