Loading...
墨滴

yzimm

2021/04/21  阅读:46  主题:默认主题

  • 作者 | 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
Model Size Vs ImageNet accuracy

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

共有的结构

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

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

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

!pip install tf-nightly-gpu
import tensorflow as tf
IMG_SHAPE = (2242243)
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个模块来制作架构
我们将使用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)
Architecture for EfficientNet-B0. (x2 means that modules inside the bracket are repeated twice)

EfficientNet-B1

Architecture for EfficientNet-B1
Architecture for EfficientNet-B1

EfficientNet-B2

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

EfficientNet-B3

Architecture for EfficientNet-B3
Architecture for EfficientNet-B3

EfficientNet-B4

Architecture for EfficientNet-B4
Architecture for EfficientNet-B4

EfficientNet-B5

Architecture of EfficientNet-B5
Architecture of EfficientNet-B5

EfficientNet-B6

Architecture of EfficientNet-B6
Architecture of EfficientNet-B6

EfficientNet-B7

Architecture of EfficientNet-B7
Architecture of EfficientNet-B7

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

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

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

Stage B1 B2 B3 B4 B5 B6 B7
1 32 32 40 48 48 56 64
2 16 16 24 24 24 32 32
3 24 24 32 32 40 40 48
4 40 48 48 56 64 72 80
5 80 88 96 112 128 144 160
6 112 120 136 160 176 200 224
7 192 208 232 272 304 344 384
8 320 352 384 448 512 576 640
9 1280 1408 1536 1792 2048 2304 2560

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

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

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

yzimm

2021/04/21  阅读:46  主题:默认主题

作者介绍

yzimm