MobileNet:轻量化模型

MobileNet:轻量化模型

1.MobileNet V1

MobileNet系列是由谷歌公司的Andrew G. Howard等人于2016年提出的轻量级网络结构,并于2017年发布在arXiv上。MobileNet系列的特点是模型小、计算速度快,适合部署到移动端或者嵌入式系统中。相较于后期的巨型、难以训练的模型(如Transformer),MobileNet系列在卷积神经网络中是轻量级网络的经典。MobileNet对嵌入式设备非常友好。原作者团队后续对模型进行了进一步改进,先后提出了MobileNet V2和MobileNet V3版本,与GoogLeNet类似,MobileNet也是一系列文章。

MobileNet V1:https://arxiv.org/abs/1704.04861

MobileNet V2:https://arxiv.org/pdf/1801.04381

MobileNet V3:https://arxiv.org/abs/1905.02244

视频讲解:https://www.aideeplearning.cn/mcv_lesson/969/

1.1模型设计动机

卷积神经网络已经广泛应用于计算机视觉领域,并且取得了不错的效果。然而近年来CNN在ImageNet竞赛中为了追求更高的分类准确度,模型深度越来越深,模型的复杂度也随之增加,如深度残差网络其层数已经多达152层。然而,在某些真实的应用场景,如移动端或者嵌入式设备,如此庞大而复杂的模型是难以被应用的。

首先,因为模型过于庞大,这些场景面临着内存不足的问题。其次,这些场景要求低延迟,换而言之就是响应速度要快,想象一下自动驾驶汽车的行人检测系统如果响应速度太慢会发生什么可怕的事情。因此,研究小而高效的CNN模型在这些场景中非常重要。

目前的研究可以归纳为两个方向:第一是对已经训练好的复杂模型进行压缩以得到小模型,即模型量化;第二是直接设计小型模型并进行训练。无论哪种方法,其目标都是在保持模型准确度(Accuracy)的前提下降低模型参数量(Parameters Size),同时提升模型速度。

1.2深度可分离卷积

MobileNet V1之所以轻量,与深度可分离卷积(Depthwise Separable Convolution)的关系密不可分。

image

图1 对AlexNet各层占用的计算时间分析

AlexNet各层计算在GPU和CPU上的耗时分别如图1(a)和图1(b)所示,观察图片可得出在模型推理中卷积操作占用了大部分的时间,因此MobileNet V1使用了深度可分离卷积对卷积操作做了进一步的优化,具体解释如下:

在常规卷积操作中对于5×5×3的输入信息,如果想要得到3×3×4的特征图输出,那么卷积核的形状为3×3×3×4,如图2所示。

image

图2 常规的卷积计算过程

卷积层共有4个卷积核,每个卷积核包含一个通道数为3(与输入信息通道相同),且尺寸为3×3的卷积核。因此卷积层的参数数量可以用公式:卷积层的参数量 = 卷积核宽度×卷积核高度×输入通道数×输出通道数来计算,即:

\(N_-std=4\times3\times3\times3=108\)

卷积层的计算量公式为:卷积层的计算量 = 卷积核宽度×卷积核高度×(输入信息宽度-卷积核宽度+1)×(输入信息高度-卷积核高度+1)×输入通道数×输出通道数,即:

\(C_-std=3\times3\times(5-2)\times(5-2)\times3\times4=972\)

深度可分离卷积主要是两种卷积变体组合使用,两种卷积分别为逐通道卷积(Depthwise Convolution,DW)和逐点卷积(Pointwise Convolution,PW)。

逐通道卷积的一个卷积核只有一个通道,输入信息的一个通道只被一个卷积核卷积,这个卷积过程产生的特征图通道数和输入的通道数相等,如图3所示。

image

图3 逐通道卷积的卷积计算过程

一张5×5像素的三通道彩色输入图片(形状为5×5×3),逐通道卷积每个卷积核只负责计算输入信息的某一个通道。卷积核的数量与输入信息的通道数相同。所以一个三通道的图像经过卷积运算后一定是生成了3个特征图。卷积核的形状一定为:卷积核W×卷积核H×输入数据的通道数C。

此时,卷积部分的参数个数计算为:

\(N _-depthvise = 3\times 3\times 3 = 27\)

卷积操作的计算量为:

\(C_-depthvise=3\times3\times(5-2)\times(5-2)\times3=243\)

