EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
研究动机
针对卷积神经网络的缩放技术一直以来都被广泛应用,并且取得了不错的成绩。但是现有的网络缩放仅仅是针对网络宽度、网络深度、图片大小其中之一来进行的。针对两个或三个维度的任意的修改需要大量的调参,而且通常很难优化准确率和效率。
另一方面现有的卷积神经网络可以通过堆叠参数来达到较高的准确率,但是在很多应用场景下(比如手机端的应用)并不需要很高的准确度,而是需要交高的效率。针对大型网络的深度、宽度调整通常来说会需要非常大的设计时间和调整成本。
本文想探究一种规律的方法去同时缩放网络宽度、网络深度、图片分辨率三个维度,来达到一个更好的准确度和效率。
思路分析
三种调整方式
- 网络的宽度调整通常是调整输出的通道数目,比如输出通道数扩大2倍,这会导至计算复杂度(FLOPS)提高4倍。
- 网络的深度调整改变了网络的层数,比如层数扩大2倍,导至FLOPS提高2倍
- 图片分辨率的调整是针对Input的图片大小,比如分辨率提高2倍,这会导致FLOPS提高4倍
上图的(e)是本文的调整方式,同时针对上述的三个维度进行调整。
Compound Model Scaling
卷积的一层可以表示为Yi=Fi(Xi),Xi是输入的tensor通常包含<Hi,Wi,Ci>,通常每层的卷积形式类似,所以可到到卷积网络如下:
N=i=1...s⨀FiLi(X<Hi,Wi,Ci>)
在stage i,卷积重复Li次,所以网络宽度、网络深度、图片分辨率分别对应着Ci,Li,<Hi,Wi>。提高准确率实际上是想要优化如下的公式:
d,w,rmax Accuracy(N(d,w,r))s.t. N(d,w,r)=i=1...s⨀F^id∗L^i(X<r∗H^i,r∗W^i,w∗C^i>)Memory(N)≤target_memoryFLOPS(N)≤target_flops
Scaling Dimensions
从图中可以看出,提高三个维度的任意一维,都可以提高准确率,但是会带来计算复杂度的提升,并且会迅速收敛。
Compound Scaling
作者为了探讨多个维度一起缩放的效果,进行了相关实验,效果如上图。可以看出多个维度都进行缩放的效果是要好于单个维度的;但是想要追求更好的准确率和效率的话,需要对三个维度的缩放比例配平。
本文采用一个系数ϕ 来统一网络层数、宽度和分辨率的缩放比例,如下:
depth:d=αϕwidth:w=βϕresolution:r=γϕs.t. α∗β2∗γ2≈2α≥1,β≥1,γ≥1
其中,经过该比例的变化,整个网络的FLOPS会变为原来的(α∗β2∗γ2)ϕ倍,所以限制 α∗β2∗γ2≈2 可以保证对于系数ϕ,FLOPS会近似变为原来的2ϕ倍。
网络结构
文章优化目标是ACC(m)×[FLOPS(m)/T]w,其中ACC是网络的准确率,采用FLOPS而不是时间是因为作者不是在具体的硬件设备上进行优化的,希望能够在各种设备上都有不错的效果。
文章首先固定ϕ=1,通过small grid search来找到合适的α,β,γ的值,分别为1.2,1.1,1.15。
接着文章固定α,β,γ,来寻找合适的ϕ。