第七章 MobileNetv2网络详解

MobileNetV2是一种为移动和嵌入式设备设计的高效神经网络结构,通过反向残差结构和轻量级深度可分离卷积提升性能。网络设计考虑了内存效率和计算成本,适用于图像分类、目标检测和语义分割任务。其关键创新在于线性瓶颈层,保持模型表达力的同时降低计算需求。

系列文章目录

第一章 AlexNet网络详解

第二章 VGG网络详解

第三章 GoogLeNet网络详解 

第四章 ResNet网络详解 

第五章 ResNeXt网络详解 

第六章 MobileNetv1网络详解 

第七章 MobileNetv2网络详解 

第八章 MobileNetv3网络详解 

第九章 ShuffleNetv1网络详解 

第十章 ShuffleNetv2网络详解 

第十一章 EfficientNetv1网络详解 

第十二章 EfficientNetv2网络详解 

第十三章 Transformer注意力机制

第十四章 Vision Transformer网络详解 

第十五章 Swin-Transformer网络详解 

第十六章 ConvNeXt网络详解 

第十七章 RepVGG网络详解 

第十八章 MobileViT网络详解 


文章目录

  •  MobileNetv2网络详解
  • 0. 前言
  • 1. 摘要
  • 2.   MobileNetv2网络详解网络架构
    • 1.  MobileNetv2_Model.py(pytorch实现)
    • 2.
  • 总结


0、前言


1、摘要

        在这篇论文中,我们描述了一种新的移动架构MobileNetV2,它在多项任务和基准测试中改善了移动模型的最新性能,并跨越了不同模型大小的整个谱系。我们还介绍了在一个我们称之为SSDLite的新的框架中应用这些移动模型到目标检测的高效方法。此外,我们通过一种我们称之为Mobile DeepLabv3的DeepLabv3简化形式,展示了如何构建移动语义分割模型。MobileNetV2基于一个反向残差结构,其中快捷连接位于瘦瓶颈层之间。中间的扩展层使用轻量级深度可分离卷积来过滤特征作为非线性性的来源。此外,我们发现在窄层中去除非线性很重要,以保持表现力。我们展示了这种方法提高了性能,并提供了导致这种设计的直觉。最后,我们的方法允许从转换的表达能力中解耦输入/输出域,从而提供了一个方便的框架进行进一步的分析。我们在ImageNet [1]分类、COCO目标检测[2]和VOC图像分割[3]上测量了我们的性能。我们评估了准确性、乘加(MAdd)操作数量、实际延迟和参数数量之间的权衡。

2、MobileNetv2网络结构

神经网络已经彻底改变了机器智能领域的许多方面,使得能够实现在具有挑战性的图像识别任务中非凡的准确率。但是,为了提高准确率,往往需要付出代价:现代最先进的网络需要高强度的计算资源,而这些资源超出了许多移动和嵌入式应用程序所能承受的能力。本文给出了一种专门为移动及资源受限环境量身定制的新型神经网络结构。我们的网络通过显著减少操作和内存的数量来保持相同的准确性,推动了移动定制计算机视觉模型的最新技术。我们的主要贡献是一种新型的层模块:具有线性瓶颈的反向残差。该模块以低维压缩表示为输入,首先扩展到高维并使用轻量级深度卷积进行过滤。随后,将特征投影回到具有线性卷积的低维表示中。该模块可使用现代框架中的标准操作进行有效实现,并允许我们的模型在多个性能点上击败最先进的标准基准测试。此外,该卷积模块特别适用于移动设计,因为它允许在推理期间显着减少大型中间张量所需的存储器占用。这减少了许多嵌入式硬件设计中需要主存储器访问的需求,从而提供了小量的非常快速的软件控制缓存存储。

调整深度神经网络结构,在准确性和性能之间达到最佳平衡已成为近几年活跃研究领域。许多团队进行的人工结构搜索和训练算法的改进,使得网络性能有了大幅提升,超越了早期设计如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]和相关工作相辅相成,在此基础上继续改进性能,同时还可以提供一些有关其内部操作的信息。我们的网络设计基于MobileNetV1[27],保持其简单性,不需要任何特殊操作,但其准确性有了显著提升,在多个移动应用程序的图像分类和检测任务中达到了最先进水平。

