轻量级网络:EfficientNet

时间:2024-03-16 20:52:58

Intrudoction

在论文中,作者介绍了放大卷积神经网络是一种常见的提高模型准确率的方法。但是在传统的方法中,通常只是在某单一维度上进行放大(宽度width,深度depth,图片分辨率resolution)宽度就是网络中的过滤器的数量,因为增加了过滤器的数量,该层的输出的通道数就相应变大了,深度可以理解为整个网络结构的长度,及时网络中layer的数量。那么为什么在这几个维度上进行放大可以提高准确率?因为增加了图片的分辨率或增加了网络的宽度,网络就能够捕获到更过细节的特征,而增加网络的深度能够捕获到更丰富和更复杂的特征。
虽然也可以任意的放大两个或三个维度,但是因为维度变多,设计空间也随之变大,因此随意的放大多个维度需要耗费较大的人力来调整,并且也通常会一个次优的精度和效率。因此作者通过研究实验提出了一种新的缩放方法——复合缩放方法(compound scaling method)。
下图所展示的便是放大神经网络的几种方法:
轻量级网络:EfficientNet

 但是因为网络结构的缩放并不会改变具体某一层的卷积操作,所以一个良好的基线网络是必须的,作者在论文中也提出了一种新的基线网络结构——EfficientNet

Compound Model Scaling

论文具体介绍了单独在某个维度进行放大的方法以及他们所提出的复合缩放的方法。

问题描述:卷积网络的第i层可以定义为轻量级网络:EfficientNet,其中轻量级网络:EfficientNet是对应的卷积层操作,轻量级网络:EfficientNet​是输出张量,轻量级网络:EfficientNet是输入张量,输入的shape为轻量级网络:EfficientNet轻量级网络:EfficientNet表示尺寸大小,轻量级网络:EfficientNet表示通道数。

N表示一系列层组成的卷积网络:轻量级网络:EfficientNet

卷积网络中的层经常被划分为多个stages,并且每个stage的所有层共享相同的结构(跟ResNet-50一样,ResNet有5个stages,每个stage的所有层有相同的卷积类型,除了第一层有一个下采样),因此我们可以将上面的卷积网络定义为如下形式:

轻量级网络:EfficientNet

 轻量级网络:EfficientNet表示stage i中Fi层重复了Li次(可以参考ResNet的网络结构);s表示总共有s个stage。

不像规则的ConvNets设计集中在找到最好的网络层Fi,模型缩放的方法是通过length,width或则resolution进行放大但不改变Fi,Fi​事先已经在基线网络中定义好的(因为缩放不再改变Fi,所以基线网络很重要,这也是作者所说要提出新的网络结构EfficientNet的原因)。虽然通过固定Fi​,模型缩放简化了资源约束的设计问题,但是要来探索每一层的Hi,Wi,Ci,Li仍然有很大的设计空间,为了更进一步减小设计空间,作者限制所有层都统一以一个常量比例缩放,目标是在给定资源预算下最大化模型精度,可以描述为如下问题:

轻量级网络:EfficientNet

 其中,d,w,r分别是网络对于宽度、深度和分别率的缩放系数,而轻量级网络:EfficientNet则是在基线网络中预先定义好的参数。

单独在某一维度进行缩放

  •  Depth(d):缩放网络深度是许多卷积网络中最常用的方法。更深的卷积网络能够捕获到更丰富和复杂的特征,但是更深的网络由于存在梯度消失的问题而难以训练。尽管有一些方法可以解决梯度消失(例如 跨层连接skip connections和批量归一化 batch normalization),但是对于非常深的网络所获得的准确率的增益会减弱。例如ResNet-1000和ResNet-101有着相近的准确率尽管depth相差很大。下图的中间的曲线图表示用不同的深度系数d缩放模型的准确率曲线,并且表明了对于非常深的网络,准确率的增益会减弱。
  • Width(w):缩放网络宽度对于小规模的网络也是很常用的一种方式。更宽的网络更够捕捉到更多细节的特征,也更容易训练。很宽但很浅的网络结构很难捕捉到更高层次的特征。下图中左边的曲线图则是作者的不同宽度系数实验结果曲线,当w不断增大的时候,准确率很快就饱和了。
  • Resolution(r):使用更高分辨率的图像,网络能够捕获到更细粒度的特模式。下图中右边的曲线图则是作者的不同分辨率系数实验结果曲线,对于非常高分辨率的图像,准确率的增益会减弱。(r=1.0表示224x224,r=2.5表示560x560)。