逐通道卷积输出的特征图的数量与输入层的通道数相同,无法在通道维度上扩展或压缩特征图的数量。此外,这种运算对输入层的每个通道独立进行卷积运算,无法充分利用不同通道在相同空间位置上的特征之间的相关性。简而言之,虽然减少了计算量,但丢失了通道维度上的信息交互。因此需要逐点卷积来将这些特征图进行组合,以实现在通道维度上信息交互。

逐点卷积的运算与常规卷积运算非常相似,其实就是1×1的卷积。它的卷积核的形状为1×1×M,M为上一层输出信息的通道数。逐点卷积的每个卷积核会将上一步的特征图在通道方向上进行加权组合,计算生成新的特征图。每个卷积核都可以生成一个输出特征图,而卷积核的个数就是输出特征图的数量,逐点卷积如图4所示。

image

图4 逐点卷积的卷积计算过程

此时,逐点卷积中卷积涉及的参数个数可以计算为:

\(N_-pointvise=1\times1\times3\times4=12\)

卷积操作的计算量则为:

\(C_-pointvise=1\times1\times3\times3\times3\times4=108\)

经过逐点卷积之后,四个卷积核输出了4张特征图,与常规卷积的输出维度相同。

最后对比一下常规卷积和深度可分离卷积的参数量和计算量。常规卷积的参数个数为108,而深度可分离卷积的参数个数由逐通道卷积参数和逐点卷积参数两部分相加得到:

\({N_-separable=N_-depthvise + N_-pointvise = 12+27=39}\)

相同的输入,同样是得到4张特征图的输出,深度可分离卷积的参数个数是常规卷积的约1/3。因此,在参数量相同的前提下,采用深度可分离卷积的神经网络层数可以做得更深。

在计算量对比方面,常规卷积的计算量为972,而深度可分离卷积的计算量由逐通道卷积的计算量和逐点卷积的计算量两部分相加得到:

\({C_-separable=C_-depthvise + C_-pointvise = 243+108 = 351}\)

相同的输入,同样是得到4张特征图的输出,深度可分离卷积的计算量也是常规卷积的约1/3。因此,在计算量相同的情况下,通过使用深度可分离卷积,可以加深神经网络的层数。

1.3 MBConv模块

在1.2节中介绍了深度可分离卷积作为MobileNet的基本操作。然而,在实际应用中一般会加入BN操作,并使用ReLU激活函数。正常的卷积模块结构如图5(a)所示,深度可分离卷积模块(MBConv)的基本结构如图5(b)所示。

image

图5 MBConv模块

整体网络就是通过不断堆叠MBConv组件构建而成。这种深度可分离卷积的操作方式在减少计算量的同时保持了模型的表达能力。

1.4 MobileNet V1网络结构

MobileNet的网络结构见表1。首先是一个3×3的标准卷积,然后堆积深度可分离卷积模块,可以看到其中的部分逐通道卷积会通过设置步长为2进行下采样。在卷积层提取特征后,会进行平均池化将特征图大小缩小为1×1大小(一个标量),接着通过全连接层计算预测类别的概率,最后使用Softmax层进行分类。

image.png


如果单独计算逐通道卷积和逐点卷积,整个网络有28层(这里平均池化和Softmax层不计算在内)。还可以分析整个网络的参数和计算量分布,见表2。可以看到整个模型的计算量和参数量基本集中在1×1卷积上。

image.png

将MobileNet与GoogLeNet、VGG16进行对比,比较结果见表3。相较于VGG-16,MobileNet的准确度稍微下降,但是优于GoogLeNet。然而,在计算量和参数量层面,MobileNet具有绝对的优势。

表3 MobileNet与流行模型的比较

image.png

最后,MobileNet V1还引入了宽度和分辨率调整系数,分别是宽度乘子(\(\begin{matrix}{\alpha}\\\end{matrix}\))和分辨率乘子(p),用于调整模型的大小和计算复杂性。

宽度乘子(\(\begin{matrix}{\alpha}\\\end{matrix}\)):宽度乘子是一个介于0和1之间的比例因子。它被应用于模型中的每个卷积层的通道数,以减少模型的宽度。通过降低每个卷积层的通道数,可以减少模型中的参数数量和计算量,从而使模型更轻量化。较小的宽度乘子值(例如0.5)将导致更窄的模型,而较大的值(例如1.0)将保持原始模型的宽度。

