【backbone】EfficientNet
https://arxiv.org/abs/1905.11946
卷积神经网络(ConvNets)通常是在固定的资源预算下发展起来的,如果有更多的资源可用的话,则会扩大规模以获得更好的精度,更大的网络具有更大的宽度、深度或分辨率,往往可以获得更高的精度,但精度增益在达到80%后会迅速饱和,这表明了只对单一维度进行扩张的局限性.
模型扩张的各个维度之间并不是完全独立的,比如说,对于更大的分辨率图像,应该使用更深、更宽的网络,这就意味着需要平衡各个扩张维度,而不是在单一维度张扩张
如下图所示,直线上的每个点表示具有不同宽度系数(w)的模型。第一个基线网络(d=1.0,r=1.0)有18个卷积层,分辨率224x224,而最后一个基线(d=2.0,r=1.3)有36个卷积层,分辨率299x299。下图说明了一个问题,为了追求更好的精度和效率,在ConvNet缩放过程中平衡网络宽度、深度和分辨率的所有维度是至关重要的,这就是EfficientNet提出的复合扩张方法结合神经结构搜索技术所要解决的问题
复合扩张方法:
问题定义:单层卷积层定义为 Yi = Fi(Xi),其中Xi为输入(形状为<H, W, C>),Yi为输出,Fi为卷积操作;多个卷积层表示为:
,由于网络常被设计为多个stage,每个stage的卷积类型相同,因此多个卷积层表示为:
, 表示一个stage操作,表示Fi操作了Li次
搜索约束:
1、模型缩放通常不改变网络架构Fi,而是该变 网络的深度 Li ,W,长度Ci ,分辨率Hi, Wi
2、所有层必须以恒定比率均匀缩放
w, d,r 是缩放网络的宽度,深度,分辨率的系数。是基础网络预定义的参数
解决方法
如下面公式,其中α、 β、γ是可以通过小网格搜索确定的常数;φ是用户指定的系数,用于控制可用于模型缩放的资源数量;α、β、γ分别指定如何将这些额外资源分配给网络宽度、深度和分辨率。其中 [公式] 在约束上会有平方,是因为如果增加宽度或分辨率两倍,其计算量是增加四倍,但是增加深度两倍,其计算量只会增加两倍。其中 约束的意义是对任意新的φ,FLOPS增加
EfficientNet 架构
0.找到基础网络 EfficientNet-B(类似MNasNet,因为搜索空间一样),使用NAS搜索,优化目标为 ACC(m)×[FLOPS(m)/T]^w, 其中w为超参数,调节ACC和FLOPS平衡(使用flops不适用延迟的原因的,不和任何硬件挂钩)
固定公式中的φ=1,基于上面2组公式通过网格搜索(grid search)得出最优的α、β、γ,得出最基本的模型EfficientNet-B0.
固定α、β、γ的值,使用不同的φ,基于上面公式,得到EfficientNet-B1, ..., EfficientNet-B7
φ的大小对应着消耗资源的大小,相当于:
当φ=1时,得出了一个最小的最优基础模型;
增大φ时,相当于对基模型三个维度同时扩展,模型变大,性能也会提升,资源消耗也变大。