EfficientNet-ICML2019【ImageNet表现最优,参数量只有原来的1/8】

这篇论文来自ICML2019,Google Brain的一篇文章。网上很多文章有介绍,标题都是非常吸睛,不仅仅降低了网络参数,还能提高神经网络最后的指标。究竟是什么鬼斧神工的改动,竟然能做到如此之好的效果呢?且听我慢慢道来。

大纲

  • 目的
  • 方法
  • 实验
  • 结论
  • 参考

目的

这篇文章目的是通过自动的方法,在现有神经网络的基础上,以不超过给定计算力的基础下,尽最大可能提高神经网络的指标
PS:这里说是自动,但是其实还是有一个隐藏的超参数需要调整。这个超参数就会文章下面提到。

EfficientNet结果

不同方法在ImageNet数据集上的表现。红线表示本文的方法。

方法

模型缩放

模型缩放(model scales)是文章中用来提高神经网络指标的方法。那么什么事模型缩放呢?
其实这个非常的简单,大家也经常能够见到模型缩放的方法。首先最简单的就是增加神经网络模型的深度,resnet-50,resnet152就是通过放大神经网络模型的深度来提高神经网络模型的最终指标。

图一 模型缩放

其实模型缩放的方法不仅仅是增加神经网络模型的深度,还有扩大神经网络模型的宽度,甚至包括提高输入数据的分辨率这三种方法都是模型缩放的方法。我相信看到这里,大家都很熟悉模型缩放的方法了。不过,我们很熟悉使用其中单一的一种模型缩放方法来提高神经网络模型的最终指标。但是如果我们混合使用这三种方法,会不会有更好的模型提升效果呢?这篇文章做了实验告诉我们,混合模型缩放方法比单一模型缩放方法对神经网络指标有更大的提升

单一模型缩放实验结果

图二 单一模型缩放

图二中,横坐标代表神经网络模型计算力的变化,纵坐标代表神经网络模型指标(Accuracy)的变化。第一幅图代表放大神经网络模型宽度对神经网络模型的指标的影响,每个点代表不同的放大的倍率。第二幅图代表放大神经网络模型深度对神经网络模型的指标的影响。第二幅图代表放大输入神经网络模型图像的分辨率对神经网络模型的指标的影响。
结论:单一模型缩放方法能够提高神经网络模型最后指标,但是放大的倍数越大效果越不明显

混合模型缩放实验结果

图三 混合模型缩放

图三中,横坐标代表神经网络模型计算力的变化,纵坐标代表神经网络模型指标(Accuracy)的变化。四种不同的颜色请参考图例。图例中的d代表该神经网络模型相对于base网络模型,深度的倍率,r代表该神经网络模型相对于base网络模型,分辨率的倍率。不同的坐标点代表不同的网络宽度。
图三可以明显的看出混合了三种模型缩放方法的神经网络模型,最后的指标也是最好的。
结论:使用混合模型缩放方法比使用单一模型缩放方法,对神经网络模型最后的指标提升最大。效果最好

自动混合模型缩放

现在我们已经知道混合模型缩放的效果会比单一模型缩放的效果更佳好。但是这篇文章可是要自动混合模型缩放,来提高神经网络模型的效果哦。
如何自动确定缩放的比例呢?如何确定混合模型缩放中三种方法各种的占比呢?
接下来的内容就会提到,要完成自动混合模型缩放需要了解三个公式。

公式一

公式一

公式一说明了一个神经网络的组成。
代表一个神经网络模型。
每一层的输出可以用来表示,,其中代表第层神经网络的输入,代表第层神经网络的操作(比如卷积,Relu,BN)
那么整个神经网络就由一层层的输出组成。公式上就是
中分别代表输入图像的高度宽度Channel的维度
原文公式中有个,这个其实代表神经网络中的stage部分。这个可以参考resnet网络结构。我们知道resnet中由block结构来完成skip connect操作。在同一个stage中包含多个block。并且同一个stage中每个block的都一样。所以可以用来简化来表示神经网络。
Resnet 网络结构

