【读点论文】MobileNetV2: Inverted Residuals and Linear Bottlenecks 针对V1的专项改进。改变残差方式,改善映射条件。

MobileNetV2: Inverted Residuals and Linear Bottlenecks

Abstract

  • 在本文中,描述了一种新的移动架构MobileNetV2,它提高了移动模型在多任务和基准测试以及不同模型规模范围内的最新性能。还描述了在大家称为SSDLite的新框架中将这些移动模型应用于对象检测的有效方法。此外,本文演示了如何通过一个简化形式的DeepLabv3(本文称之为Mobile DeepLabv3)来构建移动语义分割模型。
  • 基于倒置的残差结构,其中shortcut connections在薄瓶颈层之间。中间扩展层使用轻量级深度方向卷积来过滤作为非线性源的特征。此外发现,重要的是要消除狭窄层中的非线性,以保持代表性的力量。本文证明这提高了性能,并提供了导致这种设计的直觉。
  • 最后,本文的方法允许将输入/输出域从转换的表达中分离出来,这为进一步的分析提供了一个方便的框架。本文的方法在ImageNet 分类、COCO对象检测、VOC图像分割上测量性能。本文评估了精度、乘加(MAdd)测量的操作数量、实际延迟和参数数量之间的权衡。
  • V2相较于V1的新想法包括Linear Bottleneck 和 Inverted Residuals,mobileNetV2是对mobileNetV1的改进,是一种轻量级的神经网络。mobileNetV2保留了V1版本的深度可分离卷积,增加了线性瓶颈(Linear Bottleneck)和倒残差(Inverted Residual)。

Introduction

  • 神经网络已经彻底改变了机器智能的许多领域,为具有挑战性的图像识别任务提供了超人的准确性。然而,提高精度的驱动力往往是有代价的:现代最先进的网络需要大量的计算资源,超出了许多移动和嵌入式应用的能力。
  • 本文介绍了一种新的神经网络体系结构,它是专门为移动和资源受限环境定制的。本文的网络推动了移动定制计算机视觉模型的发展,在保持相同精度的同时,显著减少了所需的运算次数和内存。
  • 本文的主要贡献是一个新颖的层模块:线性瓶颈的反转残差。该模块将低维压缩表示作为输入,该低维压缩表示首先被扩展到高维,并用轻量深度卷积进行滤波。随后通过线性卷积将特征投影回低维表示。正式实现可作为TensorFlow-Slim模型库的一部分在中获得。
  • 该模块可以在任何现代框架中使用标准操作有效地实现,并允许本文的模型使用标准基准在多个性能点上击败最先进的技术。此外,该卷积模块特别适合于移动设计,因为它允许通过从不完全具体化大的中间张量来显著减少推断期间所需的内存占用。这减少了许多嵌入式硬件设计中对主存储器访问的需求,这些设计提供少量非常快速的软件控制的高速缓冲存储器。

Related Work

  • 在过去几年中,调整深度神经架构以在准确性和性能之间取得最佳平衡一直是一个活跃的研究领域。许多团队进行的手动架构搜索和训练算法的改进已经导致了对早期设计的巨大改进,如AlexNet 、VGGNet 、GoogLeNet ,以及ResNet 。最近,在算法架构探索方面取得了许多进展,包括超参数优化以及各种网络修剪方法和连通性学习。大量工作也致力于改变内部卷积块的连接结构,例如ShuffleNet或引入稀疏性等。
  • 最近,开辟了将包括遗传算法和强化学习在内的优化方法引入建筑搜索的新方向。然而,一个缺点是最终得到的网络非常复杂。在本文中,追求的目标是开发关于神经网络如何操作的更好的直觉,并使用它来指导最简单的网络设计。本文的方法应该被看作是对[Learning transferable architectures for scalable image recognition.]中描述的方法和相关工作的补充。
  • 在这种情况下,本文的方法类似于[Shufflenet]所采用的方法,并允许进一步提高性能,同时提供对其内部操作的一瞥。本文的网络设计基于MobileNetV1。它保持了其简单性,不需要任何特殊的操作人员,同时显著提高了其准确性,实现了移动应用中多图像分类和检测任务的最先进水平。