分辨率乘子(p):分辨率乘子是一个介于0和1之间的比例因子。它被应用于输入图像的分辨率,以减少输入图像的尺寸。通过降低输入图像的分辨率,可以减少卷积操作的计算量和内存消耗。较小的分辨率乘子值(例如0.5)将导致输入图像的尺寸减小为原始尺寸的一半,而较大的值(例如1.0)将保持原始尺寸。

通过调整宽度乘子和分辨率乘子,可以灵活地控制MobileNet V1模型的大小和计算复杂度。这对于在计算资源受限的移动设备上进行模型部署非常有用。较小的宽度乘子和分辨率乘子值可以产生更轻量化的模型,适用于资源受限的场景,而较大的值则可以保持模型的原始性能。这使得MobileNet V1可以根据具体应用的需求进行定制化和优化。

读者可以根据设备性能和应用场景选择合适的参数,权衡模型精度和速度。

1.5 MobileNet V1模型小结

MobileNet V1是一种轻量级的深度学习卷积神经网络架构,于2017年由谷歌团队提出。它旨在在移动设备和嵌入式系统上实现高效的图像识别和分类。MobileNet V1的主要特点如下:

(1)采用深度可分离卷积:MobileNet V1采用这种特殊的卷积技术,将传统卷积分解为两个独立操作:逐通道卷积和逐点卷积。这种方法大幅减少了计算复杂性和参数数量,降低了计算成本和存储需求。

(2)引入宽度和分辨率调整系数:MobileNet V1引入了两个超参数,分别是宽度乘子(\(\begin{matrix}{\alpha}\\\end{matrix}\))和分辨率乘子(\text{p}\),用于调整模型的大小和计算复杂性。用户可以根据设备性能和应用场景选择合适的参数,权衡模型精度和速度。

(3)低延迟、低计算资源占用:由于其轻量化的设计,MobileNet V1在移动设备和嵌入式系统上运行时具有较低的延迟和较少的计算资源占用,适合实时应用和边缘计算。

(4)应用广泛:MobileNet V1可用于多种计算机视觉任务,如图像分类、物体检测、语义分割等。其模型结构和参数可根据不同场景进行调整,满足各种需求。

总之,MobileNet V1是一种高效、轻量级的深度学习模型,适用于移动设备和嵌入式系统。其主要特点包括采用深度可分离卷积技术、具有宽度和分辨率调整系数、低延迟、低计算资源占用,以及广泛应用于多种计算机视觉任务。

2.MobileNet V2

Andrew G. Howard等于2018年在MobileNet V1的基础上又提出了改进版本MobileNet V2。

2.1逆残差结构

在第1节中可以看到,MobileNet V1的网络结构还是非常传统的直通模型(没有旁路)。然而,ResNet在模型中引入旁路并取得了很好的效果。因此,在MobileNet V2的设计中,作者也想要引入旁路。

首先看下ResNet Bottleneck Block,结构图如图6所示。采用1×1的卷积核先将256维度降到64维,经过3×3的卷积之后,又通过1×1的卷积核恢复到256维。

image

图6 ResNet Bottleneck Block结构图

如果想将ResNet Bottleneck Block应用到MobileNet中,采用相同的策略显然是不可行的。因为在MobileNet中,由于逐通道卷积输出的特征图维度本来就不多,如果再进行压缩,会导致模型变得太小。所以作者提出了逆残差结构(Inverted Residuals),即先把逐通道卷积输出的特征图维度扩展6倍,然后再压缩,以避免模型被压缩得过于严重。原始残差结构如图7(a)所示,逆残差结构如图7(b)所示。

image.png

图7 残差模块和逆残差模块结构图

2.2 线性瓶颈结构

线性瓶颈结构(Linear Bottlenecks)实际上是将逆残差模块中Bottleneck部分的ReLU函数去掉。MobileNet V1主要模块结构图如图8(a)所示,MobileNet V2主要模块结构图如图8(b)所示。通过图8的对比,可以很容易看出,Linear Bottlenecks就是去掉了最后一个1×1卷积后面的ReLU函数。MobileNet V2整体的网络模型是不断堆叠图8(b)的两个模块结构搭建成的。

image

图8  Linear Bottlenecks结构图

去掉ReLU函数,尤其是最后一个1×1卷积后面的ReLU函数的原因在于训练MobileNet V1时发现,最后深度可分离卷积中的部分卷积核容易失去作用,导致经过ReLU函数后输出为0的情况。这是因为ReLU会对通道数较低的特征图造成较大的信息损失,因此执行降维的卷积层后面不再接类似ReLU这样的非线性激活层。简单说就是,1×1卷积降维操作本来就会丢失一部分信息,而加上ReLU后信息丢失问题加重,因此去掉ReLU来缓解此问题。注意,去掉ReLU以缓解信息损失的操作只适用于输入特征图特征通道较小的情况

