卷积神经网络发展
卷积神经网络被广泛应用在图像分类、目标检测等视觉任务中,并取得了巨大的成功。然而,卷积神经网络通常需要较大的运算量和内存占用,在移动端以及嵌入式设备等资源受限的环境中受到限制,因此需要进行网络压缩。从2012年AlexNet网络提出获得image net分类任务第一名后,深度学习模型迅速发展,网络层数不断加深,2015年提出的ResNet的准确率首次超越人类,但同时网络层数也达到了152层。
MobileNet系列是谷歌推出的轻量级网络模型,旨在不过多牺牲模型性能的同时大幅度减小模型的尺寸和加快模型的运算速度。
MobileNet V1
MobileNet V1基于一种流线型结构使用深度可分离卷积来构造轻型权重深度神经网络。主要用于移动端以及嵌入式设备。模型包含两个权衡延迟和准确率的全局超参数-宽度乘法器(width multiplier)和分辨率乘法器(resolution multiplier),允许模型构造器能够根据特定问题选择合适大小的模型。
深度可分离卷积
深度可分离卷积是一种将标准卷积分解成深度卷积以及一个1x1的卷积即逐点卷积。能够有效减少计算量以及模型的大小。如图所示,一个标准的卷积(a)被分解成深度卷积(b)以及1x1的逐点卷积(c)。
一个 3x3 Conv 被拆分成了 3x3 Depthwise Conv和 1x1 Conv
常规卷积操作
假设输入特征图的尺寸(H, W, D)是
DF⋅DF⋅M ,可以得到:
- 输入特征图尺寸:DF⋅DF⋅M
- 卷积核尺寸: DK * DK * M * N
- 输出特征图尺寸:DF⋅DF⋅ N
- 运算量为: DK⋅DK⋅M⋅N⋅DF⋅DF
有 N 个卷积核,每个大小为 DK⋅DK⋅M ,每个卷积核作用于 M 个通道。也就是1个 Filter 连接 3 个 input channels。
深度卷积
深度卷积每个卷积核只处理1个输入特征通道,而不是M个输入特征通道,这样大大减少了运算量。输入特征图的尺寸(H, W, D)是 DF⋅DF⋅M ,可以得到如下公式:
- 输入特征图尺寸:DF⋅DF⋅M
- 卷积核尺寸: DK⋅DK⋅1⋅M
- 输出特征图尺寸:DF⋅DF⋅M
- 运算量为:DK⋅DK⋅1⋅M⋅DF⋅DF
有M个卷积核,每个大小为DK⋅DK⋅1 ,每个卷积核作用于1个通道。也就是1个 Filter 连接1个 input channel。
逐点卷积
假设深度卷积层输出的特征图的尺寸(H, W, D)是DF⋅DF⋅M ,
- 输入特征图尺寸:DF⋅DF⋅M
- 卷积核尺寸:1⋅1⋅M⋅N
- 输出特征图尺寸:DF⋅DF⋅N
- 运算量为:1⋅1⋅M⋅N⋅DF⋅DF
有 N 个卷积核,每个大小为1⋅1⋅M ,每个卷积核作用于M个通道。也就是1个 Filter 连接M个input channels。
深度卷积每个卷积核只处理1个输入特征通道,而不是M个输入特征通道,这样大大减少了运算量。但是在这个过程中通道与通道之间的联系被切断,所以后面需要再用 1x1 大小的逐点卷积层来处理M个特征通道之间的信息。
常规卷积VS深度可分离卷积计算量
- 常规卷积运算量:
- 深度可分离卷积运算量:
- 运算量对比:
MobileNet V1使用3x3的深度可分离卷积将卷积分为滤波和组合两个过程相较于标准卷积少了8到9倍的计算量,只有极小准确率的下降。
网络结构
MobileNet一共有28层,13组深度可分离卷积,除第一层为全卷积其他全由深度可分离卷积构成。所有的层都跟着一个BN以及ReLU非线性激活函数,除最后一层全连接层没有非线性激活函数直接送入softmax层进行分类。
MobileNet在1×1卷积中花费了95%的计算时间,大约占有75%的参数,几乎所有的附加参数都在全连接层中。
宽度乘法器-Width Multiplier
宽度乘法器的作用就是对每一层均匀薄化。给定一个层以及宽度乘法器,输入通道数M变成了α* M,输出通道数N变成α* N。深度可分离卷积运算量变为:
其中α一般设置为1\0.75\0.5\0.25。当α=1时,是最基本的MobileNet,当时α<1时就是薄化的MobileNet。宽度乘法器对计算量和参数量的减少大约α^2倍。宽度乘法器可以合理的权衡精度和延迟的大小。
注:宽度乘法器常用来薄化一个新的需要从头开始训练的网络结构。
分辨率乘法器-Resolution Multiplier
第二个减少神经网络计算量的超参数是ρ-分辨率乘法器。对特征图进行下采样的 Resolution Multiplier ρ(0<ρ<1):
其中图像分辨率一般设置为224\192\160\128等。当ρ=1时为最基本的MobileNet,当ρ<1时为薄化的MobileNet。分辨率乘法器对网络约化大约ρ^2倍。
实验对比
a.深度可分离卷积与全卷积对比
精度只下降1%,参数减少7倍。
b.宽度乘法器α不同系数对比
准确率直到宽度乘法器α下降到0.25才显示下降很多。
c.分辨率乘法器ρ不同参数对比
准确率随着分辨率下降而平滑减小
d.MobileNet V1与其他模型对比
MobileNet和VGG16准确率几乎一样,但是参数量少了32倍,计算量少了27倍。相较于GoogleNet准确率更高,且参数量和计算量都少了2.5倍。
约化后MobileNet(α=0.5,分辨率为160x160)相较于这两个模型,准确率都高且计算量相较于AlexNet少了9.4倍,比SqueezeNet少了22倍。
MobileNet V2
MobileNetV2网络设计基于MobileNet V1,它保留了其简单性且不需任何特殊的运算符,同时显着提高了其准确性,从而实现了针对移动应用程序的图像分类和检测任务等。网络中的亮点是 Inverted Residuals (倒残差结构 )和 Linear Bottlenecks(线性瓶颈)。
模型主要贡献是提出了具有线性瓶颈的倒置残差块-Bottleneck Residual Block。该模块将低维压缩表示作为输入,首先将其扩展到高维,然后使用的深度可分离卷积进行提取特征。随后将特征投影回具有线性卷积的低维表示。
具有线性瓶颈的倒置残差块-Bottleneck Residual Block
a.扩展卷积-Expansion Convolution
使用1x1大小卷积核增加输入特征图的通道数(升维)。让Depthwise Convolution有更多机会获取有效信息。
b.深度可分离卷积-Depthwise Convolution
和MobileNetV1一致。
c.投影卷积-Projection Convolution
Projection Convolution是大小为1x1的卷积核(降维),输出通道数远小于输入通道数,从而达到限制模型大小的目的。
d.残差连接-Residual Connection
借鉴了ResNet的理念,插入"short-cut"的目的是为了帮助梯度在不同网络层间的传播。使用Residual connection要满足条件:输入特征图尺寸等于输出特征图尺寸。
MobileNetV1网络模块结构:
MobileNet V2 网络结构:
线性瓶颈-Linear Bottlenecks
Input是一个2维数据,其中兴趣流形是其中的蓝色螺旋线。使用矩阵T将数据嵌入到n维空间中(升维),后接ReLU,再使用 T的转置矩阵将其投影回2维平面(降维):
兴趣流形-manifold of interest:
倒置残差-Inverted residuals
在之前的ResNet残差结构是先用1x1的卷积降维,再升维的操作。而在MobileNetV2中,是先升维再降维。所以ResNet残差结构是两头大中间小。
MobileNetV2结构是中间大两头小。并且采用了新的激活函数:ReLU6,它与低精度计算一起使用时具有鲁棒性。
网络结构
基本构建块是一个具有残差的瓶颈深度可分离卷积。包含具有32个通道的初始全卷积层,然后是下表中所述的19个残差瓶颈层。将ReLU6用作非线性函数,因为它与低精度计算一起使用时具有鲁棒性。始终使用3×3的内核大小,并在训练过程中利用dropout和BN.
使用与Mobilenets v1中一样的输入图像分辨率和宽度乘数作为可调超参数来针对不同的性能点调整体系结构。输入分辨率参数为96-224,宽度乘数为0.35-1.4。
实验对比
在ImageNet上的性能,不同网络的比较。
SSD和SSDLite配置的大小和计算成本的比较MobileNetV2和对80个类进行预测.
MnasNet
MnasNet介于V2和V3之间,主要有两个亮点
多目标优化函数:准确度性能+真实手机推理时间
分层的神经架构搜索空间
网络思想
使用多目标优化的目标函数,兼顾速度和精度,其中速度用真实手机推断时间衡量提出分层的神经网络架构搜索空间,将卷积神经网络分解为若干block,分别搜索各自基本模块,保证层结构多样性。
网络结构
MobileNetV3
MobileNetV3综合了三种模型的思想:MobileNetV1的深度可分离卷积(depthwise separable convolutions)、MobileNetV2的具有线性瓶颈的倒残差结构(the inverted residual with linear bottleneck)和MnasNet的基于squeeze and excitation结构的轻量级注意力模型。模型引入了以下几个设计:
1.互补搜索技术
•资源受限的NAS:计算和参数量受限前提下搜索网络的各个模块
•NetAdapt:用于对NAS搜索的各个模块网络层的微调。
2.适用于移动环境的新的高效非线性版本:
•重新设计的激活函数hard-swish()
3.新的高效网络设计:
•降低卷积核数量并用不同的激活方式降低冗余
•精简Last Stage
4.新的高效分割解码器:
•MobileNetV3-Large
•MobileNetV3-Small
更新Block
1.加入SE模块
在V3中使用(squeeze-and-excite,SE) 模块,将 expansion layer的channel变为原来的1/4,即提高了精度,也没有增加时间消耗。并且SE结构放在了depthwise 之后。实质为引入了一个 channel 注意力机制。
2.更新了激活函数
hard-swish()
重新设计计算复杂的层
1.降低卷积核数量并用不同的激活方式降低冗余
减少了第一个卷积层的卷积核个数(32—>16),并使用hard-swish 非线性激活,在减少卷积核个数同时保持准确率(和使用 32 个卷积核并在该层使用 ReLU 是的效果比),计算量降低200W,时间节省2ms。
2.精简Last Stage
时间节省7ms,约占总体运行时间的11%,计算量减少3000w,准确率几乎没有下降。
重新设计激活函数
不同大小的模型设计
V3设计了两种体量的模型,Large和Small,都是经过 NAS和优化后的。SE: 该块中是否存在挤压和激发。NL表示所使用的非线性类型。HS: h-swish, RE: ReLU。NBN:无批处理归一化, S: 步幅, exp size:第一个1x1升维维数。
实验结果
MobileNet模型总结
转载:https://blog.csdn.net/xs1997/article/details/128362933