【论文阅读】EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

EfficientNet是一种高效卷积神经网络,由Google团队于2019年提出,旨在通过网络深度、宽度和分辨率的均匀缩放提升模型性能。在ImageNet上表现出色,相比同类模型更小、更快。

EfficientNet

简介

paper:EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
conference:2019 ICML
团队:Google Research, Brain Team
代码官方源码
研究内容:网络的拓扑结构和尺寸大小设计是决定性能的关键点,本文给出一种方案,先用NAS搜索出一个较小的表现好的拓扑结构,再给出一个缩放的办法,使放大后的网络模型也能获得较好的效果。
之前的工作:ResNet系列,GPipe,NASNet,MnasNet,MBConv
之后的工作:EfficientDet (同作者), ResNeSt, RegNet

贡献点

  1. depth (network length), width (channel), resolution (H*W, 一般H和W是相等的) 均匀缩放效果最好。
  2. ImageNet精度最高,且更小(8倍)更快(6倍)
    模型优势

内容细节

  1. 初始网络efficient-b0是用神经架构搜索NAS搜出来的。baseline
  • 优化目标:准确率和FLOPS, A C C ( m ) ∗ [ F L O P S ( m ) / T ] w ACC(m)*[FLOPS(m)/T]^w ACC(m)[FLOPS(m)/T]w,T是target FLOPS, w = − 0.07 w=-0.07 w=0.07是一个tradeoff
  • 这个结构跟MnasNet很像,主要的block是MBConv
  1. 缩放策略:同时均匀放大width,channel,resolution
    模型缩放
  • 思想
    1)depth:更深的网络能捕捉到更丰富、更复杂的特征,而且在新任务上泛化性能比较好;但难训练。
    2)width:channel多的话能捕捉到更细粒度(fine-grained)的特征,容易训练;但可能捕捉不到high-level特征。
    3)resolution:分辨率会直接影响到精度。GPipe用了 480 ∗ 480 480*480 480480,目标检测里甚至有 600 ∗ 600 600*600 600600
  • 具体公式: α , β , γ \alpha, \beta, \gamma α,β,γ是在 [ 0 , 1 ] [0, 1] [0,1]之间grid search得到的固定值,文中约束了 ( α ∗ β 2 ∗ γ 2 ) ϕ ≈ 2 (\alpha * \beta^2 * \gamma^2)^\phi \approx 2 (αβ2γ2)ϕ2,这样总体的FLOPS大约增加 2 ϕ 2^\phi 2ϕ,可以根据自己拥有的资源大小设置 ϕ \phi ϕ.
    缩放公式
    ϕ = 1 \phi=1 ϕ=1时,网格法搜出来efficientnet-b0的最佳参数是 α = 1.2 , β = 1.1 , γ = 1.15 \alpha=1.2, \beta=1.1, \gamma=1.15 α=1.2,β=1.1,γ=1.15.
  1. 训练细节:

RMSProp optimizer with decay 0.9 and momentum 0.9; batch norm momentum 0.99; weight decay 1e-5;
initial learning rate 0.256 that decays by 0.97 every 2.4 epochs.
dropout #网络越大越要加强正则,b0-0.2, b7-0.5

  1. 训练trick:
    1)2.4 epoch是因为对应ImageNet约三百万张图
    2)swish激活
    3)fixed AutoAugment策略(CVPR19)(据说去掉这个trick b0的准确率会跌到74%以下)
    4)随机深度stochastic depth,存活概率0.8(ECCV16)

实验结果

  1. ImageNet分类结果ImageNet分类
  2. 效率比较
    效率对比
  3. transfer learning数据集:pre-train + fine tune
    transfer learning数据集

其他

1、b1-b7的相关参数

params_dict = {
      # (width_coefficient, depth_coefficient, resolution, dropout_rate)
      'efficientnet-b0': (1.0, 1.0, 224, 0.2),   # 跟论文不太一致
      'efficientnet-b1': (1.0, 1.1, 240, 0.2),
      'efficientnet-b2': (1.1, 1.2, 260, 0.3),
      'efficientnet-b3': (1.2, 1.4, 300, 0.3),
      'efficientnet-b4': (1.4, 1.8, 380, 0.4),
      'efficientnet-b5': (1.6, 2.2, 456, 0.4),
      'efficientnet-b6': (1.8, 2.6, 528, 0.5),
      'efficientnet-b7': (2.0, 3.1, 600, 0.5),
  }

2、GitHub上有pytorch实现,并提供了相应模型,可以直接使用。code
3、后续提出了EfficientDet做目标检测(EfficientDet: Scalable and Efficient Object Detectioncode

应用

1、直接把ImageNet训练好的模型拿来,对没有标签的数据提特征。
2、如果自己要做的任务有标签数据,可以fine tune做transfer learning。
3、模型选择: 可以b0先试一下,然后估算资源限制,选择能承受的 ϕ \phi ϕ,直接用预训练的模型,或者从b0增长一个模型自己训练。
4、自己训练efficientnet时候注意参考作者的参数。
5、训练别的模型可能这套参数也可以试一下?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值