2.3 MobileNet V2网络结构

完整的MobileNet V2网络结构参数见表4。

t代表反转残差中第一个卷积升为的倍数;c代表通道数;n代表堆叠bottleneck的次数;s代表深度可分离卷积的幅度(1或2),不同的步幅对应了不同的模块。

表4 模型详细结构

image.png

效果上,在ImageNet图像分类的任务中,相比与MobileNet V1,MobileNet V2的参数量减少,效果也更好了,详见表5。

表5 模型结构比较

image.png

2.4 MobileNet V2模型小结

MobileNet V2是Google团队在MobileNet V1基础上提出的升级版轻量级深度学习卷积神经网络架构。它在提高性能的同时保持了低计算复杂性和参数数量的优势,适用于移动设备和嵌入式系统。MobileNet V2的主要特点如下:

(1)逆残差结构:MobileNet V2引入了一种新的网络结构,将标准的残差结构翻转。这种结构使用轻量级的1×1卷积对输入进行扩张,接着进行3×3深度可分离卷积,最后再用1×1卷积进行压缩。这种设计有助于减小计算成本,同时保持特征表达能力。

(2)线性激活函数:在逆残差结构的输出部分,MobileNet V2使用线性激活函数(而非ReLU等非线性激活函数)。这样做可以减少ReLU导致的信息损失,使特征更好地保存在网络中。

(3)调整宽度和分辨率:与MobileNet V1类似,MobileNet V2也使用宽度乘子和分辨率乘子这两个超参数调整模型的大小和计算复杂性。这使得用户可以根据设备性能和应用场景进行权衡,平衡模型的精度和速度。

(4)高效性能:相比MobileNet V1,MobileNet V2在保持轻量化、低延迟和低计算资源占用的基础上,进一步提升了性能。这使其在多种计算机视觉任务中表现更优,如图像分类、物体检测和语义分割等。

3.MobileNet V3

MobileNet系列工作保持了一年一次更新的频率,Andrew G. Howard等人于2019年,也就是MobileNet V2提出的一年后再次提出了MobileNet V3。论文中提出了两个网络模型,MobileNet V3-Small与MobileNet V3-Large,分别对应对计算和存储要求低和高的场景。具体可以参考原始论文Searching for MobileNet V3

论文Searching for MobileNet V3并不是在描述MobileNet V3内部的内容,而是探讨MobileNet V3的来源。这里的Searching指的是神经网络架构搜索技术(Neural Architecture Search,NAS),即V3是通过搜索和网络优化而来。

本节的重点并不再详细讨论NAS网络搜索技术,尽管它是论文的一个重要亮点。这项技术不是训练模型参数,而是训练模型结构,因此需要设计一个网络模型结构的集合空间,并通过不同网络层的排列组合来生成大量模型结构,然后通过NAS来搜索最佳网络结构。由于这项技术需要大量计算资源才能完成,只有像谷歌和百度这样的公司才有能力开展此研究。此外,在搜索过程中最关注的是网络性能,因此最优的网络结构可能会有各种形状和层级结构的排列,这可能会影响模型的部署。

这就导致了两个缺点:

(1)网络的可解释性更差,无法解释为什么这样的层级排列能获得更好的性能,只能将结果作为导向。

(2)这种不规则的模型层级排列也不利于模型的部署。因此,经过NAS搜索得到的模型通常需要进一步人工调整,使其更规则化。这是性能和部署之间的权衡。

当然,NAS网络结构搜索技术仍然十分强大。通过设计不同的搜索空间,NAS可以为不同的搜索目标设计不同的结构。

3.1优化网络深层结构

实验发现MobileNet V2网络最后一部分结构可以优化。原始的结构使用卷积来调整特征的维度,从而提高预测的精度,但是这一部分也会造成一定的延时。为了减少延迟,作者将平均池化层提前,这样就可以提前将特征图的尺寸缩小。结果显示,虽然延迟减小了,但精度几乎没有降低。原始结构如图9(a)所示,优化后的结构如图9(b)所示。

image.png

图9 V2改进版的最后阶段

3.2 h-swish激活函数

