某厂实习生 有的图转载csdn和知乎,仅作自己笔记,侵删
一、解决什么问题
目前模型受限的原因 主要是模型的存储问题和模型进行预测的速度问题
有两种常用的解决手段:模型结构设计和模型压缩。
模型结构设计:主要思想在于设计更高效的「网络计算方式」(主要针对卷积方式),从而使网络参数减少的同时,不损失网络性能。
模型压缩(Model Compression ):即在已经训练好的模型上进行压缩,使得网络携带更少的网络参数,从而解决内存问题,同时可以解决速度问题。
模型压缩多用剪枝量化蒸馏,下面主要说模型结构设计。
二、模型结构设计基础知识
(1)人工设计轻量化神经网络模型;
(2)基于神经网络架构搜索(Neural Architecture Search,NAS)的自动化设计神经网络;
(3)CNN模型压缩;
(4)基于AutoML的自动模型压缩。
1.1 标准卷积
图1标准卷积计算图
HxW表示输入特征图空间尺寸(如图1所示,H和W代表特征图的宽度和高度,输入和输出特征图尺寸不变),N是输入特征通道数,KxK表示卷积核尺寸,M表示输出卷积通道数,则标准卷积计算量是HWNK²M。
图2标准卷积计算过程
如图3所示标准卷积在空间维度和通道维度直观说明,输入特征图和输出特征图之间连接线表示输入和输出之间的依赖关系。以conv3x3为例子,输入和输出空间“spatial”维度密集连接表示局部连接;而通道维度是全连接,卷积运算都是每个通道卷积操作之后的求和(图2),和每个通道特征都有关,所以“channel”是互相连接的关系。
图3标准卷积:空间维度和通道维度示意图
1.2 Grouped Convolution
分组卷积是标准卷积的变体,其中输入特征通道被为G组(图4),并且对于每个分组的信道独立地执行卷积,则分组卷积计算量是HWNK²M/G,为标准卷积计算量的1/G。
图 4分组卷积:空间维度和通道维度示意图
Alex采用Group convolution将整个网络分成两组后,分别放入一张GPU卡进行训练(如图5所示)。
图5 AlexNet网络架构
1.3 Depthwise convolution 逐通道卷积
Depthwise convolution是指将NxHxWxC输入特征图分为group=C组(既Depthwise 是Grouped Convlution的特殊简化形式),然后每一组做k*k卷积,计算量为HWK²M(是普通卷积计算量的1/N,通过忽略通道维度的卷积显著降低计算量)。Depthwise相当于单独收集每个Channel的空间特征。
图6 depthwise卷积
图7 Depthwise卷积:空间维度和通道维度示意图
1.4 pointwise convolution 逐点卷积
Pointwise是指对NxHxWxC的输入做 k个普通的 1x1卷积,如图8,主要用于改变输出通道特征维度。Pointwise计算量为HWNM。
Pointwise卷积相当于在通道之间“混合”信息。
图8 Pointwise卷积
图9 Pointwise卷积:空间维度和通道维度示意图
1.5 Channel Shuffle
Grouped Convlution导致模型的信息流限制在各个group内,组与组之间没有信息交换,这会影响模型的表示能力。因此,需要引入group之间信息交换的机制,即Channel Shuffle操作。
Channel shuffle是ShuffleNet提出的(如图 5 AlexNet也有Channel shuffle机制),通过张量的reshape 和transpose,实现改变通道之间顺序。
图10 Channel shuffle:空间维度和通道维度示意图
如图10所示Channel shuffle G=2示意图,Channel shuffle没有卷积计算,仅简单改变通道的顺序。
1.6 深度可分离卷积主要分为两个过程,分别为逐通道卷积(Depthwise Convolution)和逐点卷积(Pointwise Convolution)。
1.7空间可分卷积将一个内核简单地分为两个较小的内核。 最常见的情况是将3x3内核分为3x1和1x3内核
三、人工设计神经网络
MobileNet V1&V2,ShuffleNet V1&V2有一个共同的特点,其神经网络架构都是由基本Block单元堆叠,首先分析基本Block架构的异同点,再分析整个神经网络的优缺点,对比MobileNet V1&V2,ShuffleNet V1&V2模型(图17),手工设计轻量化模型主要得益于depth-wise convolution减少计算量,而解决信息不流畅的问题,MobileNet 系列采用了 point-wise convolution,ShuffleNet 采用的是 channel shuffle
MobileNet V1
模型设计:
MobileNet V1是Google第一个提出体积小,计算量少,适用于移动设备的卷积神经网络。MobileNet V1之所以如此轻量,背后的思想是用深度可分离卷积(Depthwise separable convolution)代替标准的卷积,并使用宽度因子(width multiply)减少参数量。
深度可分离卷积把标准的卷积因式分解成一个深度卷积(depthwise convolution)和一个逐点卷积(pointwise convolution)。
计算量:
为了进一步降低Mobilenet v1计算量,对输入输出特征通道数M和N乘以宽度因子α(α∈(0,1),d典型值0.25,0.5和0.75),深度可分离卷积总计算量可以进一降低为:
ShuffleNet V1
模型设计:
ShuffleNet是Face++提出的一种轻量化网络结构,主要思路是使用Group convolution和Channel shuffle改进ResNet,可以看作是ResNet的压缩版本
图13展示了ShuffleNet的结构,其中(a)就是加入BatchNorm的ResNet bottleneck结构,而(b)和(c)是加入Group convolution和Channel Shuffle的ShuffleNet的结构。
图14 ShuffleNet V1 Block:空间维度和通道维度示意图
如所示,ShuffleNet block最重要的操作是channel shuffle layer,在两个分组卷积之间改变通道的顺序,channel shuffle实现分组卷积的信息交换机制。
计算量:
ResNet bottleneck计算量:
ShuffleNet stride=1计算量:
对比可知,ShuffleNet和ResNet结构可知,ShuffleNet计算量降低主要是通过分组卷积实现。ShuffleNet虽然降低了计算量,但是引入两个新的问题:
1、channel shuffle在工程实现占用大量内存和指针跳转,这部分很耗时。
2、channel shuffle的规则是人工设计,分组之间信息交流存在随意性,没有理论指导。
MobileNet V2
模型设计:
MobileNet V1设计时参考传统的VGGNet等链式架构,在反向传播时梯度消失。于是改进版的MobileNet V2[3]增加skip connection,并且对ResNet和Mobilenet V1基本Block如下改进:
图15 Mobile V1, Mobile V2,RsNet架构对比
- 继续使用Mobilenet V1的深度可分离卷积降低卷积计算量。
- 增加skip connection,使前向传播时提供特征复用。
- 在Depth-wise Separable Convolution前面添加一个Point-wise Convolution。通过PW操作升维,在高维特征空间中提取特征。
- 去掉Depth-wise Separable Convolution后面的ReLU
- 采用Inverted residual block结构。该结构使用Point wise convolution先对feature map进行升维,再在升维后的特征接ReLU,减少ReLU对特征的破坏。
- 使用RELU6激活层 ReLU6 就是普通的ReLU但是限制最大输出值为 6,这是为了在移动端设备 float16/int8 的低精度的时候,也能有很好的数值
ShuffleNet V2
ShuffleNet V2 引入通道分割(channel split)操作, 将输入的feature maps分为两部分:一个分支为shortcut流,另一个分支含三个卷积(且三个分支的通道数一样)。分支合并采用拼接(concat),让前后的channel数相同,最后进行Channel Shuffle(完成和ShuffleNet V1一样的功能)。元素级的三个运算channel split、concat、Channel Shuffle合并一个Element-wise,显著降低计算复杂度
来自 <轻量化神经网络综述 - 知乎>
四、使用自动网络搜索
NasNet 实现准确率state-of-art水平,但是推断延时较大,在移动端对实时性苛刻场景难以大规模运用。
MnasNet Google提出的探索了一种使用强化学习设计移动端模型的自动化神经架构搜索方法,并且实现准确率和运算速率突破
五、MobileNetV3
从SqueezeNet开始模型的参数量就不断下降,为了进一步减少模型的实际操作数,MobileNetV1利用了深度可分离卷积提高了计算效率,而MobileNetV2则加入了线性bottlenecks和反转残差模块构成了高效的基本模块。随后的ShuffleNet充分利用了组卷积和通道shuffle进一步提高模型效率。CondenseNet则学习保留有效的dense连接在保持精度的同时降低,ShiftNet则利用shift操作和逐点卷积代替了昂贵的空间卷积。
MobileNetV3有两大创新点 高通没有支持MobileNetV3
(1)互补搜索技术组合:由资源受限的NAS执行模块级搜索,NetAdapt执行局部搜索。
(2)网络结构改进:将最后一步的平均池化层前移并移除最后一个卷积层,引入h-swish激活函数。
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)