主要分类网络性能和参数比较
前言
本文主要比较一些图像分类网络的性能和参数
1.resnet
下图是VGG和普通网络和resnet:
resnet的baseline借鉴了VGG的特点,卷积核的大小主要是3x3,并遵循了两条主要规则:
- 对于同样输出的特征图尺寸,具有同样数目的卷积核
- 如果特征图的数目减半,为了保持每层相同的时间复杂度,卷积核的数目加倍
以下是在不同的数据集上的实验结果
imagenet
首先在不加入残差块的普通的卷积网络上进行实验,对比了不同深度的网络的FLOPs和训练过程中的loss变化情况,网络结构如表1所示。
接着采用相同的baseline,在每对3x3的卷积核加入shortcut connection,在第一次比较中为了控制维度增加,采用了恒等映射和zero-padding,所以与对照组相比并没有增加网络参数量。
加入残差结构和不加入的对比:
训练过程loss变换:
错误率对比:
得出结论,深层网络(34 layers)不仅可以加快收敛,增加准确率,还可以解决退化问题,浅层网络(18 layers)在精度上与普通网络相似,但可以加快收敛。
接着对比了在公式2中为了匹配尺寸,使用不同的 linear projection Ws策略。
恒等映射与投影捷径:无参数恒等捷径有助于训练。接下来我们研究投影捷径(公式(2))。在表3中,比较了三种选择:(A)零填充快捷方式用于增加尺寸,所有捷径都是无参数的(与右表2和图4相同); (B)投影捷径用于增加尺寸,其他捷径是恒等; (C)所有捷径都是投影捷径。
接下来介绍了ImageNet的更深层次的网络。由于担心可以承受的训练时间,将 building block
改善为bottleneck design。对于每个残差函数F,我们使用3层而不是2层(图5)。三层是1×1,3×3和1×1的卷积,其中1×1层负责减小并且随后增加(恢复)尺寸,使得3×3层成为具有较小输入/输出尺寸的瓶颈。图5显示了一个例子,其中两个设计具有相似的时间复杂度。
接下来就是比较不同层数的准确率:
50/101/152层的ResNets比34层的ResNets更精确(表3和表4)。我们没有观察到退化问题,因此可以从深度上显着增加显着的准确度。所有评估指标都体现了深度的好处(表3和表4)
与最先进的方法进行比较。在表4中,我们将比较以前的最佳单模型结果。我们的基线34层ResNets已经实现了非常有竞争力的准确性。我们的152层ResNet具有4.49%的单模型前5验证错误。这种单模型结果优于以前的所有集合结果(表5)。我们将六个不同深度的模型组合在一起(在提交时只有两个152层模型)。这获得了测试集上的3.57%前5位错误(表5)。本条目赢得ILSVRC 2015第一名。
CIFAR-10 and Analysis
目的是测试在极深网络的表现,不是为了获得最好的表现,作者故意使用了以下结构:
网络输入是32×32图像,每像素平均值被减去。第一层是3×3的卷积。然后,分别在尺寸为{32,16,8}的特征图上使用3×3个控制的6n层堆栈,每个特征图尺寸为2n个图层。卷积核的数量分别为{16,32,64}。子采样是通过以2为步长的卷积实现的。网络以全局平均池化,10路完全连接层和softmax结束。总共有6n + 2个堆叠的加权层。
2.densenet
Densenet提出的背景和目的:
文章提出的DenseNet(Dense Convolutional Network)主要还是和ResNet及Inception网络做对比,思想上有借鉴,但却是全新的结构,网络结构并不复杂,却非常有效!众所周知,最近一两年卷积神经网络提高效果的方向,要么深(比如ResNet,解决了网络深时候的梯度消失问题)要么宽(比如GoogleNet的Inception),而作者则是从feature入手,通过对feature的极致利用达到更好的效果和更少的参数。
Densenet的一些优点:
- 减轻了vanishing-gradient
- 加强了feature的传递
- 更有效地利用了feature
- 一定程度上减少了参数数量
Figure 2表示的是一个DenseNet的结构图,在这个结构图中包含了3个dense block。作者将DenseNet分成多个dense block,原因是希望各个dense block内的feature map的size统一,这样在做concatenation就不会有size的问题。
Dense connectivity:
ResNet:
Densenet:
Composite function:
定义
H
l
{H^l}
Hl为三种操作的组合函数,分别是:BN、ReLU和3x3卷积。
Pooling layers:
由于各层的输出feature map的大小可能不同,在做concat的过程可能出现问题,所以可以用下采样来改变特征图的尺寸,为了方便下采样论文把网中分成了很多dense blocks,就像图二那样,两个block的中间层为transition layers,做了卷积和池化操作。
Growth rate:
简单来说就是对于每个
H
l
H^l
Hl都产生k个特征图,每一层输入是前面所有层输出的concat,但输出是固定的k,增长速率是指输入特征图的增长速率
每一层都可以和它所在的block中之前的所有特征图进行连接,使得网络具有了“集体知识”(collective knowledge)。可以将特征图看作是网络的全局状态。每一层相当于是对当前状态增加 k 个特征图。增长速率控制着每一层有多少信息对全局状态有效。全局状态一旦被写定,就可以在网络中的任何地方被调用,而不用像传统的网络结构那样层与层之间的不断重复。
Bottleneck层
尽管每一层只产生 k 个输出特征图,但它却有更多的输入。在[36,11]中已经说明可以在bottleneck层中3x3的卷积之前加入1x1的卷积实现降维,可以减小计算量。我们发现这种设计对DenseNet极其有效,我们将具有bottleneck层,即BN-ReLU-Conv(1x1)-BN-ReLU-Conv(3x3)的结构称为DenseNet-B。在我们的实验中,我们令1x1的卷积生成 4k 个特征图。
Compression
为了简化模型,我们在ransition layer中减小了特征图的数量。如果一个dense block有 m 个特征图,我们让之后的过渡层生成
θ
m
\theta m
θm 个输出特征图,其中
0
<
θ
≤
1
0< \theta \leq1
0<θ≤1 表示compression系数。当
θ
=
1
\theta = 1
θ=1 时,经过ransition layer的特征图数量没有改变。我们定义
θ
<
1
\theta <1
θ<1 的DenseNet为DenseNet-C,并且在我们的实验中
θ
=
0.5
\theta = 0.5
θ=0.5 。如果bottleneck和transition layer都有
θ
<
1
\theta < 1
θ<1 ,我们称该模型为DenseNet-BC。
实现细节:
数据集
CIFAR:两种CIFAR数据集都是32x32的彩色图。CIFAR-10(C10)是10类,CIFAR-100(C100)是100类。训练集和测试集分别有50000和10000张图片,从训练集中选5000张作为验证集。我们采用在这两个数据集上广泛使用的数据增强方式(镜像/平移)。用在数据集后的“+”来表示使用了这种数据增强方式(如C10+)。预处理使用每个颜色通道的均值和标准差来归一化。最后,用全部的50000张训练图片,在训练结束时记录测试误差。
SVHN:SVHN数据集是32x32的彩色数字图。训练集有73257张图片,测试集有26032张,有531131张作为额外的训练。在接下来实验中,我们没有使用任何的数据增强,从训练集中选取6000张图片作为验证集。我们用验证集误差最小的模型来进行测试。我们对像素值执行除255操作,归一化到[0,1]。
ImageNet:ILSVARC 2012分类数据集有1.2百万张训练集,50000张验证集,共1000类。我们采用和论文[8,11,12]同样的数据增强方式,在测试时使用single-crop或10-crop将图片尺寸变为224x224。根据[11,12,13],我们记录了在验证集上的分类误差。
训练
所有的网络均使用随机梯度下降法(SGD)进行训练。在CIFAR和SVHN数据上, batch size = 64 ,分别训练了300轮和40轮。最初的学习率都为0.1,分别在训练总轮数的50%和75%时,将学习率变为原来的0.1倍。在ImageNet上,模型训练了90轮, batch size = 256 。初始学习率设为0.1,在第30轮和第40轮分别将学习率缩小10倍。受GPU内存的限制,设最大的模型(DenseNet-161) batch size=128 。为了弥补小batch size的不足,我们将模型训练了100轮,并且在90轮时将学习率除以10。
根据[8],设置梯度衰减值为10e-4,Nesterov动量设为0.9。我们采用论文[10]中介绍的权重初始化方式。对于三种没有使用数据增强的数据,如C10、C100和SVHN,我们在每个卷积层(除了第一层)之后增加了一层dropout层,并且设置dropout rate为0.2。对每个任务和每个模型都只进行一次测试。
在CIFAR和SVHN上的分类结果:
使用不同的深度( L )、不同的增长速率( k ),来分别训练DenseNets。在CIFAR和SVHN上的结果如表2所示。为了突出结果,我们对其做了标记,将性能优于现存模型的结果加粗,将该数据集上的最好结果用蓝色标注。
准确率
可能最惹人注目的是表2最后一行的结果,其是 L=190、k=40 的DenseNet-BC网络在CIFAR上的结果,性能已超过现存的所有模型。在C10+上错误率为3.46%,在C100+上的错误率为17.18%。在C100+上的误差率远低于宽ResNet(wide ResNet)网络。我们在C10和C100(无数据增强)上的误差很喜人:比FractalNet和使用dropout正则项的结果低了接近30%。在SVHN上, L=100、k=24 的DenseNet(使用dropout)也远超宽ResNet的最好结果。然而,250层的DenseNet-BC的性能却没有提升太多。这可能是因为SVHN的任务很简单,复杂的模型往往会导致过拟合。
容量(capacity)
不考虑compression或bottleneck层, L 和 k 越大,模型性能越好。我们把这归功于模型容量的增加。这在C10+和C100+这两列中得到了很好的证明。在C10+这列,误差率从5.24%降到了4.10%,最后到了3.74%,因为模型的参数量从1M增加到7M,最后到了27.2M。在C100+这列,我们可以看到相似的结果。这表明DenseNets可以使用更大更深的模型来增加表征能力,也表明它们没有出现过拟合或者残差网络的优化困难等问题。
参数效率
表2的结果表明DenseNets比常见的网络(特别是ResNets)的参数效率更高。使用bottleneck结构并且在过渡层使用降维操作的DenseNet-BC的参数利用率极其高。例如,我们的250层模型只有15.3M的参数量,但是它的性能却远超其他参数量超过30M的模型,像FractalNet和宽ResNets。我们也将 L=100、k=12 的DenseNet-BC性能与1001层pre-activation的ResNet 进行了比较(如,在C10+的误差 4.51%vs4.62%,在C100+的误差:22.27%vs22.71%)。这两个网络在C10+数据上的训练loss和测试误差如图4(右图)。1001层的深度ResNet收敛到一个更低的loss,但却有相似的测试误差。在接下来对这个内容做更深入的探讨。
拟合能力。更高效利用参数的一个作用是DenseNets不易发生过拟合。在不使用数据增强的数据集上,我们发现到DenseNet结构和之前的工作相比较,其改进还是很明显的。在C10上,误差降了29%,从7.33%降到了5.19%。在C100上,降了大约30%,从28.2%降到了19.64%。通过实验,我们发现一个潜在的过拟合现象:在C10上,通过将 k 从12增加到24,模型的参数量增加了4倍,而误差却从5.77%增加到5.83%。DenseNet-BC的bottleneck和compression层似乎是应对这种现象的一种有效措施。
ImageNet分类结果
在ImageNet分类任务上测试了不同深度和增长速率的DenseNet-BC的误差,并且和ResNet结构的性能进行了比较。为了对这两种结构有一个公平的比较,排除了其他所有的因素,如数据预处理方式、优化器设置。仅仅将DenseNet-BC网络替代ResNet模型,而保留ResNet的其他实验参数不变。
DenseNets在ImageNet上single-crop和10-crop的验证误差如表3所示。
DenseNets和ResNets single-crop的top-1验证误差如图3所示,其中左图以参数量为变量,右图以flops为变量。
如图3所示,与ResNets相比,在相同性能的前提下DenseNets参数量和计算量更小。例如,拥有20M参数的DenseNet-201的误差率和拥有超过40M参数的101-ResNet误差率相近。从图3的右图也可以看到类似的结果:和ResNet-50计算量接近的DenseNet大约是ResNet-101计算量的两倍。
值得注意的是,我们是修改和ResNets对应的超参数而不是DenseNets的。我们相信还可以通过修改更多的超参数来优化DenseNet在ImageNet上的性能。
3. MobileNet
MobileNetV1(数据集用ImageNet)
mobilenetV1用了depwiseconv 来进行模型压缩,并且用了width_multiplier和depth_multiplier来进一步减少参数。
MobileNet模型基于深度可分离卷积建立,这是一种分解卷积的形式,把标准卷积分解成了一种深度卷积(depthwise convolution)和一个11的卷积,11卷积又称为逐点卷积(pointwise convolution)。对于MobileNets而言,深度卷积在每个通道(channel)上应用一个卷积核。逐点卷积接着应用1*1卷积把输出和深度卷积结合起来。标准卷积在一个步骤把卷积核和输入结合为新的输出。深度可分离卷积将其分为两层,一层用于滤波(filtering),一层用于结合。这个分解过程极大地减少了计算量和模型的大小。
一个标准的卷积层把一个DFDFM的特征图(feature map)F作为输入,生成一个DGDGN的特征图G,DF是输入特征图的正方形宽度和高度,M是输入通道(input channels或者input depth)的数目,DG是输出特征图的正方形的宽度和高度,N是输出通道的数目。
标准的卷积层由大小为DKDKM*N的卷积核K参数化。DK是假设正方形卷积核的空间维度,M是输入通道的数目,N是输出通道的数目。
标准卷积假设步长为1,并且考虑padding,输出特征图计算如下:
标准卷积的计算代价:DKDKMNDF*DF
计算代价取决于输入通道M、输出通道N、卷积核DKDK、特征图大小DFDF。
MobileNet模型就是用来面对这些属于和他们之间的相互关系的。首先使用深度可分离卷积来打破输出通道数目和卷积核大小之间的相互关系。
标准卷积操作具有基于卷积核的滤波特征和结合特征从而产生新的特征。滤波和结合步骤可以通过使用分解卷积(也叫做深度可分离卷积)分为两个步骤以降低计算成本。
深度可分离卷积由两层组成:深度卷积和逐点卷积。作者使用深度卷积把一个卷积核应用到输出通道上。逐点卷积接着被用来创建depthwise layer的输出的线性叠加。MobileNets对两个层都使用batchnorm和ReLU。
每个输入通道一个卷积核的深度卷积可以写为:
K ̂是大小为 DKDKM的深度卷积核。K ̂中的mth个卷积核应用在通道F中的mth个通道从而产生输出特征图G ̂的mth个通道。
深度可分离卷积计算代价:DKDKMDFDF
深度卷积与标准卷积相比及其高效。然而它只过滤输入通道,不把他们结合成新的特征。因此还需要一个计算深度卷积输出的线性结合的layer,需要11卷积生成新特征。
深度卷积和逐点卷积的结合称为深度可分离卷积。
深度可分离卷积代价:DKDKMDFDF+MNDFDF
通过把卷积过程表示为滤波和结合两个步骤可以减少计算量:
MobileNets使用3*3的深度可分离卷积,比使用标准卷积减少了8-9倍的计算量。
在空间维度的额外的分解并没有减少太多计算量,因为深度卷积的计算量本来就很小。
3.2 Network Structure and Training
如前文所提,MobileNet结构基于深度可分离卷积建立,除了第一层是一个全卷积层。以这样简单的方式定义网络就可以简单的探索网络拓扑结构从而找到一个好的网络。表1是MobileNet的架构。所有层之后都是batchnorm和ReLU非线性激活函数,但是最后的全连接层除外,它没有非线性激活函数,而是直接输入到softmax层进行分类。图3比较了标准卷积和深度可分离卷积,二者都跟着batchnorm层和ReLU非线性激活函数。在深度卷积层和第一层都能处理下采样问题。最后的平均池化层在全连接层前将空间维度减少为1。把深度卷积和逐点卷积当作独立层计算,MobileNet有(1+13*2+1=28)层。
仅仅通过少量的Mult-Adds定义网络是不够的。确保这些操作可以高效实现也同样重要。例如非结构的稀疏矩阵操作通常并不比密集矩阵操作快,除非稀疏矩阵的程度足够。作者的模型结构几乎把全部的计算复杂度放到了11卷积中。这可以通过高度优化的通用矩阵乘法(GEMM)实现。通常卷积由GEMM实现但也需要在称为im2col的内存中进行初始排序。例如,这种方法在流行的Caffe包中就有用到。11卷积并不要求在内存中有这种排序而且可以直接由GEMM实现,GEMM是最优化的数值线性代数算法之一。MobileNet在1*1卷积花费了95%的计算时间,也有75%的参数量(表2)。几乎所有的额外参数都在全连接层。
MobileNet模型在TensorFlow中使用类似于Inception V3的异步梯度下降的RMSprop进行训练。然而,与训练大模型相反,作者使用较少的正则化和数据增加技术因为小模型不容易过拟合。当训练MobileNets的时候,作者没有使用side heads或者label smoothing,而是通过在大型Inception训练中使用的限制小的cropping的尺寸来减少图片扭曲。另外,作者发现在depthwise filters放置较少或者没有weight decay(L2 regularization)很重要,因为他们的参数量很少。在下一节的ImageNet的benchmarks中,所有的模型都通过同样的参数进行训练,但是不考虑模型的大小。
3.3 Width Multiplier:Thinner Models
尽管基本的MobileNet架构已经够小,延迟度够低,但特定用例或应用或许要使模型更小更快。为了建立这些更小的和更少计算代价的模型,作者引入了一个简单的参数:width multiplier α。它的作用是在每层均匀地减负网络。对于一个给定的层和width multiplier α,输入通道M变成了 αM,输出通道变成了 αN。
带有width multiplier α深度可分离卷积的计算代价变成了:
α∈(0,1],典型数值为1、0.75、0.5、0.25。α=1是基准MobileNet,α<1是reduced MobileNets。Width multiplier有减少计算量和参数量的作用,大致是α^2。Width multiplier可以用在任何一个模型结构上,来定义一个带有合理准确性、延迟和尺寸的新的更小的模型。它用于定义一个新的简化的、需要重新训练的结构。
3.4 Resolution Multiplier:Reduced Representation
减少神经网络计算代价的第二个超参数是resolution multiplier ρ。作者把这个参数应用在输入图片,每个层的内部特征随后被减去相同的乘数。在实践中,作者通过设置输入分辨率隐式设置ρ。
现在可以把带有width multiplier α和resolution multiplier ρ的深度可分离卷积网络核心层的计算复杂度为:
ρ ∈(0,1],典型隐式设置以使网络输入分辨率是224,192,160,128。ρ=1是基准MobileNet,ρ<1是computation MobileNets。Resolution multiplier有减少的计算复杂度的作用。
可以看一个在MobileNet中的典型的layer作为例子并看看带有width multiplier和resolution multiplier深度可分离卷积怎么减少代价和参数量。表3显示了不同的架构收缩方法应用在该层时其计算量和参数的数目。第一行是一个全连接层的Mult-Adds的数目和参数,输入特征图大小为1414512,卷积核大小33512*51。在下一节将会看到模型资源和准确度的折中细节。
4、 Experiments
本节首先探索了深度卷积的影响以及减少网络宽度而不是减少网络的层数来选择压缩的模型。然后基于两个超参数:width multiplier和resolution multiplier进行网络收缩,并与现阶段主流的模型进行比较。然后探讨MobileNets应用在不同的应用上。
4.1 Model Choices
首先展示了带有深度可分离卷积的MobileNet和全卷积的模型的结果比较。表4看到在ImageNet上使用深度可分离卷积与全卷积相比精确度仅减少了1%,但是Mult-Adds和参数的数量大大减少。
然后作者比较了带有width multiplier的thinner的模型和使用更少层的更浅的模型二者的结果。为了使MobileNet更浅(shallower),表1中的可分离卷积核的5个层都被除去了(特征大小:1414512)。表5是在相似的计算量和参数量的时候,thinner的MobileNets比更浅的模型准确度高3%。
4.2 Model Shrinking Hyperparameters
表6是用width multiplier α收缩MobileNet架构之后准确度、计算量以及尺寸之间的折中。准确度随着模型的变小而下降。
表7是用reduced input resolutions训练MobileNets时,不同的resolution multiplier ρ值准确度、计算量和尺寸的折中。准确度随着分辨率变低而下降。
图4显示了由width multiplier α∈{1,0.75,0.5,0.25}和resolution{224,192,160,128}的cross product生成的16个模型时在ImageNet准确度和计算量的折中。α=0.25模型非常小的时候结果是对数线性跳跃(log linear with a jump)。
图5显示了由width multiplier α ∈{1,0.75,0.5,0.25}和resolution{224,192,160,128}的cross product生成的16个模型时在ImageNet准确度和参数量的折中。
表8比较了full MobileNet和原始GoogleNet和VGG16。MobileNet和VGG16准确度相似,但是小了32倍、计算量少了27倍。MobileNet比GoogleNet准确率更高,但是更小,计算量少了2.5倍。
表9比较了用width multiplier α=0.5和resolution160*160减少后的 MobileNet。Reduced MobileNet比AlexNet准确度高4%,但是小了45倍,计算量少了9.4倍。同样,MobileNet比同等大小的SqueezeNet准确度高了4%,计算量少了22倍。
4.3 Fine Grained Recognition
在Stanford Dogs dataset训练了细粒度识别。本文扩展了指定方法,收集了一个更大但是有更多噪声的训练集。采用网络噪声数据来预训练一个细粒度狗的识别模型,然后在Stanford Dogs训练集上进行微调。结果在表10中显示。在很大程度缩减的计算量和大小时,MobileNet能几乎实现J. Krause, B. Sapp, A. Howard, H. Zhou, A. Toshev, T. Duerig, J. Philbin, and L. Fei-Fei. The unreasonable ef- fectiveness of noisy data for fine-grained recognition. arXiv preprint arXiv:1511.06789, 2015. 6 的结果。
4.4 Large Scale Geolocation(原文是Geolocalizaton,应该是拼错了)
PlaNet的任务是在地球上确定一张照片拍摄位置的分类问题。这个方法把地球分成了一个个单元格集合到目标类别,用百万个地理位置标记图片训练卷积神经网络。PlaNet已经能够成功对大量的图片进行地理标记,而且处理相同任务性能比Im2GPS要好。
作者在相同的数据使用MobileNet架构预训练PlaNet。完整的基于Inception V3的PlaNet模型有5200万个参数和57.4亿Mult-Adds。MobileNet模型仅有1300万个参数,主体300万,最后一层1000万参数,也只有58万个Mult-Adds。表11中有显示。MobileNet与PlaNet相比,规模小了很多,性能只有略微的降低。然而,MobileNet仍然比Im2GPS性能好很多。
4.5 Face Attributes
MobileNet的另一个用例是压缩未知或者深奥复杂的训练的大型系统。在一个人脸属性分类任务中,作者演示了在MobileNet和蒸馏法之间的协同关系。蒸馏法是一种深度网络的知识迁移的技术。作者试图简化一个具有7500万个参数和16亿的Mult-Adds的大型的人脸属性分类器。分类器在一个类似于YFCC100M的多属性数据集上进行训练。
作者采用MobileNet架构提取一个人脸特征分类器。蒸馏法通过训练分类器来仿真一个更大的模型的输出而不是采用人工标注,因而能够从大型(可能无限大)的未标注的数据集中进行训练。结合蒸馏法训练的可扩展性和MobileNet的少量参数,终端系统不仅不要求正则化(例如weight-decay和early-stopping),反而会表现出更好的性能。表12中很明显的显示基础MobileNet分类器具有积极的模型缩小的弹性:它在人脸属性上实现了一个相似的平均精度却只消耗了Mult-Adds的1%。
4.6 Object Detection
MobileNet同样可以作为一个高效的基础网络部署在现代目标检测系统中。作者在赢得了2016COCO挑战赛的COCO数据集上训练MobileNet并且给出了结果。表13中,在Faster-RCNN和SSD框架下,MobileNet和VGG和Inception V2进行比较。在实验中,SSD以300的输入分辨率(SSD 300)与分别是300和600输入分辨率的Faster-RCNN(Faster-RCNN 300,Faster-RCNN 600)进行比较,Faster-RCNN模型每个照片评估了300RPN proposal boxes。模型在除去了8000最小图片的COCO训练集并在最小值上进行评估。在两个框架下,MobileNet实现了性能与其他网络可比较的结果,计算复杂度和模型大小都相对更小。
4.7 Face Embeddings
FaceNet模型是目前最先进的人脸识别的模型。它在triplet loss上建立了face embeddings。为了建立一个移动的FaceNet模型,作者使用了蒸馏法通过最小化FaceNet和MobileNet在训练集输出结果的平方差进行训练。小型MobileNet模型的结果在表14中显示。
5、 总结
作者基于深度可分离卷积提出了一个叫做MobileNets的新的模型架构,探索了一些重要的设计高效模型的决定思路,然后演示了使用width multiplier和resolution multiplier怎么建立更小和更快的MobileNets,来权衡一个合理的准确度减小大小和延迟度。接着作者比较了不同的MobileNets和流行的模型,演示了其大小、速度和准确度的特性。最后,在应用到一系列任务上应用MobileNets验证了其高效性。下一步的计划是在TensorFlow上发布模型。
MobileNetV2
Linear Bottlenecks
深度神经网络是由 n n n个 L i L_i Li层构成,每层经过激活输出的张量为 h i × w i × d i h_i \times w_i\times d_i hi×wi×di,一连串的卷积和激活层形成一个兴趣流形(manifold of interest,这就是我们感兴趣的数据内容),现阶段还无法定量的描述这种流行,这里以经验为主的研究这些流行性质。
长期以来我们认为:在神经网络中兴趣流行可以嵌入到低维子空间,通俗点说,我们查看的卷积层中所有单个d通道像素时,这些值中存在多种编码信息,兴趣流行位于其中的。我们可以通过变换,进一步嵌入到下一个低维子空间中(例如通过 1 × 1 1\times1 1×1卷积变换维数,转换兴趣流行所在空间维度)。
乍一看,这样的想法比较容易验证,可通过减少层维度从而降低激活空间的维度。MobileNetv1是通过宽度因子(width factor)在计算量和精度之间取折中。用上面的理论来说,宽度因子控制激活空间的维度,直到兴趣流行横跨整个空间。
然而,由于深度卷积神经网络的层是具有非线性激活函数的。以ReLU变换 F ( x ) = m a x ( 0 , x ) F ( x ) = m a x ( 0 , x ) F(x)=max(0,x) 为例,会存在以下问题:
如果当前激活空间内兴趣流行完整度较高,经过ReLU,可能会让激活空间坍塌,不可避免的会丢失信息。(如下Figure 1的示意图)
如果经过ReLU变换输出是非零的,那输入和输出之间是做了一个线性变换的,即将输入空间中的一部分映射到全维输出,换句话来说,ReLU的作用是线性分类器。
下图展现了兴趣流行的变换示例:
Input是一张2维数据,其中兴趣流行是蓝色的螺纹线;本例使用矩阵T TT将数据嵌入到n nn维空间中,后接ReLU,再使用
T
−
1
T^{-1}
T−1 将其投影回2D平面。
可以看到设置$n = 2 , 3 $时信息丢失严重,中心点坍塌掉了。当n = 15…30 之间,恢复的信息明显多了。
总结一下,我们强调了两个性质:
如果兴趣流行经过ReLU变换后得到非零的结果,这时ReLU对应着是一个线性变换
只有当输入流行可包含在输入空间的低维子空间中,ReLU才能完整的保持输入流行的信息。
存在的问题: 我们想要兴趣流行存在低维空间中,即想要提升效果,维度是要低一点。但是维度如果低的话,激活变换ReLU函数可能会滤除很多有用信息,而ReLU对于没有滤除的部分,即非零的部分的作用是一个线性分类器。
既然在低维空间中使用ReLU做激活变换会丢失很多信息,论文针对这个问题使用linear bottleneck(即不使用ReLU激活,做了线性变换)的来代替原本的非线性激活变换。到此,优化网络架构的思路也出来了:通过在卷积模块中后插入linear bottleneck来捕获兴趣流行。 实验证明,使用linear bottleneck可以防止非线性破坏太多信息。
(附录中说了一个看法: 如果输入流行可通过激活空间嵌入到显著的低维子空间,那么通常ReLU变换可保留信息,同时为所需的复杂性引入一组可表达的函数.我看的不是很懂,要表达的是ReLU的必要性~)
从linear bottleneck到深度卷积之间的的维度比称为Expansion factor(扩展系数),该系数控制了整个block的通道数。 linear bottleneck的使用操作的流程演化图如下:
图(a):普通模型架构使用标准卷积将空间和通道信息一起映射到下一层,参数和计算量会比较大
图(b),MobileNetv1中将标准卷积拆分为深度卷积和逐点卷积,深度卷积负责逐通道的过滤空间信息,逐点卷积负责映射通道。将空间和通道分开了
图©和图(d)是MobileNetv2的结构(d是c的下一个连接状态),同样是将标准卷积拆分为深度卷积和逐点卷积,在逐点卷积后使用了接
1
×
1
1\times1
1×1卷积,该卷积使用线性变换,总称为一层低维linear bottleneck,其作用是将输入映射回低维空间。
Inverted residuals
由上面的分析,直觉上我们认为linear bottleneck中包含了所有的必要信息,对于Expansion layer(即linear到深度卷积部分)仅是伴随张量非线性变换的部分实现细节,我们可将shortcuts放在linear bottleneck之间连接。示意图如下:
选择这样的结构,可以提升梯度在乘积层之间的传播能力,有着更好的内存使用效率。
下表是bottleneck convolution的基本实现:
- 首先是1×1 conv2d变换通道,后接ReLU6激活(ReLU6即最高输出为6,超过了会clip下来)
- 中间是深度卷积,后接ReLU
- 最后的1×1 conv2d后面不接ReLU了,而是论文提出的linear bottleneck
Inverted residuals结构示意图如下(方块的高度即代表通道数):
网络结构
ImageNet实验结果
训练细节:
部分 | 设置 |
---|---|
使用工具 | TensorFlow |
训练器 | RMSPropOptimizer, decay and momentum都设置0.9 |
标准的权重衰减 | 4e-5 |
学习率 | 初始学习率为0.045,每个epoch后衰减0.98 |
batch_size | 16GPU内设置96 |
其他细节 | 每层后使用BN层 |
本次比较MobileNetv1,ShuffleNet和NASNet-A模型:
核心单元结构如下:
性能和参数对比如下:
4. efficientnet
摘要
这篇论文最主要的创新点是Model Scaling. 论文提出了compound scaling,混合缩放,把网络缩放的三种方式:深度、宽度、分辨率,组合起来按照一定规则缩放,从而提高网络的效果。EfficientNet在网络变大时效果提升明显,把精度上限进一步提升,成为了当前最强网络。EfficientNet-B7在ImageNet上获得了最先进的 84.4%的top-1精度 和 97.1%的top-5精度,比之前最好的卷积网络(GPipe, Top-1: 84.3%, Top-5: 97.0%)大小缩小8.4倍、速度提升6.1倍。
EfficientNet的主要创新点并不是结构,不像ResNet、SENet发明了shortcut或attention机制,EfficientNet的base结构是利用结构搜索搜出来的,然后使用compound scaling规则放缩,得到一系列表现优异的网络:B0~B7. 下面两幅图分别是ImageNet的Top-1 Accuracy随参数量和flops变化关系图,可以看到EfficientNet饱和值高,并且到达速度快。
intorduce
为了获得更好的精度,放大卷积神经网络是一种广泛的方法。举个例子,ResNet可以通过使用更多层从ResNet-18放大到ResNet-200;目前为止,GPipe通过将baseline模型放大四倍在ImageNet数据集上获得了84.3%的top-1精度,然而,放大CNN的过程从来没有很好的理解过,目前通用的几种方法是放大CNN的深度、宽度和分辨率,在之前都是单独放大这三个维度中的一个,尽管任意放大两个或者三个维度也是可能的,但是任意缩放需要繁琐的人工调参同时可能产生的是一个次优的精度和效率。
实验研究表明了平衡深度、宽度和分辨率这三个维度是至关重要的,令人惊讶的是这样的平衡可以通过简单的使用一组常量比率来缩放每一个维度,基于这个观察,我们提出了一个简单高效的复合缩放方法,不像传统实践中任意缩放这些因子,我们的方法使用一组固定的缩放系数统一缩放网络深度、宽度和分辨率。举个例子,如果想使用
2
N
2^N
2N倍的计算资源,我们可以简单的对网络深度扩大
a
l
p
h
a
N
alpha^N
alphaN倍、宽度扩大
b
e
t
a
N
beta^N
betaN倍, 图像尺寸
γ
N
\gamma^N
γN扩大倍,这里的
α
\alpha
α,
β
\beta
β,
γ
\gamma
γ都是由原来的小模型上做微小的网格搜索决定的常量系数,Figure 2展示了我们的缩放方法和传统方法之间的区别。
论文中的增大方法在已有的MobileNets和ResNets上表现很好。模型增大的有效性严重依赖于baseline网络;更进一步,使用神经网络搜索(Zoph & Le,2017;Tan et al.,2019)开发一个新的baseline网络,并且对它进行扩大得到一个模型家族,叫做EfficientNets。图1总结了在ImageNet上的表现,EfficientNets明显超过其他的ConvNets。EfficientNet-B7准确率超过了已有的最好GPipe(Huang et al.,2018),而且少了8.4倍的参数量和减少了6.1倍的前向运算时间。相比于广泛使用的ResNet-50(He et al.,2016),EfficientNet-B4在差不多运算量的情况下将准确率从76.3%提高到了82.6%(+6.3%)。除了ImageNet,EfficientNets的迁移效果也不错,8个数据集中在5个数据集上达到了最高准确率水平,而且比现有的ConvNets减少了21倍的参数量。
复合模型缩放
作者先解释了如果分别对宽度,深度,分辨率进行缩放会达到饱和,如图3所示,然后提出了一种复合缩放的方法。
我们经验地发现缩放不同的维度不是独立的。直观来说,对于更大分辨率的图像,我们应该增加网络的深度,这样才能有更大的感受野有助于在包含更多像素的更大的图像中捕捉相似的特征。相应的,当分辨率更高的时候,我们应该也增加网络的宽度,在有更多像素的高分辨率图像中捕捉更多细粒度的图案。这些直觉意味着我们需要配合且平衡不同维度的缩放,而不是传统的单个维度的缩放。
使用一个复合系数 ϕ \phi ϕ来一致的缩放网络的宽度,深度和分辨率用一个规定的方式。
EfficientNet 结构
MBconv block结构:
Efficient-B0结构:
原文中的NAS方法:
实验结果
Scaling Up MobileNets and ResNets
为了验证论文的方法,我们首先将缩放方法应用到MobileNets和ResNets中,Table 3展示了以不同的方法缩放的ImageNet结果。与其他单一维度的缩放方法相比,复合缩放方法精度提高了。
ImageNet Results for EfficientNet
采用了和MnasNet相似的设置对我们的EfficientNet模型进行训练:
RMSProp优化器,decay为0.9,momentum为0.9;
batch norm momentum为0.99;
weight decay为1e-5;
初始学习率为0.256,并且每2.4个epoches衰减0.97;
同时使用了swish activation,固定的增强技术,随机深度(drop connect ratio 为0.2),同时更大的模型需要更强的正则化,所以我们线性地增加dropout比率从EfficientNet-B0的0.2到EfficientNet-B7的0.5;
准确率比较:
在CPU上的推理时间比较:
迁移学习的结果
我们也在一系列常用的迁移学习的数据集上评估了我们的EfficientNet,如表6所示。我们借用了与(Kornblith et al., 2019)和(Huang et al., 2018)相同的训练设置,使用ImageNet的预训练模型并且在新数据集上微调。
表5展示了在迁移学习上的效果:(1)相比于公共可获得的模型,比如NASNet-A(Zoph et al., 2018)和Inception-v4(Szegedy et al., 2017)我们的EfficientNet模型达到了更好的准确率且平均4.7倍(最高21倍)的参数减少量。(2)相比于最好的模型,包括DAT(Ngiam et al., 2018)动态合成训练数据和GPipe(Huang et al., 2018)通过特殊的流程并行训练,我们的EfficientNet模型仍旧在5/8的数据集上碾压他们的准确率,而只使用比之小9.6倍的参数量。
图6对比了各种不同模型的准确率-参数的曲线。通常来说,我们的EfficientNets始终比已有的模型,包括(He et al., 2016), DenseNet (Huang et al., 2017), Inception (Szegedy et al., 2017), and NASNet (Zoph et al., 2018)有更好的准确率而且参数少了一个数量级。
讨论
为了理出我们提出的缩放方法在EfficientNet结构上所做的贡献,图8对比了在同样的EfficientNet-B0的baseline网络上使用不同的缩放方法的效果。通常来说,所有的缩放方法都通过损失更多的FLOPS提高了准确率,但是我们的复合缩放方法能够进一步的提高准确率,比其他单个维度的缩放方法,提高了2.5%,表明了我们提出的复合缩放方法的重要性。
为了进一步的理解为什么我们的复合缩放方法能够比其他的方法更好,图7对比了几个用不同的缩放方法得到的有代表性的模型的类别激活映射图的结果。所有的这些模型都缩放自同一个baseline,并且他们的统计信息体现在表7中。图像是随机的从ImageNet的验证集合中挑选的。如图所示,通过复合缩放法得到的模型倾向于更关注相关的区域得到更多的对象细节。而其他的模型或者缺少对象的细节或者不能够捕捉一张图片中的所有对象。