Swish激活函数由谷歌公司开发,据说它可以很好地替代ReLU激活函数并提高模型的精度。然而,在移动设备上,使用Swish激活函数需要消耗大量资源,因此作者提出了一个新的“h-swish激活函数”,用来替代Swish激活函数。h-swish激活函数的效果与Swish函数相似,但计算量却大大降低了。Sigmoid激活函数与h-swish激活函数的对比如图10(a)所示,Swish激活函数与h-swish激活函数的对比如图10(b)所示。

image.png

图10 h-swish激活函数

h-swish激活函数的公式如下:

\(\text{h-swish}[x]=x\frac{\text{ReLU}6(x+3)}{6}\)

其中,需要说明一下激活函数ReLU6。卷积之后通常会接一个ReLU非线性激活函数,在MobileNet系列模型里面使用的都是ReLU6函数。ReLU6函数与普通的ReLU函数类似,但限制最大输出值为6(对输出值进行裁剪)。这是为了在移动端设备Float16的低精度的时候,也能有很好的数值分辨率,如果对ReLU的激活范围不加限制,输出范围为0到正无穷。如果激活值非常大,分布在一个很大的范围内,则低精度的Float16无法精确描述如此大范围的数值,从而导致精度损失。

3.3 Squeeze-and-Excite

Squeeze-and-Excitation Networks(SENet)是由自动驾驶公司Momenta于2017年公布的一种全新的图像识别结构(详见SENet),它通过对特征通道间的相关性进行建模,把重要的特征进行强化来提升准确率。这个结构在2017年的ILSVR竞赛中获得冠军,Top-5错误率为2.251%,相较于2016年的第一名,低了25%,可谓提升巨大。Squeeze-and-Excitation Networks也被一些研究人员称为基于通道的注意力机制

与MobileNet V2相比,MobileNet V3中增加了SE结构,并且将含有SE结构部分的扩张通道数减少为原来的1/4以减少延迟(但是,从计算时间上看,只是减少了1/2),实验发现在整体上延迟没有增加的情况下,模型精度得到了提高。MobileNet V2结构如图11(a)所示,MobileNet V3结构如图11(b)所示。

image.png
image.png

图11 带有SE模块的MobileNet V3 结构图

3.4 MobileNet V3模型结构

MobileNet V3-Large版的网络结构参数见表6-1;MobileNet V3-Small版的网络结构参数见表6-2。

表6-1 MobileNet V3 Large版的网络结构参数

image.png

注意:SE表示该块中是否有Squeeze-And-Excite模块,NL表示使用的非线性类型,S表示步长。HS表示h-swish,RE表示 ReLU,NBN表示没有批量归一化。

表6-2 MobileNet V3 Small版的网络结构参数

image.png

值得注意的是,与MobileNet V2相比,MobileNet V3模型conv2d部分的输出特征图数量减少了一半。实验发现延迟有所降低,且精度并没有下降。

关于效果,相MobileNet V2 1.0,MobileNet V3-Small和MobileNet V3-Large在性能和精度上各有优势。但是在工程实际中,特别是在移动端上,MobileNet V2的应用更为广泛。究其原因,MobileNet V2结构更简单、移植更方便、速度也更有优势,详见表7。

表7 MobileNet V3 Small版的网络结构参数

image.png

3.5MobileNet V3小结

MobileNet V3是谷歌团队在MobileNet V2基础上进一步优化的轻量级深度学习卷积神经网络架构。它继承了MobileNet V1和MobileNet V2的优点,同时融合了神经网络架构搜索技术,在性能和效率方面取得了更大的提升。MobileNet V3的主要特点如下:

(1)搜索驱动的网络结构:MobileNet V3通过NAS技术自动搜索到了一种高效的网络结构。这种结构包括了适应性的ReLU激活函数(如h-swish函数),以及针对不同输入分辨率的特定层次结构。

(2)逆残差结构:MobileNet V3沿用了MobileNet V2的逆残差结构,这种结构有助于减小计算成本,同时保持特征表达能力。

(3)调整宽度和分辨率:与MobileNet V1和V2类似,MobileNet V3也使用宽度乘子和分辨率乘子这两个超参数调整模型的大小和计算复杂性。这使得用户可以根据设备性能和应用场景进行权衡以平衡模型的精度和速度。

(4)更高的性能与效率:相较于MobileNet V1和V2,MobileNet V3在保持轻量化、低延迟和低计算资源占用的基础上,进一步提高了性能和效率。这使得它在多种计算机视觉任务中表现更优。

© 版权声明
THE END
共同营造AI社区,喜欢就支持一下吧~
点赞1881 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容