轻量级网络:EfficientNet

 通过以上实验得出结论1:对网络深度、宽度和分辨率中的任一维度进行缩放都可以提高精度,但是当模型非常大时,这种放大的增益都会减弱

复合缩放

  • 复合缩放Compound Scaling:作者通过实验发现缩放的各个维度并不是独立的。直观上来讲,对于分辨率更高的图像,我们应该增加网络深度,因为需要更大的感受野来帮助捕获更多像素点的类似特征。为了证明这种猜测,作者做了一下相关实验:比较宽度缩放在不同深度和分辨率之下对准确率的影响。
    轻量级网络:EfficientNet

通过上图的结果我们可以看到d=2.0,r=1.3时宽度缩放在相同flops下有着更高的准确率。
得到结论2:为了达到更好的准确率和效率,在缩放时平衡网络所有维度至关重要。

在本篇论文中,作者提出的新的复合缩放方法使用了一个复合系数ϕϕ,通过这个系数按照以下原则来统一的缩放网络深度、宽度和分辨率:

轻量级网络:EfficientNet

其中α,β,γ是通过小网格搜索确定的常数,而ϕ是一个特定的系数,用于控制模型缩放能够使用资源的使用量。α,β,γ说明了怎么分配资源给width,depth,resolution。并且常规的卷积操作的FLOPS(每秒浮点数计算)是和轻量级网络:EfficientNet成比例的,加倍深度会使得FLOPS加倍,但是加倍宽度或分辨率会使得FLOPS加4倍。作者得出结论,使用上面的等式(3)来缩放卷积网络,FLOPS会增加(α⋅β^2⋅γ^2)^ϕ轻量级网络:EfficientNet。在本论文中,作者限制α⋅β^2⋅γ^2≈2,因此对于任意ϕ,FLOPS大约增加2^ϕ倍。

EffcientNet Architecture

在论文的这部分作者介绍了他们所提出的新的网络模型——EfficientNet。
下图就是作者所提出的EfficientNet的基线网络结构。
轻量级网络:EfficientNet
受到MnasNet的启发,作者利用多目标的神经网络结构搜索(能够同时优化精度和FLOPS)来开发基线网络。使用和MnasNet相同的搜索空间并将轻量级网络:EfficientNet作为优化目标,其中ACC(m)和FLOPS(m)分别表示模型m的准确率和FLOPS,T是目标FLOPS,w是用于权衡准确率和FLOPS的超参数,w=-0.07。不像MnasNet中的优化目标,这里优化的是FLOPS而不是延迟,因为没有针对任何特定硬件设备。利用这个搜索方法得到了一个高效的网络——EfficientNet-B0。因为所使用的搜索空间和MnasNet相似,所以得到的网络结构也相似,不过由于FLOPS目标(目标FLOPS为400M)更大,因此EfficientNet-B0也更大一些,其主要构建块就是移动倒置瓶颈MBConv(可以从上面的网络结构图中看到MBConv为主要部分)。

补充:移动倒置瓶颈卷积(MBConv)的主要结构如下图所示,主要有带有SE(squeeze-and- excitation)和不带SE的。MBConv的开始部分(expand phase)和输出部分(output phase)都使用的是1X1卷积核大小的卷积层,括号内的k5x5/k3x3表明了中间深度卷积(DWConv)所使用的卷积核大小
轻量级网络:EfficientNet

