轻量化网络总结[1]--SqueezeNet,Xception,MobileNetv1~v3

笔者还写了《轻量化网络总结[2]–ShuffleNetv1/v2,OSNet,GhostNet》 点击即可查看


轻量化网络模型的 核心是在 保持精度的前提下,从 模型大小推理速度两方面 综合对网络进行 轻量化改造,使深度学习网络模型更容易部署在移动端或嵌入式设备。以下详细介绍轻量化网络模型SquezeNet,Xception,MobileNetv1~v3:

1. SqueezeNet

论文地址:https://arxiv.org/pdf/1602.07360.pdf

1.1 改造方案

(1)减少输入通道channel数量、使用1×1卷积核代替3×3卷积核:可显著减少参数数量
(2)将max pooling的下采样层置后,给卷积层提供更大的激活图:保留了更多的信息,提高分类准确率
(3)使用模型压缩技术:保证模型性能的前提下减小模型的体量

1.2 实现方法

(1)定义基础模块Fire Module:
在这里插入图片描述

  • squeeze layer只使用1×1卷积(数量为 s 1 s_1 s1),expand使用1×1卷积核(数量为 e 1 e_1 e1)和3×3卷积核(数量为 e 2 e_2 e2);其中 s 1 s_1 s1 e 1 e_1 e1 e 2 e_2 e2为超参数,通过令 s 1 s_1 s1 < e 1 e_1 e1 + e 2 e_2 e2实现限制输入通道数量,同时定义相关参数压缩比 s 1 s 1 + e 1 + e 2 \frac {s_1}{s_1+e_1+e_2} s1+e1+e2s13×3卷积核占比 e 2 e 1 + e 2 \frac {e_2}{e_1+e_2} e1+e2e2

(2)SqueezeNet的网络架构
在这里插入图片描述
SqueezeNet网络架构参数
在这里插入图片描述

  • 网络输入开始是一个单独的卷积层(conv 1),然后接8个Fire Module(fire 2-9),再以一个卷积层结束(conv 10),最后经过全局平均池化(avgpool)及Softmax激活输出
  • 整体架构中每个Fire Module的卷积核数量是逐渐增加的
  • 在conv 1,fire 4,fire 8和conv 10之后都是用来步长为2的max pooling,通过将最大池化层相对置后给卷积层提供更大的激活图,保留了更多的信息,提高分类准确率

(3)常见模型压缩技

  • 奇异值分解(SVD)
  • 使用网络剪枝(Network Pruning)和稀疏矩阵(Sparse Matrix)
  • 深度压缩(Deep compression):裁剪、量化、编码
  • 硬件加速(Hardware Accelerat):如TensorRT
  • Dense-Sparse-Dense(DSD)
  • 知识蒸馏(Knowledge Distillation)

1.3 实验结果

列出了SqueezeNet与AlexNet的对比,可以发现SqueezeNet在模型体量明显小于AlexNet的情况下精度与AlexNet媲美(ImageNet数据集)
在这里插入图片描述
分析了压缩比和3×3卷积核占比对模型精度的影响,如图所示
在这里插入图片描述

比较了原始SqueezeNet与带有简单旁路和复杂旁路连接的SqueezeNet的模型精度,对比结果如下:带有简单旁路连接的SqueezeNet精度最高。
在这里插入图片描述

2. Xception

论文地址:https://arxiv.org/abs/1610.02357

2.1 改造方案

(1)卷积过程中通道间卷积空间卷积相互分开
(2)对Inception v3基础模块的一种改进

2.2 实现方法

(1)Xception的设计思想是基于Inception v3基础模块,结合深度可分离卷积(Depthwise Separable Conv)设计的。其演变过程如下:
在这里插入图片描述

  • Inception v3中首先通过1×1卷积或平均池化后选择无卷积、3×3卷积或两个3×3卷积(感受野与5×5卷积相同)将一个输入同时分配给几种不同的特征提取方式,让网络自己训练选择特征类型。Inception v3的思想:将通道间关系和空间关系进行解耦
  • 对Inception进行简化,去除其中的平均池化,输入后首先通过1×1卷积后通过3×3卷积
  • 等效简化模块将1×1卷积统一起来,提取为公共部分,即先进行1×1卷积后对部分通道分别进行3×3卷积
  • 为了实现将通道间关系和空间关系进行完全解耦,提出极致(Extreme)的Inception,即先进行1×1卷积后再对每个通道分别进行3×3卷积