Depthwise Separable Convolutions是许多高效神经网络架构的关键构建模块,我们在这项工作中也使用了它们。基本思想是用一个分解版本替换完整的卷积操作,将卷积分成两个独立的层。第一层是深度卷积,它通过对每个输入通道应用单个卷积滤波器来执行轻量级过滤。第二层是1×1卷积,称为点卷积,它负责通过计算输入通道的线性组合来构建新特征。标准卷积将一个hi×wi×di输入张量Li应用于卷积核K2Rk×k×di×dj,以产生一个hi×wi×dj输出张量Lj。标准卷积层的计算成本为hi·wi·di·dj·k·k。深度分离卷积是标准卷积层的替代品。实验证明,它们几乎和常规卷积一样好,但成本仅为:hi·wi·di(k2+dj),这是深度和1×1点卷积的和。实际上,深度可分离卷积与传统层相比减少了计算量,几乎达到了k21的水平。MobileNetV2使用k=3(3×3深度分离卷积),因此计算成本只比标准卷积小8到9倍,而准确性只有微小的降低。

 (图1:低维流形在高维空间中的ReLU变换实例。在这些例子中,初始螺旋线使用随机矩阵T嵌入到n维空间中,然后使用ReLU进行转换,并使用T-1投影回2D空间。在上面的例子中,n = 2;3会导致信息丢失,其中某些流形点会彼此坍塌,而对于n = 15至30,变换是极非凸的。)

这段话讲了一个由n层Li深层神经网络,每一层都有维度为hi×wi×di的激活张量。在该部分中,我们将讨论这些激活张量的基本特性,将其视为具有hi×wi“像素”和di维度容器。非正式地说,对于一个实际图像的输入集合来说,我们说层激活集合(对于任何层Li)形成了一个“感兴趣的流形”。人们长期以来认为神经网络中的流形可以嵌入到低维度的子空间中。换句话说,当我们查看深度卷积层的所有单个d通道像素时,这些值中所编码的信息实际上位于某个流形中,该流形可以嵌入到低维子空间中。乍一看,我们可以通过简单地减少层的维度来减少操作空间的维度,从而捕捉和利用这样一个事实。MobileNetV1 [27] 成功地利用了这种方法,通过宽度乘数参数有效地权衡了计算和准确性,同时还被纳入其他网络的高效模型设计中。按照这种直觉,宽度乘数方法允许降低激活空间的维度,直到感兴趣的流形跨越整个空间。但是,当我们回想起深度卷积神经网络实际上具有非线性的逐坐标变换,例如ReLU时,这种直觉就会崩溃。例如,ReLU应用于1D空间中的一条线会产生一条“射线”,而在Rn空间中,它通常会产生具有n个接头的分段线性曲线。很容易看出,通常情况下,如果层变换ReLU(Bx)的结果具有非零体积S,则映射到S内部的点是通过输入的线性变换B获得的,这表明与完整维度输出相对应的输入空间部分受到线性变换的限制。换句话说,深度神经网络仍然具有非线性属性。

(图2:可分离卷积块的演变。对角线的斜纹理表示不包含非线性层的层。最后一个(浅色)层表示下一个块的开始。注意:当叠加时,2d和2c是等效的块。最好在彩色视图下查看) 

(图3:残差块[8,30]和反向残差之间的差异。斜纹填充的层不使用非线性。我们使用每个块的厚度来表示其相对通道数。请注意,经典残差连接具有高通道数的层,而反向残差连接瓶颈。最好在彩色环境中查看) 

