论文链接:https://arxiv.org/abs/1905.11946
代码链接:https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet
第三方实现的PyTorch代码:https://github.com/lukemelas/EfficientNet-PyTorch
摘要
卷积神经网络通常都是先在固定资源预算下开发设计,然后如果资源有多余的话再将模型结构放大以便获得更好的精度。在本篇论文中,我们系统地研究了模型缩放并且仔细验证了网络深度、宽度和分辨率之间的平衡可以导致更好的性能表现。基于这样的观察,我们提出了一种新的缩放方法——使用一个简单高效的复合系数来完成对深度/宽度/分辨率所有维度的统一缩放。我们在MobileNets和ResNet上展示了这种缩放方法的高效性。
为了进一步研究,我们使用神经架构搜索设计了一个baseline网络,并且将模型放大获得一系列模型,我们称之为EfficientNets,它的精度和效率比之前所有的卷积网络都好。尤其是我们的EfficientNet-B7在ImageNet上获得了最先进的 84.4%的top-1精度 和 97.1%的top-5精度,同时比之前最好的卷积网络大小缩小了8.4倍、速度提高了6.1倍。我们的EfficientNets也可以很好的迁移,并且实现了最先进的精度——CIFAR-100(91.7%)、Flowers(98.8%)、其他3个迁移学习数据集。
1. Introduction
为了获得更好的精度,放大卷积神经网络是一种广泛的方法。举个例子,ResNet可以通过使用更多层从ResNet-18放大到ResNet-200;目前为止,GPipe通过将baseline模型放大四倍在ImageNet数据集上获得了84.3%的top-1精度,然而,放大CNN的过程从来没有很好的理解过,目前通用的几种方法是放大CNN的深度、宽度和分辨率,在之前都是单独放大这三个维度中的一个,尽管任意放大两个或者三个维度也是可能的,但是任意缩放需要繁琐的人工调参同时可能产生的是一个次优的精度和效率。
在本篇论文中,我们想要研究和重新思考放大CNN的过程,尤其地,我们调查了一个中心问题:是否存在一个原则性的放大CNN的方法实现更好的精度和效率?我们的实验研究表明了平衡深度、宽度和分辨率这三个维度是至关重要的,令人惊讶的是这样的平衡可以通过简单的使用一组常量比率来缩放每一个维度,基于这个观察,我们提出了一个简单高效的复合缩放方法,不像传统实践中任意缩放这些因子,我们的方法使用一组固定的缩放系数统一缩放网络深度、宽度和分辨率。举个例子,如果想使用 2 N 2^{N} 2N倍的计算资源,我们可以简单的对网络深度扩大 α N \alpha ^{N} αN倍、宽度扩大 β N \beta ^{N} βN、图像尺寸扩大 γ N \gamma ^{N} γN倍,这里的 α , β , γ \alpha ,\beta, \gamma α,β,γ都是由原来的小模型上做微小的网格搜索决定的常量系数,Figure 2展示了我们的缩放方法和传统方法之间的区别。
直观来讲,如果图像尺寸变大,复合的缩放方法会很有意义,因为当图像尺寸变大意味着网络需要更多层来增加接受野,同时需要更多的通道来捕捉更大图像上更多细粒度的模式信息。事实上,以前的理论(Raghu等,2017; Lu等,2018)和实证结果(Zagoruyko&Komodakis,2016)两者表明网络之间存在一定的关系宽度和深度,但据我们所知,我们是首先要凭经验量化三者之间的关系网络宽度,深度和分辨率的尺寸。
我们在已经存在的MobileNets和ResNets上展示了我们的缩放方法可以工作得很好,值得注意的是,模型缩放的高效性严重地依赖于baseline网络,为了进一步研究,我们使用网络结构搜索发展了一种新的baseline网络,然后将它缩放来获得一系列模型,称之为EfficientNets。Figure 1总结了ImageNet的表现,EfficientNets由于其他CNN网络,尤其地,我们的EfficientNet-B7超越了之前最好的GPipe的精度,但是参数量少了8.4倍、速度快了6.1倍。相比于广泛使用的ResNet-50,我们的EfficientNets-B4在相近的FLOPS下将top-1精度从76.3%提高到了82.6%。除了ImageNet,EfficientNets在其他数据集上表现也很好,在8个广泛应用的数据集中的5个实现了最先进的精度,然而比存在的卷积网络的参数量减少了21倍。
2. Related Work
ConvNet精度:自从AlexNet赢得2012的ImageNet竞赛,ConvNets随着变得更大获得了更高的精度,同时GoogleNet使用6.8M的参数获得了74.8%的top-1精度,SENet使145M参数获得了82.7%的top-1精度。最近,GPipe进一步提高了精度——使用了557M的参数获得了84.3%的top-1验证精度:它如此的大以至于需要将网络划分使用特定的并行化手段训练,然后将每一部分传递到一个不同的加速器。然而这些模型主要是为ImageNet设计,但是将其迁移到其他应用上时效果也很好。
ConvNet效率:深度网络的参数过多,模型压缩是一种通用的方法减小模型大小——平衡精度和效率。当移动网络变得无处不在时,我们也通常要手动设计高效的ConvNets,比如SqueezeNets、MobileNets、ShuffleNets。最近,神经网络结构搜索在设计高效的ConvNets变得越来越流行,并且通过广泛搜索网络宽度、深度、卷积核类型和大小得到了比手动设计的模型更高的精度。然而,目前还不清楚怎么将这些技术应用到更大的模型中,通常要更大的设计空间和更贵的微调成本,在本篇论文中,我们旨在研究效率设计更大规模的ConvNets,为了实现这个目标,我们采用模型缩放。
模型缩放:有很多的方法因不同的资源限制对ConvNet进行缩放:ResNet可以通过调整深度(缩小到ResNet-18,放大到ResNet-200),WideResNet和MobileNets可以通过对宽度(#channels)缩放。公认的是更大的输入图像尺寸有利于提高精度,同时需要更多的计算量。尽管之前的研究展示了网络深度和宽度对ConvNets的表现力很重要,它仍然是一个开放的问题来高效缩放ConvNet获得更好的效率和精度。我们的工作系统地研究了ConvNet对网络深度、宽度和分辨率这三个维度进行了缩放。
3. Compound Model Scaling
在本节中,我们将缩放问题公式化,研究了不同的方法并且提出了我们新的缩放方法。
3.1. Problem Formulation
卷积层 i i i可以用公式 Y i = F i ( X i ) Y_{i}=F_{i}(X_{i}) Yi=Fi(Xi)定义, F i F_{i} Fi代表卷积操作, Y i Y_{i} Yi表示输出张量, X i X_{i} Xi表示输入张量, < H i , W i , C i > <H_{i},W_{i},C_{i}> <Hi,Wi,C