轻量级神经网络MobileNet全家桶详解 您所在的位置:网站首页 Switch各个版本优缺点 轻量级神经网络MobileNet全家桶详解

轻量级神经网络MobileNet全家桶详解

2024-07-11 01:07| 来源: 网络整理| 查看: 265

本文是转载文章,转载自从MobileNet看轻量级神经网络的发展,删除了文中冗余的部分,加入许多自己的理解,有些部分也通过pytorch进行了实现,并通过引入具体的计算更清晰的反映出轻量级神经网络的本质。

文章目录 一、前言二、MobileNet的优势三、MobileNet各版本介绍3.1 MobileNetV1网络结构3.2 MobileNetV2网络结构3.3 MobileNetV3网络结构 四、MobileNet各版本特性4.1 深度卷积(Depthwise convolution)4.2 逐点卷积(Pointwise Convolution)4.3 深度可分离卷积(Depthwise Separable Convolution)4.4 Xception与MobileNet深度可分离卷积的区别4.5 宽度因子(Width Multiplier)4.6 分辨率因子(Resolution Multiplier)4.7 规范化(Normalization)4.8 线性瓶颈(Linear Bottleneck)4.9 反向残差(Inverted Residuals)4.10 5x5 的深度卷积4.11 Squeeze-and-excitation 模块4.12 h-swish激活函数 五、MobileNet与其他模型对比5.11 模型参数量对比5.12 模型计算量对比5.13 具有竞争力的准确率 六、MobileNet各版本的指标对比七、MobileNetV3与NAS八、MobileNet与其他网络结合九、未来

一、前言

随着深度学习的火热,计算机视觉领域内的卷积神经网络模型也层出不穷。从1998年的LeNet,到2012年引爆深度学习热潮的AlexNet,再到后来2014年的VGG,2015年的ResNet,深度学习网络模型在图像处理中应用的效果越来越好。神经网络体积越来越大,结构越来越复杂,预测和训练需要的硬件资源也逐步增多,往往只能在高算力的服务器中运行深度学习神经网络模型。移动设备因硬件资源和算力的限制,很难运行复杂的深度学习网络模型。 在这里插入图片描述

深度学习领域内也在努力促使神经网络向小型化发展。在保证模型准确率的同时体积更小,速度更快。到了2016年直至现在,业内提出了SqueezeNet、ShuffleNet、NasNet、MnasNet以及MobileNet等轻量级网络模型。这些模型使移动终端、嵌入式设备运行神经网络模型成为可能。而MobileNet在轻量级神经网络中较具代表性。

谷歌在2019年5月份推出了最新的MobileNetV3。新版MobileNet使用了更多新特性,使得MobileNet非常具有研究和分析意义,本文将对MobileNet进行详细解析。

二、MobileNet的优势

MobileNet网络拥有更小的体积,更少的计算量,更高的精度。在轻量级神经网络中拥有极大的优势。

(1)更小的体积 在这里插入图片描述 (2)更少的计算量 在这里插入图片描述 MobileNet优化网络结构使模型计算量成倍下降。

(3)更高的准确率 在这里插入图片描述 MobileNet凭借网络结构优化,在更少的参数及更少的计算量情况下,网络精度反而超过了部分大型神经网络。在最新的MobileNetV3-Large中,实现ImageNet数据集Top1准确率达到75.2%。

(4)更快的速度 在这里插入图片描述 使用Google Pixel-1手机测试,MobileNet各版本都能保持运行时间在120ms以下,最新版MobileNetV3-Large运行时间达到66ms,参数量和计算量更低的MobileNetV3-Small更是能达到22ms;GoogleNet运行速度约为250ms,而VGG-16由于一次性需要加载至内存的空间已超过500MB,手机系统会报内存溢出错误导致无法运行。

(5)多种应用场景

MobileNet可以在移动终端实现众多的应用,包括目标检测,目标分类,人脸属性识别和人脸识别等。

在这里插入图片描述

三、MobileNet各版本介绍 3.1 MobileNetV1网络结构

在这里插入图片描述

整个网络不算平均池化层与softmax层,共28层;在整个网络结构中步长为2的卷积较有特点,卷积的同时充当下采样的功能;第一层之后的26层都为深度可分离卷积的重复卷积操作;每一个卷积层(含常规卷积、深度卷积、逐点卷积)之后都紧跟着批规范化和ReLU激活函数;最后一层全连接层不使用激活函数。 3.2 MobileNetV2网络结构

在这里插入图片描述 MobileNetV2中主要引入线性瓶颈结构和反向残差结构。

