文章解读:EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks (ICML2019)
Link: (Paper) (tf code) (pytorch code)
动机
ConvNet的设计一般需要考虑固定的算力资源进行的,如果有更多的算力,可以将网络放大来获得更高的精度。那么这个放大是否有一定的原则从而使放大后的网络的精度和效率可以更好?通过实验表明经过简单的固定比例缩放就可以实现很好的网络的深度,宽度,分辨率的平衡从而达到更好的accuracy-efficiency tradeoff。基于这个观察,文章提出compound scaling method的缩放方法,同时采用MNAS的神经架构搜索方法搜索到基础骨架,然后与缩放结合,实现又好有快的EfficientNet。
方法
Compound scaling
- ConvNet设计的不同的scale方式
缩放的维度包括:网络宽度(w),深度(d),分辨率(r)。缩放增加的FLOPS为:d*w²*r²。
缩放的目标就是在限定算力和内存的情况下试下模型精度的最大化,约束条件如下:
根据实验观测到的结果,放大上述任一维度都可以提高模型精度,但是模型越大,效果增益越不明显。
而协调这3个维度的比例也能显著提高模型精度和效率:
2. Compound Scaling
这里提出一种新的scale方式通过compound coefficient ϕ在以下原则下来均匀放大这3个维度:
其中ϕ用来约束模型算力需求,代表可以使用算力的资源。根据之前提到的FLOPs随d,w,r增加的方式,对于任意ϕ,模型缩放后的算力需求为2^ϕ。
3. 神经骨架搜索
使用MNAS采用的搜索空间,优化的目标为: ,其中ACC为模型精度,FLOPS为模型算力,T为目标模型算力,w=-0.07作为超参控制精度和算力的tradeoff。 搜索得到的网络结构类似MNAS的结构,成为EfficientNet B0,主要包含mobile inverted bottleneck MBConv和SE optimization结构。
然后以B0为基础通过以下两步生成B1-B7:
- 固定ϕ,即假设算力可以增加1倍,通过小范围的网格搜索确定,在B0结构下时可以达到最好的效果。
- 固定上面搜索到的,,然后放大获得不同大小的EfficientNet B1-B7。
实验结果
- EfficientNet 在ImageNet上的表现:
2. 对Mobilenet和Resnet使用compound scaling的效果
3. EfficientNet的迁移学习能力
4. Compound scaling对应其他scale方式对模型的提升效果更好
总结
这篇文章从网络宽度,深度,分辨率深入研究了网络的尺寸对模型性能的影响,其结果也表明在不改变模型算力需求的前提下单单通过优化网络的尺寸就能实现模型性能的显著提高。而结合NAS方式搜索出来的精度-效率最佳平衡的骨架模块,这两者结合的结果就是平衡最佳的EfficientNet。