深度Depth:直觉告诉我们,更深的卷积神经网络可以捕获更丰富的复杂特征,然而更深的网络往往因为梯度消失的原因也更难训练。有一些技巧可以应对这个困难,非常深的网络也可以取得不错的准确率,比如跳跃连接(skip connections)、批量归一化(batch normalization)。举个例子,ResNet-1000虽然有更多的层数,但是它与ResNet-101有同样准确率。我们的实验表明当网络深度增加时,准确率也在增加。
宽度Width:缩放宽度是小尺寸模型比较通用的做法,更宽的网络倾向于计算更细粒度的特征而比较容易训练,但是非常宽但是浅的网络在计算高纬度的特征时比较困难。我们的实验表明当网络模型变得更宽时,准确率会迅速趋于饱和。
分辨率Resolution:使用更高分辨率的输入时,模型能够潜在的计算更细粒度的纹理。我们的实验表明,尽管更高的分辨率确实可以提高准确率,但是精度增益在逐渐减小。
综合以上的实验结论,我们可以得出一条结论:缩放任何一个维度(深度、宽度、分辨率)都可以提高准确率,但是随着模型越大,准确率收益越小。
在论文中,我们提出了一个混合缩放方法,使用一个混合系数
合理的缩放模型的三个维度(深度、宽度、分辨率)。
模型缩放不会改变在baseline中层的操作,所以有一个好的baseline就十分重要了,我们在现有的卷积神经网络中验证了缩放方法,但是为了更好的展示高效的缩放方法,我们设计了一个新的轻量级baseline,称之为EfficientNet。
我们利用多目标神经结构搜索,来优化准确率和计算量。(we develop our baseline network by leveraging a multi-objective neural architecture search that optimizes both accuracy and Flops)简单来说就是通过一个搜索策略得到最佳的模型结果就是EfficientNet_B0,关于搜索策略是怎么实现的,在论文中的参考文献中。
EfficientNet_B0主要的block是mobile inverted bottleneck(MBConv),我们还加入了SENet来优化它。
关于MBConv:
MBConv卷积块也使用了类似残差链接的结构,不同的是在短连接部分使用了SE层。另外使用了drop_connect方法来代替传统的drop方法。
关于SENet:
SENet的提出动机非常简单,传统的方法是将网络的Feature Map等权重的传到下一层,SENet的核心思想在于建模通道之间的相互依赖关系,通过网络的全局损失函数自适应的重新矫正通道之间的特征相应强度。
SENet由一些列SE block组成,一个SE block的过程分为Squeeze(压缩)和Excitation(激发)两个步骤。其中Squeeze通过在Feature Map层上执行Global Average Pooling得到当前Feature Map的全局压缩特征向量,Excitation通过两层全连接得到Feature Map中每个通道的权值,并将加权后的Feature Map作为下一层网络的输入。从上面的分析中我们可以看出SE block只依赖与当前的一组Feature Map,因此可以非常容易的嵌入到几乎现在所有的卷积网络中。论文中给出了在当时state-of-the-art的Inception和残差网络插入SE block后的实验结果,效果提升显著。
SENet虽然引入了更多的操作,但是其带来的性能下降尚在可以接受的范围之内,从GFLOPs,参数数量以及运行时间的实验结果上来看,SENet的损失并不是非常显著。
使用搜索方法得到eff-B0
EfficientNet_B0中的由来:
然后在EfficientNet_B0这个baseline的基础上,使用缩放方法,得到B1-B7。
下面是三个常数的值
下面是实验结果
EfficientNet在ImageNet上的表现结果
准确率、参数量、计算量
下表说明了:对于其他的模型,比如mobileNet、ResNet,使用本论文的方法,也就是三个维度的缩放,同样也可以提升模型性能(提高准确率,减小计算量)
下表说明了,在公开数据集上,不管是传统的优秀网络,还是最近的优秀小众网络,EfficientNet都有优势。
下图说明了使用本论文提出的网络结构,可以将注意力有效的集中到主体区域。