(2)Xception的网络架构:输入经过Entry flow后重复经过Middle flow8次,最后经过Exit flow输出,其中每个卷积后都经过批归一化处理(BatchNorm)
在这里插入图片描述

其中Depthwise Separable Conv与Xception中的Separable Conv的区别

  • Depwise Separable Conv:对每个通道先进行3×3卷积经过concat再进行1×1卷积
  • Xception:先进行普通的1×1卷积后对每个通道分别进行3×3深度卷积

2.3 实验结果

列出来Xception与其他网络结构在ImageNet数据集上的准确率对比
在这里插入图片描述

通过实验发现再用于学习通道见相关性的1×1卷积和用于学习空间相关性的3×3卷积之间不使用非线性激活函数时,收敛过程更快,准确率更高
在这里插入图片描述

潜在问题:由于Xception其中分离卷积计算过程较零散,当时现有的卷积网络实现分离卷积效率不高;理论计算量小于Inception V3,但迭代速度反而更慢
在这里插入图片描述
:Xception网络架构提出不在于压缩模型,而是通过Inception v3基础上改进网络,在参数量基本持平的前提下提高网络本身的性能

3. MobileNet v1~v3

3.1 MobileNet v1

论文地址:https://arxiv.org/pdf/1704.04861.pdf

3.1.1 改造方案

(1)使用深度可分离卷积(Depthwise Separable Conv)代替常规卷积,大大减少计算量和参数量
(2)引入超参数宽度因子(Width Multiplier)和分辨率因子(Resolution Multiplier),调整参数量和计算量

3.1.2 实现方法

(1)深度卷积(Depthwise Conv)和逐点卷积(Pointwise Conv)组合成深度可分离卷积
在这里插入图片描述

  • 常规卷积核通道数量与输入特征图通道数量(M)相同,输出特征图通道数量(N)等于卷积核个数,其中DK为卷积核尺寸
  • 深度卷积核通道数量恒为1,卷积核数量与输入特征图通道数量(M)和输出特征图通道数量相同,其中DK为卷积核尺寸
  • 逐点卷积核通道数量与输入特征图通道数量(M)相同,输出特征图通道数量(N)等于卷积核个数,其中卷积核尺寸恒为1×1

深度可分离卷积先由深度卷积提取各通道的特征后经过逐点逐点卷积将各通道的特征关联起来
有关计算量(只考虑乘法,不考虑加法)和参数量计算如下:
常规卷积的计算量 D K × D K × D F × D F × M × N D_K × D_K × D_F × D_F × M × N DK×DK×DF×DF×M×N参数量 D K × D K × M × N D_K × D_K × M × N DK×DK×M×N
深度卷积的计算量 D K × D K × D F × D F × M D_K × D_K × D_F × D_F × M DK×DK×DF×DF×M参数量 D K × D K × M D_K × D_K × M DK×DK×M
逐点卷积的计算量 D F × D F × M × N D_F × D_F × M × N DF×DF×M×N参数量 M × N M × N M×N
其中DK为卷积核尺寸,DF为输出特征图尺寸,M、N分别为输入、输出特征图通道数量

深度可分离卷积与常规卷积计算量比较 D K × D K × D F × D F × M + D F × D F × M × N D K × D K × D F × D F × M × N = 1 N + 1 D K 2 \frac {D_K × D_K × D_F × D_F × M + D_F × D_F × M × N}{D_K × D_K × D_F × D_F × M × N} = \frac {1}{N} + \frac{1} {D_K^2} DK×DK×DF×DF×M×NDK×DK×DF×DF×M+DF×DF×M×N=N1+DK21参数量比较 D K × D K × M + M × N D K × D K × M × N = 1 N + 1 D K 2 \frac {D_K × D_K × M + M × N}{D_K × D_K × M × N} = \frac {1}{N} + \frac{1}{D_K^2} DK×DK×M×NDK×DK×M+M×N=N1+DK21,可以发现将常规卷积替换为深度可分离卷积可大大减少计算量和参数量

MobileNet v1网络架构
在这里插入图片描述

  • 卷积层包括常规卷积、深度卷积和逐点卷积(深度可分离卷积),不包括平均池化层和Softmax层共有28层
  • 步长为2的卷积,在卷积的同时起到下采样的功能
  • 最后一层为全连接层不使用激活函数
  • 其中每一种卷积都伴随批归一化和激活函数,如图在这里插入图片描述