简述:我们总结了两个特性,表明感兴趣流形应该位于高维激活空间的低维子空间中:1、如果感兴趣的流形在 ReLU 转换后仍保持非零体积,则对应线性变换;2、ReLU 能够保留输入流形的全部信息,但前提是输入流形位于输入空间的低维子空间中。这两个洞见为我们优化现有神经架构提供了实证提示:假设感兴趣的流形是低维的,我们可以通过在卷积块中插入线性瓶颈层来捕捉这一点。实验证据表明,使用线性层至关重要,因为它可以防止非线性破坏过多信息。在第6节中,我们通过实验证明,在瓶颈中使用非线性层确实会导致性能下降数个百分点,从而进一步验证了我们的假设。我们注意到,在 [29]中,有相似的报告,其中非线性被从传统残余块的输入中删除,这导致在 CIFAR 数据集上的性能提高。本文余下部分将利用瓶颈卷积。我们将把输入瓶颈大小与内部大小之比称为扩展比率。

瓶颈块与残差块相似,每个块包含输入,后面跟随几个瓶颈,然后是扩展层[8]。然而,受到瓶颈实际上包含所有必要信息的启示,而扩展层仅作为伴随着张量的非线性转换的具体实现细节,我们直接在瓶颈之间使用捷径。图3提供了两种设计差异的示意图。插入捷径的动机与传统残差连接的动机类似:我们想提高渐变在乘法层之间传播的能力。然而,倒置设计在内存效率方面明显更高效(详见第5节),在我们的实验中也稍微更好。瓶颈卷积的运行时间和参数计数基本实现结构如表1所示。对于大小为h×w,扩展因子为t,核大小为k,d0输入通道和d00输出通道的块,所需的总乘法加法数量为h ·w·d0·t(d0 +k2 +d00)。与(1)相比,此表达式具有额外的项,因为我们确实有一个额外的1×1卷积,但我们网络的性质使我们能够利用更小的输入和输出维度。在表3中,我们比较了MobileNetV1、MobileNetV2和ShuffleNet之间各个解析度所需的大小。

我们的架构具有一个有趣的属性,即在瓶颈层(建筑块)的输入/输出域和层变换之间提供了自然分离。层变换是将输入转换为输出的非线性函数,而前者可以被视为网络在每一层的容量,而后者则是表达力。这与传统的卷积块(常规和可分离)形成对比,其中表达能力和容量都相互交织,并且是输出层深度的函数。特别地,在我们的情况下,当内层深度为零时,底层卷积是恒等函数,这要归功于快捷连接。当扩张比小于1时,这是一个经典的残差卷积块[8,30]。然而,为了我们的目的,我们展示了扩张比大于1是最有用的。这种解释使我们能够将网络的表达能力和容量分开研究,我们相信进一步探索这种分离是必要的,以提供更好地了解网络属性的方法。

1瓶颈残差块,将k通道转换为k0通道,步幅为s,并且扩展因子为t

Table 1:Bottleneck residual block transforming from k to k0 channels,with stride s,and expansion factor t.

输入

操作

输出

h × w × k

1 × 1 Conv2d, ReLU6

h × w × tk

h × w × tk

3 × 3 dwise s=s, ReLU6

h/s × w/s × tk

h/s × w/s × tk

Linear 1 × 1 conv2d

h/s × w/s × k’

现在我们详细描述我们的架构。如前一节所讨论的,基本构建块是一种具有残差的瓶颈深度可分离卷积。该块的详细结构在表1中显示。MobileNetV2的架构包含具有32个过滤器的初始完全卷积层,后跟在表2中描述的19个残余瓶颈层。我们使用ReLU6作为非线性,因为它在低精度计算中具有鲁棒性。我们始终使用核大小3×3,这是现代网络的标准,并在训练过程中利用丢弃和批量归一化。除了第一层外,我们在整个网络中使用恒定的扩展率。我们的实验发现,扩展率在5和10之间的结果几乎相同,较小的网络使用稍小的扩展率更好,而较大的网络使用稍大的扩展率具有稍好的性能。对于所有主要实验,我们使用扩展因子6应用于输入张量的大小。例如,对于一个接受64通道输入张量并产生一个具有128个通道的张量的瓶颈层,中间扩展层就是64·6 = 384个通道。

 在[27]中,我们采用可调节的超参数,如输入图像分辨率和宽度乘数,以便根据所需的准确性/性能权衡来调整不同性能点的架构。我们的主要网络(宽度乘数为1,224×224)具有3亿次乘加计算成本,并使用340万个参数。我们探讨了输入分辨率从96到224,宽度乘数从0.35到1.4的性能权衡。网络计算成本范围从7次乘法加法到585M乘法加法,而模型大小在1.7M和6.9M参数之间变化。与[27]的一个小型实现差别在于,对于小于1的乘数,我们将宽度乘以除最后一个卷积层之外的所有层。这提高了较小模型的性能。