其中conv2_x,conv3_x,conv4_x,conv5_x就代表不同的stage。

公式二

公式二

公式二讲到了要自动混合模型缩放缩需要考虑的约束条件。

  • 第一个约束条件,就是公式一中表示神经网络模型的符号。但是细心同学会发现这里多了一些参数分别是。上一章《模型缩放》中有用到这些字母。分别代表对base神经网络中深度放大的倍数,宽度放大的倍数,输入图像分辨率放大的倍数。
    PS:文章为了简化操作,对每一层stage都使用相同的放大倍数。
  • 第二个约束条件,显存小于目标显存
  • 第三个约束条件,计算力小于目标计算力(模型计算速度)

目标是能够最大化神经网络模型N的Accuracy(算法指标)。

公式三

公式三

公式三说明了如何确定
由公式二,其实我们知道在确定显存大小和计算力的条件下。只需要选择合适的这三个参数就可以最大可能提升神经网络模型指标。但是如何确定呢?
这三个参数实在是太多,这篇文章不是说能够”自动“提升神经网络模型指标么?所以文章把这三个参数做了一些调整,分布用来表示,同时那么还有一个共同的上标。首先这三个参数是可以通过网格搜索得到。接下来可以通过改变来对网络进行便捷的统一放大与缩小。现在可以完成对神经网络的混合模型缩放,但是如何精准的控制神经网络所占用的显存计算力呢?我们可是要求混合模型缩放后的模型在我们的目标显存目标计算力之下。
这里看一下公式三的约束条件
PS:深度,宽度,分辨率增大的倍数对应于计算力增大的倍数是不相同的。其中深度与计算力增大的倍数为线性关系宽度与分辨率与计算力增大的倍数为平方关系
文章中希望的时候,混合模型缩放后的计算力是原来base神经网络模型计算力两倍

自动提升神经网络指标的具体实现流程

具体实现方法

这里文字说的很清楚。
首先,锁定,用网格搜索来确定
其次,锁定,设置不同的来得到不同的指标提升的网络。

自动提升神经网络指标的具体实现

第一步,需要确定base model。文章是基于CVPR2019的MnasNet搜索一下得到的base model。

EffeicientNet base版本结构

第二步,就是通过调整得到提升的网络了。

实验

实验一 EffeicientNet在ImageNet上的表现

实验一结果

结果很完美,指标提升同时参数量下降很多。
但是这里不经有个疑问,base model的参数和指标是咋样的呢?


MnasNet 结果

PS:之前在网上查阅其他资料的时候,标题给我的感觉是在ResNet上使用文章的方法就可以减少参数,提高指标。最后到这才发现,原来就是选了一个参数极少同时指标不错的网络作为base model。base model 选的好,提高指标没烦恼。

实验二 自动混合模型缩放对ResNet和MobileNet的提升

实验二结果

混合模型缩放效果好于单一模型缩放。

实验三 不同数据集上EffeicientNet的表现

实验三结果

在不同数据集上也相当不错

实验四 混合模型缩放与单一模型缩放的可视化结果对吧

实验四 可视化结果

实验四 结果比较

可视化结果也表现相当不错。

结论

本文的自动化混合模型缩放的方法在不同的数据集,不同的CNN模型和可视化结构上都有着很好的表现。但是要想自己的神经网络模型指标提高同时参数量下降,还是得找一个很好的base model才行。

参考

论文

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

GitHub源码

  1. EfficientNet-PyTorch

网络资料

  1. 論文筆記 : Efficient Net Rethinking-mc.ai
  2. 谷歌EfficientNet缩放模型,PyTorch实现出炉,登上GitHub热榜-量子位

你可能感兴趣的:(EfficientNet-ICML2019【ImageNet表现最优,参数量只有原来的1/8】)