(2)为了满足定制化场景更快、更小的模型要求,设置了宽度因子(Width Multiplier)α和分辨率因子(Resolution Multiplier)ρ的超参数来调整网络结构。其中宽度因子α调整特征图通道数量的大小分辨率因子ρ调整特征图尺寸的大小
加上两个超参数之后深度可分离卷积的计算量为 D K × D K × ρ D F × ρ D F × α M + ρ D F × ρ D F × α M × α N D_K × D_K × ρD_F × ρD_F × αM + ρD_F × ρD_F × αM × αN DK×DK×ρDF×ρDF×αM+ρDF×ρDF×αM×αN
宽度因子α对网络的计算量和参数量都有影响,而分辨率因子ρ只影响网络的计算量对参数量无影响

3.1.3 实验结果

比较了常规卷积和深度可分离卷积的MobileNet v1在ImageNet数据集的精度、(乘法和加法)计算量以及参数量
在这里插入图片描述

分析了分辨率为224,不同宽度因子α(1.0、0.75、0.5、0.25)以及宽度因子为1,不同分辨率(224、192、160、128)在ImageNet数据集的精度、(乘法和加法)计算量以及参数量
在这里插入图片描述

比较了MobileNet v1与其他常见网络模型在ImageNet数据集的精度、(乘法和加法)计算量以及参数量
在这里插入图片描述
比较MobileNet v1与不同模型应用于目标检测框架在COCO数据集上的mAP、(乘法和加法)计算量以及参数量
在这里插入图片描述

3.2 MobileNet v2

论文地址:https://arxiv.org/pdf/1801.04381.pdf

3.2.1 改造方案

(1)引入线性瓶颈(Linear Bottleneck)结构
(2)引入反向残差(Inverted Residuals)结构

3.2.2 实现方法

(1)线性瓶颈(Linear Bottleneck)是由ResNet网络中Bottleneck结构演变而来的,并且引入深度可分离卷积思想
在这里插入图片描述

  • 将常规卷积替换为深度卷积和逐点卷积的组合可大大较少计算量和参数量,原因见MobileNet v1
  • Bottleneck卷积结构借鉴ResNet网络将深度可分离卷积引入,即先用深度卷积(Depthwise Conv)提取特征 → \rightarrow 逐点卷积(Pointwise Conv)进行降维 → \rightarrow 逐点卷积进行升维
  • Linear Bottleneck卷积结构逐点卷积进行升维 → \rightarrow 深度卷积提取特征 → \rightarrow 逐点卷积进行降维,是对Bottleneck卷积结构的改进

线性瓶颈结构中第一层升维的逐点卷积设置扩张系数t用来控制输出通道升维数量,当t>1时输出通道数量增加,逐点卷积起升维作用;最后一层降维的逐点卷积采用线性(Linear)激活函数而不用ReLU6激活函数,原因:ReLU激活函数在提取低维特征时会有比较大的信息损失,提取高维特征造成的损失较小。而线性瓶颈结构的输出是一个低维特征信息,所以使用一个线性激活函数避免特征信息的损失

其中线性瓶颈结构使用的激活函数为ReLU6,即对ReLU设置阈值,超过6的部分设置为0其目的是保证在移动端低精度的情况下,有好的数值分辨率,避免数值过大带来精度损失;

(2)反向残差结构是在线性瓶颈的基础上增加残差连接
在这里插入图片描述

  • 残差连接能够解决训练中随着网络深度增加出现的梯度消失问题,在反向传播过程保证梯度的正常传播;同时增加跨层特征之间的融合,增加特征表达能力
  • RestNet残差结构中用逐点卷积先降维 → \rightarrow 3×3常规卷积 → \rightarrow 逐点卷积升维;而反向残差结构逐点卷积先升维 → \rightarrow 3×3深度卷积(降低计算量和参数量) → \rightarrow 逐点卷积降维

采用先升维,后降维的思想:深度卷积只关注空间特征没有将通道间关联起来导致部分特征无法提取,故为了得到更多的特征对其先升维度

其中步长(Stride)为1的使用残差连接,步长为2因其输出特征图与原始特征图的尺寸不相同,不进行残差连接。有残差连接的线性瓶颈结构与无残差连接的线性瓶颈结构及尺寸关系变化如图
在这里插入图片描述
MobileNet v2网络架构
在这里插入图片描述

  • t代表升维时的扩展系数,c代表输出通道数量,n代表各层的重复次数,s代表卷积步长
  • 其中bottleneck根据卷积步长s对应有无残差连接的线性瓶颈结构
  • 取消了全连接层,最后一层采用1×1卷积进行输出

3.2.3 实验结果

