【论文解读】一文看懂EfficientnetB0~B7模型所有细节

  • 作者 | Vardan Agarwal

  • 译者 | 柚子

论文原文:https://arxiv.org/abs/1905.11946

官方源码:https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet

pytorch实现:https://github.com/lukemelas/EfficientNet-PyTorch

前言

本文可视化了EfficientnetB0~B7模型的所有结构,让你轻松拿捏Efficientnet。

介绍

我在Kaggle比赛中翻阅笔记本,发现几乎每个人都在使用EfficientNet作为他们的骨干,而在此之前我还没有听说过。EfficientNet是由谷歌人工智能提出,他们试图提出一种如其名字所暗示的更有效的方法,同时改进现有的技术成果。一般来说,模型做得太宽,太深,或者分辨率很高。增加这些特征最初有助于模型的建立,但很快就会饱和,所建立的模型只是有更多的参数,因此效率不高。在EfficientNet中,这些参数都以一种更加有效的方式逐渐增加。

模型的缩放

(a)是一个基线网络;(b)-(d)是传统的缩放方法,只增加网络宽度、深度或分辨率的一个维度。(e)是我们提出的复合缩放方法,以一个固定的比例统一缩放所有三个维度。

不明白发生了什么?别担心,一旦看到了整个模型的架构,你就会明白。但首先,让我们看看效果怎么样。

Model Size Vs ImageNet accuracy

由于参数数量大大减少,该系列的模型效率很高,也能提供更好的结果。

共有的结构

任何网络的最关键的都是它的stem,确定了之后才会进行后面的实验,这个结构在所有八个模型和最后一层都是共同的。

EfficientnetB0~B7都包含这7个区块。这些块还有不同数量的子块,当我们从EfficientNetB0到EfficientNetB7时,子块的数量会增加。

下面代码可以看清楚模型结构:

!pip install tf-nightly-gpu

import tensorflow as tf
IMG_SHAPE = (224, 224, 3)
model0 = tf.keras.applications.EfficientNetB0(input_shape=IMG_SHAPE, include_top=False, weights="imagenet")
tf.keras.utils.plot_model(model0) # to draw and visualize
model0.summary() # to see the list of layers and parameters

如果计算EfficientNet-B0的总层数,总数为237,而EfficientNet-B7的总层数为813!!。不过不用担心,所有这些层都可以由下面的5个模块和上面的stem结构组成。

我们将使用5个模块来制作架构

  • 模块1–这被用作子块的起点。
  • 模块2–这被用作所有7个主要块的第一个子块的起点,除了第1个。
  • 模块3–这是与所有子块的skip connection。
  • 模块4–用于组合第一个子块中的skip connection。
  • 模块5–每个子区块都以skip connection的方式与其前一个子区块相连,并使用该模块将它们合并。

这些模块被进一步组合成子块,这些子块将在区块中以某种方式使用。

第1子块–这只用作第一块中的第一个子块。
第2子块–这被用作所有其他区块的第一个子块。
第3子块–用于所有子块中除第一个子块外的任何子块。

到目前为止,我们已经指定了所有将被组合起来创建EfficientNet模型的内容,所以我们开始吧。

EfficientNet-B0

Architecture for EfficientNet-B0. (x2 means that modules inside the bracket are repeated twice)

EfficientNet-B1

Architecture for EfficientNet-B3

EfficientNet-B2

它的结构与EfficientNet-B1相同,它们之间唯一的区别是feature maps(通道)的数量不同,从而增加了参数的数量。

EfficientNet-B3

Architecture for EfficientNet-B3

EfficientNet-B4

Architecture for EfficientNet-B4

EfficientNet-B5

Architecture of EfficientNet-B5

EfficientNet-B6

Architecture of EfficientNet-B6

EfficientNet-B7

Architecture of EfficientNet-B7

很容易看出所有模型之间的差异,他们逐渐增加了子块的数量。可以通过打印这个模型的summary,然后结合上面的模型结构以便于对模型有更好的了解。下表表示EfficientNet-B0中卷积运算的核大小以及分辨率、通道和层数。

Kernel Size, resolution, channels, and no. of layers information.

所有模型的分辨率都保持一致。层数已经在上面的数字中显示了。通道的数量是不同的,它是从每个模型的summary中看到的信息计算出来的,如下所示。

StageB1B2B3B4B5B6B7
132324048485664
216162424243232
324243232404048
440484856647280
5808896112128144160
6112120136160176200224
7192208232272304344384
8320352384448512576640
91280140815361792204823042560

在结束之前,我再次从其研究论文中附上了另一张图片,显示了它与其他先进技术相比的性能,同时也减少了参数的数量和所需的FLOPS数量。

英文原文:https://towardsdatascience.com/complete-architectural-details-of-all-efficientnet-models-5fd5b736142

请长按或扫描二维码关注本公众号!

  • 7
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值