MobileNetV2: Inverted Residuals and Linear Bottlenecks
Abstract
在本文中,我们描述了一种新的移动架构MobileNetV2,它提高了移动模型在多个任务和基准测试以及不同模型大小范围内的最新性能。我们还描述了在一个我们称之为SSDLite的新框架中将这些移动模型应用于对象检测的有效方法。此外,我们演示了如何通过DeepLabv3的简化形式构建移动语义分割模型,我们称之为Mobile DeepLabv3。
基于逆残差结构,其中残差链接位于薄瓶颈层之间。中间扩展层使用轻量级深度卷积来过滤作为非线性来源的特征。此外,我们发现,为了保持代表性,消除窄层中的非线性是很重要的。(抛弃非线性层,采用线性层,)我们证明了这提高了性能,并提供了导致这种设计的直觉。
解耦的哲学:压缩(capacity)---->升维(解压)---->处理(expressiveness)---->压缩(capacity)
解耦的程度是由expansion rate控制
最后,我们的方法允许输入/输出域与转换的表达性解耦 ,(通过先升维,进行DW卷积,然后降维,通过升维的方式容易保持可逆性(并且做了关于可逆性的实验)。将信息通过解压的形式释放,DW层更好提取特征,最后再通过降维的方式进行还原,降维不包含冗余信息,全为manifold of interest)这为进一步的分析提供了一个方便的框架。我们测量了我们在ImageNet[1]分类、COCO对象检测[2]、VOC图像分割[3]方面的性能。我们评估了准确性和通过乘法加法(MAdd)测量的操作数以及实际延迟和参数数之间的权衡。
1. Introduction
神经网络已经彻底改变了机器智能的许多领域,为具有挑战性的图像识别任务提供了超人的准确性。然而,提高准确性的动力通常是有代价的:现代最先进的网络需要高计算资源,超出了许多移动和嵌入式应用的能力。
本文介绍了一种新的神经网络结构,它是专门为移动和资源受限的环境定制的。我们的网络通过显著减少所需的操作和内存数量,同时保持相同的准确性,推动了移动定制计算机视觉模型的发展。
我们的主要贡献是一个新的层模块:(inverted residual with linear bottleneck)具有线性瓶颈的逆残差结构。(MobileNetV2的思想)该模块将低维压缩表示作为输入,首先将其扩展到高维,并用轻量级深度卷积进行过滤。特征随后通过线性卷积投影回低维表示。官方实现在[4]中作为TensorFlow-Slim模型库的一部分提供。
该模块可以在任何现代框架中使用标准操作有效地实现,并允许我们的模型使用标准基准在多个性能点上击败最先进的技术。此外,这种卷积模块特别适合移动设计,因为它允许通过从不完全大的中间张量来显著减少推理过程中所需的内存占用。这减少了在许多嵌入式硬件设计中对主存储器访问的需要,嵌入式硬件设计提供少量非常快速的软件控制的高速缓冲存储器。
2. Related Work
在过去几年中,调整深度神经架构以在准确性和性能之间取得最佳平衡一直是一个活跃的研究领域。由众多团队进行的手动架构搜索和训练算法的改进已经导致了对早期设计的巨大改进,如AlexNet[5]、VGGNet[6]、GoogLeNet[7]。和ResNet[8]。最近,算法架构探索取得了很多进展,包括超参数优化[9,10,11]以及各种网络修剪方法[12,13,14,15,16,17]和连通性学习[18,19]。大量的工作也致力于改变内部卷积块的连接结构,例如在ShuffleNet[20]或引入稀疏性[21]和其他[22]中。
最近,[23,24,25,26]开辟了一个新的方向,将包括遗传算法和强化学习 在内的优化方法引入架构搜索。然而,一个缺点是最终产生的网络非常复杂。在本文中,我们追求的目标是开发关于神经网络如何操作的更好的直觉,并使用它来指导最简单的网络设计。我们的方法应该被视为对[23]和相关工作中描述的方法的补充。在这种情况下,我们的方法类似于[20,22]所采用的方法,并允许进一步提高性能,同时提供其内部操作的一瞥。我们的网络设计基于MobileNetV1[27]。它保持了其简单性,不需要任何特殊的操作符,同时显著提高了其准确性,实现了移动应用的多种图像分类和检测任务的最先进水平。
3. Preliminaries, discussion and intuition
3.1. Depthwise Separable Convolutions
深度可分离卷积是许多高效神经网络架构的关键构建模块[27,28,20],我们也在目前的工作中使用它们。基本思想是深度可分离卷积代替完整的卷积运算符,深度可分离卷积将卷积分成两个独立的层。第一层称为深度卷积,它通过对每个输入通道应用单个卷积滤波器来执行轻量级滤波。第二层是1 × 1卷积,称为逐点卷积,负责通过计算输入通道的线性组合来构建新特征。
标准卷积取一个hi × wi × di输入张量Li,应用卷积核K∈Rk × k× di × dj产生一个hi × wi × di输出张量Lj。标准卷积层的计算成本为hi *wi *di* dj*k* k。
深度可分离卷积是标准卷积层的替代产品。从经验上看,它们的工作原理几乎与常规卷积一样好,但成本仅为:
hi × wi × di×(k2+dj) (1)
它是深度卷积和1 × 1点卷积之和。与传统层相比,有效的深度可分离卷积将计算量减少了近k2 (更准确地说,通过因子k2dj /(k2 + dj ))倍。MobileNetV2使用k=3(3 × 3深度可分离卷积),因此计算成本比标准卷积低8到9倍,而精度仅略有下降[27]。
mobilenetV1的局限性:
- 没有残差链接
- 很多depthwise卷积核训练出来都是零:
- 感受野局限在二维空间里,不能融合图像的三维信息,权重数量和通道数量都太少,都太单薄
- relu会把小于零的输入都抹零,抹零之后意味着前向传播的张量都为零,反向传播的梯度都会零,权重没有梯度,‘永世不得超生’
- 低精度浮点数表示的范围是有限制的
3.2. Linear Bottlenecks
考虑一个由n层Li组成的深度神经网络,每层Li都有一个维数为hi × wi × di的激活张量。在本节中,我们将讨论这些激活张量的基本性质,我们将把它们视为具有di维度的hi × wi“像素”的容器。非正式地,对于真实图像的输入集,我们说层激活集(对于任何层Li)形成“感兴趣的流形”。长期以来,人们一直认为神经网络中感兴趣的流形可以嵌入到低维子空间中。换句话说 ,当我们查看深层卷积层的所有单个d通道像素时,这些值中编码的信息实际上位于某个流形中,而该流形又可嵌入到低维子空间中。(注意,流形的维数不同于可以通过线性变换嵌入的子空间的维数。)
高维feature map中包含了manifold流形,feature map是可已经过降维进行低维嵌入的,在降维过后,高维feature map中包含的manifold流形仍然存在
乍一看,这样的事实可以通过简单地降低层的维度来捕获和利用,从而降低操作空间的维度。MobileNetV1[27]成功地利用了这一点,通过宽度乘数参数在计算和准确性之间进行了有效的权衡,并已被纳入其他网络的高效模型设计[20]。根据这种直觉,宽度乘数方法允许人们降低激活空间的维数,直到感兴趣的流形跨越整个空间。 然而,当我们回忆起深度卷积神经网络实际上具有非线性的每坐标变换时,这种直觉就崩溃了(但是降维过度的话,relu函数会造成信息丢失,这就造成了降维和非线性的矛盾),例如ReLU。例如,应用于1D空间中的直线的ReLU产生“射线”,而在Rn空间中,它通常产生具有n个关节的分段线性曲线。
如果不想让relu因为‘抹零’造成信息丢失,则应该让输入都为正值,但是若输入都为正值relu函数就变成了恒等映射(线性变换),而神经网络强大的性能源于非线性激活函数,所以需要进行升维,扩充出冗余的维度再进行relu即防止信息丢失,也发挥relu非线性(不损坏manifold)
容易看出,通常,如果层变换的结果ReLU(Bx)具有非零体积S,则映射到内部S的点通过输入的线性变换B获得,从而指示对应于全维输出的输入空间的部分被限制为线性变换。换句话说,深度网络仅在输出域的非零体积部分具有线性分类器的能力。我们参考补充材料以获得更正式的声明。
图1:嵌入高维空间的低维流形的ReLU变换示例。在这些例子中,初始螺旋使用随机矩阵T嵌入n维空间,后跟ReLU,然后使用T1投影回2D空间。在上面的例子中,n=2,3导致信息丢失,其中流形的某些点彼此坍缩,而对于n=15到30,变换是高度非凸的。
图2:可分离卷积块的演化。对角阴影纹理表示不包含非线性的层。最后一层(浅色)表示下一个块的开始。注意:2d和2c堆叠时是等效的块。最佳彩色观看。
扩张维度(升维)可带来冗余信息,防止relu被一杆清台
另一方面,当ReLU崩溃通道时,它不可避免地丢失了该通道中的信息。然而,如果我们有许多通道,并且在激活流形中有一个结构,信息可能仍然保存在其他通道中。在补充材料中,我们表明,如果输入流形可以嵌入到激活空间的一个明显较低维的子空间中,那么ReLU变换保留了信息,同时将所需的复杂性引入到可表达函数集中。
总之,我们已经强调了两个性质,它们指示了感兴趣的流形应该位于高维激活空间的低维子空间中的要求:
- 如果感兴趣的流形在ReLU变换后保持非零体积,则它对应于线性变换。
如果manifold of interest 都为正,relu相当于恒等线性变换。
- ReLU能够保持关于输入流形的完全信息,但仅当输入流形位于输入空间的低维子空间中时。
在扩充出足够多的维度时,relu能够保留manifold的完成信息。
这两个见解为我们提供了优化现有神经架构的经验提示:假设感兴趣的流形是低维的,我们可以通过在卷积块中插入线性瓶颈层来捕捉这一点(对低维的manifold使用线性)。实验证据表明,使用线性层是至关重要的,因为它可以防止非线性破坏太多的信息。在第6节中,我们根据经验表明,在瓶颈中使用非线性层确实会损害性能百分之几,这进一步验证了我们的假设3。我们注意到,在[29]中报告了有助于非线性的类似报告,其中非线性从传统残差块的输入中去除了,从而提高了CIFAR数据集的性能。
在低维时,冗余信息较少,如果不想让relu因为‘抹零’造成信息丢失,则应该让输入都为正值,但是若输入都为正值relu函数就变成了恒等映射(线性变换),所以在低维时采用恒等映射
在本文的剩余部分,我们将利用瓶颈卷积。我们将输入瓶颈的大小和内部大小之间的比率称为扩展比率。
3.3. Inverted residuals
瓶颈块看起来类似于剩余块,其中每个块包含一个输入,后跟几个瓶颈,然后是扩展[8]。然而,受瓶颈实际上包含所有必要信息的直觉的启发,而扩展层仅作为伴随张量的非线性变换的实现细节,我们直接在低维瓶颈之间使用快捷方式。
图3提供了设计差异的示意图。插入快捷方式的动机类似于经典的剩余连接:我们希望提高梯度在乘法器层之间传播的能力。然而,反向设计的内存效率要高得多(详见第5节),在我们的实验中效果也稍好。=
图3:残差块[8,30]和反向残差的区别。对角影线图层不使用非线性。我们使用每个块的厚度来表示其通道的相对数量。请注意经典残差如何连接具有大量通道的层,而反向残差连接瓶颈。最佳彩色观看。
瓶颈卷积的运行时间和参数计数基本实现结构如表1所示。对于具有d′输入通道和d′′输出通道的大小为h × w、展开因子为t、核大小为k的块,所需的乘加总数为h·w·d′t(d′+k2+d′)。与(1)相比,这个表达式有一个额外的项,因为我们确实有一个额外的1 × 1卷积,然而我们网络的性质允许我们利用小得多的输入和输出维度。在表3中,我们比较了MobileNetV1、MobileNetV2和ShuffleNet之间每种分辨率所需的大小。
表1:从k’通道到k’通道的瓶颈剩余块转换,具有步幅s和扩展因子t。
表3:不同架构在每个空间分辨率下需要具体化的最大通道/内存数量(Kb)。我们假设激活为16位浮点。对于ShuffleNet,我们使用2x,g=3,这与MobileNetV1和MobileNetV2的性能相匹配。对于MobileNetV2和ShuffleNet的第一层,我们可以使用第5节中描述的技巧来减少内存需求。即使ShuffleNet在其他地方使用了瓶颈,由于非瓶颈张量之间存在快捷方式,非瓶颈张量仍然需要具体化。
3.4. Information flow interpretation
我们的架构的一个有趣的特性是,它提供了构建块(瓶颈层)的输入/输出域和层转换之间的自然分离,层转换是将输入转换为输出的非线性函数。前者可以看作是网络在每一层的容量,而后者可以看作是表达能力。这与常规和可分离的传统卷积块形成对比,在传统卷积块中,表现力和容量都纠缠在一起,并且是输出层深度的函数。
特别是,在我们的例子中,当内层深度为0时,由于快捷连接,底层卷积是单位函数。当展开比小于1时,这是一个经典的剩余卷积块[8,30]。然而,为了我们的目的,我们证明大于1的膨胀比是最有用的。
这种解释允许我们将网络的表现力与其容量分开研究,我们相信对这种分离的进一步探索是有保证的,以提供对网络属性的更好理解。
4. Model Architecture
现在我们详细描述我们的架构。正如上一节所讨论的,基本的构建块是带有残差的瓶颈深度可分离卷积。该模块的详细结构如表1所示。MobileNetV2的体系结构包含具有32个过滤器的初始完全卷积层,随后是表2中描述的19个剩余瓶颈层。我们使用ReLU6作为非线性,因为它在用于低精度计算时具有鲁棒性[27]。我们总是使用内核大小3 × 3作为现代网络的标准,并在训练期间利用dropout和batch normalization。
表1:从k’通道到k’通道的瓶颈剩余块转换,具有步幅s和扩展因子t。
表2:MobileNetV2:每行描述一个或多个相同(模步幅)层的序列,重复n次。相同序列中的所有层具有相同数量的输出通道c。每个序列的第一层有一个步幅s,所有其他层使用步幅1。所有空间卷积都使用3 × 3核。扩展因子t总是应用于输入大小,如表1所示。
除了第一层,我们在整个网络中使用恒定的扩展速率。在我们的实验中,我们发现5到10之间的扩展速率会产生几乎相同的性能曲线,较小的网络以稍小的扩展速率获得更好的性能,而较大的网络以较大的扩展速率获得稍好的性能。
对于我们所有的主要实验,我们对输入张量的大小使用6的展开因子。例如,对于采用64通道输入张量并产生128通道张量的瓶颈层,则中间扩展层为64*6=384通道。
权衡超参数如[27]所示,我们通过使用输入图像分辨率和宽度乘数作为可调超参数来定制我们的架构,以适应不同的性能点,这些参数可以根据所需的精度/性能权衡进行调整。我们的主网络(宽度乘法器1224 × 224)的计算成本为3亿乘法加法,使用340万个参数。我们探讨了输入分辨率从96到224以及宽度乘数从0.35到1.4的性能权衡。网络计算成本范围从7百万MAdds到5.85亿MAdds,而模型大小在1.7 M和6.9 M参数之间变化。
与[27]的一个微小实现差异是,对于小于1的乘数,我们将宽度乘数应用于除最后一个卷积层之外的所有层。这提高了较小型号的性能。
5. Implementation Notes
5.1. Memory efficient inference
反向剩余瓶颈层允许特别高效的内存实现,这对于移动应用非常重要。使用例如TensorFlow[31]或Caffe[32]的推理的标准有效实现构建了有向无环计算超图G,该超图由表示操作的边和表示中间计算的张量的节点组成。调度计算是为了最小化需要存储在存储器中的张量总数。在最一般的情况下,它搜索所有似是而非的计算顺序∑(G),并选择最小化的一个
Max函数为最大占用瓶颈,取决于最大的张量。
其中R(i, π, G)是连接到πi ...πn节点中任一节点的中间张量列表,A表示张量A的大小,size(i)是操作i期间内部存储所需的内存总量。
对于仅具有平凡并行结构(如剩余连接)的图,只有一个非平凡可行计算顺序,因此可以简化在计算图G上推断所需的内存总量和界限:
对于只有平凡并行结构(如剩余连接)的图,只有一个非平凡可行的计算顺序,因此可以简化在计算图G上进行推断所需的内存总量和内存界限:或者重申一下,内存量就是所有操作中组合输入和输出的最大总大小。在接下来的内容中,我们表明,如果我们将瓶颈剩余块视为单个操作(并将内部卷积视为一次性张量),内存总量将由瓶颈张量的大小决定,而不是由瓶颈内部张量的大小决定(并且大得多)。
瓶颈剩余块图3b所示的瓶颈块算子F(x)可以表示为三个算子F(x)=[A ◦N ◦B]x的组合,其中A是线性变换A:Rs×s×k→Rs×s×n,N是非线性每通道变换:N Rs×s×k→Rs’×s’×n,B也是输出域的线性变换:B:Rs’×s’×k→Rs’×s’×n’。
A是线性升维,B是线性降维,
对于我们的网络,N = ReLU6 ◦ dwise ◦ ReLU6,但结果适用于任何每通道变换。假设输入域的大小是x,输出域的大小是|y|,那么计算F(x)所需的内存可以低至|s2k| + |s′2k′| + O(max(s2,s′2)).
将中间层张量sxsxn等分为t个小张量,每个小张量占用n/t内存,每次只读一个小张量。
该算法基于这样一个事实,即内部张量I可以表示为t张量的串联,每个张量的大小为n/t,然后我们的函数可以表示为
通过累加总和,我们只需要在内存中始终保留一个大小为n/t的中间块。n=t,我们最终必须始终只保留中间表示的单个通道。使我们能够使用这种技巧的两个约束是(a)内部变换(包括非线性和深度方向)是每通道的事实,以及(b)连续的非每通道运算符具有显著的输入大小与输出之比。对于大多数传统的神经网络来说,这种技巧不会产生显著的改进。
我们注意到,使用t路分割计算F(X)所需的乘加运算符的数量与t无关,然而在现有的实现中,我们发现用几个较小的矩阵乘法替换一个矩阵乘法会损害运行时性能,因为缓存未命中增加。我们发现,当t是介于2和5之间的一个小常数时,这种方法最有帮助。它显著降低了内存需求,但仍然允许人们利用通过使用深度学习框架提供的高度优化的矩阵乘法和卷积算子获得的大部分效率。特殊的框架级优化是否会带来进一步的运行时改进还有待观察。
6. Experiments
6.1. ImageNet Classification
训练设置我们使用TensorFlow[31]训练我们的模型。我们使用标准的RMSPropOptimizer,衰减和动量都设置为0.9。我们在每一层之后使用BN层,标准权重衰减(l2正则化)设置为0.00004。在MobileNetV1[27]设置之后,我们使用0.045的初始学习率和每个时期0.98的学习率衰减率。我们使用16个GPU异步工作线程,批量大小为96。
Batch size 越大越顺滑。
结果我们将我们的网络与MobileNetV1、ShuffleNet和NASNet-A模型进行了比较。表4显示了几个选定模型的统计数据,图5显示了完整的性能图。
表ImageNet上的性能,不同网络的比较。作为ops的惯例,我们计算乘法加法的总数。在上一篇专栏文章中,我们报告了谷歌Pixel 1手机(使用TF-Lite)单个大内核的运行时间(毫秒)。我们不报告洗牌网的数量,因为还不支持有效的组卷积和洗牌。
图5:MobileNetV2与MobileNetV1、ShuffleNet、NAS的性能曲线。对于我们的网络,我们对所有分辨率使用乘数0.35、0.5、0.75、1.0,对224分辨率使用乘数1.4。最佳彩色观看。
6.2. Object Detection
我们评估并比较了MobileNetV2和MobileNetV1作为特征提取器[33]在COCO数据集[2]上与单次检测器(SSD)[34]的修改版本进行对象检测的性能。我们还将YOLOv2[35]和原始SSD(以VGG-16[6]作为基础网络)作为基线进行了比较。我们没有将性能与其他架构进行比较,如Faster-RCNN[36]和RFCN[37],因为我们的重点是移动/实时模型。
Yolo是单阶段目标检测,而Fast R-CNN是双阶段目标检测,所以只与单阶段的目标检测算法进行了对比,
SSDLite:在本文中,我们介绍了常规SSD的移动友好变体。我们在SSD预测层中用可分离卷积(深度方A向后跟1 × 1投影)替换所有规则卷积。这种设计符合MobileNets的总体设计,并且被认为在计算效率上要高得多。我们称这个修改版为SSDLite。与常规SSD相比,SSDLite显著降低了参数数量和计算成本,如表5所示。
表5:使用MobileNetV2配置的SSD和SSDLite之间的大小和计算成本的比较,并对80个类进行预测。
Blackbone骨干网络提取不同层次的特征,SSD从不同层特征分别作为检测头
对于MobileNetV1,我们遵循[33]中的设置。对于MobileNetV2,SSDLite的第一层附加到第15层的扩展(输出步幅为16)。第二层和其余的SSDLite层连接在最后一层的顶部(输出步幅为32)。此设置与MobileNetV1一致,因为所有图层都附加到相同输出步长的要素图上。
这两个MobileNet模型都使用开源TensorFlow对象检测API进行训练和评估[38]。两种型号的输入分辨率都是320 × 320。我们对mAP(COCO挑战指标)、参数数量和乘法加法数量进行了基准测试和比较。结果如表6所示。MobileNetV2 SSDLite不仅是效率最高的型号,也是三者中最精确的型号。值得注意的是,MobileNetV2 SSDLite的效率高20倍,体积小10倍,但在COCO数据集上仍优于YOLOv2。
表MobileNetV2+SSDLite和其他实时检测器在COCO数据集对象检测任务上的性能比较。MobileNetV2+SSDLite以明显更少的参数和更小的计算复杂度实现了具有竞争力的精度。所有模型都在trainval35k上进行训练,并在test-dev上进行评估。SSD/YOLOv2编号来自[35]。据报道,谷歌Pixel 1手机的大内核运行时间,使用TF-Lite引擎的内部版本。
6.3. Semantic Segmentation
在本节中,我们将用作特征提取器的MobileNetV1和MobileNetV2模型与DeepLabv3[39]进行比较,以完成移动语义分割任务。DeepLabv3采用atrous卷积[40,41,42],这是一种显式控制计算特征图分辨率的强大工具,并构建了五个并行头,包括(a)atrous空间金字塔池模块(ASPP)[43],包含三个具有不同atrous速率的3 × 3卷积,(b)1 × 1卷积头,以及(c)图像级特征[44]。我们用输出步长来表示输入图像的空间分辨率与最终输出分辨率的比值,该比值通过适当地应用atrous卷积来控制。对于语义分割,对于更密集的特征图,我们通常采用输出步幅=16或8。我们在PASCAL VOC 2012数据集[3]上进行实验,使用来自[45]的额外注释图像和评估指标mIOU。
为了建立一个移动模型,我们试验了三种设计变化:(1)不同的特征提取器,(2)简化DeepLabv3头以加快计算速度,以及(3)不同的推理策略以提高性能。表7总结了我们的结果。我们已经观察到:(a)推理策略,包括多尺度输入和添加向左翻转的图像,显著增加了MAdds,因此不适合设备上的应用,(b)使用输出步幅=16比输出步幅=8更有效,(c)MobileNetV1已经是一个强大的特征提取器,并且只需要比ResNet-101[8]少4.9-5.7倍的MAdds(例如,mIOU:78.56vs82.70,和MAdds:941.9 b vs 4870.6 b),(d)在MobileNetV2的倒数第二个特征图上构建DeepLabv3头比在原始的最后一层特征图上更有效,因为倒数第二个特征图包含320个通道而不是1280个通道,通过这样做,我们获得类似的性能,但所需的操作比MobileNetV1少约2.5倍,并且(e)DeepLabv3头在计算上非常昂贵,并且移除ASPP模块显著减少了MAdds,而性能仅略有下降。在表7的最后,我们确定了设备上应用的潜在候选(粗体),它达到了75.32%的mIOU,并且只需要2.75 B MADDs。
表7:PASCAL VOC 2012验证集上的MobileNet+DeepLabv3推理策略。MNet V2*:倒数第二个特征图用于DeepLabv3磁头,包括(1)空间金字塔池(ASPP)模块,以及(2)1 × 1卷积和图像池特征。OS:控制分割图输出分辨率的输出步幅。MF:测试期间的多尺度和左右翻转输入。所有的模型都在COCO上进行了预训练。设备上应用的潜在候选以粗体显示。PASCAL图像的尺寸为512 × 512,atrous卷积允许我们在不增加参数数量的情况下控制输出特征分辨率。
6.4. Ablation study
Shortcut应连接维度较小的bottleneck
反向残差连接。残余连接的重要性已被广泛研究[8,30,46]。本文报告的新结果是,连接瓶颈的快捷方式比连接扩展层的快捷方式执行得更好(参见图6b进行比较)。
图6:非线性和各种类型的残差链接的影响。
线性瓶颈的重要性。线性瓶颈模型严格来说不如非线性模型强大,因为激活总是可以在线性状态下运行,并对偏差和比例进行适当的改变。然而,我们在图6a中显示的实验表明,线性瓶颈提高了性能,为非线性破坏低维空间中的信息提供了支持。
7. Conclusions and future work
我们描述了一个非常简单的网络架构,它允许我们构建一系列高效的移动模型。我们的基本建筑单元有几个特性,使其特别适合移动应用。它允许非常节省内存的推理,并依赖于利用所有神经框架中存在的标准操作。
对于ImageNet数据集,我们的架构提高了各种性能点的技术水平。
对于目标检测任务,我们的网络在准确性和模型复杂性方面都优于COCO数据集上最先进的实时检测器。值得注意的是,我们结合SSDLite检测模块的架构比YOLOv2的计算量少20倍,参数少10倍。
在理论方面:所提出的卷积块具有独特的属性,允许将网络表达性(由扩展层编码)与其容量(由瓶颈输入编码)分开。探索这一点是未来研究的一个重要方向。
鸣谢我们要感谢Matt Streeter和Sergey Ioffe(BN-inception\inceptionV3\inception V4\resnet)提供的有益反馈和讨论。
Q1:为什么最后采用线性函数,不采用非线性函数?
在低维时,冗余信息较少,如果不想让relu因为‘抹零’造成信息丢失,则应该让输入都为正值,但是若输入都为正值relu函数就变成了恒等映射(线性变换),所以在低维时采用恒等映射
Q2:如何理解升维和降维被称为解耦的过程?
MobileNetV2通过升维和逆残差结构将capacity与expressiveness进行解耦,解耦的程度由expansion rate控制
解耦的哲学:压缩(capacity)---->升维(解压)---->处理(expressiveness)---->压缩(capacity)
解耦的程度是由expansion rate控制
可以将capacity理解为种子,种子中包含着许多的遗传形状,但是在种子这种状态下是抽象的,不易理解的,升维相当于把种子养成花,这样capacity包含的所有性状都会展现出来,就更便于提取,类似与一种对信息的解压方式,之后对升维后的信息进行DW处理之后再次压缩成一个种子(capacity),这个种子里边包含了之前的信息和新学习到的信息
Q3:解释为什么要先进行升维,理论依据是什么,实验室怎么做的,如何对所做的实验进行总结。
方程有唯一解需要满足两个条件:
1.y0中至少有n个激活为正(升维,确保正激活足够多)
2.与n个正激活值对应的B(隐藏层)中的n个神经元权重非线性相关。
举例:假如输入的为256维的特征,隐藏层有1024个神经元,则隐藏层的1024个神经元的输出需要满足有256个为正,并且对应的256个权重是线性无关的
所以,需要先升维把输出的维度升高,才更容易满足大于n个神经元输出为正,这就需要M远大于N
在MobileNetV2的绝大数层在训练之后不会丢失信息,绝大多数层都是可逆的,都是可以由输出反推回输入的。
Q4:MobileNetV1的局限性是那些,MobileNetV2是怎么克服的。
1.感受野局限在二维空间里,不能融合图像的三维信息,权重数量和通道数量都太少,都太单薄
2.relu会把小于零的输入都抹零,抹零之后意味着前向传播的张量都为零,反向传播的梯度都会零,权重没有梯度,‘永世不得超生’
3.低精度浮点数表示的范围是有限制的
改进:
1.ResNet是先降维后升维,MobileNetV2是先升维后降维
2.ResNet用到的是标准卷积,而MobileNetV2用到的是深度可分离卷积
3.ResNet用到Relu激活函数,MobileNetV2用到的是Relu6激活函数
4.ResNet全部都是用的非线性激活,MobileNetV2在降维的时间用的是线性激活函数
5.ResNet的残差链接连接的是两个高维的张量,MobileNetV2的残差链接连接的是两个低维的张量
MobileNetV1采用的是深度可分离卷积,MobileNetV2在深度可分离卷积之前进行升维。
ResNet的残差链接连接的是两个高维的张量,MobileNetV2的残差链接连接的是两个低维的张量