Google出品,ImageNet新的State-of-the-art
论文链接: https://arxiv.org/pdf/1905.11946.pdf
官方源码: https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet
第三方PyTorch源码: https://github.com/lukemelas/EfficientNet-PyTorch
1.介绍
本文的思路来源是,作者观察到通过扩大网络模型的方法,可以获得更好的精度。最常见的方法是增加网络深度或者宽度(通道数),还有一种不常见的但越来越流行的方法是通过增加图像分辨率(如Gpipe采用480*480的图像)来扩大模型的规模。因此作者思考是否有一种原则性的方法可以平衡上述三种扩展方向,使得网络经过同等规模的扩大后达到更好的精度和效率,如图所示。基于此,提出了一种简单有效的复合标度方法,利用网格搜索得到了一组固定的缩放系数分别对网络的宽度、深度和分辨率进行缩放。
本文可看做是对深度学习炼丹的丹方进行解析,对网络的深度、宽度与分辨率这三种成分的配比进行系统性的研究,在提出的EfficientNet-B0的基础上用此方法扩展网络,证明了该方法的有效性。而EfficientNet-B7在ImageNet上实现了84.4%的top-1 / 97.1%的top-5精度,超过现有最好的结果(文中为Gpipe),同时参数少8.4倍,推理速度快6.1倍,效果非常棒!同时也在MobileNet与ResNet上用此方法扩展,效果上得到了证实。
2.复合模型扩展
一个卷积层可以被定义为一个函数:,其中是卷积操作,是输出的张量,是输入的张量且张量的形状为。此外CNN通常被划分为多个阶段,每个阶段的所有层结构是相同的,比如ResNet中有五个阶段,每个阶段的所有层都具有相同的卷积类型,除了第一层执行下采样。因此一个神经网络可以表示为
其中表示在第个阶段的第次重复的层,是第层输入的张量形状。不同于之前普通的网络设计是集中在寻找更好的层架构,模型缩放则是扩展网络长度()、宽度()和分辨率()而不改变baseline网络中的。为了进一步减少设计空间的大小,限制所有参数必须以恒定的比例均匀地缩放。目标是为了在给定资源限制时最大化模型精度,可以被定义为一个优化问题:
其中是对网络的宽度、深度和分辨率缩放的参数,是baseline网络中预先定义好的参数。
作者做了以上实验,得出两个结论:
- 扩展网络宽度、深度或分辨率中的任何维度都可以提高精度,但是对于较大的模型,精度增益会降低,对应Figure 3中的尾部收敛。
- 为了追求更高的精度和效率,在ConvNet缩放过程中平衡网络宽度、深度和分辨率的所有维度是至关重要的,对应figure 4。
因此本文提出一种新的复合标度方法,使用复合系数来均匀缩放网络宽度、深度和分辨率
是可以通过小型网格搜索确定的常量,而从直观上解释是是用户按照能够提供的额外计算资源开销(相对于baseline将网络扩展时需要额外计算资源)的多少来指定的参数。则是确定如何分别为网络宽度、深度和分辨率分配这些额外资源。
常规卷积运算的FLOPS与成正比,例如将网络深度加倍会加倍FLOPS,而将网络宽度或者分辨率加倍会使得FLOPS大致增加四倍,因此用公式(3)对网络进行缩放时,会使得总体FLOPS增加大约倍,在本文中,通过约束使得对任意的整体的FLOPS将会增加倍
3.EfficientNet架构
首先作者使用MnasNet的方法,利用多目标神经网络架构搜索,同时优化准确率和FLOPS,得到了FLOPS为400M的baseline网络EfficientNet-B0,网络架构如下表:
然后从这个baseline着手,使用两个步骤:
- STEP 1: 固定,即假设有两倍以上的可用资源,并做一个小的网格搜索得到了最佳值,在的约束下。这样做的原因是因为在大模型上搜索成本太高了。
- STEP 2: 固定并使用不同的对baseline网络进行扩展,得到了EfficientNet-B1到B7
实验结果
对MobileNet和ResNet采用这种方法进行网络扩展
在ImageNet上的模型参数量与精度对比图
在其它数据集上迁移学习的效果,在5个数据集上达到了SOTA,参数平均减少9.6倍。
可以看出复合缩放方法比任何单一效果都好
总结
提出Mobilesize的EfficientNet,在ImageNet和五个常用的迁移学习数据集上,用更少的参数和FLOPS达到超越SOTA的精度。
在此之前,通常提高准确率的方法是单纯增加深度,宽度或者分辨率中的某一种,但是效果不能达到最优。在相同计算资源的限制下,平衡这三者的贡献才能让网络得到最好的效果。