EfficientNet 系列
本文主要介绍 EfficientNet 系列,在之前的文章中,一般都是单独增加图像分辨率或增加网络深度或单独增加网络的宽度,来提高网络的准确率。而在 EfficientNet 系列论文中,会介绍使用网络搜索技术(NAS)去同时探索网络的宽度(width),深度(depth),分辨率(resolution)对模型准确率的影响。以及如何加速训练推理速度。
EfficientNet V1 模型
EfficientNetV1:重点分析了卷积网络的深度,宽度和输入图像大小对卷积网络性能表现的影响,提出了一种混合模型尺度的方法,通过设置一定的参数值平衡调节卷积网络的深度,宽度和输入图像大小,使卷积网络的表现达到最好。
复合模型缩放
单独适当增大深度、宽度或分辨率都可以提高网络的精确性,但随着模型的增大,其精度增益却会降低。此外,这三个维度并不是独立的(如:高分辨率图像需要更深的网络来获取更细粒度特征等),需要我们协调和平衡不同尺度的缩放,而不是传统的一维缩放。EfficientNet 的设想就是能否设计一个标准化的卷积网络扩展方法,既可以实现较高的准确率,又可以充分的节省算力资源。其通过 NAS(Neural Architecture Search)技术来搜索网络的图像输入分辨率 r,网络的深度 depth 以及 channel 的宽度 width 三个参数的合理化配置。如下图所示,( b ),( c ),( d )分别从不同的维度对 baseline 做 model scaling,而这篇论文要做的是将这 3 者结合起来一起优化即(e)。
通过实验得出以下结论:
-
增加网络的 depth 能够得到更加丰富、复杂的高级语义特征,并且能很好的应用到其他任务中去。但是网络的深度过深会面临梯度消失,训练困难等问题。
-
增加网络的 width 能够获得更高细粒度的特征,并且也更容易训练。但是对于宽度很大,深度较浅的网络往往很难学习到更深层次的特征。例如我就只有一个 3×3 的卷积,但是输出通道为 10000,也没办法得到更为抽象的高级语义。
-
增加输入网络的图像分辨率能够潜在获得更高细粒度的特征模版,图像分辨率越高能看到的细节就越多,能提升分辨能力。但是对于非常高的输入分辨率,准确率的增益也会减少。且大分辨率图像会增加网络的计算量(注意不是参数量)。
一个卷积网络的某一层 i i i 可以被定义为;
Y i = F i ( X i ) Y_{i}=F_{i}(X_{i}) Yi=Fi(Xi)
其中: X i X_{i} Xi 表示输入的 tensor,其形状为 < H i , W i , C i > <H_{i},W_{i},C_{i}> <Hi,Wi,Ci>, Y i Y_{i} Yi 是输出的 tensor。于是,一个卷积网络 N N N 可以被表示成如下形式:
N = F k ⊙ . . . ⊙ F 2 ⊙ F 1 ( X 11 ) = ⊙ j = 1.... k F j ( X 1 ) N=F_{k}\odot ...\odot F_{2}\odot F_{1}(X_{11})=\odot_{j=1....k}F_{j}(X_{1}) N=Fk⊙...⊙F2⊙F1(X11)=⊙j=1....kFj(X1)
但是在实际中,ConvNets 的各个层通常被划分为多个 stage,并且每个 stage 中的所有层都具有相同的体系结构(例如 ResNet,共有五个 stage,除了第一层之外的每个 stage 的所有层都分别具有相同的卷积类型)。
因此,我们可以将 ConvNet 重新表示成如下形式:
N = ⨁ i = 1... s F i L i ( X < H i , W i , C i > ) N = \bigoplus_{i=1...s}F_{i}^{L_i}(X_{<H_{i},W_{i},C_{i}>}) N=i=1...s⨁FiLi(X<Hi,Wi,Ci>)
其中 F i L i F_{i}^{L_{i}} FiLi 表示第 i i i 个 stage,并且这个 stage 由 L i L_{i} Li 次的 F i F_{i} Fi(相当于一层 layer)操作构成。
通常 ConvNet 的设计焦点在 F i F_{i} F