MobileNetV2网络模型中有共有17个Bottleneck层(每个Bottleneck包含两个逐点卷积层和一个深度卷积层),一个标准卷积层(conv),两个逐点卷积层(pw conv),共计有54层可训练参数层。MobileNetV2中使用线性瓶颈(Linear Bottleneck)和反向残差(Inverted Residuals)结构优化了网络,使得网络层次更深了,但是模型体积更小,速度更快了。

3.3 MobileNetV3网络结构

在这里插入图片描述 MobileNetV3分为Large和Small两个版本,Large版本适用于计算和存储性能较高的平台,Small版本适用于硬件性能较低的平台。

Large版本共有15个bottleneck层,一个标准卷积层,三个逐点卷积层。Small版本共有12个bottleneck层,一个标准卷积层,两个逐点卷积层。

MobileNetV3中引入了5×5大小的深度卷积代替部分3×3的深度卷积。引入Squeeze-and-excitation(SE)模块和 h-swish(HS)激活函数以提高模型精度。结尾两层逐点卷积不使用批规范化(Batch Norm),在MobileNetV3结构图中使用NBN标识。 在这里插入图片描述

网络结构上相对于MobileNetV2的结尾部分做了优化,去除3x3 Dconv,1x1Conv等卷积层,如上图所示。去除后减少了计算量和参数量,但是模型的精度并没有损失。

值得一提的是,不论是Large还是Small版本,都是使用神经架构搜索(NAS)技术生成的网络结构。

四、MobileNet各版本特性

MobileNet实现计算量减小、参数量减少的同时保证了较高的准确率,这和其拥有的特性息息相关:

(1)MobileNetV1提出的特性 在这里插入图片描述

(2)MobileNetV2提出的特性 在这里插入图片描述

(3)MobileNetV3提出的特性 在这里插入图片描述

(4)MobileNet各个版本拥有的特性汇总 在这里插入图片描述

下文将对上表中的各个特性详细阐述。

4.1 深度卷积(Depthwise convolution)

深度卷积(Depthwise convolution, DW)不同于常规卷积操作,深度卷积中一个卷积核只有一维,负责一个通道,一个通道只被一个卷积核卷积;常规卷积每个卷积核的维度与输入维度相同,每个通道单独做卷积运算后相加。

以一张5x5x3(长和宽为5,RGB3通道)的彩色图片举例。每层深度卷积卷积核的数量与上一层的通道数相同(通道和卷积核一一对应)。设padding=1,stride=1,一个三通道的图像经过运算后生成了3个特征图,如下图所示:

在这里插入图片描述

深度卷积完成后的输出特征图通道数与输入层的通道数相同,无法扩展通道数。而且这种运算对输入层的每个通道独立进行卷积运算,没有有效的利用不同通道在相同空间位置上的特征信息。因此需要逐点卷积来将生成的特征图进行组合生成新的特征图。

4.2 逐点卷积(Pointwise Convolution)

逐点卷积(Pointwise Convolution, PW)的运算与标准卷积运算非常相似。

逐点卷积卷积核大小为1×1xM(M为输入数据的维度),每次卷积一个像素的区域。逐点卷积运算会将上一层的特征图在深度(通道)方向上进行加权组合,生成新的特征图,新的特征图的大小与输入数据大小一致,这种卷积方式以较少的计算量进行降维或升维操作(改变输出数据的维度)。这种卷积被用来“混合”通道之间的信息。

以一张5x5x3(长和宽为5,RGB3通道)的彩色图片举例,使用4个1x1x3的逐点卷积核进行卷积,逐点卷积运算后生成了4个特征图。这个例子是使用逐点卷积进行升维的操作,特征图从5x5x3 升维到5x5x4。如下图所示:

在这里插入图片描述

4.3 深度可分离卷积(Depthwise Separable Convolution)

从MobileNetV1开始,到V2、V3的线性瓶颈结构都大量使用了深度可分离卷积。

深度可分离卷积(Depthwise Separable Convolution)是一种卷积结构。它是由一层深度卷积(Depthwise convolution)与一层逐点卷积(Pointwise Convolution)组合而成的,每一层卷积之后都紧跟着批规范化和ReLU激活函数。跟标准卷积的区别就是精度基本不变的情况下,参数与计算量都明显减少。 在这里插入图片描述

将深度卷积和逐点卷积组成深度可分离卷积后的示意图,如下图所示:

在这里插入图片描述

首先进行深度卷积操作,得出的特征图各通道之间是不关联的。接着进行逐点卷积把深度卷积输出的特征图各通道关联起来。

深度可分离卷积使用了更小的空间代价(参数减少)和更少的时间代价(计算量更少)实现了标准卷积层一样的效果(提取特征)。

一般的设Df为输入特征图边长,Dk为卷积核边长,特征图和卷积核均为长宽一致,输入通道数为M,输出通道数为N,则:

标准卷积计算量为:Df×Df×Dk×Dk×M×N深度卷积的计算量为:Df×Df×Dk×Dk×M逐点卷积的计算量为:Df×Df×M×N

上图所示实现输入特征图大小为5×5×3,输出特成图大小为5×5×4,设padding=1,stride=1,深度卷积卷积核大小为3×3,标准卷积也使用3×3尺寸卷积核。实现相同的卷积效果,参数量(不包含偏置)与计算量对比如下表所示:

在这里插入图片描述 标准卷积:参数量3*3*3*4=108,计算量5*5*3*3*3*4=2700 深度可分离卷积:参数量3*3*3+1*1*3*4=39,计算量5*5*3*3*3+5*5*1*1*3*4=975

4.4 Xception与MobileNet深度可分离卷积的区别

事实上深度可分离卷积不是在MobileNetV1中第一次提出的,而是在2016年由谷歌的Xception网络结构中提出的。MobileNetV1在Xception的基础上,对深度可分离卷积进行了改进,做到了计算量与参数量的下降:

在这里插入图片描述

假定M为输入层的通道数,N为输出层的通道数。

Xception的深度可分离卷积是由输入参数开始,使用1x1xMxN卷积将输入层的通道数转换为目标通道数,再通过3x3x1卷积核对每个通道进行卷积,每次卷积过后使用ReLU进行激活。想要更清晰的了解Xception,可以参考我的博客从Inception到Xception,卷积方式的成长之路。

MobileNetV1的深度可分离卷积则是先使用3x3x1xM对输入层的每个通道分别卷积,之后通过1x1xMxN将输入层通道数转换为输出层通道数,每次卷积过后做一次批规范化操作,再使用ReLU进行激活。

这里我们使用MobileNetV1网络结构的第一个深度可分离卷积层来举例,输入层维度为112x112x32,输出层维度为112x112x64,Xception与MobileNet的深度可分离卷积的计算量与参数个数对比如下表:

在这里插入图片描述 由此可知将PW卷积与DW卷积的顺序调整后,优化了网络的空间复杂度和时间复杂度。

4.5 宽度因子(Width Multiplier)

MobileNet本身的网络结构已经比较小并且执行延迟较低,但为了适配更定制化的场景,MobileNet提供了称为宽度因子(Width Multiplier)的超参数给我们调整。宽度因子在MobileNetV1、V2、V3都可以运用。

通过宽度因子,可以调整神经网络中间产生的特征的大小,调整的是特征数据通道数大小,从而调整了运算量的大小。

宽度因子简单来说就是新网络中每一个模块要使用的卷积核数量相较于标准的MobileNet比例。对于深度卷积结合1x1方式的卷积核,计算量为: 在这里插入图片描述 算式中α即为宽度因子,α常用的配置为1,0.75,0.5,0.25;当α等于1时就是标准的MobileNet。通过参数α可以非常有效的将计算量和参数数量约减到α的平方倍。

下图为MobileNetV1使用不同α系数进行网络参数的调整时,在ImageNet上的准确率、计算量、参数数量之间的关系(每一个项中最前面的数字表示α的取值)。

在这里插入图片描述

可以看到当输入分辨率固定为224x224时,随着宽度因子的减少,模型的计算量和参数越来越小。从上表可以看到, 0.25 MobileNet的正确率比标准版1.0MobileNet低20%,但计算量和参数量几乎只有标准版1.0MobileNet计算量、参数量的10%!对于计算资源和存储资源都十分紧张的移动端平台,可以通过α宽度因子调节网络的餐数量是非常实用的,在真正使用时我们可以按需调整α宽度因子达到准确率与性能的平衡。

4.6 分辨率因子(Resolution Multiplier)

MobileNet还提供了另一个超参数分辨率因子(Resolution Multiplier)供我们自定义网络结构,分辨率因子同样在MobileNetV1、V2、V3都可以运用。

分辨率因子一般用β来指代,β的取值范围在(0,1]之间,是作用于每一个模块输入尺寸的约减因子,简单来说就是将输入数据以及由此在每一个模块产生的特征图都变小了,结合宽度因子α,深度卷积结合1x1方式的卷积核计算量为 在这里插入图片描述 下图为MobileNetV1使用不同的β系数作用于标准MobileNet时,在ImageNet上对精度和计算量的影响(α固定1.0)

在这里插入图片描述 上图中的 224、192、160、128 对应的分辨率因子分别为 1、 6/7、5/7、4/7。

β=1时,输入图片的分辨率为224x224,卷积后的图像大小变化为: 224x224 、112x112、56x56、28x28、14x14、7x7。

β= 6/7时,输入图片的分辨率为192x192,卷积后各层特征图像大小变化为:192x192、96x96、48x48、24x24、12x12、6x6。