在提出基线网络EfficientNet-B0之后,就可以将前面提出的复合缩放的方法应用在基线网络上,不断放大得到EfficientNet-B1到B7。主要的放大方式如下

  • step1:假设有两倍可利用的资源(相对于未进行放大的基线网络而言),先设ϕ=1,在前面的等式(2)和(3)的基础上对α,β,γ进行小范围搜索,最后找到在α⋅β^2⋅γ^2≈2条件下对于EfficientNet-B0最优的值:α=1.2,β=1.1,γ=1.15
  • step2:然后固定α,β,γ为常数不变,在式子(3)的基础下通过改变ϕ来放大基线网络,从而得到EfficientNet-B1到B7。

值得注意的是,直接在一个大模型上搜索得到α,β,γ 可能会导致一个更好的表现,但是搜索成本会很高,他们的方法解决了这个问题——STEP 1时只在小的baseline网络中做了一次搜索得到α,β,γ,然后对于其他的模型都使用的是相同的α,β,γ,只是通过ϕ来调整模型的大小和FLOPS。

Experiments

在实验阶段作者分别分别在已有的卷积网络(MobileNets和ResNets)和本文提出的EfficientNet网络上验证复合放大的方法。

1.下图展示了单维度的缩放和复合缩放在不同卷积网络上对准确率的提高。
轻量级网络:EfficientNet

2.采用了和MnasNet相似的设置对EfficientNet模型在ImageNet数据集上进行训练

  •     RMSProp优化器,decay为0.9,momentum为0.9;
  •     batch norm momentum为0.99;
  •     weight decay为1e-5;
  •     初始学习率为0.256,并且每2.4个epoches衰减0.97;
  •     **函数使用swish,以及使用固定的增强技术,随机深度( survival probability 为0.8),同时线性地增加dropout比率从EfficientNet-B0的0.2到EfficientNet-B7的0.5。

下表展示了所有通过Efficien-B0缩放的EfficientNet模型的性能,可以看到EfficientNet模型相比其他卷积网络有着更少的参数和FLOPS,但却有着相近的准确率。

其中的top-1和top-5精度的含义:ImageNet数据集有大概1000个分类,而模型预测某张图片时,会给出1000个概率,所谓的Top-1 Accuracy是指排名第一的类别与实际结果相符的准确率(Top-1也就是我们通常所说的精度),而Top-5 Accuracy是指排名前五的类别包含实际结果的准确率(Top-5则范围更大,对于某一个预测结果只要排名前5的概率中包含了实际类别,那么就正确)。

 轻量级网络:EfficientNet

 下面两张图分别展示了参数-准确率 和 FLOPS-准确率曲线,其中缩放后的EfficientNet模型都以更少的参数和FLOPS达到了更好的准确率。

轻量级网络:EfficientNet轻量级网络:EfficientNet

3.作者还在一些常用的数据集上进行评估了EfficientNet,通过使用在ImageNet上与训练好的模型,然后在新的数据集上面微调。

下表展示了EfficientNet去迁移学习的性能:
和公共可用模型相比(例如NASNet-A和Inception-v4),EfficientNet都达到了更好的准确率,但平均参数少了4.7倍(最多相差21倍);和最先进的模型相比(例如DAT和Gpipe),EfficientNet也在下表中8个数据集里的5个达到了最高的准确率,但是少了9.6倍的参数。
轻量级网络:EfficientNet

为了更近一步的理解为什么作者的复合缩放方法就比其他的方法效果好,Figure 7比较了使用不同方法的模型得到的class activation map的效果图,所有的这些模型都是从baseline模型缩放得到的,它们的统计特性如图Table 7。图片是随机从验证集中得到的,正如在figure中可见,复合缩放得到的模型倾向聚焦于与更多目标细节相关的区域,而其他的模型要么缺乏目标细节,要么不能捕捉到图片中所有的目标。

轻量级网络:EfficientNet

keras实现代码

完整代码:https://github.com/keras-team/keras-applications/blob/master/keras_applications/efficientnet.py