倒置余量瓶颈层允许特别具有内存效率的实现,这对于移动应用非常重要。一个标准的高效推断实现,例如使用TensorFlow [31]或Caffe [32],构建了一个有向无环计算超图G,其中边表示操作,节点表示中间计算的张量。计算被安排以最小化需要存储在内存中的张量的总数。在最一般的情况下,它搜索所有可行的计算顺序Σ(G),并选择最小化M(G)=min π2Σ(G)max i21::n 24 X A2R(i;π;G)jAj 35 +size(πi)的顺序,其中R(i;π;G)是连接到任何πi:::πn节点的中间张量的列表,jAj表示张量A的大小,size(i)是在操作i期间需要的内部存储的总量。对于只有微不足道的并行结构(例如剩余连接)的图来说,只有一个非平凡的可行计算顺序,因此可以简化计算图G推断所需的总存储量和边界:M(G)=max 2G op2G 24 X A2opinp jAj +X B2opout jBj +jopj 35(2)或者重新说明,内存量只是组合所有操作的输入和输出的最大总大小。接下来我们将展示,如果将瓶颈残差块视为单个操作(并视内部卷积为一次性张量),那么内存总量将由瓶颈张量的大小主导,而不是由内部瓶颈的张量的大小主导(而且更大)。

瓶颈残差块是指一种由线性变换、非线性逐通道变换和另一种线性变换组成的算子,可以表示为 F(x)=[A ◦N ◦B]x,其中 A 和 B 分别是将输入变换到中间表示和从中间表示变换到输出的线性变换,N 是一种逐通道的非线性变换,本文中设为 ReLU6 ◦dwise◦ReLU6。这种算子可以实现低内存占用的计算,只需要在计算过程中保留一个大小为 n=t 的中间块即可。这种方法只适用于内部变换逐通道,且输入大小和输出大小差别不大的情况下。通过对输入进行分块,可以实现低内存占用,但由于增加了 cache misses 的次数,可能会影响运行效率。最适合的分块方式是 t=2 到 t=5。此方法可以利用机器学习框架提供的高度优化的矩阵乘法和卷积运算,但需要注意对缓存未命中所带来的影响。

1瓶颈残差块,将k通道转换为k0通道,步幅为s,并且扩展因子为t

Table 1:Bottleneck residual block transforming from k to k0 channels,with stride s,and expansion factor t.

输入

操作

输出

h × w × k

1 × 1 Conv2d, ReLU6

h × w × tk

h × w × tk

3 × 3 dwise s=s, ReLU6

h/s × w/s × tk

h/s × w/s × tk

Linear 1 × 1 conv2d

h/s × w/s × k’

2 MobileNetV2:每一行描述了一个具有1个或多个相同的(根据步长)层序列,该序列重复n次。同一序列中的所有层具有相同的输出通道数c。每个序列的第一层具有步幅s,其余层步幅为1。所有的空间卷积都使用3×3的内核。扩展系数t始终应用于表1中描述的输入大小。Table 2:MobileNetV2 :Each line describes a sequence of 1 or more identical (modulo stride)layers,repeated n times.All layers in the same sequence have the same number c of output channels.The first layer of each sequence has a stride s and all others use stride 1.All spatial convolutions use 3 ×3 kernels.The expansion factor t is always applied to the input size as described in Table 1.

输入

操作

扩展系数

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值