卷积特征图像的大小变化不会引起参数量的变化,只改变模型M-Adds计算量。上图中 224分辨率模型测试ImageNet数据集准确率为70.6%,192分辨率的模型准确率为69.1%,但是M-Adds计算量减少了151M,对移动平台计算资源紧张的情况下,同样可以通过β分辨率因子调节网络输入特征图的分辨率,做模型精度与计算量的取舍。

4.7 规范化(Normalization)

深度学习中的规范化操作(Normalization),有助于加快基于梯度下降法或随机梯度下降法模型的收敛速度,提升模型的精度,规范化的参数能够提升模型泛化能力,提高模型的可压缩性。

按照规范化操作涉及对象的不同可以分为两大类,一类是对输入值进行规范化操作,比如批规范化(Batch Normalization)、层规范化(Layer Normalization)、实例规范化(Instance Normalization)、组规范化(Group Normalization)方法都属于这一类。另外一类是对神经网络中参数进行规范化操作,比如使用L0,L1范数。

(1)批规范化(Batch Normalization)

批规范化(Batch Normalization)几乎存在于MobileNetV1、V2、V3的每个卷积层的后面,目的是加快训练收敛速度,提升准确率。

批规范化是一种对数值的特殊函数变换方法,也就是说假设原始的某个数值是 x,套上一个起到规范化作用的函数,对规范化之前的数值 x 进行转换,形成一个规范化后的数值,即: 在这里插入图片描述 所谓规范化,是希望转换后的数值满足一定的特性,至于对数值具体如何变换,跟规范化目标有关,不同的规范化目标导致具体方法中函数所采用的形式不同。批规范化通过对输入值进行规范化操作,克服神经网络层数加深导致模型难以训练的问题。想要更详细的了解批规范化,可以参考我的博客Batch Normalization:批量归一化详解

(2)参数规范化(Weight Normalization)

参数规范化(Weight Normalization, WN)是规范化的一种, 通过人为的设定稀疏算法,去除模型中多余的参数(置为0)使得模型参数稀疏化,可以通过L1范式实现。

参数规范化是防止模型过分拟合训练数据。当训练一批样本的时候,随着训练的推移模型会越来越趋向于拟合样本数据。因为参数太多,会导致模型复杂度上升,容易过拟合。

需要保证模型"简单"的基础上最小化训练误差,这样得到的参数才具有好的泛化性能(也就是测试误差也小),而模型"简单"就是通过规则函数来实现的。 在这里插入图片描述

如上图所示,左侧分类明显的是欠拟合,模型并没有能够拟合数据。中间图示为合适的拟合,右边图示是过拟合,模型在训练样本中拟合度是很好的,但是却违背了特征分类规律,在新的测试样本中表现糟糕,影响模型的泛化能力。显然右侧模型在训练是受到额外参数干扰。参数规则化能够使参数稀疏,减少额外参数的干扰,提高泛化能力。

模型拥有稀疏的参数(模型中有大量参数为0),也有利于通过压缩算法压缩模型的大小。

关于范数和参数规范化,可以参考L0、L1与L2范数_理解及我的博客手推公式带你轻松理解L1/L2正则化

4.8 线性瓶颈(Linear Bottleneck)

线性瓶颈英文为Linear Bottleneck,是从Bottleneck结构演变而来的,被用于MobileNetV2与V3。

Bottleneck结构首次被提出是在ResNet网络中。该结构第一层使用逐点卷积,第二层使用3×3大小卷积核进行深度卷积,第三层再使用逐点卷积。MobileNet中的瓶颈结构最后一层逐点卷积使用的激活函数是Linear,所以称其为线性瓶颈结构(Linear Bottleneck)。线性瓶颈结构有两种,第一种是步长为1时使用残差结构,第二种是步长为2时不使用残差结构。

在这里插入图片描述

关于我自己对这个结构的一些理解和补充:

在DW之前加了一个新的PW卷积,是由于DW本身没有改变通道的能力,不会把各个各通道关联起来,有部分特征会获取不到,所以为了得到更多的特征,只好在前面加上一个PW卷积用来升维。去掉第二个PW的ReLU是由于激活函数在高维空间能够有效的增加非线性,而在低维空间时,特征提取本来就不充分,ReLU激活函数会破坏特征,所以去掉ReLU能够减少信息的丢失,具体可以看我的博客深入理解ReLU中有关ReLU缺点的那一部分。此外,在低维空间增加一层Linear,可以在更好提取特征的同时,额外增加的参数量和计算量也不多,可以接受。在每个bottleneck中有的stride为1,有的stride为2,只有stride为1的才用残差(因为当stride为1时,输出的feature map才与原图相同,才能相加)

其中输入通道数为M,扩大倍数系数为T。T的值为大于0 的正数,当 0



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有