与MobileNet v1等模型在ImageNet数据集上不同分辨率及通道数比较精度,(乘法和加法)计算量以及参数量等,在性能和参数量上都比MobileNet有所提升
在这里插入图片描述
在目标检测领域,与利用深度可分离卷积的SSD模型结合发现比MobileNet v1推理速度更快,但检测精度mAP略低…
在这里插入图片描述

3.3 MobileNet v3

论文地址:https://arxiv.org/pdf/1905.02244.pdf

3.3.1 改造方案

(1)引入Squeeze and Excitation(SE)架构
(2)引入5×5卷积核修改网络整体架构
(3)引入h-swish激活函数

3.3.2 实现方法

(1)借鉴SENet网络,通过引入SE架构显式的建模特征图各个通道之间的作用关系提高网络网络模型的表达能力。是一种注意力机制模型,通过自动学习获取每个特征通道的重要性,并依据重要程度对相应特征通道进行促进或抑制。
在这里插入图片描述

SE架构包含Squeeze、Excitation、Scale部分:

  • Squeeze:通过全局平均池化(GAP)对每个通道进行压缩,即输入W×H×C特征图压缩后输出1×1×C,C代表通道数量。采用GAP对空间分布上所有信息平均化能够让SE架构专注于通道间的相关性而非空间相关性,使后续计算更加准确
  • Excitation:通过两个全连接层训练特征图通道间的相关性,实现通道间的融合。其中第一个全连接层设置参数SERatio输出为1×1×C·SERatio,第二个全连接层输出1×1×C;第一个全连接层采用ReLU激活函数而第二个全连接层采用hard-sigmoid/swish函数
  • Scale:进行特征图通道间的融合。即得到1×1×C向量对应每个特征图通道的权重,与原输入特征图W×H×C按通道对应相乘,实现基于通道间的注意力机制

SE架构的使用灵活方便,可以在不破坏原有网络模型基础上任意添加;使用SE架构会增加一定的计算量和参数量但对性能的提升大

(2)使用神经结构搜索(NAS)相关技术(MnasNet)优化MobileNet v3各个模块来搜索全局网络架构,其中发现使用5×5卷积核的准确率要高于3×3卷积核;然后通过NetAdapt算法搜索每层特征图通道数量。

通过相关技术的互补有效地(为特定的硬件平台)找到优化的模型(MobileNet v3-LargeMobileNet v3-Small),其网络架构:
在这里插入图片描述

  • exp size代表逐点卷积升维后的通道数,out代表输出通道数量,SE代表对应模块是否引入SE架构,NL代表对应模块使用的非线性激活函数(ReLU/h-swish),s代表卷积步长,NBN(no batch normalization)代表无批归一化处理
  • 通过NAS得到了两种不同大小的网络框架
  • 为减少计算量对搜索后的网络框架头部通道数量和尾部结构进行修改,这些修改并非NAS的范围
    ①对头部channel数量改变
    MobileNet v2开始输入特征图的通道数量为32个,作者实验发现使用h-swish激活函数可以在保持精度不减的情况下将通道数量降低为16个,节省2ms和1kw(乘法和加法)计算量
    在这里插入图片描述
    ②尾部结构变化
    为了降低计算量,将MobileNet v2最后的线性瓶颈结构替换为1×1卷积结构并且将平均池化层提至1×1卷积之前将该1×1卷积输入特征图尺寸降为1×1有效的减少了计算量。通过尾部的改变再保证特征图能扩展到高纬度且精度无损失的同时减少计算量
    在这里插入图片描述

(3)swish激活函数能够有效改进网络精度然后存在计算量过大的问题,借鉴hard-sigmoid对sigmoid的改进,为提高计算效率提出了hard(h)-swish激活函数
在这里插入图片描述

  • 将swish中的sigmoid函数替换为 R e L U 6 ( x + 3 ) 6 \frac {ReLU6(x+3)}{6} 6ReLU6(x+3),在降低计算量的同时有效改进网络精度
  • swish和h-swish拟合程度高,但h-swish计算效率高于swish同时避免量化造成的数值精度损失

3.3.3 实验结果

与MobileNet v2等模型在ImageNet数据集上不同分辨率及通道数比较精度,(乘法和加法)计算量、参数量、浮点性能等
在这里插入图片描述

比较了h-swish激活函数及其插入位置和有无优化实现对网络框架推理速度和精度的影响
在这里插入图片描述
在目标检测领域,比较在COCO数据集上的mAP精度,推理速度等
在这里插入图片描述

  • 10
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值