Preliminaries, discussion and intuition

  • Depthwise Separable Convolutions

    • 深度方向可分离卷积是许多高效神经网络架构的关键构建模块,本文也在当前工作中使用它们。基本思想是用分解的版本代替完整的卷积算子,分解的版本将卷积分成两个独立的层。第一层称为深度方向卷积,它通过对每个输入通道应用单个卷积滤波器来执行轻量级滤波。第二层是1 × 1卷积,称为逐点卷积,负责通过计算输入通道的线性组合来构建新特征。
    • 标准卷积取一个 h i × w i × d i h_i × w_i × d_i hi×wi×di输入张量 L i L_i Li,应用卷积核 K ∈ R k × k × d i × d j K∈\Bbb R^{k×k×d_i×d_j} KRk×k×di×dj产生一个 h i × w i × d j h_i × w_i × d_j hi×wi×dj输出张量 L j L_j Lj。标准卷积层具有 h i ⋅ w i ⋅ d i ⋅ d j ⋅ k ⋅ k h_i·w_i·d_i·d_j·k·k hiwididjkk的计算成本。
    • 深度方向可分离卷积是标准卷积层的替代物。它们几乎与常规卷积一样有效,但成本却很低: h i ⋅ w i ⋅ d i ( k 2 + d j ) h_i·w_i·d_i(k^2+d_j) hiwidi(k2+dj)
    • 它是深度方向和1 × 1点方向卷积的和。与传统层相比,有效的深度方向可分离卷积将计算量减少了几乎 k 2 k^2 k2。MobileNetV2使用k = 3 (3 × 3深度方向可分离卷积),因此计算成本比标准卷积低8到9倍,精度仅略有降低。
  • Linear Bottlenecks

    • 考虑一个由n层L1组成的深度神经网络,每层L1的激活张量的维数为 h i × w i × d i h_i × w_i × d_i hi×wi×di。在这一节中,本文将讨论这些激活张量的基本性质,将它们视为具有di维度的hi × wi“像素级”的容器。对于实像的输入集,本文认为层激活集(对于任何层Li)形成“感兴趣的流形”。长期以来,人们一直认为神经网络中感兴趣的流形可以嵌入到低维子空间中。换句话说,当观察一个深度卷积层的所有单个d通道像素时,这些值中编码的信息实际上位于某个流形中,而这个流形又可以嵌入到一个低维子空间中。

    • 乍一看,这样的事实可以通过简单地减少层的维度从而减少操作空间的维度来捕捉和利用。MobileNetV1 已成功利用这一点,通过宽度乘数参数在计算和精度之间进行有效权衡,并已纳入其他网络的高效模型设计中[shufflenet]。

    • 根据这种直觉,宽度乘数方法允许人们减少激活空间的维度,直到感兴趣的流形覆盖整个空间。然而,当本文回忆起深度卷积神经网络实际上具有非线性的每坐标变换(例如ReLU)时,这种直觉就失效了。例如,ReLU应用于1D空间中的一条线会产生一条“射线”,而在 R n R^n Rn空间中,它通常会产生一条带有n个接头的分段线性曲线。

    • 很容易看出,一般来说,如果层变换ReLU(Bx)的结果具有非零体积S,则映射到内部S的点是通过输入的线性变换B获得的,因此表明对应于全维输出的输入空间部分限于线性变换。换句话说,深度网络仅在输出域的非零体积部分上具有线性分类器的能力。本文参考补充材料以获得更正式的陈述。

    • 另一方面,当ReLU折叠通道时,它不可避免地会丢失该通道中的信息。然而,如果有许多通道,并且在激活的流形中有一个结构,信息可能仍然保存在其他通道中。在补充材料中,本文证明了如果输入流形可以嵌入到激活空间的一个低维子空间中,那么ReLU变换保留了信息,同时将所需的复杂性引入到可表达函数的集合中。

    • 概括地说,本文已经强调了两个特性,它们指示了感兴趣的流形应该位于高维激活空间的低维子空间中的要求:

      • 如果感兴趣的流形在ReLU变换后保持非零体积,则它对应于线性变换。
      • ReLU能够保留关于输入流形的完整信息,但仅当输入流形位于输入空间的低维子空间中时。
    • 这两个见解为本文提供了优化现有神经架构的经验提示:假设感兴趣的流形是低维的,本文可以通过将线性瓶颈层插入卷积块来捕捉这一点。实验证据表明,使用线性层至关重要,因为它可以防止非线性破坏太多的信息。

    • 本文根据经验表明,在瓶颈中使用非线性层确实会降低几个百分点的性能,这进一步验证了本文的假设。本文还注意到,在[Deep pyramidal residual networks]中报告了非线性得到帮助的类似报告,其中从传统残差块的输入中去除了非线性,从而提高了CIFAR数据集的性能。

    • 在本文的残差部分,将利用bottleneck convolutions.。本文将输入瓶颈的大小与内部大小之比称为扩展比

  • Inverted residuals

    • The bottleneck blocks看起来类似于残差块,其中每个块包含一个输入,后面是几个bottleneck ,然后是扩展[resnet]。然而,受到瓶颈实际上包含所有必要信息的直觉的启发,而扩展层仅仅作为伴随张量的非线性变换的实现细节,本文在瓶颈之间直接使用shortcuts。
    • 瓶颈卷积的运行时间和参数计数基本实现结构如下表所示。对于大小为h × w、扩展因子为t、内核大小为k、输入通道为 d ‘ d^` d、输出通道为 d ‘ ‘ d^{``} d的模块,所需乘加总数为 h ⋅ w ⋅ d ‘ ⋅ t ( d ‘ + k 2 + d ‘ ‘ ) h·w·d^‘·t(d^‘+k^2+d^{‘‘}) hwdt(d+k2+d)。更准确地说,与乘以系数 k 2 d j / ( k 2 + d j ) k^2d_j/(k^2 + d_j) k2dj/(k2+dj)相比,这个表达式有一个额外的项,因为本文确实有一个额外的1 × 1卷积,但是本文的网络的性质允许利用小得多的输入和输出维度。
      • 在这里插入图片描述
      • 瓶颈残差块从k到k0通道转换,步长为s,扩展因子为t
    • 在下表中,本文比较了MobileNetV1、MobileNetV2和ShuffleNet之间每个分辨率所需的大小。
      • 在这里插入图片描述
      • 对于不同的体系结构,在每个空间分辨率下需要具体化的最大通道/内存数量(Kb)。本文假设16位浮点数用于激活。对于ShuffleNet,本文使用2x,g = 3来匹配MobileNetV1和MobileNetV2的性能。
      • 对于MobileNetV2和ShuffleNet的第一层,本文可以使用第下一节中描述的技巧来减少内存需求。即使ShuffleNet在其他地方使用了瓶颈,由于非瓶颈张量之间存在shortcuts,非瓶颈张量仍然需要具体化。
    • 普通ResNet结构和反转残差的对比:
      • 在这里插入图片描述
      • MobileNet V2利用残差结构取代了原始的卷积堆叠方式,提出了一个Inverted ResidualBlock结构。
      • MobileNetV2之所以采用这种先升维,再降维的方法,是因为 MobileNetV2 将residuals block 的 bottleneck 替换为了 Depthwise Convolutions,因其参数少,提取的特征就会相对的少,如果再进行压缩的话,能提取的特征就更少了,因此MobileNetV2 就执行了扩张→卷积特征提取→压缩的过程。
  • Information flow interpretation

    • 本文架构的一个有趣特性是,它在构建模块(瓶颈层)的输入/输出域和层转换(将输入转换为输出的非线性函数)之间提供了自然的分离。前者可以看作是网络在每一层的容量,而后者可以看作是表现力。这与常规和可分离的传统卷积块形成对比,在传统卷积块中,表现力和容量纠缠在一起,并且是输出层深度的函数。
    • 特别地,在本文的例子中,当内层深度为0时,由于shortcut,基本卷积是单位函数。当扩展比小于1时,这就是经典的残差卷积块。然而,为了本文的目的,证明膨胀比大于1是最有用的
    • 这种解释使本文能够独立于网络的容量来研究网络的表达能力,本文相信对这种分离的进一步探索是有保证的,以提供对网络属性的更好理解。

Model Architecture

  • 本节详细描述本文的架构。如前所述,基本构建模块是瓶颈深度可分离的残差卷积。该模块的详细结构如上第一张表所示。MobileNetV2的架构包含具有32个滤波器的初始完全卷积层,随后是下表中描述的19个剩余瓶颈层。本文使用ReLU6作为非线性激活函数,因为它在用于低精度计算时具有鲁棒性。本文总是使用3 × 3的核大小作为现代网络的标准,并在训练期间利用dropout和批量归一化。
    • 在这里插入图片描述
    • MobileNetV2:每一行描述一个或多个相同(模跨步)层的序列,重复n次。同一序列中的所有层具有相同数量c的输出通道。每个序列的第一层具有步距s,所有其他层使用步距1。所有空间卷积都使用3 × 3核。如上面第一张表所述,扩展因子t始终应用于输入大小。
  • 除了第一层,本文在整个网络中使用恒定的膨胀率。在本文的实验中,发现5到10之间的膨胀率会导致几乎相同的性能曲线较小的网络在膨胀率稍小的情况下性能更好,而较大的网络在膨胀率较大的情况下性能稍好
  • 对于本文所有的主要实验,本文将展开因子6应用于输入张量的大小。例如,对于采用64通道输入张量并产生128通道张量的瓶颈层,中间扩展层则是64*6 = 384通道。
  • Trade-off hyper parameters
    • 如[mobilenetv1]中所述,本文通过使用输入图像分辨率和宽度乘数作为可调超参数来定制我们的架构以适应不同的性能点,可以根据所需的精度/性能权衡进行调整。本文的主要网络(宽度乘数1,224 × 224)具有3亿次乘加的计算成本,并使用340万个参数。本文探讨了输入分辨率从96到224,宽度乘数从0.35到1.4时的性能权衡。网络计算成本范围从7乘加到5.85亿MAdds,而模型大小在1.7M和6.9M参数之间变化。
    • 与[mobilenetv1]的一个较小的实现差异是,对于小于1的乘数,本文将宽度乘数应用于除最后一个卷积层之外的所有层。这提高了较小模型的性能。
  • MobileNetV2的网络模块样子是这样的:
    -在这里插入图片描述
    • MobileNetV1网络主要思路就是深度可分离卷积的堆叠。在V2的网络设计中,除了继续使用深度可分离(中间那个)结构之外,还使用了Expansion layer和 Projection layer。这个projection layer也是使用 1*1 的网络结构,他的目的是希望把高维特征映射到低维空间去。另外说一句,使用1*1的网络结构将高维空间映射到低纬空间的设计有的时候也称之为Bottleneck layer。
    • Expansion layer的功能正相反,使用 1*1的网络结构,目的是将低维空间映射到高维空间。这里Expansion有一个超参数是维度扩展几倍。可以根据实际情况来做调整的,默认值是6,也就是扩展6倍。
    • 在这里插入图片描述
    • 输入是24维,最后输出也是24维。但这个过程中,对模型扩展了6倍,然后应用深度可分离卷积进行处理。整个网络是中间胖,两头窄,像一个纺锤形。bottleneck residual block(ResNet论文中的)是中间窄两头胖,在MobileNetV2中正好反了过来,所以,在MobileNetV2的论文中称这样的网络结构为Inverted residuals。需要注意的是residual connection是在输入和输出的部分进行连接。对于Linear Bottleneck,因为从高维向低维转换,使用ReLU激活函数可能会造成信息丢失或破坏(不使用非线性激活数数)。所以在projection convolution这一部分,不再使用ReLU激活函数而是使用线性激活函数。
    • 计算所得,如果tensor维度越低,卷积层的乘法计算量就越小。那么如果整个网络都是低维的tensor,那么整体计算速度就会很快。然而,如果只是使用低维的tensor效果并不会好。如果卷积层的过滤器都是使用低维的tensor来提取特征的话,那么就没有办法提取到整体的足够多的信息。所以,如果提取特征数据的话,可能更希望有高维的tensor来做这个事情。V2就设计这样一个结构来达到平衡。
      • 在这里插入图片描述
      • 先通过Expansion layer来扩展维度,之后在用深度可分离卷积来提取特征,之后使用Projection layer来压缩数据,让网络从新变小。因为Expansion layer 和 Projection layer都是有可以学习的参数,所以整个网络结构可以学习到如何更好的扩展数据和从新压缩数据。

Implementation Notes

  • Memory efficient inference

    • 反向残差瓶颈层允许特别有效的存储器实现,这对于移动应用非常重要。使用例如TensorFlow或Caffe 的推理的标准有效实现构建了有向非循环计算超图G,其包括表示操作的边和表示中间计算的张量的节点。调度计算是为了最小化需要存储在存储器中的张量的总数。在最常见的情况下,它搜索所有可能的计算顺序σ(G ),并选择最小的一个

      • M ( G ) = min ⁡ π → ∑ ( G ) max ⁡ i ∈ 1... n [ ∑ A ∈ R ( i , π , G ) ∣ A ∣ ] + s i z e ( π i ) M(G)=\min\limits_{\pi \to \sum(G)}\max\limits_{i\in 1...n}[\sum_{A\in R(i,\pi,G)}|A|]+size(\pi_i) M(G)=π(G)mini1...nmax[AR(i,π,G)A]+size(πi)

      • 其中R(i,π,G)是连接到任意 π i . . . π n π_i...π_n πi...πn的中间张量的列表个节点,|A|表示张量A的大小,size(i)是运算i期间内部存储所需的内存总量。

    • 对于只有平凡并行结构(如残差连接)的图,只有一个nontrivial的可行计算阶,因此计算图G上的推理所需的内存总量和界限可以简化为:

      • M ( G ) = max ⁡ o p ∈ G [ ∑ A ∈ o p i n p ∣ A ∣ + ∑ B ∈ o p o u t ∣ B ∣ + ∣ o p ∣ ] M(G)=\max\limits_{op\in G}[\sum_{A\in op_{inp}}|A|+\sum_{B\in op_{out}}|B|+|op|] M(G)=opGmax[AopinpA+BopoutB+op]

      • 换句话说,内存量就是所有操作的输入和输出的最大总大小。在下文中,本文表明,如果本文将瓶颈残差块视为单个操作(并将内卷积视为可任意处理的张量),则内存总量将由瓶颈张量的大小决定,而不是由瓶颈内部的张量(并且大得多)的大小决定。

  • Bottleneck Residual Block

    • 瓶颈残差块下图b中所示的瓶颈块算子F(x)可以表示为三个算子 F ( x ) = [ A ● N ● B ] x F(x)=[A●N●B]x F(x)=[ANB]x的组合,其中A是线性变换A : R s × s × k → R s × s × n R^{s×s×k} → R^{s×s×n} Rs×s×kRs×s×n,N是非线性逐通道变换:N : R s × s × n → R s ′ × s ′ × n R^{s×s×n} → R^{s'×s'×n} Rs×s×nRs×s×n,B也是到输出域的线性变换:B: R s ′ × s ′ × n → R s ′ × s ′ × k ′ R^{s'×s'×n}→R^{s'×s'×k'} Rs×s×nRs×s×k

      • 在这里插入图片描述
      • 残差块和逆残差的区别。对角线阴影层不使用非线性。本文用每个块的厚度来表示它的相对通道数。请注意经典残差如何连接具有大量通道的层,而反向残差如何连接瓶颈。
    • 对于本文的网络, N = r e l u 6 ● d w i s e ● r e l u 6 N = relu 6●dwise●relu 6 N=relu6dwiserelu6,但结果适用于任何每通道变换。假设输入域的大小为|x|,输出域的大小为|y|,那么计算F (X)所需的内存可以低至 ∣ s 2 k ∣ + ∣ s ′ 2 k ′ ∣ + O ( m a x ( s 2 , s ′ 2 ) ) |s^2k| + |s'^2k'| + O(max(s^2,s'^2)) s2k+s2k+O(max(s2s2))

    • 该算法基于以下事实:内部张量 τ \tau τ可以表示为t个张量的串联,每个张量的大小为n/t,本文的函数可以表示为

      • F ( x ) = ∑ i = 1 t ( A i ● N ● B i ) ( x ) F(x)=\sum_{i=1}^t(A_i●N●B_i)(x) F(x)=i=1t(AiNBi)(x)

      • 通过累加总和,本文只需要在内存中一直保存一个大小为n/t的中间块。使用n = t,最终必须始终只保留中间表示的单个通道。使本文能够使用该技巧的两个约束是:

        • (a)内部变换(包括非线性和深度方向)是每通道的,
        • (b)连续的非每通道操作符具有输入大小与输出的显著比率。
      • 对于大多数传统的神经网络来说,这样的技巧不会产生显著的改进。

  • 本文还注意到,使用t路分割计算F(X)所需的乘加运算符的数量与t无关,然而在现有实现中,本文发现用几个较小的矩阵乘法来替换一个矩阵乘法会由于高速缓存未命中的增加而损害运行时性能。当t是2到5之间的一个小常数时,这种方法是最有用的。它显著降低了内存需求,但仍允许人们利用通过使用深度学习框架提供的高度优化的矩阵乘法和卷积运算符获得的大部分效率。特殊的框架级优化是否会带来进一步的运行时改进还有待观察。

  • Linear Bottleneck,论文中称网络层中的激活特征为兴趣流形(mainfold of interest)

    • 认为深度神经网络是由n个 L i L_i Li 层构成,每层经过激活输出的张量为 h i ∗ w i ∗ d i h_i*w_i*d_i hiwidi 。本文认为一连串的卷积和激活层形成一个兴趣流形(manifold of interest,这就是感兴趣的数据内容),现阶段还无法定量的描述这种流形,这里以经验为主的研究这些流形性质。
    • 长期以来认为:在神经网络中兴趣流形可以嵌入到低维子空间,通俗点说,查看的卷积层中所有单个d通道像素时,这些值中存在多种编码信息,兴趣流形位于其中的。可以通过变换,进一步嵌入到下一个低维子空间中(例如通过 1*1 卷积变换维数,转换兴趣流形所在空间维度)。
    • 乍一看,这样的想法比较容易验证,可通过减少层维度从而降低激活空间的维度。MobileNetv1是通过宽度因子(width factor)在计算量和精度之间取折中。用上面的理论来说,宽度因子控制激活空间的维度,直到兴趣流形横跨整个空间。
    • 然而,由于深度卷积神经网络的层是具有非线性激活函数的。以ReLU变换( F(x)=max(0,x) )为例,会存在以下特点:
      • 如果当前激活空间内兴趣流形完整度较高,经过ReLU,可能会让激活空间坍塌,不可避免的会丢失信息。

        • 在这里插入图片描述
        • 嵌入高维空间的低维流形的ReLU变换举例。在这些例子中,使用随机矩阵T后跟ReLU将初始螺旋嵌入到n维空间中,然后使用t1将其投影回2D空间。在上面的例子中,n = 2,3导致信息丢失,其中流形的某些点彼此塌陷,而对于n = 15到30,变换是高度非凸的。
        • 对于一个输入图像,首先通过一个随机矩阵T将数据转换为n维,然后对这n维数据进行ReLU操作,最后再使用T的逆矩阵转换回来,实验发现当n很小的时候,后面接ReLU非线性变换的话会导致很多信息的丢失,而且维度越高还原的图片和原图越相似。
      • 如果输入对应的输出是非零的,那么输入和输出之间其实对应的就是一个线性映射关系。

        • 设计网络结构的时候,想要减少运算量,就需要尽可能将网络维度设计的低一些但是维度如果低的话,激活变换ReLU函数可能会滤除很多有用信息。然后就想到了,反正ReLU另外一部分就是一个线性映射。那么如果全用线性分类器,会不会就不会丢失一些维度信息,同时可以设计出维度较低的层呢?
    • 论文针对这个问题使用linear bottleneck(即不使用ReLU激活,做了线性变换)的来代替原本的非线性激活变换。到此,优化网络架构的思路也出来了:通过在卷积模块中后插入linear bottleneck来捕获兴趣流形。 实验证明,使用linear bottleneck可以防止非线性破坏太多信息。从linear bottleneck到深度卷积之间的的维度比称为Expansion factor(扩展系数),该系数控制了整个block的通道数
    • 在神经网络训练中如果节点的值变为0就会“死掉”。因为ReLU对0值的梯度是0,后续无论怎么迭代这个节点的值都不会恢复了。而通过ResNet结构的特征复用,可以很大程度上缓解这种特征退化问题(这也从一个侧面说明ResNet为何好于VGG)。另外,一般情况训练网络使用的是float32浮点数;当使用低精度的float16时,这种特征复用可以更加有效的减缓退化。

Experiments

  • ImageNet Classification
    • 训练设置:本文使用TensorFlow训练本文的模型。本文使用标准的RMSPropOptimizer,衰减和动量都设置为0.9。本文在每一层后使用批量归一化,标准权重衰减设置为0.00004。按照MobileNetV1设置,使用0.045的初始学习率,以及每个时期0.98的学习率衰减率。本文使用16个GPU异步工作线程,批量大小为96。
    • 结果将本文的网络与MobileNetV1、ShuffleNet和NASNet-A模型进行了比较。下表显示了一些选定型号的统计数据,
      • 在这里插入图片描述
      • ImageNet上的性能,不同网络的比较。按照ops的惯例,本文计算乘加的总数。报告了Google Pixel 1手机(使用TF-Lite)的单个大内核的运行时间,单位为毫秒(ms)。本文不报告shufflenet的数目,因为有效的组卷积和shuffle还不被支持。
    • 完整的性能图如下图所示。
      • 在这里插入图片描述
      • MobileNetV2与MobileNetV1、ShuffleNet、NAS的性能曲线。对于本文的网络,本文对所有分辨率使用乘数0.35、0.5、0.75、1.0,对224分辨率使用1.4。最好是彩色的。
  • Object Detection
    • 本文在COCO数据集上评估和比较了MobileNetV2和MobileNetV1作为对象检测的特征提取器与单次检测器(SSD) 的改进版本的性能。本文还将YOLOv2 和原始SSD(以VGG-16 作为基础网络)作为基准进行了比较。由于本文的重点是移动/实时模型,因此不与其他架构(如Faster-RCNN 和RFCN )进行性能比较。
    • **SSDLite:**在本文中,本文介绍了一种普通SSD的移动友好变体。本文在SSD预测层中用可分离卷积(深度方向后接1 × 1投影)替换所有常规卷积。这种设计符合MobileNets的整体设计,并且看起来计算效率更高。本文把这个修改版叫做SSDLite。与常规SSD相比,SSDLite显著减少了参数数量和计算成本,如下表所示。
      • 在这里插入图片描述
      • 比较配置了MobileNetV2的SSD和SSDLite的大小和计算成本,并对80个类进行预测。
    • 对于MobileNetV1,本文遵循[Speed/accuracy trade-offs for modern convolutional object detectors]中的设置。对于MobileNetV2,SSDLite的第一层附加到第15层的扩展(输出步幅为16)。第二层和其余的SSDLite层附着在最后一层的顶部(输出跨距为32)。此设置与MobileNetV1一致,因为所有图层都附加到相同输出步幅的特征图。
    • 这两个MobileNet模型都使用开源TensorFlow对象检测API 进行训练和评估。两款机型的输入分辨率均为320 × 320。本文对mAP (COCO挑战指标)、参数数量和乘法-加法数量进行了基准测试和比较。结果如下表所示。MobileNetV2 SSDLite不仅是效率最高的模型,也是三者中最准确的。值得注意的是,MobileNetV2 SSDLite的效率提高了20倍,体积缩小了10倍,但在COCO数据集上仍优于YOLOv2。
  • Semantic Segmentation
    • 在本节中,本文将用作特征提取器的MobileNetV1和MobileNetV2模型与DeepLabv3 进行比较,以完成移动语义分段的任务。DeepLabv3采用Atrous卷积,这是一种显式控制计算特征图分辨率的强大工具,并构建了五个并行头,
      • (a)Atrous空间金字塔池模块(ASPP) ,包含三个具有不同atrous速率的3 × 3卷积,
      • (b) 1 × 1卷积头,
      • ©图像级特征。
    • 本文用输出步幅来表示输入图像空间分辨率与最终输出分辨率的比值,该比值通过适当地应用atrous卷积来控制。对于语义分割,对于更密集的特征图,本文通常采用输出stride = 16或8。本文在PASCAL VOC 2012数据集上进行实验,使用来自[Semantic contours from inverse detectors]的额外注释图像和评估指标mIOU。
    • 为了构建移动模型,本文试验了三种设计变化:
      • (1)不同的特征提取器,
      • (2)简化DeepLabv3头以加快计算速度,
      • (3)不同的推理策略以提高性能。
    • 本文的结果总结在下表中。
      • 在这里插入图片描述
      • PASCAL VOC 2012验证集上的MobileNet + DeepLabv3推理策略。MNet V2*:倒数第二个特征图用于DeepLabv3头,包括
        • (1)阿特鲁空间金字塔池(ASPP)模块,
        • (2) 1 × 1卷积和图像池特征。
      • OS:控制分割图输出分辨率的输出步幅。MF:测试期间的多刻度和左右翻转输入。所有的模型都在COCO上进行了预训练。设备上应用的潜在候选对象以粗体显示。PASCAL图像的尺寸为512 × 512,atrous卷积允许本文在不增加参数数量的情况下控制输出特征分辨率。
    • 本文观察到:
      • (a)推理策略,包括多尺度输入和添加左右翻转的图像,显著增加了madd,因此不适合设备上的应用,
      • (b)使用输出步幅= 16比输出步幅= 8更有效,
      • © MobileNetV1已经是一个强大的特征提取器,并且只需要比ResNet-101少4.9-5.7倍的madd(例如,mIOU: 78.56比82.70,MAdds: 941.9B比4870
      • (d)在MobileNetV2的倒数第二个特征映射上构建DeepLabv3头比在原始的最后一层特征映射上构建更有效,因为倒数第二个特征映射包含320个通道而不是1280个通道,并且通过这样做,本文获得了类似的性能,但是需要的操作比MobileNetV1的对应部分少大约2.5倍,
      • (e) DeepLabv3头在计算上是昂贵的,并且移除ASPP模块显著地减少了MAdds,而只有轻微的性能降级。 在上表的最后,本文确定了一个潜在的候选设备上应用(粗体),它达到75.32% mIOU,只需要2.75B MAdds。

Conclusions and future work

  • 本文描述了一个非常简单的网络架构,它允许本文构建一系列高效的移动模型。本文的基本构建单元有几个特性,使其特别适合移动应用。它允许非常节省内存的推理,并依赖于所有神经框架中存在的标准操作。
  • 对于ImageNet数据集,本文的架构提高了各种性能点的技术水平。
  • 对于对象检测任务,本文的网络在准确性和模型复杂性方面都优于COCO数据集上的最新实时检测器。值得注意的是,与YOLOv2相比,本文的架构结合SSDLite检测模块的计算量少20倍,参数少10倍。
  • 在理论方面:所提出的卷积块具有独特的属性,允许将网络表达能力(由扩展层编码)与其容量(由瓶颈输入编码)分开。探索这一点是未来研究的重要方向。
Bottleneck transformation
  • 在本节中,本文研究运算符A ReLU(Bx)的性质,其中 x ∈ R n x ∈\Bbb R^n xRn表示n通道像素,B是m × n矩阵,A是n × m矩阵。本文认为,如果m ≤ n,这种形式的变换只能以丢失信息为代价来利用非线性。相比之下,如果n<<m,这样的变换可以是高度非线性的,但是仍然以高概率可逆(对于初始随机权重)。

  • 首先,本文证明ReLU是位于其图像内部的任意点的恒等式变换。

  • 引理1:设 S ( X ) = { R e L U ( x ) ∣ x ∈ X } S(X) = \{ReLU(x)|x ∈ X\} S(X)={ReLU(x)xX}。如果S(X)的体积不为零,那么内部S(X) ⊆ X

    • Proof:设S’ =interior ReLU(S)。首先本文注意到,如果x ∈ S’,那么对于所有i,xi > 0。的确,ReLU的像不包含具有负坐标的点,并且具有零值坐标的点不可能是内点。因此,对于每个x ∈ S’,x = ReLU(x)。
    • 由此得出结论,对于交错的线性变换和ReLU算子的任意组合,如果它保留非零体积,则在这样的组合中保留的输入空间X的部分是线性变换,因此可能对深度网络的能力有较小的贡献。然而,这是一种相当无力的说法。事实上,如果输入流形可以嵌入(n-1)维流形(总共n维),引理是平凡真实的,因为起始体积是0。在下文中,本文表明,当输入流形的维数明显较低时,本文可以确保不会有信息损失。
    • 因为ReLU(x)非线性是将整个射线x ≤ 0映射到0的满射函数,所以在神经网络中使用这种非线性会导致信息损失。一旦ReLU将输入流形的子集折叠成更小维度的输出,下面的网络层就不再能够区分折叠的输入样本。在下文中,本文展示了具有足够大的扩展层的瓶颈可以抵抗由于ReLU激活函数的存在而导致的信息丢失。
  • 引理2(ReLU的可逆性):考虑一个算子ReLU(Bx),其中B是m × n矩阵, x ∈ R n x ∈\Bbb R^n xRn。设y0 = ReLU(Bx0)对于某个 x 0 ∈ R n x_0 ∈\Bbb R^n x0Rn,则方程y0 = ReLU(Bx)相对于x有唯一解当且仅当y0至少有n个非零值,并且有n个线性无关的B行对应于y0的非零坐标。

    • Proof:将y0的非零坐标集合表示为T,并且令yT和BT是y和B对由T定义的子空间的限制。如果|T | < n,则我们有 y T = B T x 0 y_T = B_T x_0 yT=BTx0,其中BT是欠定的,至少有一个解x0,因此有无穷多个解。现在考虑|T | ≥ n的情况,设BT的秩为n,假设有一个附加解 x 1 ≠ x 0 x_1\neq x_0 x1=x0使得 y 0 = R e L U ( B x 1 ) y_0=ReLU(Bx_1) y0=ReLU(Bx1),那么有 y T = B T x 0 = B T x 1 y_T=B_Tx_0 =B_Tx1 yT=BTx0=BTx1,除非 x 0 = x 1 x_0 = x_1 x0=x1,否则不能满足。
    • 这个引理的一个推论是如果m>>n,只需要Bx的一小部分值是正的,ReLU(Bx)就是可逆的。
    • 引理2的约束可以针对真实网络和真实输入进行经验验证,因此可以确信信息确实被保留。进一步表明,关于初始化,可以确定这些约束条件得到满足的概率很高。注意,对于随机初始化,由于初始化对称性,引理2的条件得到满足。
    • 然而,即使对于训练过的图,这些约束也可以通过在有效输入上运行网络并验证所有或大多数输入高于阈值来凭经验验证。在下图中,本文展示了不同MobileNetV2层的分布情况。
      • 在这里插入图片描述
      • 激活模式的分布。x轴是层索引,在与ReLU的每次卷积后,本文显示正通道的最小/最大/平均数量。y轴是通道的绝对数量或相对数量。“阈值”行表示ReLU可逆性阈值——即正维数高于输入空间。在本文的例子中,这是通道的1/6。请注意,在上图a的训练开始时,分布更加紧密地集中在平均值周围。训练结束后(上图b),平均值没有变化,但标准差急剧增加。
    • 在步骤0,激活模式集中在正通道的一半左右(如初始化对称性所预测的)。对于完全训练的网络,虽然标准偏差显著增长,但除了两层之外,所有层仍高于可逆性阈值。本文相信对此的进一步研究是有保证的,并可能导致对网络设计的有益见解。
  • 定理1:设S是Rn的紧致n维子流形。考虑从 R n R^n Rn R m R^m Rm由m × n矩阵 B ∈ B B ∈\Bbb B BB参数化的一族函数 f B ( x ) = R e L U ( B x ) f_B(x) = ReLU(Bx) fB(x)=ReLU(Bx)设p(B)是所有矩阵 B \Bbb B B的空间上的概率密度,满足:

      • P (Z) = 0对于任何测量零点子集 z ⊂ B z⊂\Bbb B zB
      • (a对称条件)p(DB) = p(B)对于任意 B ∈ B B ∈\Bbb B BB和任意m × m对角矩阵D,所有对角元素不是+1就是-1。
    • 那么,被 f B f_B fB折叠成低维流形的S的子集的平均n体积是

    • V − N M , N V 2 m V-\frac{N_{M,N}V}{2^m} V2mNM,NV

    • 其中V =体积S,且 N m , n ≡ ∑ k = 0 m − n ( n k ) N_{m,n}\equiv\sum_{k=0}^{m-n}\binom{n}{k} Nm,nk=0mn(kn).

    • Proof:对于任何σ=(s1,…,sm)和 s k ∈ { − 1 , + 1 } sk∈\{−1,+1\} sk{1+1},设 Q σ = { x ∈ R m ∣ x i s i > 0 } Q_σ=\{x∈\Bbb R^m | x_is_i>0\} Qσ={xRmxisi>0}是Rm中的对应象限。对于任意n维子流形 Γ ⊂ R m Γ⊂\Bbb R^m ΓRm,ReLU充当 Γ ∩ Q σ Γ∩ Q_σ ΓQσ的双射,如果σ至少有n个正值4,则收缩 Γ ∩ Q σ Γ∩ Q_σ ΓQσ否则。还请注意,BS与 R m / ( ∪ σ Q σ ) R^m/(∪_σQ_σ) Rm/(σQσ的交点几乎肯定是(n− 1)维度。因此,通过将ReLU应用于BS而未坍塌的S的平均n体积由下式得出:

      • ∑ σ ∈ ∑ n E [ V σ ( B ) ] ( 3 ) \sum_{σ\in\sum_n}\Bbb E[V_σ(B)](3) σnE[Vσ(B)]3
    • 其中 σ n = { ( s 1 , . . . , s m ) ∣ ∑ k θ ( s k ) ≥ n } σ_n =\{(s_1,...,s_m)|\sum_kθ(s_k)≥n\} σn={(s1...sm)kθ(sk)n},θ是阶跃函数, V σ ( B ) V_σ(B) Vσ(B)是由B映射到Qσ的S的最大子集的体积。现在让我们计算$ \Bbb E_B[V_σ(B)] 。 回 想 一 下 , 对 于 任 何 。回想一下,对于任何 D = diag(s_1,…,s_m) 在 在 s_k∈{-1,+1} 的 情 况 下 , 此 平 均 值 可 以 重 写 为 的情况下,此平均值可以重写为 \Bbb E_B\Bbb E_D[V_σ(DB)] 。 注 意 , 由 D B 映 射 到 Q σ 的 S 的 子 集 也 由 B 映 射 到 。注意,由DB映射到Qσ的S的子集也由B映射到 DBQσSBD^{-1}Q_σ , 立 即 得 到 ,立即得到 \sum_{σ’}v_σ[diag(σ’)B]= \sum_{σ’}vσ’[B]= vol S , 因 此 ,因此 \Bbb E_B[v_σ(B)]= 2^{-m} vol S 。 带 入 到 。带入到 |\sum_n|=\sum_{k=0}^{m-n}\binom{n}{k}$转化为上面等式3那样的总结证明。

    • 注意,对于足够大的膨胀层,m>>n,收缩空间的分数 N m , n / 2 m N_{m,n}/2^m Nm,n/2m可以由下式限定:

      • N m , n 2 m ≥ 1 − m n + 1 2 m n ! ≥ 1 − 2 ( n + 1 ) l o g m − m ≥ 1 − 2 − m / 2 \frac{N_{m,n}}{2^m}\geq1-\frac{m^{n+1}}{2^mn!}\geq1-2^{(n+1)logm-m}\geq1-2^{-m/2} 2mNm,n12mn!mn+112(n+1)logmm12m/2

      • 因此ReLU(Bx)执行非线性变换,同时以高概率保存信息。

    • 本文讨论了瓶颈如何防止流形崩溃,但是增加瓶颈扩展的大小也可能使网络能够表示更复杂的函数。根据[On the number of linear regions of deep neural networks]的主要结果,可以证明,例如,对于任何整数L ≥ 1且p > 1,存在L个ReLU层的网络,每个层包含n个神经元和大小为pn的瓶颈扩展,使得它将 p n L p^{nL} pnL个输入体积(线性同构于 [ 0 , 1 ] n [0,1]^n [01]n)映射到相同的输出区域$ [0,1]n$。因此,连接到网络输出的任何复杂的可能非线性函数将有效地计算$p{nL}$个输入线性区域的函数值。

Semantic segmentation visualization results

  • 在这里插入图片描述

  • MobileNetv2语义分割可视化结果在PASCAL VOC 2012 val集上。OS:输出步幅。s:单刻度输入。MS+F:多刻度输入,刻度= {0.5,0.75,1,1.25,1.5,1.75}和左右翻转输入。采用输出步幅= 16和单输入标度= 1,可以在FLOPS和精度之间取得良好的平衡。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羞儿

写作是兴趣,打赏看心情

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值